Что такое вложения слов? Почему мы используем вложения слов? Прежде чем вдаваться в подробности. давайте посмотрим на пример:

  1. Есть много веб-сайтов, которые просят нас оставлять отзывы или отзывы о продуктах, когда мы их используем. вроде: - Amazon, IMDB.
  2. мы также используем для поиска в Google пару слов и получаем связанный с этим результат.
  3. Есть некоторые сайты, которые помещают в блог теги, связанные с материалами в блоге.

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

Читая любую газету, мы можем сказать, о чем идет речь, но как компьютер будет делать эти вещи? Компьютер может сопоставлять строки и может сказать нам, совпадают они или нет. Но как мы можем заставить компьютеры рассказывать вам о футболе или Роналду, когда вы ищете Месси?

Для таких задач, как распознавание объектов или речи, мы знаем, что вся информация, необходимая для успешного выполнения задачи, закодирована в данных (потому что люди могут выполнять эти задачи из необработанных данных). Однако системы обработки естественного языка традиционно обрабатывают слова как отдельные атомарные символы, и поэтому «кошка» может быть представлена ​​как Id537, а «собака» - как Id143. Эти кодировки являются произвольными и не предоставляют системе полезной информации относительно отношений, которые могут существовать между отдельными символами.

А вот и вложения слов. вложения слов - это не что иное, как числовые представления текстов.

Есть много разных типов вложения слов:

  1. Встраивание на основе частоты
  2. Встраивание на основе прогнозов

Встраивание на основе частоты:

Вектор счета:

Векторная модель count изучает словарь из всех документов, а затем моделирует каждый документ, подсчитывая, сколько раз встречается каждое слово. Например, предположим, что у нас есть D документов, а T - это количество различных слов в нашем словаре, тогда размер векторной матрицы подсчета будет равен D * T. Возьмем следующие два предложения:

Документ 1: «Кот сел на шляпу»

Документ 2: «Собака съела кота и шляпу»

Из этих двух документов наш словарный запас выглядит следующим образом:

{кот, сидел, на, шляпа, собака, ел, и}

so D = 2, T = 8

Теперь мы подсчитываем, сколько раз каждое слово встречается в каждом документе. В Документе 1 «the» появляется дважды, а «cat», «sat», «on» и «hat» - по одному разу, поэтому вектор признаков для документов следующий:

{кот, сидел, на, шляпа, собака, ел, и}

поэтому матрица векторов подсчета: -

Теперь столбец также можно понимать как вектор слов для соответствующего слова в матрице M. Например, вектор слов для слова 'cat' в приведенной выше матрице - [1,1] и так далее. Здесь строки соответствуют документам в корпусе, а столбцы соответствуют токенам в словаре. Вторая строка в приведенной выше матрице может быть прочитана как - Документ 2 содержит «шляпа»: один раз, «собака»: один раз и «трижды» и так далее.

Существует проблема, связанная с размерами матрицы для большого корпуса текста, поэтому мы можем использовать стоп-слова (удалить общие слова, такие как 'a, an, this, that'), или мы можем извлечь некоторые популярные слова из словаря на основе частоты и использовать как новый словарь или мы можем использовать оба метода.

Векторизация TF-IDF:

В большом текстовом корпусе некоторые слова будут присутствовать очень часто (например, «the», «a», «is» на английском языке), следовательно, несут очень мало значимой информации о фактическом содержании документа. Если бы мы передавали данные прямого подсчета непосредственно классификатору, эти очень частые термины затеняли бы частоты более редких, но более интересных терминов.

Чтобы повторно взвесить функции счетчика в значения с плавающей запятой, подходящие для использования классификатором, очень часто используется преобразование tf – idf. Этот метод учитывает не только появление слова в отдельном документе, но и во всем корпусе. Давайте возьмем бизнес-статью: эта статья будет содержать больше бизнес-терминов, таких как фондовый рынок, цены, акции и т. д., по сравнению с любой другой статьей. но такие термины, как «a, an, the», будут появляться в каждой статье очень часто. поэтому этот метод будет наказывать такие часто встречающиеся слова.

Tf означает частоту запроса, а tf – idf означает умножение частоты запроса на обратную частоту документа.

TF = (Количество раз, когда термин t встречается в документе) / (Количество терминов в документе)

IDF = log (N / n), где N - общее количество документов, а n - количество документов, в которых появился термин t.

TF-IDF (t, документ) = TF (t, документ) * IDF (t)

Матрица совпадений с фиксированным контекстным окном

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

Мудрый пенни и глупый фунт

сэкономленный пенни - это заработанный пенни

Если позволить count (w (next) | w (current)) представить, сколько раз слово w (next) следует за словом w (current) , мы можем суммировать статистику совместной встречаемости слов «а» и «пенни» как:

В приведенной выше таблице показано, что за буквой «а» дважды следует слово «пенни», в то время как слова «заработал», «сэкономлен» и «мудрый» следует за словом «пенни» один раз в нашем корпусе. Таким образом, слово «заработано» в одном случае из трех может появиться после «пенни». Показанный выше счетчик называется частотой биграмм; он просматривает только следующее слово текущего слова. Учитывая корпус из N слов, нам нужна таблица размером NxN для представления биграммных частот всех возможных пар слов. Такая таблица очень разреженная, так как большинство частот равны нулю. На практике количество совпадений преобразуется в вероятности. Это приводит к тому, что записи для каждой строки составляют единицу в матрице совместной встречаемости.

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

Позвольте мне проиллюстрировать это более наглядно. Например, вы выполняете PCA для указанной выше матрицы размера NXN. Вы получите V основных компонентов. Вы можете выбрать k компонентов из этих V компонентов. Итак, новая матрица будет иметь вид N X k.

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

Итак, то, что PCA делает сзади, - это разложить матрицу совпадений на три матрицы, U, S и V, где U и V являются ортогональными матрицами. Важно то, что скалярное произведение U и S дает представление вектора слова, а V дает представление контекста слова.

Преимущества матрицы совместной встречаемости

  1. Сохраняет смысловую связь между словами. То есть мужчина и женщина обычно ближе, чем мужчина и яблоко.
  2. В своей основе он использует SVD, который дает более точные векторные представления слов, чем существующие методы.
  3. Он использует факторизацию, которая является четко определенной проблемой и может быть эффективно решена.
  4. Он должен быть вычислен один раз и может быть использован в любое время после вычисления. В этом смысле он быстрее по сравнению с другими.

Недостатки матрицы совпадений

  1. Для хранения матрицы совпадений требуется огромная память.
    Но эту проблему можно обойти, разложив матрицу на множители, например, в кластерах Hadoop и т. Д., И ее можно сохранить.

Применение частотных методов:

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

Методы, основанные на прогнозировании:

Непрерывный мешок слов (CBOW):

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

Давайте посмотрим на это на примере «Кот перепрыгнул через лужу».

Итак, один из подходов состоит в том, чтобы рассматривать {"The", "cat", ’over", "the’, "puddle"} как контекст и на основе этих слов иметь возможность предсказать или сгенерировать центральное слово "jumped". Этот тип модели мы называем моделью непрерывного мешка слов (CBOW).

Прежде чем вдаваться в подробности CBOW, давайте поговорим об одном популярном представлении слов: Один из способов представления слова в виде вектора - это горячее представление. Одноразовое представление - это метод представления, в котором только один элемент равен 1, а остальные элементы равны 0 в векторе. Устанавливая 1 или 0 для каждого измерения, он представляет «это слово или нет».

Скажем, например, мы представляем слово «питон» как однозначное представление. Здесь словарь, который представляет собой набор слов, состоит из пяти слов (nlp, python, word, ruby, one-hot). Тогда следующий вектор выражает слово «питон»:

Хотя одноразовое представление является простым, у него есть слабые места: невозможно получить значимые результаты с помощью арифметики между векторами. Допустим, мы берем внутренний продукт, чтобы вычислить сходство между словами. В однократном представлении разные слова равны 1 в разных местах, а другие элементы равны 0. Таким образом, результат вычисления скалярного произведения между разными словами равен 0. Это не является полезным результатом.

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

Мы разбиваем работу этой модели на следующие этапы:

Wi = матрица весов между входным слоем и скрытым слоем размером [V * N]

Wj = матрица весов между скрытым слоем и выходным слоем размером [N * V]

  1. Мы генерируем наши векторы с одним горячим словом (x (c − m), ..., x (c − 1), x (c + 1), ..., x (c + m)) для входного контекста размера м. где x (c) - центральное или целевое слово, которое мы хотим предсказать. у нас есть C (= 2m) один вектор горячего слова размера [1 * V]. поэтому размер нашего входного слоя [C * V]
  2. Затем мы умножаем их на матрицу Wi, чтобы получить вложенные слова размером [1 * N].
  3. Теперь возьмем среднее значение этих 2m [1 * N] векторов.
  4. Теперь мы вычисляем вывод скрытого слоя, умножая ввод скрытого слоя на матрицу Wj. Теперь мы получаем вектор очков размером [1 * V]. назовем его z.
  5. Превратите оценки в вероятности с помощью yˆ = softmax (z)
  6. Мы хотим, чтобы наши сгенерированные вероятности yˆ совпадали с истинными вероятностями y, которые также являются одним из горячих векторов фактического слова.
  7. Ошибка между выходом и целью вычисляется и распространяется обратно для корректировки весов.

Используемая функция потерь - Перекрестная энтропия.

а затем мы используем градиентный спуск или любой хороший оптимизатор для обучения этой сети. После обучения вес между скрытым слоем и выходным слоем (Wj) принимается как векторное представление слова слова. где каждый столбец представляет вектор слов размером [1 * N].

Модель скип-грамма:

Другой подход состоит в том, чтобы создать такую ​​модель, при которой по центральному слову «прыгнул» модель сможет предсказать или сгенерировать окружающие слова «The», «cat», «over», «the», «puddle». Здесь мы называем слово «перепрыгнувшим» контекстом. Мы называем этот тип модели моделью SkipGram.

Модель Skip-gram меняет использование целевых и контекстных слов. Skip-gram берет слово и предсказывает из него контекстное слово.

Мы разбиваем работу этой модели на следующие этапы:

Wi = матрица весов между входным слоем и скрытым слоем размером [V * N]

Wj = матрица весов между скрытым слоем и выходным слоем размером [N * V]

  1. Мы генерируем наши векторы x (c) с одним горячим словом для входного центрального слова. где (x (c − m), ..., x (c − 1), x (c + 1), ..., x (c + m)) - слова контекста, которые мы хотим предсказать. поэтому размер нашего входного слоя составляет [1 * V]
  2. Затем мы умножаем их на матрицу Wi, чтобы получить вложенные слова размером [1 * N].
  3. Теперь мы вычисляем вывод скрытого слоя, умножая ввод скрытого слоя на матрицу Wj. Теперь мы получаем C (= 2m) вектор оценок размера [1 * V]. назовем его z (i).
  4. Превратите оценки в вероятности следующим образом: yˆ (i) = softmax (z (i))
  5. Мы хотим, чтобы наши сгенерированные вероятности yˆ (i) совпадали с истинными вероятностями y (i), которые также являются одним из горячих векторов реальных слов.
  6. Ошибка между выходом и целью вычисляется и распространяется обратно для корректировки весов.

Преимущества / недостатки CBOW и Skip-gram:

  1. Поскольку они являются вероятностными по своей природе, предполагается, что они работают лучше, чем детерминированные методы (в целом).
  2. У них мало памяти. Им не нужны огромные требования к оперативной памяти, такие как матрица совместной встречаемости, где необходимо хранить три огромных матрицы.
  3. Хотя CBOW (предсказание цели из контекста) и skip-gram (предсказание контекстных слов из цели) являются просто инвертированными методами друг к другу, каждый из них имеет свои преимущества / недостатки. Поскольку CBOW может использовать множество контекстных слов для предсказания одного целевого слова, он может существенно сгладить распределение. По сути, это похоже на регуляризацию и обеспечивает очень хорошую производительность, когда наши входные данные не такие большие. Однако модель skip-gram более детализирована, поэтому мы можем извлекать больше информации и, по сути, иметь более точные вложения, когда у нас есть большой набор данных (большие данные всегда являются лучшим регуляризатором). Скип-грамма с отрицательной подвыборкой в ​​целом превосходит любой другой метод.

Применение встраивания слов (Word2Vec):

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

Мы можем визуализировать изученные векторы, проецируя их на 2 измерения, используя, например, что-то вроде техники уменьшения размерности t-SNE. Когда мы изучаем эти визуализации, становится очевидным, что векторы захватывают некоторую общую и на самом деле весьма полезную семантическую информацию о словах и их отношениях друг с другом. Было очень интересно, когда мы впервые обнаружили, что определенные направления в индуцированном векторном пространстве специализируются на определенных семантических отношениях, например Отношения между словами мужчина-женщина, глагольное время и даже страна-столица, как показано на рисунке ниже.

Это объясняет, почему эти векторы также полезны в качестве функций для многих задач предсказания канонического НЛП, таких как тегирование части речи или распознавание именованных сущностей.

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

  1. Определение степени сходства между двумя словами.
    model.similarity('woman','man')
    0.73723527
  2. В поисках лишнего.
    model.doesnt_match('breakfast cereal dinner lunch';.split())
    'cereal'
  3. Удивительные вещи, такие как женщина + король-мужчина = королева
    model.most_similar(positive=['woman','king'],negative=['man'],topn=1)
    queen: 0.508
  4. Вероятность появления текста под моделью
    model.score(['The fox jumped over the lazy dog'.split()])
    0.21

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

использованная литература

  1. Пакет слов (вектор подсчета) и Word2Vec репозиторий Github для DSG.
  2. Взвешивание сроков tf – idf
  3. Матрица совпадений с фиксированным размером контекста
  4. Учебное пособие по Word2Vec (CBOW)
  5. Word2Vec Tutorial (Skip-gram)
  6. Реализация Python Word2Vec
  7. Word2Vec Maths

Сноски:

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

Нажмите ❤, если это сделает вас немного умнее.