Що таке вбудовування слів?
Вбудовування слів - це тип подання слів, що дозволяє зрозуміти слова з подібним значенням за допомогою алгоритмів машинного навчання. Технічно кажучи, це відображення слів у вектори дійсних чисел за допомогою нейронної мережі, імовірнісної моделі або зменшення розмірності на матриці спільного виникнення слів. Це моделювання мови та техніка навчання особливостей. Вбудовування слів - це спосіб виконання зіставлення за допомогою нейронної мережі. Доступні різні моделі вбудовування слів, такі як word2vec (Google), Glove (Stanford) та найшвидший (Facebook).
Вбудовування слова також називається розподіленою семантичною моделлю або розподіленим представленим або семантичним векторним простором або векторною просторовою моделлю. Читаючи ці імена, ви стикаєтесь із словом семантичний, що означає спільну класифікацію подібних слів. Наприклад, фрукти, такі як яблуко, манго, банан, слід розміщувати близько, тоді як книги будуть далеко від цих слів. У більш широкому розумінні вбудовування слів створить вектор плодів, який буде розміщений далеко від векторного подання книг.
У цьому підручнику ви дізнаєтесь
- Що таке вбудовування слів?
- Де використовується вбудовування Word?
- Що таке word2vec?
- Яке слово2vec робить?
- Чому Word2vec?
- Архітектура Word2vec
- Суцільний мішок слів.
- Модель Skip-Gram
- Співвідношення між Word2vec та NLTK
- Активатори та Word2Vec
- Що таке Генсім?
- Код Реалізація word2vec за допомогою Gensim
Де використовується вбудовування Word?
Вбудоване слово допомагає у створенні функцій, кластеризації документів, класифікації тексту та завданнях з обробки природної мови. Давайте перелічимо їх та обговоримо кожну з цих програм.
- Обчислити подібні слова: Вбудовування слів використовується, щоб запропонувати слова, подібні до слова, що підлягає моделі прогнозування. Поряд з цим він також пропонує різні слова, а також найпоширеніші слова.
- Створіть групу споріднених слів: Використовується для семантичного групування, яке об’єднує речі подібної характеристики разом та несхожі далеко.
- Характеристика для класифікації тексту: Текст відображається в масиви векторів, які подаються до моделі для навчання, а також прогнозування. Моделі текстових класифікаторів неможливо навчити на рядку, тому це перетворить текст у машинно треновану форму. Подальші його особливості побудови семантичної допомоги в текстовій класифікації.
- Кластеризація документів - це ще одна програма, де широко використовується вбудовування слів
- Обробка природної мови: Є багато застосувань, де вбудовування слів є корисним і перемагає на етапах виділення функцій, таких як теги мовлення частин, сентиментальний аналіз та синтаксичний аналіз.
Тепер ми отримали деякі знання про вбудовування слів. Деяке світло також проливається на різні моделі для реалізації вбудовування слів. Весь цей підручник зосереджений на одній із моделей (word2vec).
Що таке word2vec?
Word2vec - це техніка / модель для створення вбудовування слів для кращого представлення слів. Він охоплює велику кількість точних синтаксичних та семантичних відносин слів. Це неглибока двошарова нейронна мережа. Перш ніж йти далі, будь ласка, подивіться різницю між неглибокою та глибокою нейронною мережею:
Неглибока нейронна мережа складається з єдиного прихованого шару між входом і виходом, тоді як глибока нейронна мережа містить кілька прихованих шарів між входом і виходом. Вхідні дані піддаються вузлам, тоді як прихований шар, як і вихідний шар, містить нейрони.
Рисунок: Неглибоке проти глибокого навчання
word2vec - це дворівнева мережа, в яку вводиться один прихований шар і виводиться.
Word2vec був розроблений групою дослідників під керівництвом Томаша Міколова в Google. Word2vec є кращим та ефективнішим, ніж модель прихованого семантичного аналізу.
Яке слово2vec робить?
Word2vec представляє слова у поданні у векторному просторі. Слова представлені у формі векторів, і розміщення здійснюється таким чином, що слова подібного значення знаходяться разом, а різнорідні слова знаходяться далеко. Це також називається семантичним відношенням. Нейронні мережі не розуміють текст, натомість вони розуміють лише цифри. Вбудовування Word забезпечує спосіб перетворення тексту в числовий вектор.
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']
Пояснення коду
- CountVectorizer - це модуль, який використовується для зберігання словникового запасу на основі відповідності слів у ньому. Це імпортується з sklearn
- Зробіть об’єкт за допомогою класу CountVectorizer.
- Запишіть дані до списку, який потрібно встановити в CountVectorizer.
- Дані вміщуються в об’єкт, створений із класу CountVectorizer.
- Застосуйте підхід "мішок слів" для підрахунку слів у даних, використовуючи словниковий запас. Якщо слово чи маркер відсутні у словниковому запасі, тоді така позиція індексу встановлюється рівною нулю.
- Змінна в рядку 5, яка є x, перетворюється в масив (метод доступний для x). Це забезпечить підрахунок кожної лексеми у реченні або списку, поданому в рядку 3.
- Це покаже особливості, які є частиною словникового запасу, коли він підходить за допомогою даних у рядку 4.
При підході до латентної семантики рядок представляє унікальні слова, тоді як стовпець - кількість часу, коли слово з’являється в документі. Це подання слів у формі матриці документа. Термін-частота, зворотна частота документа (TFIDF), використовується для підрахунку частоти слів у документі, яка є частотою терміна в документі / частоти терміна у всьому корпусі.
Недолік методу «Мішок слів»
- Він ігнорує порядок слів, наприклад, це погано = погано це.
- Він ігнорує контекст слів. Припустимо, якщо я напишу речення "Він любив книги. Освіту найкраще знайти в книгах". Це створило б два вектори - один для "Він любив книги" та інший для "Освіту найкраще знайти в книгах". Він би ставився до них обох ортогонально, що робить їх незалежними, але насправді вони пов'язані між собою
Для подолання цих обмежень було розроблено вбудовування слів, і word2vec є підходом до реалізації такого.
Як працює Word2vec?
Word2vec вивчає слово, передбачаючи навколишній контекст. Для прикладу візьмемо слово "Він любить футбол".
Ми хочемо обчислити слово2vec для слова: любить.
Припустимо
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 використовує дві архітектури
- Суцільний мішок слів (CBOW)
- пропустити грам
Перш ніж йти далі, давайте обговоримо, чому ці архітектури або моделі важливі з точки зору подання слів. Вивчення подання слів по суті не контролюється, але цілі / мітки потрібні для навчання моделі. 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 (безперервна сумка слів) та знежиреним грамом. Такі параметри забезпечуються під час навчання моделі. Можна мати можливість використовувати негативну вибірку або ієрархічний шар softmax.
Суцільний мішок слів.
Давайте намалюємо просту схему, щоб зрозуміти безперервний мішок архітектури слів.
Рисунок Суцільний мішок архітектури слів
Обчислимо рівняння математично. Нехай 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
де передбачена репрезентація отримується за модель∧h у наведеному вище рівнянні.
Модель Skip-Gram
Підхід Skip-Gram використовується для прогнозування речення, яке має вхідне слово. Щоб краще зрозуміти це, давайте намалюємо схему.
Рисунок Skip-Gram Model
Можна розглядати це як реверс безперервної сумки моделі слів, де вхідним словом є слово, а модель забезпечує контекст або послідовність. Ми також можемо зробити висновок, що ціль подається на вхідний і вихідний рівень повторюється кілька разів, щоб вмістити обрану кількість контекстних слів. Вектор помилок з усього вихідного рівня підсумовується для регулювання ваг методом зворотного розповсюдження.
Яку модель вибрати?
CBOW в кілька разів швидший, ніж пропускати грам, і забезпечує кращу частоту для частих слів, тоді як пропуск граму потребує невеликої кількості навчальних даних і представляє навіть рідкісні слова або фрази.
Співвідношення між Word2vec та NLTK
NLTK - це набір природних мов. Він використовується для попередньої обробки тексту. Можна робити різні операції, такі як позначення частин мови, лематизація, стемінг, зупинка видалення слів, видалення рідкісних слів або найменш вживаних слів. Це допомагає чистити текст, а також допомагає підготувати риси з ефективних слів. В інший спосіб, word2vec використовується для семантичного (тісно пов’язані елементи разом) та синтаксичного (послідовності) узгодження. Використовуючи word2vec, можна знайти подібні слова, різні слова, зменшення розмірів та багато інших. Ще однією важливою особливістю word2vec є перетворення тексту з більшою розмірністю у нижню розмірність векторів.
Де використовувати NLTK та Word2vec?
Якщо хтось повинен виконати деякі загальні цілі, як зазначено вище, як токенізація, тегування та аналіз POS, потрібно скористатися використанням NLTK, тоді як для прогнозування слів за певним контекстом, моделюванням тем або схожістю документів потрібно використовувати Word2vec.
Зв'язок NLTK та Word2vec за допомогою коду
NLTK та Word2vec можуть використовуватися разом для пошуку подібних слів подання або синтаксичної відповідності. Набір інструментів NLTK може бути використаний для завантаження багатьох пакетів, що поставляються з NLTK, а модель може бути створена за допомогою word2vec. Потім його можна перевірити на словах у реальному часі. Побачимо поєднання обох у наступному коді. Перед подальшою обробкою ознайомтеся з корпусами, які надає НЛТК. Завантажити можна за допомогою команди
nltk(nltk.download('all'))
Рисунок Corpora завантажений за допомогою 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)]
Пояснення кодексу
- Імпортується бібліотека nltk, звідки ви можете завантажити корпус abc, який ми використаємо на наступному кроці.
- Генсім імпортний. Якщо Gensim не встановлено, будь ласка, встановіть його за допомогою команди "pip3 install gensim". Будь ласка, перегляньте знімок екрана нижче.
Рисунок Встановлення Gensim за допомогою PIP
- імпортуйте corpus abc, який було завантажено за допомогою nltk.download ('abc').
- Передайте файли в модель word2vec, яка імпортується з використанням Gensim як речень.
- Лексика зберігається у вигляді змінної.
- Модель тестується на зразку науки про слова, оскільки ці файли пов’язані з наукою.
- Тут модель передбачає подібне слово "наука".
Активатори та Word2Vec
Функція активації нейрона визначає вихід цього нейрона з урахуванням набору входів. Біологічно натхненний діяльністю нашого мозку, де різні нейрони активуються за допомогою різних подразників. Давайте зрозуміємо функцію активації через наступну схему.
Рисунок Розуміння функції активації
Тут x1, x2,… x4 - вузол нейронної мережі.
w1, w2, w3 - вага вузла,
∑ - це підсумовування всієї ваги та значення вузла, які працюють як функція активації.
Чому функція активації?
Якщо не використовується функція активації, вихід буде лінійним, але функціональність лінійної функції обмежена. Для досягнення складних функціональних можливостей, таких як виявлення об'єктів, класифікація зображень, набір тексту за допомогою голосу та багатьох інших нелінійних виходів, що досягається за допомогою функції активації.
Як обчислюється рівень активації у вбудовуванні слова (word2vec)
Softmax Layer (нормалізована експоненціальна функція) - це функція вихідного рівня, яка активує або запускає кожен вузол. Іншим підходом є ієрархічний softmax, де складність обчислюється за O (log 2 V), де softmax - це 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)
Пояснення КОДУ.
- Оскільки дані у формі json, отже, json імпортується
- Файл зберігається у змінній
- Файл відкритий та завантажений у змінну даних
Тепер дані імпортуються, і настав час перетворити дані у фрейм даних. Будь ласка, перегляньте код нижче, щоб побачити наступний крок
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
Тепер настав час побудувати модель за допомогою модуля 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)
Пояснення Кодексу
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')
Якщо ви хочете надрукувати словниковий запас, це виконується за допомогою наведеної нижче команди
Будь ласка, подивіться результат
['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) та пропустив грам
- CBOW в кілька разів швидший, ніж пропускати грам, і забезпечує кращу частоту для частих слів, тоді як пропуск граму потребує невеликої кількості навчальних даних і представляє навіть рідкісні слова або фрази.
- NLTK і word2vec можуть використовуватися разом для створення потужних додатків
- Функція активації нейрона визначає вихід цього нейрона з урахуванням набору входів. У word2vec. Softmax Layer (нормалізована експоненціальна функція) - це функція вихідного рівня, яка активує або запускає кожен вузол. Word2vec також має негативну вибірку
- Gensim - це інструментарій для моделювання тем, який реалізований на python