Введение
Обработка естественного языка (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.
- 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