Модель релевантности - алгоритм, который для двух заданных фраз (предпосылка и вопрос), определяет, содержит ли предпосылка всю информацию, необходимую для ответа на вопрос.
Добавление новых сэмплов и переобучение
При добавлении новых фактов в базу знаний может возникнуть ситуация, что модель релевантности не знакома с новой лексикой и сильно ошибается при поиске подходящего факта. В этом случае модель релевантности нужно переобучить, добавив новые сэмплы в обучающий датасет.
Обучающий датасет - это текстовый 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 меня зовут дмитрий
…