Изменения

Перейти к: навигация, поиск

Диалоговые системы

776 байт добавлено, 22:33, 20 января 2021
Нет описания правки
Данный тип систем обычно используется чтобы занять пользователя, например, во время ожидания выполнения задачи. Система поддерживает бессодержательный, но связный диалог.
=== С ограниченными ответами === Системы с ограниченными ответами (англ. retrieval/example-basebased) по последовательности фраз выдают наиболее подходящий ответ из списка возможных. Преимуществом таких систем является то, что ответы строго контролируются: можно удалить нежелательные шутки, нецензурные или критикующие выражения. Интерактивная система неформальных ответов (англ. informal response interactive system, IRIS) основана на модели векторного пространства. Текущая фраза пользователя сравнивается со всеми существующим фразами в базе данных. Векторное прдставление текущей истории диалога также сравнивается с векторным представлением диалогов в базе данных. Такой подход позволяет включить информацию о контексте диалога в процесс выбора ответа. Архитектура системы представлена на ирсуке. Прямоугольником обозначены функциональные модули, цилиндром -- репозитории. Модель с такой архитектурой можно обучить на фильмах,  === С генерацией ответов ===
Системы с генерацией ответов (англ. generation-base) генерируют ответ пословно. Такие системы более гибкие, но фильтровать их сложней.
== Примеры диалоговых систем Существующие диалоговые системы ==
ELIZA
Xiaolce {{---}} чат-бот, развиваемый китайским отделением Microsoft. Состоит из множества навыков, которые делятся на эмоциональные и рациональные. Имеется навык, который комментирует картинки или сочиняет по ним стихи. Сценарии диалога делятся на персональные и социальные. Бот старается установить эмоциональную связь с пользователем, чтобы продлить диалог с ним.
 
Microsoft Cortana {{---}} виртуальный голосовой помощник. Состоит из можества навыков, натренированных на конкретные задачи. В отличие от классической архитектуры, где выбирается подходящий навык, здесь текст проходит через все навыки, после чего выбирается подходящий ответ. Также каждый навык использует результаты обработки предыдущей фразы от всех навыков. При таком подходе требуется больше ресурсов, но он позволяет существенно увеличить точность. Схематично процесс обработки фразы пользователя представлен на рисунке .
 
[[Файл : Ds-cortana-arch.png | 350px | thumb | right |
Рисунок . Архитектура]]
== Фреймворки ==
=== DeepPavlov.ai ===
Основывается на таких библиотеках как TensorFlow, Keras и PyTorch. Включает множество компонентов, при помощи каждый из которых создаются скилырешает отдельюу задачу диалоговых систем. Множество скилов объединяются в диалоговый Имеется модель для распознавания именованных сущностей, намерений, обработки истории диалога, анализа поведения пользователя и другие. Поведение агента диалоговой системы определяется набором навыков, каждый из которых строится из модулей. Когда агент с которым взаимодействуют пользователи на естественном языкеполучает фразу пользователя, специальный менеджер решает, какому навыку передать ее для обработки.
'''from''' deeppavlov[[Файл : Ds-dp-arch.agents.default_agent.default_agent '''import''' DefaultAgentpng | 300px | thumb | right |'''from''' deeppavlov.skills.pattern_matching_skill '''import''' PatternMatchingSkill'''from''' deeppavlov.agents.processorsРисунок .highest_confidence_selector '''import''' HighestConfidenceSelectorСхема ядра DeepPavlov]]
<font color{|-valign="greentop"># Настраиваем качество, выставляя ef:</font>hello = PatternMatchingSkill( responses= |['Hello world!'], patterns=['hi', 'Файл: Ds-deeppavlov-hello', 'good day']) <font color="green"># Настраиваем качество, выставляя ef:</font>bye = PatternMatchingSkill( ['Goodbye word!', 'See you around.'png | thumb | 600px | Рисунок . Тривиальный бот на DeepPavlov ], ['bye', 'chao', 'see you']) <font color="green"># Настраиваем качество, выставляя ef:</font>fallback = PatternMatchingSkill([ 'I don\'t understand, sorry.', 'I can say "Hello world!"'])skill_manager = HighestConfidenceSelector()HelloBot = Agent([hello, bye, fallback], skills_selector=skill_manager)'''print'''(HelloBot(['Hello!', 'Boo...', 'Bye.']))|}
'''import''' hnswlib
'''import''' numpy '''as''' np
dim = 128
num_elements = 10000
<font color="green"># Создаём тестовые данные.</font>
data = np.float32(np.random.random((num_elements, dim)))
data_labels = np.arange(num_elements)
<font color="green"># Создаём иерархический маленький мир в L2.</font>
<font color="green"># Возможные метрики {{---}} l2, cosine, ip (L2, косинус угла между векторами, скалярное произведение).</font>
p = hnswlib.Index(space = 'l2', dim = dim)
<font color="green"># Инициализируем структуру.</font>
p.init_index(max_elements = num_elements, ef_construction = 200, M = 16)
<font color="green"># Добавляем данные (можно вызывать много раз).</font>
p.add_items(data, data_labels)
<font color="green"># Настраиваем качество, выставляя ef:</font>
p.set_ef(50) <font color="green"># ef должно быть > k</font>
<font color="green"># Делаем запрос.</font>
<font color="green"># k - количество ближайших вершин</font>
labels, distances = p.knn_query(data, k = 1)
=== LTP ===
31
правка

Навигация