Учебное пособие по встраиванию слов: word2vec с использованием Gensim (ПРИМЕР)

Содержание:

Anonim

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

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

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

В этом руководстве вы узнаете

  • Что такое встраивание слов?
  • Где используется встраивание слов?
  • Что такое word2vec?
  • Что делает word2vec?
  • Почему Word2vec?
  • Word2vec Архитектура
  • Непрерывный мешок слов.
  • Модель Скип-Грама
  • Связь между Word2vec и NLTK
  • Активаторы и Word2Vec
  • Что такое Генсим?
  • Код Реализация word2vec с использованием Gensim

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

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

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

    Теперь у нас есть некоторые знания о встраивании слов. Некоторый свет также проливается на различные модели для реализации встраивания слов. Весь этот урок посвящен одной из моделей (word2vec).

Что такое word2vec?

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

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

Рис.: Мелкое и глубокое обучение

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

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

Что делает word2vec?

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

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

Почему Word2vec?

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

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

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

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

from sklearn.feature_extraction.text import CountVectorizervectorizer=CountVectorizer()data_corpus=["guru99 is the best sitefor online tutorials. I love to visit guru99."]vocabulary=vectorizer.fit(data_corpus)X= vectorizer.transform(data_corpus)print(X.toarray())print(vocabulary.get_feature_names())

Выход:

[[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.

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

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

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

Чтобы преодолеть эти ограничения, было разработано встраивание слов, и word2vec является подходом для его реализации.

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

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

Мы хотим вычислить word2vec для слова: loves.

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

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

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

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

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

Word2vec Архитектура

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

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

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

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

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

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

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

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

Рисунок Непрерывный мешок Word Architecture

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

h = xi t W

где xi t ∧ W - входной вектор и весовая матрица соответственно,

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

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

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

Модель Скип-Грама

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

Рисунок модели Skip-Gram

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

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

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

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

NLTK - это набор инструментов для естественного языка. Используется для предварительной обработки текста. Можно выполнять различные операции, такие как тегирование частей речи, лемматизация, выделение корней, удаление стоп-слов, удаление редких или наименее используемых слов. Это помогает в очистке текста, а также помогает в подготовке функций из эффективных слов. С другой стороны, word2vec используется для семантического (тесно связанные элементы вместе) и синтаксического (последовательность) сопоставления. Используя word2vec, можно найти похожие слова, разные слова, уменьшение размеров и многое другое. Другой важной особенностью word2vec является преобразование представления текста более высокой размерности в векторы более низкой размерности.

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

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

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

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

nltk(nltk.download('all'))

Рисунок Корпорации загружен с помощью NLTK

Смотрите скриншот для кода.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Выход:

[('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 не установлен, установите его с помощью команды «pip3 install gensim». См. Снимок экрана ниже.

Рисунок Установка Gensim с использованием PIP

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

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

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

Рисунок Описание функции активации

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

w1, w2, w3 - вес узла,

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

Зачем нужна функция активации?

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

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

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

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

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

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

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

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

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

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

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

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

Gensim - это набор инструментов для тематического моделирования, реализованный на Python. Тематическое моделирование - это обнаружение скрытой структуры в теле текста. Word2vec импортируется из набора инструментов Gensim. Обратите внимание, что Gensim не только предоставляет реализацию word2vec, но также Doc2vec и FastText, но это руководство полностью посвящено word2vec, поэтому мы будем придерживаться текущей темы.

Реализация word2vec с использованием Gensim

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

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

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

Пожалуйста, обратите внимание на данные, чтобы создать интеллектуального чат-бота.

[{"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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Объяснение КОДА.

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

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

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

Пояснение КОДА

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

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

from nltk.corpus import stopwordsfrom textblob import Wordstop = 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. Из текста удаляются цифры.

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

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

Выход:

, patterns, responses, tag0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful3,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']",hoursopening4,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

Пришло время построить модель с помощью модуля word2vec Gensim. Нам нужно импортировать 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)

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

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

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

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

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

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

Min_count: он будет игнорировать все слова с общей частотой ниже, чем это.

Размер: указывает размерность векторов слов.

Рабочие: это нити для обучения модели.

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

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

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

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

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

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

#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(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 listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = 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 = список (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)]

Вывод

  • Встраивание слов - это тип представления слов, который позволяет алгоритмам машинного обучения понимать слова со схожим значением.
  • Встраивание слов используется для вычисления похожих слов, создания группы связанных слов, функции для классификации текста, кластеризации документов, обработки естественного языка
  • Word2vec - это неглубокая двухуровневая модель нейронной сети для встраивания слов для лучшего представления слов.
  • Word2vec представляет слова в векторном пространственном представлении. Слова представлены в виде векторов, и их размещение выполняется таким образом, что слова с одинаковым значением появляются вместе, а разнородные слова расположены далеко.
  • Word2vec использовал 2 архитектуры Continuous Bag of words (CBOW) и skip gram
  • CBOW в несколько раз быстрее, чем skip gram, и обеспечивает лучшую частоту для частых слов, тогда как skip gram требует небольшого количества обучающих данных и представляет даже редкие слова или фразы.
  • NLTK и word2vec можно использовать вместе для создания мощных приложений.
  • Функция активации нейрона определяет выход этого нейрона при заданном наборе входов. В word2vec. Softmax Layer (нормализованная экспоненциальная функция) - это функция выходного уровня, которая активирует или запускает каждый узел. Word2vec также имеет отрицательную выборку
  • Gensim - это набор инструментов для тематического моделирования, реализованный на Python.