Введение

Обработка естественного языка (NLP) — это междисциплинарная область компьютерных наук, искусственного интеллекта и лингвистики, связанная со способностью компьютеров понимать человеческий язык. Word Embeddings – это усовершенствование НЛП, которое резко увеличило способность компьютеров лучше понимать текстовый контент. Это подход к представлению слов и документов в виде числовых векторов, позволяющий похожим словам иметь аналогичные векторные представления. Разве это не имеет большого смысла?… Хорошо, давайте начнем с нуля, чтобы понять, как встраиваются слова!

Фон

Дана контролируемая обучающая задача предсказать, какие твиты о реальных бедствиях, а какие нет (классификация). Здесь независимой переменной будут твиты (текст), а целевой переменной будут двоичные значения (1: реальная катастрофа, 0: не настоящая катастрофа). Теперь алгоритмы машинного обучения и глубокого обучения принимают только числовой ввод. Итак, как нам преобразовать твиты в их числовые значения? Давайте погрузимся глубоко.

Мешок слов (BOW)

Мешок слов — это метод векторизации текста, в котором каждое значение в векторе будет представлять количество слов в документе/предложении.

Давайте возьмем небольшую часть твитов о катастрофах, 4 твита, чтобы понять, как работает BOW:

'добрая правда грустная',

«Клянусь, варенье подожгло мир»,

«Клянусь настоящей автомобильной аварией»,

"машина, к сожалению, машина загорелась"

Для создания BOW мы используем CountVectorizer от Scikit-learn, которыйтокенизирует набор текстовых документов, создает словарь известные слова и кодирует новые документы, используя этот словарь.

Здесь строки представляют каждый документ (в нашем случае 4), столбцы представляют словарь (уникальные слова во всех документах), а значения представляют количество слов в соответствующих строках. Таким же образом мы можем применить CountVectorizer ко всем твитам обучающих данных (11 370 документов) и получить матрицу, которую можно использовать вместе с целевой переменной для обучения модели машинного обучения/глубокого обучения.

Частота термина — обратная частота документа (TF-IDF)

Давайте посмотрим, как делается векторизация в TF-IDF —

Для создания векторов TF-IDF мы используем TfidfVectorizer от Scikit-learn. Применив его к предыдущим 4 примерам твитов, мы получим —

Как и в BOW, строки представляют каждый документ, столбцы представляют словарь, а значения представляют собой tf-idf(i,j), полученные по приведенной выше формуле. Полученную матрицу можно использовать вместе с целевой переменной для обучения модели машинного обучения/глубокого обучения.

Проблемы

Теперь давайте обсудим проблемы с двумя методами векторизации текста, которые мы обсуждали до сих пор. В BOWразмер вектора равен количеству элементов в словаре. Если большинство значений в векторе равны нулю, то мешок слов будет разреженной матрицей. Разреженные представления сложнее моделировать как по вычислительным, так и по информационным причинам. Кроме того, в BOW отсутствуют осмысленные отношения и не учитывается порядок слов. Хотя модель TF-IDF содержит информацию о более важных и менее важных словах, она не решает проблемы высокой размерности, разреженности и, в отличие от BOW, не использует семантическое сходство между слова.

Полный код классификации твитов о стихийных бедствиях с использованием BOW и TF-IDF.

Решение: встраивание слов

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

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

Word2Vec

Метод Word2Vec был разработан Google в 2013 году. Этот метод включает в себя итерацию по корпусу текста для изучения связи между словами. Он основан на гипотезе о том, что соседние слова в тексте имеют семантическое сходство между собой. Он использует метрику косинусное сходство для измерения семантического сходства. Косинусное сходство равно Cos(угол), гдеугол измеряется между векторным представлением двух слов/документов.

Word2Vec имеет два варианта на основе нейронной сети: Continuous Bag of Words (CBOW) и Skip-gram.

  1. CBOW — давайте разберемся с концепцией контекста и текущего слова для CBOW.

В CBOW мы определяем размер окна. Среднее слово — это текущее слово, а окружающие его слова (слова в прошлом и будущем) — это контекст. CBOW использует контекст для предсказания текущих слов. Каждое слово кодируется с помощью One Hot Encoding в определенном словаре и отправляется в нейронную сеть CBOW.

Скрытый слой — это стандартный полносвязный плотный слой. Выходной слой выводит вероятности для целевого слова из словаря.

2. Skip-gram —Skip-gram немного отличается от CBOW, так как использует текущее слово для предсказания контекста.

Конечная цель Word2Vec (оба варианта) — узнать веса скрытого слоя. Скрытые веса, мы будем использовать их в качестве вложений слов!! Давайте теперь посмотрим на код для создания пользовательских вложений слов с помощью Word2Vec-

Импорт библиотек

from gensim.models import Word2Vec
import nltk
import re
from nltk.corpus import stopwords

Предварительно обработайте текст

#Word2Vec inputs a corpus of documents splitted into consituent words
corpus = []
for i in range(0,len(X)):
 tweet = re.sub(“[^a-zA-Z]”,” “,X[i])
 tweet = tweet.lower()
 tweet = tweet.split()
 corpus.append(tweet)

Вот захватывающая часть! Попробуем посмотреть наиболее похожие слова (векторные представления) некоторых случайных слов из твитов -

model.wv.most_similar(‘disaster’)

Выход -

Вектор встраивания «катастрофы» -

GloVe: глобальный вектор для представления слов

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

Рассмотрим два предложения -

Я энтузиаст науки о данных

Ищу работу в области науки о данных

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

Размер окна = 1

Каждое значение в этой матрице представляет количество совпадений с соответствующим словом в строке/столбце. Обратите внимание: эта матрица совпадений создается с использованием глобального подсчета совпадений слов (количество раз, когда слова появлялись последовательно; для размера окна = 1). Если в текстовом корпусе 1 млн уникальных слов, матрица совпадения будет иметь форму 1 млн x 1 млн. Основная идея GloVe заключается в том, что совпадение слов является наиболее важной статистической информацией, доступной модели для «обучения» представлению слов.

Давайте теперь посмотрим на пример из документа Стэнфорда по GloVe, показывающий, как коэффициенты вероятности совпадения работают в GloVe. «Для примера рассмотрим вероятности совпадения целевых слов ice и steam с различными тестовыми словами из словаря. Вот некоторые фактические вероятности из корпуса из 6 миллиардов слов:

Здесь,

Возьмем k = твердое, т. е. слова, относящиеся ко льду, но не относящиеся к пару. Ожидаемое отношение Pik/Pjk будет большим. Точно так же для слов k, которые относятся к пару, но не к льду, скажем, k = газ, отношение будет небольшим. Для слов k, таких как вода или мода, которые относятся либо ко льду, либо к пару, либо ни к тому, ни к другому соответственно, отношение должно быть приблизительно равно единице. Отношение вероятностей способно лучше отличать релевантные слова (твердое и газообразное) от нерелевантных слов (мода и вода), чем необработанная вероятность. Также можно лучше различать два релевантных слова. Следовательно, в GloVe отправной точкой для изучения векторов слов являются отношения вероятностей совпадений, а не сами вероятности. Чтобы понять вывод функции потерь, используемой в этом методе, обратитесь — к статье.

Источник: Визуализация вложений слов GloVe. Король — Мужчина + Женщина = Королева

Хватит теории. Время кода!

Импорт библиотек

import nltk
import re
from nltk.corpus import stopwords
from glove import Corpus, Glove

Предварительная обработка текста

#GloVe inputs a corpus of documents splitted into consituent words
corpus = []
for i in range(0,len(X)):
tweet = re.sub(“[^a-zA-Z]”,” “,X[i])
tweet = tweet.lower()
tweet = tweet.split()
corpus.append(tweet)

Обучение внедрению слова

corpus = Corpus()
corpus.fit(text_corpus,window = 5)
glove = Glove(no_components=100, learning_rate=0.05)
#no_components = dimensionality of word embeddings = 100
glove.fit(corpus.matrix, epochs=100, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)

Найти наиболее похожие –

glove.most_similar(“storm”,number=10)

Выход -

Код для использования предварительно обученных вложений Word2Vec и GloVe.

Заключение

В этом блоге мы обсудили два метода векторизации в НЛП — Bag of Words и TF-IDF, их недостатки и то, как методы встраивания слов, такие как GloVe и Word2Vec, преодолевают свои недостатки за счет уменьшения размерности и подобия контекста. Внедрение слов можно использовать для обучения моделей глубокого обучения, таких как GRU, LSTM, Transformers, которые успешно справляются с задачами НЛП, такими как классификация настроений, распознавание имен, распознавание речи и т. д. Теперь вы знаете, как вложения слов принесли пользу вашим повседневная жизнь тоже.

Счастливого обучения!!

Об авторе -

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

Свяжитесь со мной –

Linkedin: https://www.linkedin.com/in/yash-khandelwal-a40484bb/ Github: https://github.com/YashK07