Изучение общего слоя распределенных вложений - важный шаг в решении проблем НЛП. Начиная с Миколова и др. (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 - изучить векторы уровня предложения, но не векторы слов.
- Поскольку это фиксированное представление предложения, оно будет занимать очень большой объем памяти, если ваше «предложение» будет очень длинным. Его не следует использовать при встраивании абзацев или документов.
Ссылка
- Райан Кирос, Юкун Чжу, Руслан Салахутдинов, Ричард С. Земель, Антонио Торральба, Ракель Уртасун и Санджа Фидлер. Пропускные векторы
- S Кип-Мысли Theano github
- Пропустить мысли Pytorch github
- Пропустить мысли Tensorflow github
- Пропустить мысли Керас на гитхабе