Skip to content

ru SkillSelectors

dilyararimovna edited this page May 9, 2023 · 1 revision

Выбор навыков

Служба выбора навыков должна возвращать список названий навыков, выбранных для создания ответа-кандидата для диалога.

Dream Socialbot построен на платформе агента DeepPavlov с открытым исходным кодом (https://github.com/deeppavlov/dp-agent) и основан на архитектуре агента DeepPavlov. Конвейер содержит блок асинхронных аннотаторов, извлекающих полезную информацию о текущем высказывании пользователя, компонент выбора навыков, блок асинхронных навыков, в котором выбранное подмножество генерирует варианты ответа, и компонент выбора ответа, выбирающий окончательный ответ. Итак, Селектор Навыков формирует список наиболее релевантных Навыков, которые будут вызываться в контексте текущего диалога. Список Навыков можно было бы сформировать с запасом. Это особенно важно, если некоторые выбранные навыки не возвращают правильных ответов или даже не возвращают ни одного из них. В то же время мы также не можем выбирать слишком много навыков, чтобы избежать перегрузки вычислительных ресурсов.

Общая стратегия заключается в том, чтобы всегда выбирать резервные и открытые навыки, в то время как закрытые навыки выбираются только в случае обнаружения триггеров. Среди них могут быть определенные темы, сущности, намерения и/или регулярные выражения. Иногда нам нужно добавить ограничения. Их можно добавить либо в Селектор навыков, либо в Селектор ответов, но первый сценарий позволит нам сделать это быстрее и сэкономить ресурсы.

Селектор навыков социального бота Dream — это часть контейнера агента, который управляет конвейером обработки диалогов. Таким образом, Skill Selector — это не отдельный док-контейнер, а [часть док-контейнера Агента] (https://github.com/deeppavlov/dream/blob/main/skill_selectors/rule_based_selector/connector.py). На это есть две основные причины. Во-первых, селектор умений потребляет мало ресурсов. Во-вторых, сохраняя его в составе докер-контейнера Агента, мы минимизируем риски потери какой-либо информации при переносе ее из одного контейнера в другой. Селектор навыков Dream Socialbot — это основанный на правилах алгоритм, который выбирает список навыков для создания вариантов ответа. Подход высокого уровня представлен на изображении ниже. Опишем алгоритм подробно.

Прежде всего, мы проверяем, обнаружено ли намерение с высоким приоритетом в высказывании пользователя. Эти намерения с высоким приоритетом обнаруживаются с помощью аннотатора Intent Catcher, который представляет собой классификатор с несколькими выстрелами. Для основного англоязычного дистрибутива Dream мы рассматриваем следующие высокоприоритетные намерения: «cant_do» (пользователь запрашивает команды Ассистента, недоступные для Socialbot), «выход» (пользователь запрашивает выход из беседы), «повторить» (пользователь хочет, чтобы Socialbot повторил высказывание Socialbot), «what_can_you_do» (пользователь спрашивает, что может делать Socialbot), «what_is_your_job» (пользователь спрашивает, чем Socialbot занимается для жизни), «what_is_your_name» (пользователь спрашивает, как зовут Socialbot), «where_are_you_from» (пользователь запрашивает, где живет Socialbot), «who_made_you» (пользователь запрашивает, кто создал Socialbot), «what_are_you_talking_about» (пользователь запрашивает, о чем идет разговор). Ответ на последний вопрос дает Навык заземления, который был разработан, чтобы понять пользователя и установить с ним связь. Остальные намерения с высоким приоритетом обрабатываются ответчиком намерений. Большинство намерений с высоким приоритетом были разработаны в соответствии с правилами Alexa Prize Challenge, но мы считаем их полезными вне конкуренции.

Следующее условие — проверка на деликатные темы. Наш дистрибутив Dream пытается избежать реакции на запросы пользователей о мнении бота по таким деликатным темам, как религия, политика или секс. Это правило изначально было создано в соответствии с правилами Alexa Prize Challenge. Однако в настоящее время мы рассматриваем возможность снятия этого ограничения из-за высокого качества классификации токсичности, которая может помочь нам избежать неадекватных ответов. Для этого деликатного случая мы выбираем только навыки на основе шаблонов с открытым доменом, которые не дают никаких мнений. Мы добавляем некоторые закрытые навыки на основе шаблонов (Новости, Коронавирус, Погода, Интересные факты, Рассказы, Сплетни, Навыки светской беседы) на основе аннотаций высказываний пользователя. Мы также выбираем навыки, которые были связаны с предыдущим Произношение и заскриптованный навык Socialbot из предыдущего шага, если его флаг продолжения не был «CAN_NOT_CONTINUE».

Наконец, в общем случае мы выбираем все навыки открытого домена, включая нейронные генеративные навыки. У нас также есть некоторые правила для выбора закрытых навыков. Для большинства навыков закрытого домена можно использовать функцию python «turn_on_skills» из dream/common/skills_turn_on_topics_and_patterns.py. использоваться для определения того, уместно ли их выбирать. Эта функция использует триггеры из словаря «SKILL_TRIGGERS», где для каждого навыка закрытой области разработчик предоставляет следующие независимые триггеры: скомпилированные_паттерны (регулярные выражения для текущего высказывания пользователя), предыдущие_бот_паттерны (регулярные выражения для предыдущего высказывания бота, без ограничений на текущий высказывание пользователя), топики (список тем для текущего высказывания пользователя), намерения (список намерений Ловца намерений для текущего высказывания пользователя). Как и в предыдущем случае, мы выбираем навыки, которые были связаны с предыдущим высказыванием Socialbot, и заскриптованный навык из предыдущего шага, если его флаг продолжения не был «CAN_NOT_CONTINUE».

Кроме того, у нас есть ряд пользовательских правил, которые фиксируют автоматические аннотации в определенных случаях. Например, несколько правил связаны с намерениями, обнаруженными Ловцом намерений: мы удаляем обнаруженное намерение «выход» в начале разговора, если высказывание пользователя достаточно длинное, или мы удаляем обнаруженное намерение «cant_do», если предыдущее высказывание социального бота содержит вопросы о различных действиях, и пользователь отвечает словом «играть».

Селектор навыков для вашей диалоговой системы

При создании новой раздачи, содержащей существующие навыки, вам не нужно менять селектор навыков, чтобы удалить неиспользуемые навыки, агент будет вызывать только те навыки, которые указаны в файле пайплайна. Можно создать свой собственный селектор навыков, который будет получать диалоги и возвращать набор списков навыков для вызова. Мы также работаем над упрощением выбора навыков, учитывая, что мы можем сохранить меньшее количество ограничений за пределами Alexa Prize Challenge. Селектор навыков — это алгоритм, основанный на правилах, который всегда выбирает навыки с открытым доменом, а также выбирает навыки с закрытым доменом на основе высказывания пользователя и его аннотаций. Добавить собственный навык закрытого домена можно с помощью триггеров в «SKILL_TRIGGERS» из dream/common/skills_turn_on_topics_and_patterns.py.

Ссылки

Clone this wiki locally