Кастомизация чатбота: переобучение модели релевантности

May 20, 2019 18:53


Модель релевантности - алгоритм, который для двух заданных фраз (предпосылка и вопрос), определяет, содержит ли предпосылка всю информацию, необходимую для ответа на вопрос.

Добавление новых сэмплов и переобучение

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


Обучающий датасет - это текстовый tab-separated файл premise_question_relevancy.csv. В колонке premise находятся предпосылки (факты), question - вопросы. Колонка relevance содержит 1 для нелевантных пар, 0 для нерелевантных. Таким образом, чтобы модель считала предпосылку и вопрос релевантными, надо добавить к этому датасету запись с relevance=1. Следует избегать добавления повторов, так как это будет приводить к искажению оценок точности при обучении.

После изменения файла premise_question_relevancy.csv нужно запустить обучение скриптом .../script/train_lgb_relevancy.sh. Обучение идет примерно полчаса. В результате в каталоге .../tmp будут созданы новые файлы lgb_relevancy.*, содержащие правила модели релевантности.
Контроль качества

Любые ошибки при работе модели релевантности негативно сказываются на общем качестве диалогов, поскольку многие другие части чатбота используют результаты выбора предпосылок из базы знаний в качестве входной информации. Чтобы контролировать качество этой модели, желательно верифицировать ее работу на тестовых вопросах и наборе тестовых предпосылок. Для выполнения этой верификации мы используем простой консольный скрипт query2_lgb_relevancy.sh. Он загружает текущую обученную модель релевантности и список предпосылок из базы знаний (.../data/premises*.txt) и тренировочного датасета (.../data/premise_question_relevancy.csv). Затем с консоли вводится проверочный вопрос, модель вычисляет его релевантность по всем предпосылкам и выводит список из нескольких самых релевантных. Если в этом списке есть явно нерелевантные предпосылки с высокой оценкой (допустим, выше 0.5), то есть смысл добавить такие предпосылки с вопросом в качестве негативных примеров в датасет premise_question_relevancy.csv и переобучить модель релевантности.

Грамматическое лицо в датасете

При добавлении сэмплов в обучающий датасет и при контроле качества модели следует учитывать следующий нюанс. Информация в базе знаний чатбота хранится “от первого лица”. Например, запись “Меня зовут Алиса” в базе знаний относится именно к чатботу. Факты, относящиеся к собеседнику, формулируются от второго лица: “Тебя зовут Илья”. Именно в таком виде эти факты хранятся в датасете premise_question_relevancy.csv.

Также, поступающие на вход модели релевантности вопросы собеседника тоже конвертируются в “эгоцентричную” модель мира. Если мы спрашиваем чатбот “Как тебя зовут”, то на вход модели релевантности поступает вопрос “как меня зовут”. Эту конверсию надо учитывать при ручной проверке качества, вводя вопросы в query2_lgb_relevancu.sh. Например:

-inkoziev@inkoziev-MS-7B17:~/github/chatbot/scripts$ ./query2_lgb_relevancy.sh

39078 premises loaded from ../data/premise_question_relevancy.csv

nb_premises=39297

question:> как меня зовут

0.9995 меня зовут Кеша

0.9994 меня зовут дмитрий



chatbot, nlp, чатбот

Previous post Next post
Up