Вбудовування Word і модель Word2Vec із прикладом
Що таке вбудовування Word?
Вбудоване слово це тип представлення слів, який дозволяє алгоритмам машинного навчання розуміти слова зі схожим значенням. Це метод моделювання мови та вивчення функцій для відображення слів у вектори дійсних чисел за допомогою нейронних мереж, імовірнісних моделей або зменшення розмірності на матриці спільного входження слів. Деякі моделі вбудовування слів: Word2vec (Google), Glove (Stanford) і fastest (Facebook).
Вбудовування слів також називають розподіленою семантичною моделлю або розподіленим представленим або семантичним векторним простором або моделлю векторного простору. Коли ви читаєте ці назви, ви натрапляєте на слово семантичний, що означає класифікацію схожих слів разом. Наприклад, такі фрукти, як яблуко, манго, банан, варто розмістити поруч, тоді як книги будуть далеко від цих слів. У ширшому сенсі вбудовування слів створить вектор фруктів, який буде розміщено далеко від векторного представлення книг.
Де використовується Word Embedding?
Вбудовування Word допомагає створювати функції, кластеризувати документи, класифікувати текст і виконувати завдання обробки природної мови. Давайте перерахуємо їх і обговоримо кожну з цих програм.
- Обчисліть схожі слова: Вбудовування слів використовується, щоб запропонувати слова, подібні до слова, яке піддається моделі передбачення. Разом з тим він також пропонує різні слова, а також найбільш уживані слова.
- Створіть групу споріднених слів: Він використовується для семантичного групування, яке об’єднує речі зі схожими характеристиками разом і несхожі далеко.
- Функція класифікації тексту: Текст відображається в масивах векторів, які передаються в модель для навчання та прогнозування. Текстові моделі класифікаторів не можна навчити на рядку, тому це перетворить текст у форму, яку можна навчити машиною. Подальші особливості побудови семантичної допомоги в класифікації на основі тексту.
- Кластеризація документів: це ще одна програма, у якій широко використовується Word Embedding Word2vec
- Обробка природної мови: Є багато додатків, де вбудовування слів є корисним і виграє над фазами виділення функцій, такими як теги частин мови, сентиментальний аналіз і синтаксичний аналіз. Тепер ми маємо деякі знання про вбудовування слів. Також проливається світло на різні моделі реалізації вбудовування слів. Весь цей підручник із вбудовування Word зосереджений на одній із моделей (Word2vec).
Що таке Word2vec?
Word2vec це техніка/модель для вбудовування слів для кращого представлення слів. Це метод обробки природної мови, який фіксує велику кількість точних синтаксичних і семантичних зв’язків слів. Це неглибока двошарова нейронна мережа, яка може виявляти слова-синоніми та пропонувати додаткові слова для часткових речень після навчання.
Перш ніж продовжити цей підручник Word2vec, подивіться різницю між дрібною та глибокою нейронними мережами, як показано на прикладі вбудовування Word нижче:
Неглибока нейронна мережа складається з єдиного прихованого шару між входом і виходом, тоді як глибока нейронна мережа містить кілька прихованих шарів між входом і виходом. Вхід піддається вузлам, тоді як прихований шар, як і вихідний, містить нейрони.
Word2vec — це двошарова мережа, де є вхід, один прихований шар і вихід.
Word2vec був розроблений групою дослідників під керівництвом Томаса Міколова з Google. Word2vec кращий і ефективніший за модель прихованого семантичного аналізу.
Чому Word2vec?
Word2vec представляє слова у векторному просторі. Слова представлені у вигляді векторів, і розміщення здійснюється таким чином, що слова зі схожим значенням з’являються разом, а несхожі слова розташовані далеко. Це також називається семантичним відношенням. Нейронні мережі не розуміють текст, замість цього вони розуміють лише числа. Word Embedding надає спосіб конвертувати текст у числовий вектор.
Word2vec реконструює лінгвістичний контекст слів. Перш ніж йти далі, давайте розберемося, що таке лінгвістичний контекст? У загальному життєвому сценарії, коли ми говоримо або пишемо, щоб порозумітися, інші люди намагаються зрозуміти, що є метою речення. Наприклад, «Яка температура в Індії», тут контекст означає, що користувач хоче знати «температуру в Індії», що є контекстом. Коротше кажучи, основною метою речення є контекст. Слово чи речення, що оточують усну або письмову мову (розкриття), допомагає визначити значення контексту. Word2vec вивчає векторне представлення слів через контексти.
Що робить Word2vec?
Перед вставленням Word
Важливо знати, який підхід використовується до вбудовування слів і які його недоліки, а потім ми перейдемо до теми, як подолати недоліки вбудовування Word за допомогою підходу Word2vec. Нарешті, ми розповімо, як працює Word2vec, тому що важливо розуміти, як він працює.
Підхід до латентного семантичного аналізу
Це підхід, який використовувався до вбудовування слів. Він використовував концепцію Bag of words, де слова представлені у формі закодованих векторів. Це розріджене векторне представлення, де розмірність дорівнює розміру словника. Якщо слово зустрічається в словнику, воно зараховується, інакше ні. Щоб зрозуміти більше, перегляньте наведену нижче програму.
Приклад 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']
Пояснення коду
- CountVectorizer — це модуль, який використовується для зберігання словника на основі підгонки слів у ньому. Це імпортовано з sklearn.
- Створіть об’єкт за допомогою класу CountVectorizer.
- Запишіть дані в список, який потрібно вставити в CountVectorizer.
- Дані вміщуються в об’єкт, створений з класу CountVectorizer.
- Застосуйте підхід до підрахунку слів у даних за допомогою словника. Якщо слово або лексема недоступні в словнику, то така позиція індексу встановлюється на нуль.
- Змінна в рядку 5, яка є x, перетворюється на масив (метод доступний для x). Це забезпечить кількість кожної лексеми в реченні або списку, наданому в рядку 3.
- Це покаже функції, які є частиною словника, якщо його підібрати за допомогою даних у рядку 4.
У підході латентної семантики рядок представляє унікальні слова, тоді як стовпець представляє кількість разів, коли це слово з’являється в документі. Це представлення слів у формі матриці документа. Інверсна частота термінів у документі (TFIDF) використовується для підрахунку частоти слів у документі, тобто частоти терміна в документі/частоти терміна в усьому корпусі.
Недолік методу «Мішок слів».
- Він ігнорує порядок слів, наприклад, це погано = це погано.
- Він ігнорує контекст слів. Припустімо, якщо я напишу речення «Він любив книги. Освіта найкраще в книгах». Це створило б два вектори: один для «Він любив книги», а інший для «Освіту найкраще знайти в книгах». Це вважало б їх обох ортогональними, що робить їх незалежними, але насправді вони пов’язані один з одним
Щоб подолати ці обмеження, було розроблено вбудовування слів, і Word2vec є підходом до його реалізації.
Як працює Word2vec?
Word2vec вивчає слово, передбачаючи його навколишній контекст. Для прикладу візьмемо слово «Він любить Футбол».
Ми хочемо обчислити Word2vec для слова: loves.
Припустимо
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
слово любить переходить до кожного слова в корпусі. Синтаксичні, а також семантичні зв’язки між словами закодовані. Це допомагає знаходити схожі та аналогічні слова.
Усі випадкові ознаки слова любить розраховується. Ці функції змінюються або оновлюються щодо сусідніх або контекстних слів за допомогою a Зворотне поширення метод.
Інший спосіб навчання полягає в тому, що якщо контекст двох слів подібний або два слова мають схожі характеристики, то такі слова є спорідненими.
Word2vec Archiтектура
Word2vec використовує дві архітектури:
- Безперервний мішок слів (CBOW)
- Пропустити грам
Перш ніж продовжити цей підручник Word2vec, давайте обговоримо, чому ці архітектури чи моделі важливі з точки зору представлення слів. Вивчення подання слів по суті відбувається без нагляду, але для навчання моделі потрібні цілі/мітки. Skip-gram і CBOW перетворюють неконтрольоване представлення у контрольовану форму для навчання моделі.
У CBOW поточне слово передбачається за допомогою вікна навколишніх контекстних вікон. Наприклад, якщо wI-1,wI-2,wi + 1,wi + 2задані слова або контекст, ця модель забезпечить wi
Skip-Gram діє протилежно CBOW, що означає, що він передбачає певну послідовність або контекст зі слова. Ви можете перевернути приклад, щоб зрозуміти його. Якщо wi задано, це передбачить контекст або wI-1,wI-2,wi + 1,wi+2.
Word2vec надає можливість вибору між CBOW (continuous Bag of words) і skim-gram. Такі параметри задаються під час навчання моделі. Можна мати варіант використання негативної вибірки або ієрархічного рівня softmax.
Безперервний мішок слів
Давайте намалюємо просту діаграму Word2vec, щоб зрозуміти безперервну архітектуру слів.
Обчислимо рівняння математично. Припустимо, що V — це розмір словника, а N — розмір прихованого шару. Вхід визначається як { xI-1, хi-2, xi+1, xi + 2}. Ми отримуємо вагову матрицю множенням V * N. Іншу матрицю отримуємо множенням вхідного вектора на вагову матрицю. Це також можна зрозуміти за допомогою наступного рівняння.
h=xitW
де xit? W – вхідний вектор і вагова матриця відповідно,
Щоб обчислити відповідність між контекстом і наступним словом, зверніться до наведеного нижче рівняння
u=predictedrepresentation*h
де передбачене представлення отриманої моделі?h у наведеному вище рівнянні.
Модель Skip-Gram
Підхід Skip-Gram використовується для прогнозування речення за вхідним словом. Щоб краще зрозуміти це, давайте намалюємо діаграму, як показано в прикладі Word2vec нижче.
Можна розглядати це як зворотний бік моделі Continuous bag of word, де введенням є слово, а модель забезпечує контекст або послідовність. Ми також можемо зробити висновок, що ціль подається на вхідний рівень, а вихідний рівень повторюється кілька разів для розміщення вибраної кількості контекстних слів. Вектор помилок з усіх вихідних шарів підсумовується для коригування ваг за допомогою методу зворотного поширення.
Яку модель вибрати?
CBOW у декілька разів швидший, ніж skip gram, і забезпечує кращу частоту для частих слів, тоді як skip gram потребує невеликої кількості навчальних даних і представляє навіть рідкісні слова чи фрази.
Зв'язок між Word2vec і NLTK
НЛТК це інструментарій природної мови. Використовується для попередньої обробки тексту. Можна виконувати різні операції, такі як тегування частин мови, лемматизація, формування основи, видалення стоп-слів, видалення рідкісних або найменш вживаних слів. Це допомагає очистити текст, а також допомагає підготувати функції з ефективних слів. З іншого боку, Word2vec використовується для семантичного (тісно пов’язані елементи разом) і синтаксичного (послідовність) відповідності. За допомогою Word2vec можна знайти схожі слова, несхожі слова, розмірне скорочення та багато інших. Ще одна важлива особливість Word2vec полягає в тому, щоб перетворювати більш вимірне представлення тексту в нижчу вимірність векторів.
Де використовувати NLTK і Word2vec?
Якщо вам потрібно виконати деякі завдання загального призначення, як згадано вище, як-от токенізація, тегування POS та синтаксичний аналіз, потрібно використовувати NLTK, тоді як для передбачення слів відповідно до певного контексту, тематичного моделювання або схожості документів потрібно використовувати Word2vec.
Зв'язок NLTK і Word2vec за допомогою коду
NLTK і Word2vec можна використовувати разом для пошуку схожих слів або синтаксичних відповідностей. Набір інструментів NLTK можна використовувати для завантаження багатьох пакетів, які постачаються з NLTK, а модель можна створити за допомогою Word2vec. Потім його можна перевірити на словах у реальному часі. Давайте подивимося комбінацію обох у наступному коді. Перед подальшою обробкою перегляньте корпуси, які надає NLTK. Ви можете завантажити за допомогою команди
nltk(nltk.download('all'))
Перегляньте код на знімку екрана.
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)
вихід:
[('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)]
Пояснення Кодексу
- Імпортується бібліотека nltk, звідки ви можете завантажити корпус abc, який ми використаємо на наступному кроці.
- Gensim імпортний. Якщо Gensim Word2vec не встановлено, встановіть його за допомогою команди «pip3 install gensim». Перегляньте наведений нижче знімок екрана.
- імпортувати корпус abc, який було завантажено за допомогою nltk.download('abc').
- Передайте файли моделі Word2vec, яка імпортується за допомогою Gensim як речення.
- Словниковий запас зберігається у формі змінної.
- Модель тестується на прикладі word science, оскільки ці файли пов’язані з наукою.
- Тут подібне слово «наука» передбачено моделлю.
Активатори та Word2Vec
Функція активації нейрона визначає вихід цього нейрона за набору вхідних даних. Біологічно натхненний діяльністю нашого мозку, де різні нейрони активуються за допомогою різних стимулів. Розглянемо функцію активації за допомогою наступної діаграми.
Тут x1,x2,..x4 — вузол нейронної мережі.
w1, w2, w3 – вага вузла,
? є сумою всіх ваг і значень вузла, які працюють як функція активації.
Чому функція активації?
Якщо функція активації не використовується, вихід буде лінійним, але функціональність лінійної функції обмежена. Щоб досягти складних функцій, таких як виявлення об’єктів, класифікація зображень, введення тексту за допомогою голосу та багато інших нелінійних виходів, потрібні функції активації.
Як обчислюється рівень активації у вбудовуванні слів (Word2vec)
Рівень Softmax (нормализована експоненціальна функція) — це функція вихідного рівня, яка активує або запускає кожен вузол. Інший застосовуваний підхід – ієрархічний softmax, де складність обчислюється за O(log2V), де softmax це O(V), де V — розмір словника. Різниця між ними полягає в зменшенні складності в ієрархічному шарі softmax. Щоб зрозуміти його (Hierarchical softmax) функціональність, перегляньте наведений нижче приклад вбудовування Word:
Припустімо, ми хочемо обчислити ймовірність спостереження слова любов з урахуванням певного контексту. Потік від кореня до кінцевого вузла буде першим переходом до вузла 2, а потім до вузла 5. Отже, якщо у нас був словниковий запас 8, потрібні лише три обчислення. Таким чином, це дозволяє декомпозицію, обчислення ймовірності одного слова (любов).
Які інші варіанти доступні, крім Hierarchical Softmax?
Якщо говорити в загальному сенсі, то доступними варіантами вбудовування слів є Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance sempling, Noise Contrastive Estimations, Negative Sampling, Self-Normalization і рідкісна нормалізація.
Говорячи конкретно про Word2vec, у нас доступна негативна вибірка.
Негативна вибірка – це спосіб вибірки навчальних даних. Це чимось схоже на стохастичний градієнтний спуск, але з деякими відмінностями. Негативна вибірка шукає лише негативні навчальні приклади. Він заснований на оцінці шумового контрасту та випадково відбирає слова, а не в контексті. Це швидкий метод навчання, який вибирає контекст випадковим чином. Якщо передбачене слово з’являється у випадково вибраному контексті, обидва вектори є близькими один до одного.
Який висновок можна зробити?
Активатори запускають нейрони так само, як наші нейрони запускаються за допомогою зовнішніх подразників. Рівень Softmax є однією з функцій шару виведення, яка запускає нейрони у випадку вбудовування слів. У Word2vec є такі параметри, як ієрархічний softmax і негативна вибірка. Використовуючи активатори, можна перетворити лінійну функцію в нелінійну, і за допомогою них можна реалізувати складний алгоритм машинного навчання.
Що таке Gensim?
Gensim це набір інструментів для тематичного моделювання та обробки природної мови з відкритим кодом, реалізований у 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)
Пояснення коду:
- Оскільки дані мають формат json, тому json імпортується
- Файл зберігається у змінній
- Файл відкритий і завантажений у змінну даних
Тепер дані імпортовано, і настав час конвертувати дані у кадр даних. Перегляньте наведений нижче код, щоб побачити наступний крок
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. Створено bigger_list, до якого додається внутрішній список. Це формат, який подається в модель Word2Vec.
2. Реалізується цикл, і кожен запис стовпця шаблонів кадру даних повторюється.
3. Кожен елемент шаблонів стовпців розбивається та зберігається у внутрішньому списку li
4. Внутрішній список додається до зовнішнього списку.
5. Цей список надається моделі Word2Vec. Давайте розберемося з деякими з наведених тут параметрів
Min_count: Він ігноруватиме всі слова із загальною частотою, нижчою за цю.
Розмір: Він говорить про розмірність векторів слів.
Робітники: Це нитки для навчання моделі
Існують також інші доступні параметри, і деякі важливі пояснюються нижче
Вікно: Максимальна відстань між поточним і прогнозованим словом у реченні.
Sg: Це тренувальний алгоритм і 1 для skip-gram і 0 для Continuous bag of words. Ми детально обговорили це вище.
Hs: Якщо це 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 використовує 2 архітектури Continuous Bag of words (CBOW) і skip gram
- CBOW у декілька разів швидший, ніж skip gram, і забезпечує кращу частоту для частих слів, тоді як skip gram потребує невеликої кількості навчальних даних і представляє навіть рідкісні слова чи фрази.
- NLTK і Word2vec можна використовувати разом для створення потужних програм
- Функція активації нейрона визначає вихід цього нейрона за набору вхідних даних. У Word2vec. Рівень Softmax (нормализована експоненціальна функція) — це функція вихідного рівня, яка активує або запускає кожен вузол. У Word2vec також доступна негативна вибірка
- Gensim — це набір інструментів для моделювання тем, реалізований на Python