Что это?
Вложение слов — это представление слова в виде вектора или последовательности чисел. Часто эти векторы кодируют, как слово используется в сочетании с другими словами в наборе данных. Как метод кодирования, так и используемый набор данных могут сильно различаться и в конечном итоге зависят от соответствующего варианта использования.
Почему это полезно?
Встраивание слов имеет повсеместное применение в NLP/ML и позволяет компьютерам или математическим уравнениям рассуждать о словах. Компьютеры видят слова только как последовательность отдельных символов, что не всегда полезно при рассуждениях о семантическом или синтаксическом использовании слова в языке. Встраивание слов может дать компьютерам дополнительную информацию о слове и его использовании с другими словами в предложениях.
Многие крупные технологические компании, такие как Google и Facebook, вложили значительные средства в разработку передовых методов создания таких вложений.
Как это делается?
Процесс кодирования слов как векторов обычно выполняется путем создания репозитория сопоставлений слов с векторами, а затем обращения к этому репозиторию для получения встраивания определенного слова. Этот репозиторий создается путем обучения некоторой модели в обучающем корпусе.
Сумка слов / Одна модель горячего кодирования
Простой способ представления слов в виде векторов состоит в том, чтобы присвоить каждому возможному слову в словаре или словаре уникальный идентификатор. Например, если наш словарь содержит 5 слов: [собаки, лучше, чем, кошки], то мы можем присвоить каждому слову уникальное целое число:
- собаки — 1
- есть — 2
- лучше — 3
- чем — 4
- кошки — 5
Чтобы затем закодировать слово как вектор, создайте вектор размером со словарь, содержащий 0 в каждой записи. Затем установите индекс, соответствующий уникальному идентификатору слова, равным 1. Таким образом, слово «лучше» будет иметь вектор [ 0, 0, 1, 0, 0 ]. Затем мы можем представлять предложения или даже целые документы в виде встраивания, складывая вместе все векторы слов для этого документа. Например, если наш документ просто «кошки лучше», то вектор документа будет [ 0, 1, 1, 0, 1 ]
Плюсы
- Легко/просто реализовать
- Быстрое время обработки/обучения
- Хорошо работает для небольших наборов данных, когда другие методы встраивания не имеют достаточного количества данных для обучения.
- Хорошо работает с небольшими предметно-ориентированными наборами данных, когда другие модели встраивания, обученные на больших общих наборах данных, не охватывают контекст более нишевого набора данных.
Минусы
- Не учитывает порядок слов
- Векторы слов чрезвычайно велики — часто требуется интенсивная обработка векторов документов для уменьшения размерности.
Модели Word2Vec
Word2Vec – это популярное семейство алгоритмов встраивания слов, выпущенное в 2013 году. Есть два основных алгоритма, на которых работает word2vec: Continuous Bag of Words и Skip-gram.
Случаи использования в производственной среде
- Музыкальные рекомендации в Spotify и Anghami
- Рекомендации по размещению на Airbnb
- Рекомендации продуктов в Yahoo Mail
- Сопоставление рекламы с поисковыми запросами в Yahoo Search
Непрерывный набор слов (CBOW)
Модель непрерывного набора слов использует нейронную сеть с прямой связью и одним скрытым слоем для классификации слов в предложении на основе окружающих слов. Если входной пример «я думаю [???] я есть», то выход модели должен быть «следовательно», поскольку это был бы наиболее вероятный выбор, учитывая контекстные слова «я думаю» и «я есть».
Когда мы обучаем эту нейронную сеть предлагать слова на основе контекстных слов, нейронная сеть изучает ряд весовых коэффициентов. На самом деле эти веса напрямую соответствуют векторам для каждого слова в словаре. Затем эти векторы извлекаются из модели нейронной сети и используются для встраивания любого слова в виде вектора.
Плюсы
- Кодирует близкое использование других слов во встраивание слова
- Быстрее обучается, чем модель с пропуском грамма
- Хорошо фиксирует синтаксическое использование слов: слово «рассол» было бы близко к «маринованному».
Минусы
- Ограничено размером окна для контекстных слов
- Не отражает также семантическое использование слов: слово «автомобиль» не было бы так похоже на «лодка».
- Склонен к чрезмерному использованию частых слов
- Невозможно вставить слова, которые модель еще не видела
Модель Skip-Gram
Алгоритм пропуска грамм можно рассматривать как обратную модель CBOW. Вместо того, чтобы классифицировать слово на основе слов контекста, skip-gram пытается классифицировать слова контекста на основе одного входного слова. Например, если вводом является слово «поэтому», а размер окна равен 5, то вывод должен быть [я, думаю], [я есть]. Подобно CBOW, для выполнения этой задачи обучается нейронная сеть с прямой связью, а затем мы извлекаем веса нейронной сети как вложения слов.
Плюсы
- Кодирует близкое использование других слов во встраивание слова
- Хорошо фиксирует семантическое использование слов: слово «кошка» близко к слову «лодка».
- Не так склонен к переоснащению частых слов, как CBOW
Минусы
- Ограничено размером окна для контекстных слов
- Тренируется медленнее, чем CBOW
- Также не отражает синтаксическое использование слов: слово «рассол» не было бы так похоже на «маринованный».
- Невозможно вставить слова, которые модель еще не видела