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

Category was added automatically. Read all entries about "архитектура".

Неудачные эксперименты с 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 )

Кривые обучения для модели wordchar2vector

Модель для чатбота была описана в этом посте. С того времени в код были добавлены новые архитектуры нейросети, доработан механизм задания параметров при запуске из командной строки и расширена документация - теперь все детально расписано тут https://github.com/Koziev/chatbot/blob/master/PyModels/trainers/README.wordchar2vector.md.

Далее - сравнение разных архитектур нейросети в ходе обучения.
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 )

Нейросетевые модели для определения перефразировок вопросов (4)

[начало тут http://kelijah.livejournal.com/212124.html, скрипты моделей тут https://github.com/Koziev/QuoraQuestionPairs]
Удвоение датасета
400 тысяч пар вопросов в обучающей выборке - это неплохо, но нейросетки очень любят много данных. Чем больше свободных параметров у модели, тем больше требуется обучающих примеров для их настройки. Поэтому вопрос искуственного наращивания обучающего датасета (a.k.a data augmentation - https://www.google.ru/search?q=what+is+datra+augmentation) вполне уместен. Для многих (не всех!) моделей эффективен простой, практически бесплатный, подход с удвоением обучающего датасета. Достаточно подавать не только исходные пары вопросов, но и пары с перестановкой, поскольку семантическая релевантность предложений не зависит от порядка сопоставляемых предложений. Это почти удваивает размер датасета, если учесть пары идентичных вопросов.
Collapse )

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

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