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

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

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

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

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

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

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

Что такое Word2vec?

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

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

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

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

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

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

Почему 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']

Код Пояснение

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

В подходе со скрытой семантикой строка представляет уникальные слова, тогда как столбец представляет количество раз, когда это слово появляется в документе. Это представление слов в виде матрицы документа. Обратная частота документа Term-Frequency (TFIDF) используется для подсчета частоты слов в документе, которая представляет собой частоту термина в документе/частоту термина во всем корпусе.

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

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

Чтобы преодолеть эти ограничения, было разработано встраивание слов, и 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. 	

Word любит перемещается по каждому слову в корпусе. Синтаксические, а также семантические отношения между словами кодируются. Это помогает в поиске похожих и аналогичных слов.

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

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

Word2vec Archiтекстура

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

  1. Непрерывный мешок слов (CBOW)
  2. Пропустить грамм

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

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

Skip-Gram действует противоположно CBOW, что означает, что он предсказывает заданную последовательность или контекст из слова. Вы можете перевернуть пример, чтобы понять это. Если жi задано, это будет предсказывать контекст или wI-1,wI-2,wя + 1,wя+2.

Word2vec предоставляет возможность выбора между CBOW (непрерывный набор слов) и ским-граммой. Такие параметры предоставляются во время обучения модели. Можно использовать отрицательную выборку или иерархический слой softmax.

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

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

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

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

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

ч=ксиtW

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если нужно выполнить некоторые задачи общего назначения, упомянутые выше, такие как токенизация, маркировка POS и анализ, необходимо использовать 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 с помощью кода

Вывод:

[('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)]

Объяснение кода

  1. Импортирована библиотека nltk, откуда вы можете скачать корпус abc, который мы будем использовать на следующем шаге.
  2. Генсим импортируется. Если 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 — вес узла,

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

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

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

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

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

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

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

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

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

Если говорить в общем смысле, доступны следующие варианты встраивания слов: дифференцированный Softmax, CNN-Softmax, выборка по важности, выборка по адаптивной важности, оценки контрастности шума, отрицательная выборка, самонормализация и нечастая нормализация.

Говоря конкретно о Word2vec, у нас доступна отрицательная выборка.

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

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

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

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

Генсим это набор инструментов для тематического моделирования и обработки естественного языка с открытым исходным кодом, реализованный в Python и Китон. Инструментарий 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)

Объяснение кода:

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

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

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

Объяснение кода:

1. Данные преобразуются в фрейм данных с использованием панд, импортированных выше.

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't']= 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 not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Пояснение к коду:

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

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

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 don’t worry']",payments

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

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

from gensim.models import Word2Vec

Теперь в этом уроке Gensim 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)

Объяснение кода:

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

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

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

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

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

Мин_количество: Он будет игнорировать все слова с общей частотой ниже этой.

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

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

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

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

Сг: Это алгоритм обучения и 1 для пропуска грамм и 0 для непрерывного набора слов. Мы обсудили это подробно выше.

Хс: Если это 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)
# print(df['patterns'])
#print(df['patterns'])
#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 not x 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)
#print(model)

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

Модель можно сохранить в виде ячейки и формы модели. 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)] 

Заключение

  • Word Embedding — это тип представления слов, который позволяет понимать слова со схожим значением с помощью алгоритмов машинного обучения.
  • Встраивание слов используется для вычисления похожих слов, создания группы связанных слов, функции классификации текста, кластеризации документов, обработки естественного языка.
  • Word2vec объяснил: Word2vec — это неглубокая двухуровневая модель нейронной сети для создания встраивания слов для лучшего представления слов.
  • Word2vec представляет слова в векторном пространстве. Слова представлены в виде векторов, а размещение выполнено таким образом, что близкие по смыслу слова появляются вместе, а разнородные слова располагаются на большом расстоянии.
  • Алгоритм Word2vec использует две архитектуры: непрерывный пакет слов (CBOW) и пропуск грамма.
  • CBOW в несколько раз быстрее, чем пропуск грамм, и обеспечивает лучшую частоту для часто встречающихся слов, тогда как пропуск грамм требует небольшого объема обучающих данных и представляет даже редкие слова или фразы.
  • NLTK и Word2vec можно использовать вместе для создания мощных приложений.
  • Функция активации нейрона определяет выходные данные этого нейрона с учетом набора входных данных. В Ворд2век. Softmax Layer (нормализованная экспоненциальная функция) — это функция выходного слоя, которая активирует или запускает каждый узел. В Word2vec также доступна отрицательная выборка.
  • Gensim — это набор инструментов для тематического моделирования, реализованный на Python.