Какво е вграждане на думи?
Word Embedding е вид представяне на думи, който позволява думите с подобно значение да бъдат разбрани от алгоритмите за машинно обучение. Технически погледнато, това е картографиране на думите във вектори на реални числа, като се използва невронната мрежа, вероятностния модел или намаляването на измерението на матрицата за съвместно възникване на думи. Това е езиково моделиране и техника за обучение на функции. Вграждането на думи е начин за извършване на картографиране с помощта на невронна мрежа. Налични са различни модели за вграждане на думи, като word2vec (Google), Glove (Stanford) и най-бързо (Facebook).
Вграждането на думи се нарича още разпределен семантичен модел или разпределено представено или семантично векторно пространство или модел на векторно пространство. Докато четете тези имена, попадате на думата семантичен, което означава категоризиране на подобни думи заедно. Например плодове като ябълка, манго, банан трябва да се поставят наблизо, докато книгите ще бъдат далеч от тези думи. В по-широк смисъл вграждането на думи ще създаде вектора на плодовете, който ще бъде поставен далеч от векторното представяне на книги.
В този урок ще научите
- Какво е вграждане на думи?
- Къде се използва вграждането на Word?
- Какво е word2vec?
- Какво word2vec прави?
- Защо Word2vec?
- Архитектура на Word2vec
- Непрекъсната чанта с думи.
- Модел за пропускане на грам
- Връзката между Word2vec и NLTK
- Активатори и Word2Vec
- Какво представлява Gensim?
- Код Прилагане на word2vec с помощта на Gensim
Къде се използва вграждането на Word?
Вграждането на думи помага при генериране на функции, групиране на документи, класификация на текст и задачи за обработка на естествен език. Нека ги изброим и обсъдим всяко от тези приложения.
- Изчисляване на подобни думи: Вграждането на думи се използва, за да се предложат подобни думи на думата, подложена на модела за прогнозиране. Наред с това той също така предлага различни думи, както и най-често срещаните думи.
- Създайте група сродни думи: Използва се за семантично групиране, което ще групира неща с подобна характеристика заедно и различни по-далеч.
- Характеристика за класификация на текста: Текстът се съпоставя в масиви от вектори, които се подават към модела за обучение, както и за прогнозиране. Моделите на класификатор, базирани на текст, не могат да бъдат обучавани на низа, така че това ще превърне текста в машинно обучима форма. По-нататък неговите характеристики на изграждане на семантична помощ при класификация, основана на текст.
- Групирането на документи е друго приложение, при което вграждането на думи се използва широко
- Обработка на естествен език: Има много приложения, при които вграждането на думи е полезно и печели над фазите за извличане на функции, като например маркиране на части от речта, сантиментален анализ и синтактичен анализ.
Сега имаме известни знания за вграждането на думи. Хвърля се малко светлина и върху различни модели, за да се приложи вграждането на думи. Целият този урок е фокусиран върху един от моделите (word2vec).
Какво е word2vec?
Word2vec е техниката / моделът за създаване на вграждане на думи за по-добро представяне на думи. Той улавя голям брой точни синтактични и семантични отношения на думи. Това е плитка двуслойна невронна мрежа. Преди да продължите напред, моля, вижте разликата между плитката и дълбоката невронна мрежа:
Плитката невронна мрежа се състои от единствения скрит слой между входа и изхода, докато дълбоката невронна мрежа съдържа множество скрити слоя между входа и изхода. Входът се подлага на възли, докато скритият слой, както и изходният слой, съдържа неврони.
Фигура: Плитко срещу дълбоко обучение
word2vec е двуслойна мрежа, в която има въведен един скрит слой и изход.
Word2vec е разработен от група изследователи, оглавявана от Томаш Миколов в Google. Word2vec е по-добър и по-ефективен от модела на скрит семантичен анализ.
Какво word2vec прави?
Word2vec представлява думи в представяне на векторно пространство. Думите са представени под формата на вектори и разположението е направено по такъв начин, че сходни думи да се появяват заедно и различни думи са разположени далеч. Това също се нарича семантична връзка. Невронните мрежи не разбират текста, а разбират само числа. Word Embedding предоставя начин за преобразуване на текст в числов вектор.
Word2vec възстановява езиковия контекст на думите. Преди да отидем по-нататък, нека разберем, какво е езиков контекст? В общия житейски сценарий, когато говорим или пишем, за да общуваме, други хора се опитват да разберат каква е целта на изречението. Например „Каква е температурата на Индия“, тук контекстът е, че потребителят иска да знае „температура на Индия“, който е контекст. Накратко, основната цел на изречението е контекстът. Думата или изречението, обграждащи говоримия или писмения език (разкриване), помагат за определянето на значението на контекста. Word2vec се учи на векторно представяне на думи чрез контекста.
Защо Word2vec?
Преди вграждането на Word
Важно е да се знае кой подход се използва преди вграждането на думи и какви са неговите недостатъци и след това ще преминем към темата за това как се преодоляват недостатъците чрез вграждането на Word, използвайки word2vec подход. И накрая, ще преместим как работи word2vec, защото е важно да разберем, че работи.
Подход за скрит семантичен анализ
Това е подходът, който се използваше преди вграждането на думи. Използва се концепцията Bag of words, където думите са представени под формата на кодирани вектори. Това е оскъдно векторно представяне, където измерението е равно на размера на лексиката. Ако думата се появи в речника, тя се брои, в противен случай не. За да разберете повече, моля, вижте програмата по-долу.
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) се използва за отчитане на честотата на думите в документа, която е честотата на термина в документа / честотата на термина в целия корпус.
Недостатък на метода Bag of Words
- Той игнорира реда на думата, например това е лошо = лошо е това.
- Той игнорира контекста на думите. Да предположим, ако напиша изречението „Той обичаше книгите. Образованието се намира най-добре в книгите“. Това би създало два вектора - един за „Той обичаше книгите“ и друг за „Образованието се намира най-добре в книгите“. Това би третирало и двамата ортогонално, което ги прави независими, но в действителност те са свързани помежду си
За да се преодолеят тези ограничения е разработено вграждане на думи и 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.
Непрекъсната чанта с думи.
Нека нарисуваме проста диаграма, за да разберем непрекъснатата торба на архитектурата на думите.
Фигура Непрекъснат плик от 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
където предвиденото представяне се получава модел∧h в горното уравнение.
Модел за пропускане на грам
Подходът 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(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 се внася. Ако 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
Да предположим, че искаме да изчислим вероятността да наблюдаваме думата любов при определен контекст. Потокът от корена към листния възел ще бъде първият ход към възел 2 и след това към възел 5. Така че, ако сме имали размер на речника 8, са необходими само три изчисления. Така че позволява разлагане, изчисляване на вероятността за една дума ( любов ).
Какви други опции са налични освен Йерархичен Softmax?
Ако говорим в общ смисъл, наличните опции за вграждане на думи са Differentiated Softmax, CNN-Softmax, вземане на проби по важност, вземане на проби по адаптивна важност, контрастни оценки на шума, отрицателно вземане на проби, самонормализация и рядка нормализация.
Говорейки конкретно за Word2vec, имаме налични отрицателни извадки.
Отрицателно вземане на проби е начин за вземане на проби от данните за обучение. Прилича донякъде на стохастичен градиент, но с известна разлика. Отрицателното вземане на проби търси само отрицателни примери за обучение. Тя се основава на противоположна оценка на шума и произволно взема проби от думи, не в контекста. Това е бърз метод на обучение и избира контекста на случаен принцип. Ако предсказаната дума се появи в произволно избран контекст, и двата вектора са близо един до друг.
Какъв извод може да се направи?
Активаторите изстрелват невроните точно както нашите неврони се изстрелват с помощта на външните стимули. Слоят Softmax е една от функциите на изходния слой, която задейства невроните в случай на вграждане на думи. В word2vec имаме опции като йерархичен софтмакс и отрицателна извадка. Използвайки активатори, човек може да преобразува линейната функция в нелинейна функция и сложен алгоритъм за машинно обучение може да се приложи с помощта на такава.
Какво представлява Gensim?
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.
- Моделът е въпрос, който потребителите ще задават на бота
- Responses е отговорът, който chatbot ще даде на съответния въпрос / модел.
Стъпка 2) Предварителна обработка на данни.
Много е важно да се обработят суровите данни. Ако изчистените данни се подават към машината, тогава моделът ще реагира по-точно и ще научи данните по-ефективно.
Тази стъпка включва премахване на стоп думи, изкореняване, ненужни думи и др. Преди да продължите напред, важно е да заредите данни и да ги конвертирате в рамка за данни. Моля, вижте кода по-долу за такива
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Обяснение на CODE.
- Тъй като данните са под формата на json формат, следователно json се импортира
- Файлът се съхранява в променливата
- Файлът е отворен и е зареден в променлива за данни
Сега данните се импортират и е време да конвертирате данните в рамка за данни. Моля, вижте кода по-долу, за да видите следващата стъпка
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Обяснение на CODE
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 за skip-gram и 0 за Continuous bag of words. Ние ги обсъдихме подробно по-горе.
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)]
Заключение
- Word Embedding е вид представяне на думи, който позволява думите с подобно значение да бъдат разбрани от алгоритмите за машинно обучение
- Вграждането на думи се използва за изчисляване на подобни думи, Създаване на група свързани думи, Функция за класификация на текст, Групиране на документи, Обработка на естествен език
- Word2vec е плитък двуслоен модел на невронна мрежа за създаване на вграждане на думи за по-добро представяне на думи
- Word2vec представлява думи в представяне на векторно пространство. Думите са представени под формата на вектори и разположението е направено по такъв начин, че сходни думи да се появяват заедно и различни думи са разположени далеч
- Word2vec използва 2 архитектури Continuous Bag of words (CBOW) и пропуска грам
- CBOW е няколко пъти по-бърз от пропускане на грам и осигурява по-добра честота за чести думи, докато пропускането на грам се нуждае от малко количество данни за обучение и представлява дори редки думи или фрази.
- NLTK и word2vec могат да се използват заедно, създават мощни приложения
- Активиращата функция на неврона дефинира изхода на този неврон с даден набор от входове. В word2vec. Softmax Layer (нормализирана експоненциална функция) е функцията на изходния слой, която активира или задейства всеки възел. Word2vec също има отрицателна извадка
- Gensim е набор от инструменти за моделиране на теми, който е реализиран в python