Навыки Алисы/Как сделать навык с естественной речью: теория и практика на реальном примере

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

Как сделать ваш навык более понятным и приятным для пользователя править

  • Использовать массивы ответов, а не единственный вариант ответа.

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

Также большое значение имеет количество слов во фразе. Например, если наши ключевые слова это «купить» и «диван», то фраза из четырех слов с высокой вероятностью будет «я хочу купить диван». Однако, если слов во фразе больше, то обрабатывать такой запрос нужно особым образом. Например, если во фразе около десяти слов, то она может звучать так «я хочу купить другу в подарок диван, кровать и табурет».

  • В любом месте выводить помощь при неправильном ответе.

Пользователь не должен потеряться внутри вашего навыка. Придумайте понятную справку на каждую ситуацию, в которой может находиться пользователь. Плохой практикой будет на какие-то нераспознанные команды отвечать фразами в духе «я вас не поняла», «повторите», «не понимаю» или что-то такое. Хорошая практика, если вы подробно опишите пользователю, где именно он находится и какие у него есть возможности.

🧑: — Не понимаю.

🤖: — Сейчас вы ходите по автомастерской. Можете осмотреть автомобиль, сказав «осмотреть автомобиль», либо отправиться куда-то в другое место, сказав, например, «пойти на улицу».
  • Понимать особенности естественной речи, которые отличают её от машинной логики.

В зависимости от условий, пользователю могут быть доступны совершенно различные формулировки как вопроса, так и ответа, который он может дать навыку. Например, если вам нужно выбрать одно задание из списка, то вопросом может быть «Вам доступны следующие задания. Выберите, пожалуйста, одно из них». И корректным ответом будет название задания. В то время как, если доступно всего одно задание, то корректным вопросом будет «Вам доступно одно задание? Хотите выбрать его?» А ответом будет просто «Да» или «Нет».

  • Использование словоформ в обработке ответов пользователей.

Помните, что одно и то же слово может быть сказано в разных формах, и поэтому набор букв в нем будет отличаться. Для поиска совпадений подойдёт использование расстояния Левенштейна. Но в данном случае этот способ не очень хорошо подходит, потому что:

  1. он хорошо борется с опечатками, но в отличие от обычных текстовых чат-ботов, ввод в навыки Алисы производится голосом, и поэтому пользователи не опечатываются.
  2. некоторые одинаковые слова могут находиться по расстоянию Левенштейна дальше друг от друга, чем разные.

Например, разнокоренные слова «гриб» и «хлеб» отличаются всего на три символа, и расстояние Левенштейна между ними равно трём. Тогда как однокоренные слова «рост» и «растить» отличаются на четыре символа, и поэтому расстояние Левенштейна между ними будет больше.

Эту проблему решает использование словоформ. Словоформы поддерживаются большинством библиотек для морфологического анализа, самые известные из которых это MySTEM от Яндекса или Pymorphy2.

  • Приведение к нормальной форме

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

🤖: — Сейчас вы ходите по автомастерской. Можете осмотреть автомобиль, сказав «осмотреть автомобиль», либо отправиться куда-то в другое место, сказав, например, «пойти на улицу».

🧑: — Я пойду на улицу.

🤖: - Вы переместились на улицу. Здесь вы можете прогуляться вдоль стоянки. Хотите?
  • Учёт семантики

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

Подключение библиотеки PyMorphi 2 править

Для практического примера анализа мы рассмотрим подключение библиотеки PyMorphi 2 к программе на Python 3 и её использование для получения нормальных форм слова и граммем.

Для начала нам нужно установить библиотеку с помощью менеджера пакетов PIP.

pip3 install pymorphy2

Далее нам нужно обновить словари этой библиотеки до самой последней версии.

pip3 install pymorphy2-dicts-ru

Теперь подключим библиотеку к нашей программе на Python 3 и посмотрим, как получать нормальные формы.

%Подключим библиотеку к программе
import pymorphy2
%С помощью метода MorphAnalyzerParts можно разобрать отдельное слово
morph = pymorphy2.MorphAnalyzer()
forms = morph.parse('стали')

for form in forms:
%normal_form необходим для вывода нормальной формы. Tag - для граммем
print(form.mormal_form)

Также можно посмотреть список граммем с помощью Tag. Tag — это набор граммем, которые характеризуют данное слово (часть речи, одушевленность, род, число, падеж).

Ссылки править