Category: архитектура

Классификация интентов в чатботе - сравнение моделей ELMO, BERT и char-level linear sklearn

Сравнение выполнялось по f1 weighted метрике на датасете с ~5100 сэмплов через 8-фолдовую кросс-валидацию. Чуть больше 70 интентов с большим дисбалансом.

Финальные результаты:

LinearSVC ~0.77
BERT        ~0.815
ELMo        ~0.817
Collapse )

Планы по новой генеративной модели чат-бота ("Машина Хомского")

Готовлю к переносу в код чатбота новый генератор ответов на основе генеративной грамматики с обвесом из нескольких нейросеток. Далее - небольшие подробности о решаемой задаче.
Collapse )

Неудачные эксперименты с triple и contrastive loss архитектурами для определения перефразировок

1. Постановка задачи

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

Collapse )

Тетрадка Colaboratory с экспериментами для вариационными и обычными автоэнкодерами для предложений

Рабочая тетрадка, которую я сейчас использую в Colaboratory для проверки различных архитектурных параметров двух генеративных текстовых моделей для чатбота:

1) простой сжимающий автоэнкодер на базе sequence2sequence архитектуры
2) вариационный автоэнкодер (немного переработан код отсюда https://github.com/twairball/keras_lstm_vae/blob/master/lstm_vae/vae.py)

Тетрадь доступна по ссылке: https://drive.google.com/file/d/1aWwJeve9yuH9RrrfO0gq5dpuPKxDw0cC/view?usp=sharing

В тетрадке для удобства работы сделана загрузка готовых датасетов из моего гуглодиска внутрь докер-контейнера. Эти два файла (vtexts.npz и word2vec.pkl) были подготовлены скриптом https://github.com/Koziev/pushkin/blob/master/prepare_vae_dataset.py, так что при необходимости можно взять другие  векторы слов вместо word2vec или тренироваться на другом наборе предложений.

Код для автоэнкодеров в нормальном виде лежит тут: https://github.com/Koziev/pushkin/blob/master/lstm_ae.py

Обучение выглядит примерно так (осторожно, большой скрин):
Collapse )

Три варианта рекуррентно-сверточных сетей в задаче определения длины ответа

(предыдущий пост с описанием моделей чат-бота тут: https://kelijah.livejournal.com/232313.html)

Код для тренировки вспомогательной модели, которая определяет число слов ответа для заданной предпосылки и вопроса выложен тут https://github.com/Koziev/chatbot/blob/master/PyModels/nn_answer_length.py.
Collapse )

Autoencoders for word representations и ахитектура для встраивания доп. информации

Для эксперимента WordRepresentations делаю последний вариант получения векторного представления слов с помощью автоэнкодеров.

Collapse )

Skip-gram и открой окно пошире...

Продолжая http://kelijah.livejournal.com/167972.html.
В word2vector модели при генерации поставил cbow=0 и слелал размер окна 10.
Плюс изменил порядок сравнения близости контекстов.
Итог - неточность снятия омонимии и определения нужного смысла для многозначных слов упала в 3 раза, до ~8%:
Collapse )

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

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

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

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

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