Изучение общего слоя распределенных вложений - важный шаг в решении проблем НЛП. Начиная с Миколова и др. (2013) было введено множество подходов к обучению с учителем и обучению без учителя для получения высококачественного текстового представления.

Kiros et al. представил skip-Thinks в 2015 году и нацелен на предоставление векторов уровня предложения. Прочитав эту статью, вы поймете:

  • Дизайн с пропуском мыслей
  • Архитектура
  • Реализация
  • Забрать

Дизайн без мыслей

Если вы не знакомы с методом пропуска грамматики для построения встраивания слов, вы можете проверить этот блог для более подробной информации.

Пропуск-мысли расширяет модель скип-граммов от вложения слов до встраивания предложений. Вместо предсказания контекста по слову окружения, Пропуск мыслей предсказывает целевое предложение по предложению окружения. Типичный пример - использование предыдущего и следующего предложения для предсказания текущего предложения.

Из приведенного выше примера

  • Предыдущее предложение: я вернулся домой.
  • Текущее предложение: я видел кота на ступеньках.
  • Следующее предложение: это было странно.

Во-вторых, встраивание слов обеспечивает лучшее представление слова без учета порядка в предложении. Рекуррентная нейронная сеть (RNN) может заботиться о порядке слов в предложении, но skip-Think также учитывает его.

Авторы продемонстрировали, что эта модель способна улавливать семантику и синтаксис предложений, так что она может передавать результат высококачественного встраивания в нисходящие задачи.

Архитектура

Эта модель следует архитектуре фреймворка кодировщика-декодера для вычисления векторов. На уровне нейронной сети это может быть GRU (Gated Recurrent Units), LSTM (Long Short-Term Memory) или Attention Mechanism.

Кодировщик: ввод - это последовательность векторов слов в предложении, передаваемая в RNN (GRU или LSTM). После обучения модели она будет использоваться в последующих задачах, таких как задача классификации.

Декодер: архитектура декодера аналогична кодировщику, за исключением того, что представлены некоторые матрицы. Также есть два декодера вместо одного. Первое - это предыдущее предложение, а второе - следующее предложение. Разница в том, что они не разделяют между собой вес декодера (скрытое состояние), но имеют общие словарные векторы. Decoder помогает обучить кодировщик, и после этого он больше не будет использоваться.

Расширение словарного запаса: авторы используют линейную регрессию из-за отсутствия словарного запаса (OOV). Идея состоит в том, что использование предварительно обученных встраиваний (например, word2vec) в качестве входных данных (например, x или функций) и выходных данных (например, y или метка) является еще одним измерением слоя встраивания. Так что он может «предсказывать» вложения для каждого отдельного слова, даже если оно никогда не встречается в обучающих данных.

В документе нет подробного объяснения, поэтому я дополнительно изучаю исходный код, чтобы понять, как он работает. Вы также можете обратиться к исходному коду (функция train_regresso), чтобы пройтись по нему.

Автор: Kiros et al. design, существует два подхода: uni-skip и bi-skip. Uni-skip относится к использованию ненаправленной нейронной сети для построения встраиваний предложений, в то время как bi-skip использует двунаправленную RNN (LSTM или GRU) для построения встраиваний предложений. Результатом uni-skip (или bi-skip) является 2400 измерений (это 4800 при использовании подхода с комбинированным пропуском) предложения. Мы можем обучить модель, предоставив эти выходные данные для последующих задач, таких как классификация.

Реализация

Первоначальные авторы - Kiros et al. кто реализовал скип-мысли от Theano. Доступны версии для Pytorch, Tensorflow и Keras. Я буду использовать версию Pytorch, чтобы продемонстрировать, как мы можем преобразовать данные в векторы предложений. Для других вы можете проверить эти github, которые упомянуты в разделе справки.

Предоставляя предварительно обученную модель, файл словаря и ввод (предложения), вы получите результат, который представляет собой 2400 векторов измерений (для uni-skip).

Забрать

Чтобы получить доступ ко всему коду, вы можете посетить мой репозиторий github.

  • И пропуска мыслей, и скип-грамм - это обучение без учителя.
  • Цель Skip-Think - изучить векторы уровня предложения, но не векторы слов.
  • Поскольку это фиксированное представление предложения, оно будет занимать очень большой объем памяти, если ваше «предложение» будет очень длинным. Его не следует использовать при встраивании абзацев или документов.

Ссылка