NP чанкер и прототип шаблонизатора ответов для чатбота

Jan 19, 2020 19:51

В наборе NLP модулей для чатбота добавился очередной - NP chunker. Его прототип я уже кратко описывал тут. Для удобства использования в разных проектах чанкер именных групп выделен в отдельный модуль ruchunker.

В чатботе он позволяет делать следующее. Допустим, пользователь вводит вопрос:


H: Как ты относишься к квантовым процессорам?

Если движок бота не может найти в базе фактов и в FAQ материал для ответа, то ему остается выдать некий шаблонный ответ типа "Нет соответствующей информации". Чтобы немного разнообразить реакцию бота, можно выделить в вопросе собеседника именную группу и использовать при генерации ответа:

B: Мне ничего не известно про квантовые процессоры

Технически это выглядит как последовательность шагов:

1. NP чанкер выделяет именные группы.

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

3. Генерируется ответ на основе шаблона, в котором указываются имена сопоставленных чанков из п.3. При этом может потребоваться просклонять и пересогласовать элементы чанка в нужную грамматическую форму.

Соответствующее правило выглядит вот так:

if:
match:
- 'как я отношусь к NP1'
- 'что мне известно о NP1'
- 'расскажи мне о NP1'

then:
say:
- 'Мне ничего не известно про $NP1(ВИН)'
- 'Я ничего знаю о $NP1(ПРЕДЛ)'
- 'Я не знаю, что такое "$NP1(ИМ)"'
- 'У меня нет информации о $NP1(ПРЕДЛ)'

Этот механизм нужно будет отшлифовать рядом расширений. Например, добавить возможность ссылаться в шаблоне ответа на результаты NER. Тогда для входных реплик "Какая погода будет в пятницу" и "Какая погода будет завтра" можно в ответе подставлять упомянутый момент времени без привязки к его синтаксическому оформлению в виде предложной или наречной группы.

chatbot, chunker, существительное, ner, named entry recognition

Previous post Next post
Up