Что такое word embeddings

Обновлено: 04.07.2024

Спасибо за информативную статью. Хочу прокомментировать по поводу перевода термина embedding. Сам недавно столкнулся с этим в англоязычной статье и долго не мог понять что имеется ввиду. Так вот сам термин embedding чаще всего употребляется в отношении к каким нибудь устройствам встроенным в систему на физическом уровне — embedding device. А в данном случае подходит перевод 'вложение': вложение элемента (вершины графа или слова) в n-мерное пространство рациональных чисел.

спасибо за ваше замечание, действительно это проясняет смысл самого слова, но мое мнение, что в текущем употреблении это не совсем корректно: embedding бывает как из высокоразмерного пространства в низкоразмерное, так и наоборот, так что концепция «вложения» здесь не совсем уместна; мне кажется, что «сопоставление» неплохой перевод, но все уже привыкли к слову «эмбеддинг», поэтому я его и употребил в статье Предлагаю считать, что русскоязычное общество уже выработало признаваемый сообществом перевод. Это термин «вложение». В английском термин «embedding» есть и в общематематическом значении и в NLP этот термин заимствовали из более общих математических понятий. И в математике, соответственно, есть устоявшийся перевод. Ну раз консилиум известных ученых хабра решил :) Пойду реджектить статьи, кто не использует данный термин. А если попробовать например слово проекция, или отображение, типа: проекция (или отображение) элемента на (в) n-мерное пространство рациональных чисел?

есть принятый перевод, эмбеддинг — это представление, топик закрыт

пс: кто думает иначе, можете и дальше витать в своих выдуманных мирах

Из того, что:
word embedding = векторное представление слова,
не следует, что:
embedding = представление.

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

Embedding в данном контексте переводится как «вложение», «погружение»

Нужно переводить суть термина, а не заниматься пословным переводом.
Поэтому давайте для начала поймем, что ничего никуда в данном случае не «вкладывается» (т.е. это вам не вложенная в одну геометрическую фигуру другая геометрическая фигура). Если кто-то так и говорит, то это или профессиональный термин или жаргон. Причём, боюсь, скорее это жаргон переводчиков, а не термин математиков. В сфере CS данный термин не используется. Да и multitran не истина в последней инстанции, нормальной модерации там нет.
А что же происходит, если не «процесс вложения»?
Мы получаем векторное представление для наших именованных понятий.
Погружение? Мы тоже так по-русски не говорим.
В крайнем случае, можно использовать вариант «ищем (рас)положение векторов слов в (векторном) пространстве». Смысл действия именно такой.
Но, увы, «расположение» и «положение» — не термины, мы не можем их использовать без окружающих уточняющих слов в надежде на понимание. А «векторное представление» — это сложившийся термин в CS, хотя и использующееся в несколько ином значении («векторное представление полигона» — набор координат и/или векторов, использующийся для задания полигона в векторном пространстве).
Поэтому я считаю, что оба не правы. Сложившегося термина для данного понятия нет.
Но если выбрать термин, какой он будет?
Из пространства числовых идентификаторов объектов мы негеометрическим образом получаем координаты объектов в векторном пространстве.
Слово «вложение» имеет другой смысл и поэтому режет слух, т.к. ассоциируется с вложенным треугольником, т.е. геометрическими действиями внутри одного пространства.
Термин «представление» не до конца отражает суть явления, но внутреннего противоречия вроде бы не вызывает, т.к. используется для близких понятий — для результата негеометрического процесса отображения одного пространства в другое.
Если у кого-либо есть варианты лучше, то предлагайте. Почему понятия «проекция» и «отображение» тоже не очень хорошо подходят, теперь, думаю, понятно — во-первых, это снова термины, во-вторых, как термины, они подразумевают геометрические действия внутри метрических пространств, и как правило также уменьшение размерности, а не её увеличение.
Наше же «вложение» — по-факту скорее «векторное расширение»: приписывание векторных значений одномерным идентификаторам.
Слово «вложение» имеет другой смысл и поэтому режет слух, т.к. ассоциируется с вложенным треугольником, т.е. геометрическими действиями внутри одного пространства.

А почему не с вложением одного пространства большей размерности в пространство меньшей размерности, например? Или с инъективным отображением?

Всё верно, если вы говорите про математический термин «вложение». А вот слово (понятие) «вложение» — это скорее про «вложить письмо в конверт».
Если у кого-либо есть варианты лучше, то предлагайте. Почему понятия «проекция» и «отображение» тоже не очень хорошо подходят, теперь, думаю, понятно — во-первых, это снова термины, во-вторых, как термины, они подразумевают геометрические действия внутри метрических пространств, и как правило также уменьшение размерности, а не её увеличение.

Кто сказал, что отображение требует наличия метрического пространства? Отображение множества на множество — вполне нормальная вещь, а метрики там обычно не будет. И никакой геометрии.

Равно и как в, скажем, банальных функциях. Например, функция взятия целой части действительного числа ( R -> Z ), является отображением, но это не "геометрические действия внутри одного пространства".

Векторное представление слов (англ. word embedding) — общее название для различных подходов к моделированию языка и обучению представлений в обработке естественного языка, направленных на сопоставление словам из некоторого словаря векторов небольшой размерности.

Содержание


Рисунок 1. Пример one-hot encoding для словаря из 9 слов. Источник

Пусть число различных слов равно [math]K[/math] . Сопоставим слову с номером [math]i[/math] вектор длины [math]K[/math] , в котором [math]i[/math] -тая координата равна единице, а все остальные — нулям (рис. 1). Недостатком one-hot encoding является то, что по векторным представлениям нельзя судить о схожести смысла слов. Также вектора имеют очень большой размер, из-за чего их неэффективно хранить в памяти.


Рисунок 2. Полученные векторы-слова отражают различные грамматические и семантические концепции.
[math]W_ + (W_ - W_) = W_[/math]
[math]W_ - W_ = W_ - W_[/math]

word2vec — способ построения сжатого пространства векторов слов, использующий нейронные сети. Принимает на вход большой текстовый корпус и сопоставляет каждому слову вектор. Сначала он создает словарь, а затем вычисляет векторное представление слов. Векторное представление основывается на контекстной близости: слова, встречающиеся в тексте рядом с одинаковыми словами (а следовательно, имеющие схожий смысл) (рис. 2), в векторном представлении имеют высокое косинусное сходство (англ. cosine similarity):

В word2vec существуют две основных модели обучения: Skip-gram (рис. 3) и CBOW (англ. Continuous Bag of Words) (рис. 4). В модели Skip-gram по слову предсказываются слова из его контекста, а в модели CBOW по контексту подбирается наиболее вероятное слово. На выходном слое используется функция [math]softmax[/math] или его вариация, чтобы получить на выходе распределение вероятности каждого слова. В обеих моделях входные и выходные слова подаются в one-hot encoding, благодаря чему при умножении на матрицу [math]W[/math] , соединяющую входной и скрытый слои, происходит выбор одной строки [math]W[/math] . Размерность [math]N[/math] является гиперпараметром алгоритма, а обученная матрица [math]W[/math] — выходом, так как ее строки содержат векторные представления слов.

Для ускорения обучения моделей Skip-gram и CBOW используются модификации [math]softmax[/math] , такие как иерархический [math]softmax[/math] и negative sampling, позволяющие вычислять распределение вероятностей быстрее, чем за линейное время от размера словаря.



Недостатком word2vec является то, что с его помощью не могут быть представлены слова, не встречающиеся в обучающей выборке. fastText решает эту проблему с помощью [math]N[/math] -грамм символов. Например, [math]3[/math] -граммами для слова яблоко являются ябл, бло, лок, око. Модель fastText строит векторные представления [math]N[/math] -грамм, а векторным представлением слова является сумма векторных представлений всех его [math]N[/math] -грамм. Части слов с большой вероятностью встречаются и в других словах, что позволяет выдавать векторные представления и для редких слов.


ELMO — это многослойная двунаправленная рекуррентная нейронная сеть c LSTM (рис. 5). При использовании word2vec или fastText не учитывается семантическая неоднозначность слов. Так, word2vec назначает слову один вектор независимо от контекста. ELMO решает эту проблему. В основе стоит идея использовать скрытые состояния языковой модели многослойной LSTM.

Было замечено, что нижние слои сети отвечают за синтаксис и грамматику, а верхние — за смысл слов. Пусть даны токены [math]t_, . t_[/math] , на которые поделено предложение. Будем считать логарифм правдоподобия метки слова в обоих направлениях, учитывая контекст слева и контекст справа, то есть на основании данных от начала строки до текущего символа и данных от текущего символа и до конца строки. Таким образом, модель предсказывает вероятность следующего токена с учетом истории.

[math]\left \< ^>, \overrightarrow^>, \overleftarrow^> | j = 1, . L \right \> = \left \< h_^ | j = 1, . L \right \>[/math] .

Здесь [math]x_^[/math] — входящий токен, а [math]\overrightarrow^>[/math] и [math]\overleftarrow^>[/math] — скрытые слои в одном и в другом направлении.

Тогда результат работы ELMO будет представлять из себя выражение: [math]ELMO_^ = \gamma^\sum_^ s_^h_^[/math] .

Обучаемый общий масштабирующий коэффициент [math]\gamma^[/math] регулирует то, как могут отличаться друг от друга по норме векторные представления слов.

Коэффициенты [math]s_^[/math] — это обучаемые параметры, нормализованные функцией [math]Softmax[/math] .

Модель применяют дообучая ее: изначально берут предобученную ELMO, а затем корректируют [math]\gamma[/math] и [math]s_[/math] под конкретную задачу. Тогда вектор, который подается в используемую модель для обучения, будет представлять собой взвешенную сумму значений этого векторах на всех скрытых слоях ELMO.

На данный момент предобученную модель ELMO можно загрузить и использовать в языке программирования Python.


BERT — это многослойный двунаправленный кодировщик Transformer. В данной архитектуре (рис. 6) используется двунаправленное самовнимание (англ. self-attention). Модель используется в совокупности с некоторым классификатором, на вход которого подается результат работы BERT — векторное представление входных данных. В основе обучения модели лежат две идеи.

Первая заключается в том, чтобы заменить [math]15\%[/math] слов масками и обучить сеть предсказывать эти слова.

Второй трюк состоит в том, чтобы дополнительно научить BERT определять, может ли одно предложение идти после другого.

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

Для каждой позиции на выход подается вектор размерностью [math]hiddenSize[/math] ( [math]768[/math] в базовой модели). Этот вектор может быть использован как входной вектор для классификатора.

Bert поддерживается в качестве модели в языке Python, которую можно загрузить.

Вложения слов обеспечивают плотное представление слов и их относительных значений.

Они являются улучшением по сравнению с разреженными представлениями, используемыми в более простом наборе представлений модели слова.

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

В этом уроке вы узнаете, как использовать встраивание слов для глубокого изучения Python с Keras.

После завершения этого урока вы узнаете:

  • О встраивании слов и о том, что Keras поддерживает встраивание слов через слой Embedding.
  • Как научиться встраивать слова при настройке нейронной сети.
  • Как использовать предварительно обученное встраивание слов в нейронную сеть.
  • Обновление февраль / 2018: Исправлена ​​ошибка из-за изменения базовых API.


Обзор учебника

Этот урок разделен на 3 части; они есть:

  1. Вложение слов
  2. Слой встраивания Keras
  3. Пример обучения встраиванию
  4. Пример использования предварительно обученного встраивания перчаток

1. Вложение слов

Вложение слова - это класс подходов для представления слов и документов с использованием плотного векторного представления.

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

Вместо этого во вложении слова представлены плотными векторами, где вектор представляет проекцию слова в непрерывное векторное пространство.

Положение слова в векторном пространстве извлекается из текста и основывается на словах, которые окружают слово, когда оно используется.

Положение слова в изученном векторном пространстве называется его встраиванием.

Два популярных примера методов изучения встраивания слов в текст:

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

2. Слой встраивания Keras

Керас предлагаетВстраиваниеслой, который можно использовать для нейронных сетей на текстовых данных.

Требуется, чтобы входные данные были целочисленными, чтобы каждое слово представлялось уникальным целым числом. Этот этап подготовки данных может быть выполнен с использованиемAPI Tokenizerтакже предоставляется с Keras.

Слой Embedded инициализируется со случайными весами и изучит вложение для всех слов в наборе обучающих данных.

Это гибкий слой, который можно использовать различными способами, такими как:

  • Его можно использовать отдельно, чтобы выучить встраивание слова, которое позже можно сохранить и использовать в другой модели.
  • Он может использоваться как часть модели глубокого обучения, где встраивание изучается вместе с самой моделью.
  • Он может быть использован для загрузки предварительно обученной модели встраивания слов, типа обучения передачи.

Уровень внедрения определяется как первый скрытый уровень сети. Необходимо указать 3 аргумента:

Необходимо указать 3 аргумента:

  • input_dim: Это размер словаря в текстовых данных. Например, если ваши данные целочисленно закодированы в значения от 0 до 10, то размер словаря будет 11 слов.
  • output_dim: Это размер векторного пространства, в которое будут вставлены слова. Он определяет размер выходных векторов из этого слоя для каждого слова. Например, это может быть 32 или 100 или даже больше. Проверьте различные значения для вашей проблемы.
  • input_length: Это длина входных последовательностей, как вы могли бы определить для любого входного слоя модели Keras. Например, если все ваши входные документы состоят из 1000 слов, это будет 1000.

Например, ниже мы определяем слой Embedded со словарем 200 (например, слова с целочисленным кодированием от 0 до 199 включительно), векторное пространство из 32 измерений, в которое будут встроены слова, и входные документы, содержащие по 50 слов каждый.

Слой Embedded имеет изученные веса. Если вы сохраните свою модель в файл, это будет включать веса для слоя Embedded.

Выход изВстраиваниеСлой - это двухмерный вектор с одним внедрением для каждого слова во входной последовательности слов (входной документ).

Если вы хотите подключитьПлотныйслой непосредственно в слой Embedded, вы должны сначала сгладить выходную матрицу 2D в 1D вектор, используярасплющитьслой.

Теперь давайте посмотрим, как мы можем использовать слой Embedding на практике.

3. Пример обучения встраиванию

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

Мы определим небольшую проблему, где у нас будет 10 текстовых документов, каждый с комментарием о работе, представленной студентом. Каждый текстовый документ классифицируется как положительный «1» или отрицательный «0». Это простая проблема анализа настроений.

Сначала мы определим документы и их метки классов.

Далее мы можем целочисленно кодировать каждый документ. Это означает, что в качестве входных данных слой Embedded будет содержать последовательности целых чисел. Мы могли бы поэкспериментировать с другим, более сложным набором кодировок моделей слов, таких как счетчики или TF-IDF.

Керас обеспечиваетфункция one_hot ()это создает хэш каждого слова в качестве эффективной целочисленной кодировки. Мы оценим размер словаря в 50, что намного больше, чем необходимо для уменьшения вероятности столкновений с хэш-функцией.

Последовательности имеют разную длину, и Keras предпочитает, чтобы входы были векторизованы, а все входы имели одинаковую длину. Мы добавим все входные последовательности, чтобы иметь длину 4. Опять же, мы можем сделать это с помощью встроенной функции Keras, в этом случаефункция pad_sequence (),

Теперь мы готовы определить нашиВстраиваниеслой как часть нашей модели нейронной сети.

Встраиваниеимеет словарь 50 и длину ввода 4. Мы выберем небольшое пространство для вставки из 8 измерений.

Модель представляет собой простую бинарную классификационную модель. Важно отметить, что выход изВстраиваниеСлой будет 4 вектора по 8 измерений каждый, по одному на каждое слово. Мы сгладим это с одним вектором с 32 элементами, чтобы передатьПлотныйвыходной слой.

Наконец, мы можем подобрать и оценить модель классификации.

Полный список кодов приведен ниже.

При выполнении примера сначала печатается целочисленный документ.

Затем печатные версии каждого документа печатаются, делая их одинаковой длины.

После определения сети выводится сводка слоев. Мы можем видеть, что, как и ожидалось, выходной сигнал слоя Embedded представляет собой матрицу 4 × 8, и она сжимается в 32-элементный вектор слоем Flatten.

Наконец, напечатана точность обученной модели, показывающая, что она отлично выучила набор обучающих данных (что неудивительно).

Вы можете сохранить полученные веса из слоя Embedding в файл для последующего использования в других моделях.

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

Далее, давайте посмотрим на загрузку предварительно обученного встраивания слов в Keras.

4. Пример использования предварительно обученного встраивания перчаток

Слой Keras Embedding может также использовать встраивание слова, изученное в другом месте.

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

Например, исследователи, стоящие за методом GloVe, предоставляют набор предварительно обученных вложений слов на своем веб-сайте, выпущенных по лицензии общественного достояния. Увидеть:

Самый маленький пакет вложений 822Mb, называетсяglove.6B.zip«. Он был обучен на наборе данных из одного миллиарда токенов (слов) со словарем в 400 тысяч слов. Существует несколько различных размеров встраиваемых векторов, в том числе 50, 100, 200 и 300 размеров.

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

Этот пример вдохновлен примером в проекте Keras:pretrained_word_embeddings.py,

После загрузки и распаковки вы увидите несколько файлов, один из которых «glove.6B.100d.txt«, Который содержит 100-мерную версию вложения.

Если вы загляните внутрь файла, вы увидите токен (слово), за которым следуют веса (100 цифр) в каждой строке. Например, ниже находится первая строка текстового файла ASCII для встраивания, показывающая вложение для « «.

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

В этом случае нам нужно уметь сопоставлять слова как целые числа, а целые числа - со словами.

Керас обеспечиваетTokenizerкласс, который может соответствовать учебным данным, может последовательно преобразовывать текст в последовательности, вызываяtexts_to_sequences ()метод наTokenizerкласс, и обеспечивает доступ к словарному отображению слов в целые числа вword_indexприписывать.

Далее нам нужно загрузить весь файл внедрения слова GloVe в память в виде словаря слов для встраивания массива.

Это довольно медленно. Возможно, было бы лучше отфильтровать вложение для уникальных слов в ваших тренировочных данных.

Далее нам нужно создать матрицу из одного вложения для каждого слова в наборе обучающих данных. Мы можем сделать это, перечислив все уникальные слова вTokenizer.word_indexи определение местоположения вектора веса вложения из загруженного вложения GloVe

Результатом является матрица весов только для слов, которые мы увидим во время тренировки.

Теперь мы можем определить нашу модель, подобрать и оценить ее, как и раньше.

Ключевое отличие состоит в том, что слой внедрения может быть заполнен весами внедрения слова GloVe. Мы выбрали 100-мерную версию, поэтому слой Embedding должен быть определен сoutput_dimустановить на 100. Наконец, мы не хотим обновлять изученные веса слов в этой модели, поэтому мы установимобучаемыйатрибут для модели, которая будетЛожь,

Полный обработанный пример приведен ниже.

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

Посмотрите, что лучше всего подходит для вашей конкретной проблемы.

Дальнейшее чтение

Этот раздел предоставляет больше ресурсов по этой теме, если вы хотите углубиться.

Резюме

В этом уроке вы узнали, как использовать встраивание слов для глубокого изучения Python с Keras.

В частности, вы узнали:

  • О встраивании слов и о том, что Keras поддерживает встраивание слов через слой Embedding.
  • Как научиться встраивать слова при настройке нейронной сети.
  • Как использовать предварительно обученное встраивание слов в нейронную сеть.

У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.

Вложения слов - это тип представления слов, который позволяет словам с одинаковым значением иметь одинаковое представление.

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

В этом посте вы познакомитесь с подходом встраивания слов для представления текстовых данных.

Прочитав этот пост, вы узнаете:

  • Что такое подход встраивания слов для представления текста и чем он отличается от других методов извлечения признаков.
  • Что есть 3 основных алгоритма для изучения встраивания слова из текстовых данных.
  • Что вы можете либо обучить новому встраиванию, либо использовать предварительно обученное встраивание в своей задаче обработки естественного языка.


обзор

Этот пост разделен на 3 части; они есть:

  1. Что такое вложение слов?
  2. Алгоритмы встраивания слов
  3. Использование вложения Word

Что такое вложение слов?

Вложение слова - это заученное представление для текста, где слова, имеющие одинаковое значение, имеют похожее представление.

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

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

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

Ключом к подходу является идея использования плотного распределенного представления для каждого слова.

Каждое слово представлено действительным вектором, часто десятками или сотнями измерений. Это противопоставлено тысячам или миллионам измерений, необходимых для разреженных представлений слов, таких как однократное кодирование.

ассоциировать с каждым словом в словаре вектор признаков распределенного слова… Вектор признаков представляет различные аспекты слова: каждое слово связано с точкой в ​​векторном пространстве. Количество функций . намного меньше, чем размер словарного запаса

Распределенное представление изучается на основе использования слов. Это позволяет словам, которые используются подобным образом, приводить к тому, что они имеют сходные представления, естественно отражая их значение. Это может быть противопоставлено четкому, но хрупкому представлению в модели мешка слов, где, если не указано иное, разные слова имеют разные представления, независимо от того, как они используются.

За этим подходом лежит более глубокая лингвистическая теория, а именно:гипотеза распределения”Zellig Harris, который можно обобщить так: слова, имеющие одинаковый контекст, будут иметь сходные значения. Более подробно см. Статью Харриса 1956 года «Распределительная структура«.

Это понятие, позволяющее использовать слово для определения его значения, может быть обобщено часто повторяемым замечанием Джона Фёрта:

Вы узнаете слово от компании, которую оно хранит!

Алгоритмы встраивания слов

Методы встраивания слов изучают реальное векторное представление для предопределенного словаря фиксированного размера из совокупности текста.

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

В этом разделе рассматриваются три метода, которые можно использовать для изучения встраивания слов из текстовых данных.

1. Встраивание слоя

Слой внедрения, из-за отсутствия лучшего имени, - это вложение слова, которое изучается совместно с моделью нейронной сети для конкретной задачи обработки естественного языка, такой как моделирование языка или классификация документов.

Требуется, чтобы текст документа был очищен и подготовлен таким образом, чтобы каждое слово кодировалось в горячем виде. Размер векторного пространства указывается как часть модели, например, 50, 100 или 300 измерений. Векторы инициализируются небольшими случайными числами. Слой встраивания используется на внешнем интерфейсе нейронной сети и устанавливается под наблюдением с использованием алгоритма обратного распространения

… Когда вход в нейронную сеть содержит символьные категориальные признаки (например, признаки, которые принимают один из k различных символов, таких как слова из закрытого словаря), обычно ассоциируется каждое возможное значение свойства (то есть каждое слово в словаре) с d-мерным вектором для некоторого d. Эти векторы затем считаются параметрами модели и обучаются совместно с другими параметрами.

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

Этот подход к изучению уровня внедрения требует большого количества обучающих данных и может быть медленным, но он изучит встраивание как для конкретных текстовых данных, так и для задачи НЛП.

2. Word2Vec

Word2Vec - это статистический метод для эффективного обучения встраиванию отдельных слов из текстового корпуса.

Он был разработан Томасом Миколовым и соавт. в Google в 2013 году в ответ на повышение эффективности обучения встраиванию на основе нейронных сетей, которое с тех пор стало стандартом де-факто для разработки предварительно обученного встраивания слов.

Кроме того, работа включала анализ изученных векторов и исследование векторной математики на представлениях слов. Например, что вычитаяЧеловек-Несс" от "корольИ добавив «женщины-Несс«Приводит к слову«Королева«Захватив аналогию»король королеве как мужчина женщине«.

Мы находим, что эти представления удивительно хороши для захвата синтаксических и семантических закономерностей в языке, и что каждое отношение характеризуется зависимым от отношения векторным смещением. Это позволяет ориентироваться на вектор, основываясь на смещениях между словами. Например, отношения между мужчиной и женщиной выучиваются автоматически, и с помощью индуцированных представлений вектора «король - мужчина + женщина» получается вектор, очень близкий к «королеве».

Были введены две разные модели обучения, которые можно использовать как часть подхода word2vec для изучения встраивания слова; они есть:

  • Непрерывный Bag-of-Words или модель CBOW.
  • Непрерывная модель скип-грамма.

Модель CBOW изучает вложение, предсказывая текущее слово на основе его контекста. Непрерывная модель скип-граммы учится, предсказывая окружающие слова по текущему слову.

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


Обе модели ориентированы на изучение слов с учетом их локального контекста использования, где контекст определяется окном соседних слов. Это окно является настраиваемым параметром модели.

Размер скользящего окна сильно влияет на результирующее векторное сходство. Большие окна имеют тенденцию создавать больше актуальных сходств […], в то время как меньшие окна имеют тенденцию создавать больше функциональных и синтаксических сходств.

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

3. Перчатка

Алгоритм глобальных векторов для представления слов, или GloVe, является расширением метода word2vec для эффективного изучения векторов слов, разработанного Pennington, et al. в Стэнфорде.

Классические представления моделей в векторном пространстве слов были разработаны с использованием методов матричной факторизации, таких как латентный семантический анализ (LSA), которые хорошо справляются с использованием глобальной текстовой статистики, но не так хороши, как изученные методы, такие как word2vec, для захвата значения и демонстрации его в задачах. как вычисление аналогий (например, пример короля и королевы выше).

GloVe - это подход, объединяющий глобальную статистику методов матричной факторизации, таких как LSA, с локальным контекстным обучением в word2vec.

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

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

Использование вложения Word

У вас есть несколько вариантов, когда приходит время использовать вложения слов в вашем проекте обработки естественного языка.

В этом разделе описываются эти варианты.

1 Изучите вложение

Вы можете выбрать вложение слова для вашей проблемы.

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

При обучении встраиванию слов у вас есть два основных варианта:

  1. Учись автономногде модель обучается изучению встраивания, которое сохраняется и используется как часть другой модели для вашей задачи позже. Это хороший подход, если вы хотите использовать одно и то же вложение в нескольких моделях.
  2. Учимся вместегде встраивание изучается как часть большой модели конкретной задачи. Это хороший подход, если вы собираетесь использовать вложение только для одной задачи.

2. Повторное использование вложения

Исследователи часто предоставляют предварительно подготовленные вложения слов бесплатно, часто по разрешающей лицензии, чтобы вы могли использовать их в своих собственных академических или коммерческих проектах.

Например, вложения слов word2vec и GloVe доступны для бесплатной загрузки.

Они могут быть использованы в вашем проекте вместо обучения ваших собственных встраиваний с нуля.

У вас есть два основных варианта использования предварительно обученных вложений:

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

Какой вариант вы должны использовать?

Изучите различные варианты и, если возможно, проверьте, какие из них дают наилучшие результаты по вашей проблеме.

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

Дальнейшее чтение

Этот раздел предоставляет больше ресурсов по этой теме, если вы хотите углубиться.

статьи

документы

проектов

книги

Резюме

В этом посте вы обнаружили, что Word Embeddings является методом представления текста в приложениях глубокого обучения.

В частности, вы узнали:

  • Что такое подход встраивания слов для представления текста и чем он отличается от других методов извлечения признаков.
  • Что есть 3 основных алгоритма для изучения встраивания слова из текстовых данных.
  • Таким образом, вы можете либо обучить новому встраиванию, либо использовать предварительно обученное встраивание в своей задаче обработки естественного языка.

У вас есть вопросы?
Задайте свои вопросы в комментариях ниже, и я сделаю все возможное, чтобы ответить.

Читайте также: