Встраивание слов и Word2Vec с примером

⚡ Умное резюме

Методы Word Embedding и Word2Vec преобразуют текст в плотные числовые векторы, позволяя моделям машинного обучения распознавать слова со схожим значением. В этом ресурсе объясняется данная техника, ее архитектуры CBOW и Skip-Gram, функции активации и представлена ​​полная реализация в Gensim для реальных приложений.

  • 🔢 Основное определение: Встраивание слов преобразует словарь в вещественные векторы, размещая семантически похожие слова близко друг к другу в векторном пространстве.
  • ???? Модели Word2Vec: Метод Continuous Bag of Words предсказывает слово на основе его контекста, тогда как метод Skip-Gram предсказывает окружающий контекст на основе одного слова.
  • ⚙️ Механика обучения: Методы Softmax, hierarchical softmax и negative sampling эффективно активируют нейроны и оптимизируют обучение в больших словарях.
  • 🔗 Интеграция с NLTK: NLTK выполняет предварительную обработку, такую ​​как токенизация и лемматизация, а Word2Vec фиксирует семантические и синтаксические связи.
  • 🇧🇷 Реализация Gensim: Библиотека Gensim создает, сохраняет и перезагружает модель Word2Vec для вычисления сходства слов на реальных данных.

Встраивание слов и модель Word2Vec

Что такое встраивание слов?

Вложение слов Это тип представления слов, позволяющий алгоритмам машинного обучения понимать слова со схожим значением. Это метод языкового моделирования и обучения признакам, позволяющий отображать слова в векторы действительных чисел с использованием нейронных сетей, вероятностных моделей или уменьшения размерности матрицы совместной встречаемости слов. Некоторые модели векторного представления слов — это Word2vec (Google), GloVe (Стэнфорд) и fastText (Facebook).

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

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

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

  • Вычислите похожие слова: Векторные представления слов используются для того, чтобы предлагать похожие слова на слово, которое обрабатывается моделью прогнозирования. Наряду с этим, они также предлагают непохожие слова, а также наиболее часто встречающиеся слова.
  • Создайте группу родственных слов: Он используется для семантической группировки.ping, которая группирует предметы со схожими характеристиками вместе и отодвигает далеко друг от друга несхожие предметы.
  • Функция классификации текста: Текст преобразуется в массивы векторов, которые подаются на вход модели для обучения и прогнозирования. Модели классификации на основе текста не могут быть обучены на строках, поэтому данная модель преобразует текст в форму, пригодную для машинного обучения. Ее семантические функции дополнительно помогают в классификации на основе текста.
  • Кластеризация документов: Это еще одно приложение, где широко используются технологии Word Embedding и Word2vec.
  • Обработка естественного языка: Существует множество приложений, где векторное представление слов полезно и превосходит по функциональности использование функций.tracэтапы, такие как определение частей речи, анализ настроения и синтаксический анализ.

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

Что такое Word2vec?

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

Прежде чем продолжить, ознакомьтесь с разницей между неглубокой и глубокой нейронной сетью, как показано на приведенной ниже диаграмме с примером векторного представления слов:

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

Мелкое и глубокое обучение
Мелкое и глубокое обучение

Word2vec — это двухслойная нейронная сеть, имеющая входной слой, скрытый слой и выходной слой.

Word2vec был разработан группой исследователей под руководством Томаша Миколова. GoogleWord2vec лучше и эффективнее, чем модель латентного семантического анализа.

Почему Word2vec?

Word2vec представляет слова в векторном пространстве. Слова представляются в виде векторов, а их размещение осуществляется таким образом, что слова со схожим значением располагаются рядом, а слова с разным значением — далеко друг от друга. Это также называется семантической связью. Нейронные сети не понимают текст; вместо этого они понимают только числа. Word Embedding предоставляет способ преобразования текста в числовой вектор.

Word2vec восстанавливает лингвистический контекст слов. Прежде чем продолжить, давайте разберемся, что такое лингвистический контекст. В общем случае, когда мы говорим или пишем, другие люди пытаются понять цель предложения. Например: «Какова температура в Индии?» В данном случае контекст таков: пользователь хочет узнать «температуру в Индии». Короче говоря, главная цель предложения — это контекст. Слова или предложения, окружающие устную или письменную речь, помогают определить значение контекста. Word2vec обучается векторному представлению слов на основе этих контекстов.

Что делает Word2vec?

Перед встраиванием слов

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

Подход к латентно-семантическому анализу

Это подход, который использовался до появления векторных представлений слов. Он основывался на концепции «мешка слов», где слова представляются в виде закодированных векторов. Это разреженное векторное представление, размерность которого равна размеру словаря. Если слово встречается в словаре, оно учитывается; в противном случае — нет. Для более подробного понимания, пожалуйста, ознакомьтесь с программой ниже.

Пример Word2vec

Пример Word2vec

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

Выход:

[[1 2 1 1 1 1 1 1 1 1]]
[u'best', u'guru99', u'is', u'love', u'online', u'sitefor', u'the', u'to', u'tutorials', u'visit']

Code объяснение

  1. CountVectorizer — это модуль, используемый для хранения словаря на основе соответствия слов его размерам. Он импортируется из библиотеки sklearn.
  2. Создайте объект, используя класс CountVectorizer.
  3. Запишите данные в список, который будет использован в функции CountVectorizer.
  4. Данные помещаются в объект, созданный из класса CountVectorizer.
  5. Для подсчета слов в данных с использованием словаря применяется подход «мешок слов». Если слово или токен отсутствуют в словаре, то соответствующая позиция индекса устанавливается равной нулю.
  6. Переменная в строке 5, которая равна x, преобразуется в массив (метод, доступный для x). Это позволяет получить количество каждого токена в предложении или списке, предоставленном в строке 3.
  7. Здесь показаны признаки, входящие в состав словаря при его построении с использованием данных из строки 4.

В латентно-семантическом подходе строка представляет уникальные слова, а столбец — количество появлений этого слова в документе. Это представление слов в виде матрицы документа. Для подсчета частоты слов в документе используется метод частоты терминов — обратной частоты документов (TF-IDF), который рассчитывается как частота термина в документе, деленная на частоту термина во всем корпусе.

Недостаток метода «Мешок слов»

  • Оно игнорирует порядок слов; например, это плохо = плохо в этом.
  • Этот подход игнорирует контекст слов. Допустим, мы напишем предложение «Он любил книги. Образование лучше всего получают из книг». Это создаст два вектора: один для «Он любил книги», а другой для «Образование лучше всего получают из книг». Оба вектора будут рассматриваться как ортогональные, что делает их независимыми, но в действительности они связаны друг с другом.

Для преодоления этих ограничений была разработана технология векторного представления слов, и Word2vec — один из подходов, используемых для её реализации.

Как работает Word2vec?

Word2vec обучается на слове, предсказывая его контекст. Например, возьмем слово «Он». любит Футбол."

Мы хотим вычислить Word2vec для слова: любит.

Предполагать:

loves = Vin. P(Vout / Vin) is calculated
where,
Vin is the input word.
P is the probability of likelihood.
Vout is the output word.

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

Все случайные особенности слова любит рассчитываются. Эти характеристики изменяются или обновляются относительно соседних или контекстных слов с помощью Обратное распространение метод.

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

Word2vec Archiтекстура

Word2vec использует две архитектуры:

  1. Непрерывный мешок слов (CBOW)
  2. Скип-грамм

Прежде чем продолжить, давайте обсудим, почему эти архитектуры или модели важны с точки зрения представления слов. Обучение представлению слов по сути является неконтролируемым, но для обучения модели необходимы целевые значения/метки. Skip-gram и CBOW преобразуют неконтролируемое представление в контролируемую форму для обучения модели.

В CBOW текущее слово прогнозируется с использованием окна окружающих контекстных окон. Например, если шI-1, шI-2, шя + 1, шя + 2 заданы слова или контекст, эта модель предоставит wi.

Skip-Gram работает в обратном режиме по сравнению с CBOW, то есть предсказывает заданную последовательность или контекст на основе слова. Для лучшего понимания можно перевернуть пример.i Если задана информация, это позволит предсказать контекст, или...I-1, шI-2, шя + 1, шя + 2.

Word2vec предоставляет возможность выбора между CBOW (Continuous Bag of Words) и skip-gram. Эти параметры задаются во время обучения модели. Можно также использовать отрицательную выборку или иерархический слой softmax.

Непрерывный мешок слов

Давайте нарисуем простую диаграмму Word2vec, чтобы понять архитектуру непрерывного мешка слов.

Непрерывный мешок слов Archiтекстура

Непрерывный мешок слов Archiтекстура

Рассчитаем уравнения математически. Предположим, что V — размер словаря, а N — размер скрытого слоя. Вход определяется как { xI-1, ИксI-2, Икся + 1, Икся + 2 }. Мы получаем матрицу весов, умножая V * N. Другая матрица получается путем умножения входного вектора на матрицу весов. Это также можно понять из следующего уравнения.

h = xitW

где xit W и W — это, соответственно, входной вектор и матрица весов.

Для расчета соответствия между контекстом и следующим словом, пожалуйста, воспользуйтесь приведенной ниже формулой.

u = предсказанное представление * h

где предсказанное представление получено из модели в приведенном выше уравнении.

Модель пропуска грамма

Метод Skip-Gram используется для предсказания предложения по заданному слову. Для лучшего понимания давайте нарисуем диаграмму, показанную в приведенном ниже примере Word2vec.

Модель пропуска грамма

Модель пропуска грамма

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

Какую модель выбрать?

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

Аспект CBOW Пропустить-грамм
Прогноз Предсказывает целевое слово на основе контекста. Предсказывает контекст на основе целевого слова
Скорость обучения Быстрее Помедленнее
Частые слова Более высокая точность Низкая точность
Редкие слова Более слабое представление Более сильное представительство
Тренировочные данные Требуется больше данных Работает с меньшим объемом данных

Связь между Word2vec и NLTK

НЛТК это природный Language ToolЭтот инструмент используется для предварительной обработки текста. С его помощью можно выполнять различные операции, такие как определение частей речи, лемматизация, стемминг, удаление стоп-слов и удаление редких или наименее используемых слов. Он помогает очистить текст, а также подготовить признаки из эффективных слов. С другой стороны, Word2vec используется для семантического (совместного поиска тесно связанных элементов) и синтаксического (последовательности) сопоставления. С помощью Word2vec можно находить похожие слова, непохожие слова, уменьшать размерность и многое другое. Еще одна важная особенность Word2vec — преобразование многомерного представления текста в векторы меньшей размерности.

Где использовать NLTK и Word2vec?

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

Связь NLTK и Word2vec с помощью кода

NLTK и Word2vec можно использовать вместе для поиска похожих представлений слов или синтаксического соответствия. Инструментарий NLTK позволяет загружать множество пакетов, входящих в состав NLTK, а модель можно создать с помощью Word2vec. Затем её можно протестировать на словах в реальном времени. Давайте рассмотрим комбинацию обоих инструментов в следующем коде. Прежде чем продолжить, ознакомьтесь с корпусами, которые предоставляет NLTK. Вы можете загрузить их с помощью команды:

nltk(nltk.download('all'))

Связь NLTK и Word2vec

Corpora загружена с помощью NLTK

Пожалуйста, смотрите скриншот с кодом.

import nltk
import gensim
from nltk.corpus import abc

model = gensim.models.Word2Vec(abc.sents())
X = list(model.wv.vocab)
data = model.most_similar('science')
print(data)

Взаимосвязь NLTK и Word2vec с помощью Code

Выход:

[('law', 0.9415997266769409), ('practice', 0.9276568293571472), ('discussion', 0.9259148836135864), ('agriculture', 0.9257254004478455), ('media', 0.9232194423675537), ('policy', 0.922248125076294), ('general', 0.9166069030761719), ('undertaking', 0.916458249092102), ('tight', 0.9129181504249573), ('board', 0.9107444286346436)]

Объяснение Code

  1. Библиотека nltk импортируется, оттуда вы можете загрузить корпус abc, который мы будем использовать на следующем шаге.
  2. Gensim импортирован. Если Gensim Word2vec не установлен, установите его с помощью команды «pip3 install gensim». См. скриншот ниже.
Установка Gensim с помощью PIP

Установка Gensim с помощью PIP
  1. Импортируйте корпус abc, который был загружен с помощью nltk.download('abc').
  2. Передайте файлы в модель Word2vec, которая импортируется с помощью Gensim, в виде предложений.
  3. Словарь хранится в виде переменной.
  4. Модель тестируется на примере слова. наука, поскольку эти файлы связаны с наукой.
  5. Здесь модель предсказывает наличие в тексте слова, похожего на «наука».

Активаторы и Word2Vec

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

Функция активации в Word2vec

Понимание функции активации

Здесь x1, x2, … x4 — узлы нейронной сети.

w1, w2, w3 — это веса узлов.

Сумма (Σ) всех весов и значений узлов выступает в качестве функции активации.

Почему функция активации?

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

Как вычисляется уровень активации при встраивании слов (Word2vec)

Слой Softmax (нормализованная экспоненциальная функция) — это функция выходного слоя, которая активирует или запускает каждый узел. Другой используемый подход — иерархический Softmax, сложность которого составляет O(log).2В случае иерархической функции softmax сложность составляет O(V), тогда как в softmax она равна O(V), где V — размер словаря. Разница между ними заключается в уменьшении сложности в слое softmax. Чтобы понять его функциональность, пожалуйста, посмотрите на приведенный ниже пример векторного представления слов:

Иерархическая древовидная структура Softmax

Иерархическая древовидная структура softmax

Предположим, мы хотим вычислить вероятность наблюдения слова любят При заданном контексте поток от корня к листовому узлу сначала переместится к узлу 2, а затем к узлу 5. Таким образом, если размер словаря равен 8, потребуется всего три вычисления. Это позволяет разложить вычисление вероятности одного слова на составляющие (любят).

Какие еще варианты доступны, кроме иерархического Softmax?

В общем смысле, доступны следующие варианты векторного представления слов: Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance Sampling, Noise Contrastive Estimation, Negative Sampling, Self-Normalization и Infrequent Normalization.

Если говорить конкретно о Word2vec, у нас есть возможность использовать отрицательную выборку.

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

Какой вывод можно сделать?

Активаторы активируют нейроны точно так же, как наши нейроны активируются при воздействии внешних стимулов. Слой Softmax — это одна из функций выходного слоя, которая активирует нейроны в случае векторных представлений слов. В Word2vec у нас есть такие опции, как иерархический Softmax и отрицательная выборка. Используя активаторы, можно преобразовать линейную функцию в нелинейную, и с помощью таких функций можно реализовать сложный алгоритм машинного обучения.

Что такое Генсим?

Генсим это набор инструментов для тематического моделирования и обработки естественного языка с открытым исходным кодом, реализованный в Python и Cython. Инструментарий Gensim позволяет пользователям импортировать Word2vec для тематического моделирования с целью обнаружения скрытой структуры в тексте. Gensim предоставляет не только реализацию Word2vec, но и Doc2vec и FastText.

Этот раздел посвящен Word2vec, поэтому мы будем придерживаться текущей темы.

Как реализовать Word2vec с помощью Gensim

До настоящего момента мы обсуждали, что такое Word2vec, его различные архитектуры, причины перехода от «мешка слов» к Word2vec, связь между Word2vec и NLTK с работающим кодом, а также функции активации.

Ниже представлен пошаговый метод реализации Word2vec с использованием Gensim:

Шаг 1) Сбор данных

Первым шагом при внедрении любой модели машинного обучения или обработке естественного языка является сбор данных.

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

[{"tag": "welcome",
"patterns": ["Hi", "How are you", "Is any one to talk?", "Hello", "hi are you available"],
"responses": ["Hello, thanks for contacting us", "Good to see you here", "Hi there, how may I assist you?"]
        },
{"tag": "goodbye",
"patterns": ["Bye", "See you later", "Goodbye", "I will come back soon"],
"responses": ["See you later, thanks for visiting", "have a great day ahead", "Wish you Come back again soon."]
        },
{"tag": "thankful",
"patterns": ["Thanks for helping me", "Thank your guidance", "That's helpful and kind from you"],
"responses": ["Happy to help!", "Any time!", "My pleasure", "It is my duty to help you"]
        },
        {"tag": "hoursopening",
"patterns": ["What hours are you open?", "Tell your opening time?", "When are you open?", "Just your timing please"],
"responses": ["We're open every day 8am-7pm", "Our office hours are 8am-7pm every day", "We open office at 8 am and close at 7 pm"]
        },
{"tag": "payments",
"patterns": ["Can I pay using credit card?", "Can I pay using Mastercard?", "Can I pay using cash only?"],
"responses": ["We accept VISA, Mastercard and credit card", "We accept credit card, debit cards and cash. Please don't worry"]
        }
   ]

Вот что мы поняли из этих данных:

  • Эти данные содержат три элемента: тег, шаблон и ответы. Тег отражает намерение (тема обсуждения).
  • Данные находятся в формате JSON.
  • Шаблон — это вопрос, который пользователи задают боту.
  • Ответы — это ответы, которые чат-бот предоставит на соответствующий вопрос/шаблон.

Шаг 2) Предварительная обработка данных

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

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

import json
json_file = 'intents.json'
with open('intents.json', 'r') as f:
    data = json.load(f)

Объяснение Code:

  1. Поскольку данные представлены в формате JSON, импортируется JSON-файл.
  2. Файл сохраняется в переменной.
  3. Файл открывается и загружается в переменную данных.

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

import pandas as pd
df = pd.DataFrame(data)
df['patterns'] = df['patterns'].apply(', '.join)

Объяснение Code:

1. Данные преобразуются в DataFrame с помощью библиотеки pandas, которая была импортирована выше.

2. Он преобразует список в шаблонах столбцов в строку.

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns'] = df['patterns'].str.replace('[^\w\s]', '')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Code Объяснение:

1. Английские стоп-слова импортируются с помощью модуля stop-word из набора инструментов nltk.

2. Все слова текста преобразуются в нижний регистр с помощью условия цикла for и лямбда-функции. Лямбда-функция является анонимной функцией.

3. Все строки текста в таблице данных проверяются на наличие знаков препинания, после чего они отфильтровываются.

4. Символы, такие как цифры или точки, удаляются с помощью регулярного выражения.

5. Digits удалены из текста.

6. На этом этапе стоп-слова удаляются.

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

Выход:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please dont worry']",payments

Шаг 3) Построение нейронной сети с использованием Word2vec

Теперь пришло время создать модель с помощью модуля Gensim Word2vec. Нам нужно импортировать Word2vec из Gensim. Сделаем это, затем построим модель и на заключительном этапе проверим её на данных в реальном времени.

from gensim.models import Word2Vec

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

Bigger_list = []
for i in df['patterns']:
     li = list(i.split(""))
     Bigger_list.append(li)
Model = Word2Vec(Bigger_list, min_count=1, size=300, workers=4)

Объяснение Code:

1. Создан объект bigger_list, в который добавляется внутренний список. Это формат, который передается в модель Word2Vec.

2. Реализован цикл, и выполняется итерация по каждой записи в столбце шаблонов фрейма данных.

3. Каждый элемент шаблонов столбцов разделяется и сохраняется во внутреннем списке li.

4. Внутренний список дополняется внешним списком.

5. Этот список предоставляется модели Word2Vec. Давайте разберемся с некоторыми из предоставляемых здесь параметров.

Мин_количество: Он игнорирует все слова с суммарной частотой ниже этого значения.

Размер: Он сообщает размерность векторов слов.

Рабочие: Это потоки, необходимые для обучения модели.

Существуют и другие варианты, некоторые из которых описаны ниже.

окно: Максимальное расстояние между текущим и предсказанным словом в предложении.

Сг: Это алгоритм обучения: 1 для skip-gram и 0 для Continuous Bag of Words. Мы подробно обсудили это выше.

Хс: Если значение равно 1, то для обучения используется иерархическая функция softmax, а если 0, то используется отрицательная выборка.

Альфа: Начальная скорость обучения.

Давайте отобразим окончательный код ниже:

# list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
# data in json format
json_file = 'intents.json'
with open('intents.json', 'r') as f:
    data = json.load(f)
# displaying the list of stopwords
stop = stopwords.words('english')
# dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x.lower() for x in x.split()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns'] = df['patterns'].str.replace('[^\w\s]', '')
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
# taking the outer list
bigger_list = []
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
# structure of data to be taken by the model.word2vec
print("Data format for the overall list:", bigger_list)
# custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1, size=300, workers=4)

Шаг 4) Сохранение модели

Модель можно сохранить в формате bin и в виде файла модели. Bin — это бинарный формат. Для сохранения модели воспользуйтесь приведенными ниже строками кода.

model.save("word2vec.model")
model.save("model.bin")

Объяснение приведенного выше кода

1. Модель сохраняется в виде файла с расширением .model.

2. Модель сохраняется в виде файла с расширением .bin.

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

Шаг 5) Загрузка модели и выполнение тестирования в реальном времени.

Модель загружается с помощью приведенного ниже кода:

model = Word2Vec.load('model.bin')

Чтобы распечатать словарь, используйте следующую команду:

vocab = list(model.wv.vocab)

Пожалуйста, посмотрите результат:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

Шаг 6) Проверка наиболее похожих слов

Давайте реализуем это на практике:

similar_words = model.most_similar('thanks')
print(similar_words)

Пожалуйста, посмотрите результат:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

Шаг 7) Не соответствует слову из предоставленных слов.

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

Мы предоставили слова «До скорого, спасибо за визит!»Этот код выводит наиболее непохожее слово из предложенных. Давайте запустим его и посмотрим результат.

Результат после выполнения приведенного выше кода:

Thanks

Шаг 8) Найдите сходство между двумя словами

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

similarity_two_words = model.similarity('please', 'see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

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

0.13706

Вы также можете найти похожие слова, выполнив приведенный ниже код:

similar = model.similar_by_word('kind')
print(similar)

Вывод приведенного выше кода:

[('credit', 0.11764447391033173), ('cash', 0.11440904438495636), ('one', 0.11151769757270813), ('hour', 0.0944807156920433), ('using', 0.0705675333738327), ('thats', 0.05206916481256485), ('later', 0.04502468928694725), ('bye', 0.03960943967103958), ('back', 0.03837274760007858), ('thank', 0.0380823090672493)]

Часто задаваемые вопросы (FAQ)

Word2Vec генерирует один фиксированный вектор для каждого слова. Современные модели ИИ, такие как BERT и GPT, создают контекстные эмбеддинги, то есть одно и то же слово получает разные векторы в зависимости от окружающего предложения, что позволяет более точно передать его смысл.

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

Нет. Word2Vec — это неглубокая нейронная сеть с одним скрытым слоем. Хотя она и вдохновлена ​​нейронными сетями, она не считается глубоким обучением, которое требует наличия нескольких скрытых слоев между входом и выходом.

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

Нет. Word2Vec не может обрабатывать слова, отсутствующие в словаре, поскольку он обучается одному вектору для каждого известного слова. Такие модели, как FastText, решают эту проблему, создавая векторные представления слов из n-грамм символов, что позволяет представлять ранее не встречавшиеся слова.

Подведем итог этой публикации следующим образом: