В наборе NLP модулей для
чатбота добавился очередной - NP chunker. Его прототип я уже кратко описывал
тут. Для удобства использования в разных проектах чанкер именных групп выделен в отдельный модуль
ruchunker.
В чатботе он позволяет делать следующее. Допустим, пользователь вводит вопрос:
H: Как ты относишься к квантовым процессорам?
Если движок бота не может найти в базе фактов и в FAQ материал для ответа, то ему остается выдать некий
шаблонный ответ типа "Нет соответствующей информации". Чтобы немного разнообразить реакцию бота, можно выделить в вопросе собеседника именную группу и использовать при генерации ответа:
B: Мне ничего не известно про квантовые процессоры
Технически это выглядит как последовательность шагов:
1. NP чанкер выделяет именные группы.
2. Реплика собеседника сопоставляется с маской, при этом именные группы учитываются как единые элементы при вычислении расстояния Левенштейна. Одновременно при сопоставлении маски происходит присваивание сматченных именных групп неким переменным.
3. Генерируется ответ на основе шаблона, в котором указываются имена сопоставленных чанков из п.3. При этом может потребоваться просклонять и пересогласовать элементы чанка в нужную грамматическую форму.
Соответствующее правило выглядит вот так:
if:
match:
- 'как я отношусь к NP1'
- 'что мне известно о NP1'
- 'расскажи мне о NP1'
then:
say:
- 'Мне ничего не известно про $NP1(ВИН)'
- 'Я ничего знаю о $NP1(ПРЕДЛ)'
- 'Я не знаю, что такое "$NP1(ИМ)"'
- 'У меня нет информации о $NP1(ПРЕДЛ)'
Этот механизм нужно будет отшлифовать рядом расширений. Например, добавить возможность ссылаться в шаблоне ответа на результаты NER. Тогда для входных реплик "Какая погода будет в пятницу" и "Какая погода будет завтра" можно в ответе подставлять упомянутый момент времени без привязки к его синтаксическому оформлению в виде предложной или наречной группы.