![иллюстация как Алиса работает](/content-parser/attach/e769ba23-12cc-4997-b7b0-c785bc2638fd/how_alice_works-min.png)
- Пользователь произносит фразу.
- ASR (Automatic Speech Recognition) переводит речь в текст.
- Текст передаётся в классификатор интентов, который должен определить, какое действие пользователь попросил сделать у Алисы.
3.1 Если классификатор интентов не может уверенно определить, чего хочет пользователь:
- Бинарный классификатор решает, нужно ли отправить реплику в поисковик. Если нужно, то возвращает результаты поиска.
- Если не нужно, то перенаправляет реплику в “болталку”. Задача болталки - дать ответ, подходящий в данном контексте диалога.
3.2 Если классификатор интентов определил, что хочет пользователь:
- Семантический теггер выделяет из реплики полезные данные, которые нужны для данного интента, чтобы сгенерировать ответ.
- Эти данные отправляются в менеджер диалога, у которого есть текущий контекст диалога и что происходило ранее.
- Менеджер диалога генерирует ответ.
- TTS (Text to Speech) произносит ответ.
Менеджер диалога:
- Не использует ML.
- Концепция form-filling: пользователь своими репликами даёт информацию для заполнения некой виртуальной формы. Со временем форма заполняется и данные используются для генерации ответов.
- Движок event-driven: каждый раз, когда пользователь что-то делает, происходят события, на которые можно подписываться, и таким образом конструировать логику диалога.
Классификатор интентов:
- Для модели используется метод ближайших соседей.
Семантический теггер:
- Используется LSTM.
- Генерируется не самая вероятная гипотеза, а несколько самых вероятных гипотез. Они перевзвешиваются в зависимости от контекста диалога, что помогает улучшить качество.
Болталка:
- DSSM-подобная нейронная сеть. Один энкодер кодирует текущий контекст диалога, другой энкодер кодирует ответ-кандидат. Сеть обучается так, чтобы косинусное расстояние между этими векторами было как можно больше (это значит что ответ наилучшим образом подходит к контексту).