Category: компьютеры

Немного болтовни с чатботом 0.0.0.13

В новом релизе чатбота в движке сделаны некоторые правки, чтобы получались (иногда) вот такие диалоги:
Collapse )
Это уже намного ближе к обычной болтовне незнакомых людей, как, например, в этом датасете Toloka Persona Chat Rus. То есть меньше механичности, больше импровизации и проактивности. Хотя косяков пока многовато - иногда (кхм, частенько) бот выдает малорелевантные реплики, иногда модели генерации текста поставляют мусор.

Чтобы справится с этими косяками, нужна модель для оценки того, насколько реплика вписывается в общий дискурс диалога. Я попробовал сделать черновую модельку на базе ELMO из deeppavlov (ElmoEmbedder) плюс линейный регрессор для предсказания вектора следующей реплики, чтобы через cosine между предсказанным и фактическим вектором оценивать уместность реплики. Результат в целом нулевой, так как по метрике precision@k предсказанный вектор с трудом попадает в top-40% фраз, из которых одна - действительно релевантная. Следующая попытка - нейросетевой регрессор поверх BERT. Я проверил на ruBERT из deeppavlov плюс keras-bert, вроде бы немного более обнадеживающие результаты, будем препарировать тему дальше.

Профили в чатботе

В новом релизе чатбота я добавил "профили" - текстовые файлы (json), в которых указываются пути к файлам с фактами и правилами. С их помощью, думаю, будет проще создавать разные "характеры". В этих же профилях в будущем будут доступны тонкие настройки характера бота (ну не прямо как тут, конечно, хотя...). Сейчас сделан базовый отладочный профиль, который позволяет чатботу отвечать на десяток простых вопросов о самом себе, примерно так:
Collapse )

Датасет с сэмплами подлежащее+глагол+предлог+существительное

Обнаружил у себя датасет (файл в репе 3 Мб) с большим списком сэмплов такого вида:
Collapse )
Сэмплы были собраны автоматически из 10Гб корпуса текстов. Некоторые сэмплы содержат неполные предложения ("Я расскажу с позиции"). Я планирую использовать их для обучения модели валидации синтаксиса для чатбота, но, возможно, они будут кому-то полезны и для других языковых моделей.

Генеративная грамматика для проактивного чатбота

Для реплики собеседника генеративная грамматика создает целый набор вопросов и просто реплик. В некоторых случаях одна только N-граммная языковая модель позволяет неплохо отсеять откровенную бессмыслицу и оставить более-менее разумные фразы:
Collapse )

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

В SDK поисковой системы добавил тест на многопоточность для поиска в текстовых файлах без использования индекса.

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

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

В API внесено еще несколько изменений, все они войдут в ближайшее обновление.