Extreme learning machine для рекуррентной сетки и быстрое получение эмбеддингов текстов

Jun 22, 2018 14:43

Случайно наткнулся на следующий необычный эффект при обучении рекуррентной нейросетки.

Преамбула

Занимаюсь тюнингом и экспериментами со своей реализацией Skip-Thoughts модели (https://github.com/ryankiros/skip-thoughts) на Keras. В принципе, у меня нейросетка достаточно точно воспроизводит архитектуру оригинальной статьи (http://arxiv.org/abs/1506.06726), за исключением нескольких моментов:

1) тренируемся предсказывать только последующее предложение, а не предыдущее и последующее.

2) слова представлены фиксированными word2vec эмбеддингами, они не меняются в ходе обучения, так как это ухудшает точность.

3) есть early stopping по валидационному набору, поэтому обучение идет не заданное заранее число эпох.

4) размерность векторов слов и предложений значитально меньше, чем в оригинальной модели.

Модель представляет из себя простую рекуррентную sequence 2 sequence сетку. Предложения берутся из большого русскоязычного корпуса с художественной литературой и всякой публицистикой. Исходный код можно найти в репозитории по ссылке https://github.com/Koziev/chatbot/blob/master/PyModels/train_skip_thoughts.py

Валидация эмбеддингов на задаче выбора предпосылки для вопроса

Сами по себе значения loss'а изучаемой модели не информативны, так как ничего не говорят о качестве эмбеддингов, получаемых на кодирующей части seq2seq.  Поэтому я для оценки и сравнения с другими моделями использую специальный набор из вопросов и предпосылок-кандидатов. Модель должны выбрать верную предпосылку (см. для справки подход в Quick-Thought модели https://github.com/lajanugen/S2V,
описанной в статье https://arxiv.org/pdf/1803.02893.pdf).

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

Random projections или Extreme Learning Machine

И вот в какой-то момент становится понятно, что если обучать skip-thoughts модель не до упора, когда срабатывает early stopping (примерно 20 эпох для миллиона пар предложений), а только несколько первых эпох, то точность выбора предпосылки через косинусную меру среди кандидатов растет! Оптимум может достигаться на 3-4 эпохах.

И самое интересное - если рекуррентуню сетку со случайной начальной инициализацией весов вообще не обучать, то она:

1) выдает некоторые эмбеддинги предложений (причем любой длины)

2) близкие по лексикону и словосочетаниям предложения прокачались через случайно инициализированные матрицы в LSTM элементах и дали близкие эмбеддинги.

Получилось что-то типа Extreme Learning Machine (https://en.wikipedia.org/wiki/Extreme_learning_machine) для рекуррентной архитектуры, locality sensitive hashing (https://ru.wikipedia.org/wiki/Locality-sensitive_hashing) и Random Projections (http://scikit-learn.org/stable/modules/random_projection.html).

Далее я проверил этот же подход для похожей на InferSent (https://github.com/facebookresearch/InferSent) задачи, когда эмбеддинги предложений получаются в ходе supervised обучения классификатора релевантности (исходный код на Python/Keras лежит тут https://github.com/Koziev/chatbot/blob/master/PyModels/nn_relevancy.py) с похожим результатом: необученный, случайно инициализированный рекуррентный энкодер выдает эмбеддинги текста, неплохо работающие с косинусной мерой.

vector space model, sent2vec, vector model, embeddings

Previous post Next post
Up