Предиктивное встраивание

Модели предиктивного встраивания представляют собой неглубокие нейронные сети, обученные предсказывать целевое слово/слова из слова/слов окружающего контекста для создания векторного встраивания целевого объекта. Вложения слов, полученные из этих типов моделей, надежны для таких задач, как текстовое сходство и аналогии, поскольку векторы слов, имеющих одинаковое значение, близки друг к другу в n-мерном пространстве. Модели также способны выполнять «волшебную» задачу, т. е. векторную алгебру слов.
Пример: Королева = Король — мужчина + женщина

В этом блоге мы рассмотрим три известные модели предиктивного встраивания:
1. Word2Vec
2. GloVe
3. fastText

◈ Word2Vec

Word2Vec генерирует векторное представление слова, которое включает в себя его семантическую и синтаксическую информацию. Вектор обычно имеет несколько сотен измерений, и каждому уникальному слову в корпусе назначается вектор в пространстве. Word2Vec разработан Google на основе набора данных Google News со словарем в 3 миллиона слов. Можно использовать эту предварительно обученную модель из библиотеки gensim, соответствующим образом настроить модель или обучить отдельную модель Word2Vec на желаемом соответствующем наборе данных.
Ограничения:
1. Он не может фиксировать значение слова из текст (не улавливает полисемию).
2. Он не может фиксировать слова, не входящие в словарь.

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

Архитектуры моделей

⟡ CBOW и Skip-Gram

CBOW (непрерывный пакет слов) пытается предсказать вывод (целевое слово) из соседних с ним слов (слов контекста). Он в несколько раз быстрее обучается, чем скип-грамм, и немного более точен для часто используемых слов, тогда как скип-грамм угадывает контекстные слова из целевого слова. Skip-gram — это один из методов обучения без присмотра, используемый для поиска наиболее связанных слов для данного слова. Он хорошо работает с небольшим объемом обучающих данных, хорошо отображает даже редкие слова или фразы. Как правило, Skip-Gram предпочтительнее CBOW, поскольку он показал лучшие результаты в задачах, связанных с аналогиями. Также утверждается, что предварительно обученная модель Word2vec от Google основана на архитектуре Skip-Gram.

Алгоритмы обучения

⟡ Иерархический софтмакс

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

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

Code example
# import gensim and pretrained data into model
import gensim
model = gensim.models.KeyedVectors.load_word2vec_format('/path/GoogleNews-vectors-negative300.bin', binary=True)
# to find the size of vocabulary
word_vectors = model.wv
print("Total length of vocab:",len(word_vectors.vocab))
-> Total length of vocab: 3000000
# to find size of single vector
vector = model.wv["converge"]  # numpy vector of a word
print("Length of single vector:",len(vector))
-> Length of single vector: 300
# to find cosine similarity between two words
model.similarity('king','queen')
-> 0.58228538
# to find most similar words to a particular word
model.most_similar('man')[:5]
-> [('woman', 0.7664012908935547),  ('boy', 0.6824870109558105),  ('teenager', 0.6586930155754089),  ('teenage_girl', 0.6147903800010681),  ('girl', 0.5921714305877686)]
# to find a uncommon word from a given list of words
word_list=["government","corruption","peace"]
print("Uncommon word is:",model.wv.doesnt_match(word_list))
-> Uncommon word is: peace

◈ перчатка

GloVe — это сокращение от «Global Vectors». Он был мотивирован идеей о том, что методы на основе контекстных окон страдают недостатком, заключающимся в том, что они не извлекают уроки из глобальной статистики корпуса. Основная идея модели GloVe состоит в том, чтобы сосредоточиться на вероятностях совместного появления слов в корпусе текстов, чтобы встроить их в значимые векторы. Другими словами, GloVe оценивает, как часто слово jпоявляется в контексте слова i во всех корпус текстов. Целью обучения GloVe является изучение векторов слов, скалярное произведение которых равно логарифму вероятности совпадения слов. Обучение выполняется на агрегированной глобальной статистике совпадения слов из корпуса, и полученные представления демонстрируют интересные линейные подструктуры векторного пространства слов.

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

GloVe разработан Stanford NLP и имеет три предварительно обученные модели, обученные на отдельных наборах данных,
Wikipedia: Tokens — 6B, Word vocab — 400K
Common Crawl: токены – 84 млрд, словарный запас – 2,2 млн
Twitter: токены – 27 млрд, словарный запас – 1,2 млн

◈ быстрый текст

FastText — это бесплатная легкая библиотека с открытым исходным кодом, которая позволяет пользователям изучать текстовые представления и текстовые классификаторы, разработанные Facebook. Он позволяет обучать представления слов и предложений с учителем и без учителя.
FastText поддерживает обучение моделей непрерывного набора слов (CBOW) или Skip-gram с использованием отрицательной выборки, softmax или иерархических функций потери softmax. FastText может добиться действительно хорошей производительности для представления слов и классификации предложений, особенно в случае редких слов, используя информацию на уровне символов. Каждое слово представлено набором n-грамм символов в дополнение к самому слову.
Хотя обучение для fastText является многопоточным, чтение данных выполняется в одном потоке. Анализ и токенизация выполняются при чтении входных данных.

Преимущества над Word2Vec:
1) Полезно найти векторное представление для редких слов. Так как редкие слова все еще могут быть разбиты на n-граммы символов.
2) Он может дать векторные представления для слов, отсутствующих в словаре (слова OOV), поскольку они также могут быть разбиты на n-граммы символов. И word2vec, и glove не могут обеспечить векторное представление слов, отсутствующих в словаре.
3) встраивание символьных n-грамм, как правило, работает лучше, чем word2vec и glove, на меньших наборах данных.

Недостатки Word2Vec:
1) Это не отдельная библиотека для НЛП, поскольку для этапов предварительной обработки потребуется другая библиотека.
2) Тем не менее, эта библиотека имеет реализация питона. Официально не поддерживается.

Code Example
from gensim.models.wrappers import FastText
# help and all commands
help(fasttext.FastText)
#load model
model = FastText.load_fasttext_format('wiki.simple')
#most similar words to a given word
print(model.most_similar('teacher'))
-> Output = [('headteacher', 0.8075869083404541), ('schoolteacher', 0.7955552339553833), ('teachers', 0.733420729637146), ('teaches', 0.6839243173599243), ('meacher', 0.6825737357139587), ('teach', 0.6285147070884705), ('taught', 0.6244685649871826), ('teaching', 0.6199781894683838), ('schoolmaster', 0.6037642955780029), ('lessons', 0.5812176465988159)]
#similarity between two words
print(model.similarity('teacher', 'teaches'))
->Output = 0.683924396754
#train using your own dataset(cooking_dataset)
model = fasttext.train_supervised(input="cooking.train")
#task
model.predict("Why not put knives in the dishwasher?")
-> (('__label__food-safety',), array([0.07458788]))

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