Создайте свою собственную интеллектуальную клавиатуру с помощью машинного обучения

В предыдущем посте мы увидели, как создать модель машинного обучения, генерирующую текст. Я буду использовать результаты этого проекта, чтобы показать, как создать собственную интеллектуальную клавиатуру на Android.

Как это работает?

Интеллектуальные клавиатуры позволяют писать лучше и быстрее, предлагая пользователю исправления и возможные следующие слова.

Есть разные способы создать волшебство, лежащее в основе предсказательной клавиатуры: от поиска во встроенных словарях и древовидных структурах до более сложных решений машинного обучения с использованием обработки естественных языков (NLP).

Мы будем использовать решение языковой модели (NLP) после предыдущего проекта NLP с Kotlin.

Для обучения модели мы будем использовать список названий фильмов. Этот набор данных был получен из IMDb, который предлагает различные файлы, содержащие информацию о фильмах и сериалах. Файл обрабатывается для извлечения информации, необходимой для этого проекта, чтобы он стал обучающими данными для модели.

Благодаря использованию определенного набора данных эта интеллектуальная клавиатура сокращает область действия. Это далеко не помеха, это можно рассматривать как наличие клавиатуры, которая работает в определенной области. Если ваш бизнес связан с фильмами, то это решение отлично, так как клавиатура будет предлагать только слова, связанные с фильмом!

После обучения модели файл, содержащий языковую модель, сериализуется. Это файл, который приложение Android будет использовать для создания предложений.

Реализация

Для реализации клавиатуры я использовал код SoftKeyboard в AOSP. Это простая клавиатура, которая выглядит довольно старой, но позволяет нам сосредоточиться на интеграции решения НЛП.

После добавления сгенерированной модели (saved_model) и библиотеки ngram-model-1.0-SNAPSHOT, содержащей код НЛП, я интегрировал ее с самой клавиатурой.

Решение NLP генерирует один символ с каждым предсказанием, поэтому мне нужно было работать на стороне клиента, чтобы генерировать слова. Это достигается путем получения предсказаний символов из вводимого текста и построения слов поверх них.

Этот поток транслируется в следующий код в классе SmartKeyboard:

При первом использовании клавиатуры может потребоваться некоторое время, чтобы среагировать, пока модель загружается. Хотя для этого PoC это не лучший способ. Альтернативой этому подходу может быть база данных, в которой хранятся значения модели. Я оставлю это улучшение читателю.

На следующем гифке показана клавиатура в действии:

Установка

Чтобы установить клавиатуру в Android, перейдите по ссылке

Настройки - ›Языки и ввод -› Виртуальная клавиатура - ›Управление клавиатурами

и выберите его.

Исходный код

Вы можете найти исходный код в следующем репозитории на GitHub:



Не стесняйтесь разветвлять его, использовать и оставлять отзывы.

Если вам нужны более точные прогнозы, используйте saved_model_multilingual. Эта модель была обучена с большим количеством названий фильмов. Также требуется больше времени для загрузки.

использованная литература