Word Embedding i Word2Vec model s primjerom

Što je Word Embedding?

Umetanje riječi je vrsta predstavljanja riječi koja algoritmima strojnog učenja omogućuje razumijevanje riječi sa sličnim značenjima. To je modeliranje jezika i tehnika učenja značajki za mapiranje riječi u vektore stvarnih brojeva pomoću neuronskih mreža, vjerojatnosnih modela ili redukcije dimenzija na matrici supojavljivanja riječi. Neki modeli ugrađivanja riječi su Word2vec (Google), Glove (Stanford) i najbrži (Facebook).

Ugrađivanje riječi također se naziva distribuirani semantički model ili distribuirani predstavljeni ili semantički vektorski prostor ili model vektorskog prostora. Dok čitate ove nazive, nailazite na riječ semantički što znači kategorizirati slične riječi zajedno. Na primjer, voće poput jabuke, manga, banane treba staviti blizu dok će knjige biti daleko od ovih riječi. U širem smislu, umetanje riječi će stvoriti vektor voća koji će biti postavljen daleko od vektorskog prikaza knjiga.

Gdje se koristi Word Embedding?

Ugrađivanje riječi pomaže u stvaranju značajki, grupiranju dokumenata, klasifikaciji teksta i zadacima obrade prirodnog jezika. Nabrojimo ih i malo raspravimo o svakoj od ovih aplikacija.

  • Izračunaj slične riječi: Ugrađivanje riječi koristi se za sugeriranje riječi sličnih riječi koja je podvrgnuta modelu predviđanja. Uz to sugerira i različite riječi, kao i najčešće riječi.
  • Napravite grupu povezanih riječi: Koristi se za semantičko grupiranje koje će grupirati stvari sličnih karakteristika zajedno, a različite daleko.
  • Značajka za klasifikaciju teksta: Tekst se preslikava u nizove vektora koji se šalju u model za obuku i predviđanje. Modeli klasifikatora koji se temelje na tekstu ne mogu se trenirati na nizu, tako da će ovo pretvoriti tekst u oblik koji se može strojno obučiti. Nadalje, njegove značajke izgradnje semantičke pomoći u klasifikaciji temeljenoj na tekstu.
  • Grupiranje dokumenata: je još jedna aplikacija u kojoj se često koristi Word Embedding Word2vec
  • Obrada prirodnog jezika: Postoje mnoge aplikacije u kojima je ugrađivanje riječi korisno i pobjeđuje faze izdvajanja značajki kao što su označavanje dijelova govora, sentimentalna analiza i sintaktička analiza. Sada imamo nešto znanja o ugrađivanju riječi. Bačeno je i malo svjetla na različite modele za implementaciju ugrađivanja riječi. Cijeli ovaj vodič za Word Embedding fokusiran je na jedan od modela (Word2vec).

Što je Word2vec?

Word2vec je tehnika/model za proizvodnju ugrađivanja riječi za bolje predstavljanje riječi. To je metoda obrade prirodnog jezika koja bilježi veliki broj preciznih sintaktičkih i semantičkih odnosa riječi. To je plitka dvoslojna neuronska mreža koja može otkriti sinonimne riječi i predložiti dodatne riječi za djelomične rečenice nakon što se uvježba.

Prije nego što krenete dalje u ovom vodiču za Word2vec, pogledajte razliku između plitke i duboke neuronske mreže kao što je prikazano u donjem dijagramu primjera ugrađivanja Worda:

Plitka neuronska mreža sastoji se od jedinog skrivenog sloja između ulaza i izlaza, dok duboka neuronska mreža sadrži više skrivenih slojeva između ulaza i izlaza. Ulaz je podvrgnut čvorovima, dok skriveni sloj, kao i izlazni sloj, sadrži neurone.

Plitko naspram dubokog učenja
Plitko naspram dubokog učenja

Word2vec je dvoslojna mreža gdje postoji ulaz, jedan skriveni sloj i izlaz.

Word2vec razvila je skupina istraživača na čelu s Tomasom Mikolovim iz Googlea. Word2vec je bolji i učinkovitiji od modela latentne semantičke analize.

Zašto Word2vec?

Word2vec predstavlja riječi u prikazu vektorskog prostora. Riječi su predstavljene u obliku vektora, a postavljanje je učinjeno na takav način da se riječi sličnog značenja pojavljuju zajedno, a različite riječi nalaze se daleko. Ovo se također naziva semantički odnos. Neuronske mreže ne razumiju tekst, već samo brojeve. Word Embedding pruža način pretvaranja teksta u numerički vektor.

Word2vec rekonstruira lingvistički kontekst riječi. Prije nego što nastavimo, shvatimo što je lingvistički kontekst? U općem životnom scenariju kada govorimo ili pišemo da bismo komunicirali, drugi ljudi pokušavaju shvatiti što je cilj rečenice. Na primjer, "Kolika je temperatura Indije", ovdje je kontekst korisnik želi znati "temperatura Indije" što je kontekst. Ukratko, glavni cilj rečenice je kontekst. Riječ ili rečenica koja okružuje govorni ili pisani jezik (otkrivanje) pomaže u određivanju značenja konteksta. Word2vec uči vektorsku reprezentaciju riječi kroz kontekste.

Što radi Word2vec?

Prije ugradnje riječi

Važno je znati koji se pristup koristi prije ugrađivanja riječi i koji su njegovi nedostaci, a zatim ćemo prijeći na temu kako se nedostaci prevladavaju ugradnjom Worda korištenjem Word2vec pristupa. Na kraju, pokazat ćemo kako Word2vec radi jer je važno razumjeti kako radi.

Pristup latentnoj semantičkoj analizi

Ovo je pristup koji se koristio prije ugrađivanja riječi. Koristio se konceptom Bag of words gdje su riječi predstavljene u obliku kodiranih vektora. To je rijedak vektorski prikaz gdje je dimenzija jednaka veličini vokabulara. Ako se riječ pojavljuje u rječniku, računa se, inače ne. Da biste razumjeli više, pogledajte donji program.

Primjer Word2vec

Primjer 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())

Izlaz:

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

Objašnjenje koda

  1. CountVectorizer je modul koji se koristi za pohranjivanje vokabulara na temelju uklapanja riječi u njega. Ovo je uvezeno iz sklearna.
  2. Napravite objekt pomoću klase CountVectorizer.
  3. Zapišite podatke u popis koji će se uklopiti u CountVectorizer.
  4. Podaci se uklapaju u objekt kreiran iz klase CountVectorizer.
  5. Primijenite pristup skupa riječi za brojanje riječi u podacima pomoću vokabulara. Ako riječ ili token nisu dostupni u vokabularu, tada je takva pozicija indeksa postavljena na nulu.
  6. Varijabla u retku 5 koja je x pretvara se u polje (metoda dostupna za x). Ovo će dati broj svakog tokena u rečenici ili popisu navedenom u retku 3.
  7. Ovo će pokazati značajke koje su dio vokabulara kada se prilagodi pomoću podataka u retku 4.

U latentnom semantičkom pristupu, redak predstavlja jedinstvene riječi dok stupac predstavlja broj puta kada se ta riječ pojavljuje u dokumentu. To je prikaz riječi u obliku matrice dokumenta. Inverzna frekvencija dokumenta (TFIDF) koristi se za brojanje učestalosti riječi u dokumentu koja je učestalost pojma u dokumentu/učestalost pojma u cijelom korpusu.

Nedostatak metode Vrećica riječi

  • Zanemaruje redoslijed riječi, na primjer, ovo je loše = loše je ovo.
  • Ignorira kontekst riječi. Pretpostavimo da ako napišem rečenicu “Volio je knjige. Obrazovanje se najbolje nalazi u knjigama.” To bi stvorilo dva vektora, jedan za "Volio je knjige" i drugi za "Obrazovanje je najbolje pronaći u knjigama". Oboje bi tretirao ortogonalno što ih čini neovisnima, ali u stvarnosti su povezani jedni s drugima

Kako bi se prevladala ova ograničenja, razvijeno je ugrađivanje riječi, a Word2vec je pristup za njihovu implementaciju.

Kako radi Word2vec?

Word2vec uči riječ predviđajući njen okolni kontekst. Na primjer, uzmimo riječ “On voli Nogomet."

Želimo izračunati Word2vec za riječ: voli.

pretpostaviti

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

riječ voli prelazi preko svake riječi u korpusu. Sintaktički kao i semantički odnos između riječi je kodiran. To pomaže u pronalaženju sličnih i analognih riječi.

Sve nasumične značajke riječi voli izračunava se. Ove značajke se mijenjaju ili ažuriraju u vezi sa susjednim ili kontekstnim riječima uz pomoć a Povratno razmnožavanje metoda.

Drugi način učenja je da ako je kontekst dviju riječi sličan ili dvije riječi imaju slične značajke, onda su te riječi povezane.

Word2vec Architektura

Postoje dvije arhitekture koje koristi Word2vec:

  1. Kontinuirana vreća riječi (CBOW)
  2. Preskoči gram

Prije nego što krenemo dalje u ovom vodiču za Word2vec, raspravimo zašto su ove arhitekture ili modeli važni sa stajališta predstavljanja riječi. Učenje predstavljanja riječi u biti je nenadzirano, ali su ciljevi/oznake potrebni za treniranje modela. Skip-gram i CBOW pretvaraju nenadzirani prikaz u nadzirani oblik za obuku modela.

U CBOW-u se trenutna riječ predviđa pomoću prozora okolnih prozora konteksta. Na primjer, ako wi-1,wi-2,wi+1,wi+2su date riječi ili kontekst, ovaj model će pružiti wi

Skip-Gram djeluje suprotno od CBOW što implicira da predviđa dani niz ili kontekst iz riječi. Možete obrnuti primjer da biste ga razumjeli. Ako wi dano, to će predvidjeti kontekst ili wi-1,wi-2,wi+1,wi+2.

Word2vec nudi mogućnost odabira između CBOW (continuous Bag of words) i skim-grama. Takvi parametri se daju tijekom obuke modela. Može se imati opcija korištenja negativnog uzorkovanja ili hijerarhijskog softmax sloja.

Kontinuirana vreća riječi

Nacrtajmo jednostavan Word2vec primjer dijagrama da bismo razumjeli kontinuiranu vreću arhitekture riječi.

Kontinuirana vreća riječi Architektura

Kontinuirana vreća riječi Architektura

Izračunajmo jednadžbe matematički. Pretpostavimo da je V veličina vokabulara, a N veličina skrivenog sloja. Ulaz je definiran kao { xi-1,xi-2, xja+1, xi+2}. Matricu težine dobivamo množenjem V * N. Drugu matricu dobivamo množenjem ulaznog vektora s matricom težine. To se također može razumjeti sljedećom jednadžbom.

h=xitW

gdje je xit? W su ulazni vektor odnosno matrica težine,

Kako biste izračunali podudaranje između konteksta i sljedeće riječi, pogledajte donju jednadžbu

u=predviđeno predstavljanje*h

gdje je predviđena reprezentacija dobivena model?h u gornjoj jednadžbi.

Skip-Gram model

Skip-Gram pristup koristi se za predviđanje rečenice s obzirom na ulaznu riječ. Da bismo to bolje razumjeli, nacrtajmo dijagram kao što je prikazano u donjem primjeru Word2vec.

Skip-Gram model

Skip-Gram model

Možemo ga tretirati kao obrnuto od modela Continuous bag of word gdje je ulaz riječ, a model daje kontekst ili slijed. Također možemo zaključiti da se meta šalje ulaznom sloju i da se izlazni sloj replicira više puta kako bi se prilagodio odabranom broju kontekstualnih riječi. Vektor pogreške iz svih izlaznih slojeva se zbraja kako bi se prilagodile težine putem metode povratnog širenja.

Koji model odabrati?

CBOW je nekoliko puta brži od skip gram-a i pruža bolju učestalost za česte riječi, dok skip gram zahtijeva malu količinu podataka za obuku i predstavlja čak i rijetke riječi ili fraze.

Odnos između Word2veca i NLTK-a

NLTK je alat za prirodni jezik. Koristi se za prethodnu obradu teksta. Mogu se izvoditi različite operacije kao što su označavanje dijelova govora, lematiziranje, stvaranje korijena, uklanjanje stop-riječi, uklanjanje rijetkih riječi ili riječi koje se najmanje koriste. Pomaže u čišćenju teksta, kao iu pripremi značajki od učinkovitih riječi. S druge strane, Word2vec se koristi za semantičko (usko povezane stavke zajedno) i sintaktičko (niz) podudaranje. Pomoću Word2veca mogu se pronaći slične riječi, različite riječi, smanjenje dimenzija i mnoge druge. Druga važna značajka Word2veca je pretvaranje višedimenzionalnog prikaza teksta u nižedimenzionalni vektor.

Gdje koristiti NLTK i Word2vec?

Ako se moraju izvršiti neki zadaci opće namjene kao što je gore spomenuto kao što je tokenizacija, POS označavanje i raščlanjivanje, mora se koristiti NLTK, dok se za predviđanje riječi prema nekom kontekstu, modeliranju teme ili sličnosti dokumenta mora koristiti Word2vec.

Odnos NLTK-a i Word2veca uz pomoć koda

NLTK i Word2vec mogu se koristiti zajedno za pronalaženje sličnih riječi ili sintaktičko podudaranje. NLTK toolkit može se koristiti za učitavanje mnogih paketa koji dolaze s NLTK-om, a model se može izraditi pomoću Word2veca. Zatim se može testirati na riječima u stvarnom vremenu. Pogledajmo kombinaciju oboje u sljedećem kodu. Prije daljnje obrade pogledajte korpuse koje nudi NLTK. Možete preuzeti pomoću naredbe

nltk(nltk.download('all'))

Odnos NLTK-a i Word2veca

Corpora preuzeta pomoću NLTK-a

Molimo pogledajte snimku zaslona za kôd.

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)

Odnos NLTK-a i Word2veca uz pomoć koda

Izlaz:

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

Objašnjenje koda

  1. Importira se biblioteka nltk odakle možete preuzeti abc korpus koji ćemo koristiti u sljedećem koraku.
  2. Gensim je iz uvoza. Ako Gensim Word2vec nije instaliran, instalirajte ga pomoću naredbe ”pip3 install gensim”. Pogledajte donju sliku zaslona.
Instaliranje Gensima pomoću PIP-a

Instaliranje Gensima pomoću PIP-a
  1. uvesti korpus abc koji je preuzet pomoću nltk.download('abc').
  2. Proslijedite datoteke u model Word2vec koji se uvozi pomoću Gensima kao rečenice.
  3. Rječnik je pohranjen u obliku varijable.
  4. Model je testiran na uzorku riječi science budući da su te datoteke povezane sa znanošću.
  5. Ovdje je slična riječ "znanost" predviđena modelom.

Aktivatori i Word2Vec

Aktivacijska funkcija neurona definira izlaz tog neurona s obzirom na skup ulaza. Biološki nadahnut aktivnošću u našem mozgu gdje se različiti neuroni aktiviraju pomoću različitih podražaja. Razmotrimo funkciju aktivacije kroz sljedeći dijagram.

Funkcija aktivacije u programu Word2vec

Razumijevanje aktivacijske funkcije

Ovdje je x1,x2,..x4 čvor neuronske mreže.

w1, w2, w3 je težina čvora,

? je zbroj svih težina i vrijednosti čvorova koji rade kao aktivacijska funkcija.

Zašto aktivacijska funkcija?

Ako se ne koristi funkcija aktivacije, izlaz bi bio linearan, ali je funkcionalnost linearne funkcije ograničena. Da bi se postigla složena funkcionalnost kao što je otkrivanje objekata, klasifikacija slika, upisivanje teksta pomoću glasa i mnogi drugi nelinearni izlazi potrebni su što se postiže korištenjem funkcije aktivacije.

Kako se aktivacijski sloj izračunava u ugradnji riječi (Word2vec)

Softmax sloj (normalizirana eksponencijalna funkcija) je funkcija izlaznog sloja koja aktivira ili pokreće svaki čvor. Drugi pristup koji se koristi je Hijerarhijski softmax gdje se složenost izračunava pomoću O(log2V) gdje je softmax O(V) gdje je V veličina vokabulara. Razlika između njih je smanjenje složenosti u hijerarhijskom softmax sloju. Da biste razumjeli njegovu (hijerarhijsku softmax) funkcionalnost, pogledajte donji primjer ugradnje Worda:

Hijerarhijska Softmax struktura poput stabla

Hijerarhijska softmax struktura poput stabla

Pretpostavimo da želimo izračunati vjerojatnost opažanja riječi ljubav s obzirom na određeni kontekst. Tijek od korijenskog do lisnog čvora bit će prvi pomak do čvora 2, a zatim do čvora 5. Dakle, ako smo imali rječnik veličine 8, potrebna su samo tri izračuna. Dakle, omogućuje dekompoziciju, izračunavanje vjerojatnosti jedne riječi (ljubav).

Koje su druge opcije dostupne osim Hijerarhijskog Softmaxa?

Ako govorimo u općenitom smislu, dostupne opcije ugrađivanja riječi su diferencirani Softmax, CNN-Softmax, uzorkovanje važnosti, prilagodljivo uzorkovanje važnosti, procjene kontrasta šuma, negativno uzorkovanje, samonormalizacija i rijetka normalizacija.

Govoreći konkretno o Word2vecu, imamo na raspolaganju negativno uzorkovanje.

Negativno uzorkovanje je način uzorkovanja podataka o obuci. To je donekle poput stohastičkog gradijentnog spuštanja, ali s nekim razlikama. Negativno uzorkovanje traži samo negativne primjere obuke. Temelji se na procjeni kontrasta buke i nasumično uzorkuje riječi, ne u kontekstu. To je brza metoda obuke i odabire kontekst nasumično. Ako se predviđena riječ pojavljuje u nasumično odabranom kontekstu, oba su vektora blizu jedan drugome.

Kakav se zaključak može izvući?

Aktivatori pokreću neurone baš kao što se naši neuroni pokreću pomoću vanjskih podražaja. Softmax sloj je jedna od funkcija izlaznog sloja koja pokreće neurone u slučaju ugrađivanja riječi. U Word2vecu imamo opcije kao što su hijerarhijski softmax i negativno uzorkovanje. Korištenjem aktivatora, može se pretvoriti linearna funkcija u nelinearnu funkciju, a pomoću njih se može implementirati složeni algoritam strojnog učenja.

Što je Gensim?

Gensim je alat otvorenog koda za modeliranje teme i obradu prirodnog jezika koji je implementiran u Python i Cython. Gensim toolkit omogućuje korisnicima da uvezu Word2vec za modeliranje teme kako bi otkrili skrivenu strukturu u tekstu. Gensim pruža ne samo implementaciju Word2veca, već također i Doc2vec i FastText.

Ovaj tutorial govori o Word2vecu pa ćemo se držati trenutne teme.

Kako implementirati Word2vec koristeći Gensim

Do sada smo raspravljali o tome što je Word2vec, njegovim različitim arhitekturama, zašto je došlo do pomaka s vrećice riječi na Word2vec, odnosu između Word2veca i NLTK-a sa živim kodom i funkcijama aktivacije.

Ispod je metoda korak po korak za implementaciju Word2veca pomoću Gensima:

Korak 1) Prikupljanje podataka

Prvi korak za implementaciju bilo kojeg modela strojnog učenja ili implementaciju obrade prirodnog jezika je prikupljanje podataka

Obratite pažnju na podatke kako biste izgradili inteligentni chatbot kao što je prikazano u donjem primjeru 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"]
        }
   ]

Evo što smo shvatili iz podataka

  • Ovi podaci sadrže tri stvari, oznaku, uzorak i odgovore. Oznaka je namjera (što je tema rasprave).
  • Podaci su u JSON formatu.
  • Uzorak je pitanje koje će korisnici postaviti botu
  • Odgovori su odgovor koji će chatbot dati na odgovarajuće pitanje/uzorak.

Korak 2) Predobrada podataka

Vrlo je važno obraditi neobrađene podatke. Ako se očišćeni podaci unesu u stroj, tada će model reagirati točnije i učinkovitije naučiti podatke.

Ovaj korak uključuje uklanjanje stop-riječi, korijenskih riječi, nepotrebnih riječi itd. Prije nego što krenete naprijed, važno je učitati podatke i pretvoriti ih u podatkovni okvir. Za to pogledajte donji kôd

import json
json_file =’intents.json'
with open('intents.json','r') as f:
    data = json.load(f)

Objašnjenje koda:

  1. Kako su podaci u obliku json formata, stoga se json uvozi
  2. Datoteka je pohranjena u varijabli
  3. Datoteka je otvorena i učitana u podatkovnoj varijabli

Sada su podaci uvezeni i vrijeme je za pretvaranje podataka u podatkovni okvir. Pogledajte donji kod da biste vidjeli sljedeći korak

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

Objašnjenje koda:

1. Podaci se pretvaraju u podatkovni okvir pomoću programa pandas koji je uvezen iznad.

2. Pretvorit će popis u uzorcima stupaca u niz.

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

Objašnjenje koda:

1. Engleske zaustavne riječi uvoze se pomoću modula zaustavne riječi iz alata nltk

2. Sve riječi u tekstu pretvaraju se u mala slova pomoću uvjeta i lambda funkcije. Lambda funkcija je anonimna funkcija.

3. Svi redovi teksta u podatkovnom okviru provjeravaju se na interpunkcijske znakove niza i oni se filtriraju.

4. Znakovi kao što su brojevi ili točke uklanjaju se pomoću regularnog izraza.

5. Digits se uklanjaju iz teksta.

6. Zaustavne riječi uklanjaju se u ovoj fazi.

7. Riječi se sada filtriraju, a različiti oblici iste riječi uklanjaju se pomoću lematizacije. Ovime smo završili pretprocesiranje podataka.

Izlaz:

, 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

Korak 3) Izgradnja neuronske mreže pomoću programa Word2vec

Sada je vrijeme za izradu modela koristeći Gensim Word2vec modul. Moramo uvesti Word2vec iz Gensima. Učinimo to, a zatim ćemo izgraditi iu završnoj fazi provjeriti model na podacima u stvarnom vremenu.

from gensim.models import Word2Vec

Sada u ovom vodiču za Gensim Word2vec, možemo uspješno izgraditi model koristeći Word2Vec. Pogledajte sljedeći redak koda da biste saznali kako izraditi model koristeći Word2Vec. Tekst se daje modelu u obliku popisa tako da ćemo pretvoriti tekst iz podatkovnog okvira u popis koristeći donji kod

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)

Objašnjenje koda:

1. Stvorio bigger_list gdje je pridodan unutarnji popis. Ovo je format koji se unosi u model Word2Vec.

2. Implementirana je petlja, a svaki unos stupca uzoraka okvira podataka se ponavlja.

3. Svaki element uzoraka stupaca je podijeljen i pohranjen u unutarnjoj listi li

4. Unutarnji popis se pridodaje vanjskom popisu.

5. Ovaj popis je dostavljen modelu Word2Vec. Razmotrimo neke od ovdje navedenih parametara

Min_count: Ignorirat će sve riječi čija je ukupna učestalost niža od ove.

Veličina: Govori o dimenzionalnosti vektora riječi.

radnici: Ovo su niti za obuku modela

Dostupne su i druge opcije, a neke važne su objašnjene u nastavku

Prozor: Maksimalna udaljenost između trenutne i predviđene riječi unutar rečenice.

Sg: To je algoritam za obuku i 1 za preskakanje grama i 0 za kontinuiranu vreću riječi. Gore smo o tome detaljno raspravljali.

Hs: Ako je ovo 1, tada koristimo hijerarhijski softmax za obuku, a ako je 0, koristi se negativno uzorkovanje.

Alfa: Početna stopa učenja

Prikažimo konačni kod ispod:

#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)

Korak 4) Spremanje modela

Model se može spremiti u obliku spremnika i obrasca modela. Bin je binarni format. Pogledajte donje retke da biste spremili model

model.save("word2vec.model")
model.save("model.bin")

Objašnjenje gornjeg koda

1. Model se sprema u obliku .model datoteke.

2. model se sprema u obliku .bin datoteke

Koristit ćemo ovaj model za testiranje u stvarnom vremenu kao što su slične riječi, različite riječi i najčešće riječi.

Korak 5) Učitavanje modela i izvođenje testiranja u stvarnom vremenu

Model se učitava pomoću donjeg koda:

model = Word2Vec.load('model.bin')

Ako želite ispisati vokabular iz njega, učinite to pomoću donje naredbe:

vocab = list(model.wv.vocab)

Molimo pogledajte rezultat:

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

Korak 6) Provjera najsličnijih riječi

Praktično implementirajmo stvari:

similar_words = model.most_similar('thanks')	
print(similar_words)	

Molimo pogledajte rezultat:

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

Korak 7) Ne odgovara riječi ni od ponuđenih riječi

dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())
print(dissimlar_words)

Mi smo dostavili riječi 'Vidimo se kasnije, hvala na posjeti'. To će ispišite najrazličitije riječi iz tih riječi. Pokrenimo ovaj kod i pronađimo rezultat

Rezultat nakon izvršenja gornjeg koda:

Thanks

Korak 8) Pronalaženje sličnosti između dvije riječi

To će pokazati vjerojatnost sličnosti između dviju riječi. Molimo pogledajte donji kôd kako izvršiti ovaj odjeljak.

similarity_two_words = model.similarity('please','see')
print("Please provide the similarity between these two words:")
print(similarity_two_words)

Rezultat gornjeg koda je sljedeći

0.13706

Možete dalje pronaći slične riječi izvršavanjem donjeg koda

similar = model.similar_by_word('kind')
print(similar)

Izlaz gornjeg koda:

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

Zaključak

  • Word Embedding je vrsta predstavljanja riječi koja algoritmima za strojno učenje omogućuje razumijevanje riječi sa sličnim značenjem
  • Word Embedding koristi se za izračunavanje sličnih riječi, stvaranje grupe povezanih riječi, značajka za klasifikaciju teksta, grupiranje dokumenata, obrada prirodnog jezika
  • Word2vec je objasnio: Word2vec je plitki dvoslojni model neuronske mreže za proizvodnju umetanja riječi za bolje predstavljanje riječi
  • Word2vec predstavlja riječi u prikazu vektorskog prostora. Riječi su predstavljene u obliku vektora, a postavljanje je učinjeno na takav način da se riječi sličnog značenja pojavljuju zajedno, a različite riječi nalaze se daleko
  • Word2vec algoritam koristi 2 arhitekture Continuous Bag of words (CBOW) i skip gram
  • CBOW je nekoliko puta brži od skip gram-a i pruža bolju učestalost za česte riječi, dok skip gram zahtijeva malu količinu podataka za obuku i predstavlja čak i rijetke riječi ili fraze.
  • NLTK i Word2vec mogu se koristiti zajedno za stvaranje moćnih aplikacija
  • Aktivacijska funkcija neurona definira izlaz tog neurona s obzirom na skup ulaza. U programu Word2vec. Softmax sloj (normalizirana eksponencijalna funkcija) je funkcija izlaznog sloja koja aktivira ili pokreće svaki čvor. Word2vec također ima dostupno negativno uzorkovanje
  • Gensim je skup alata za modeliranje tema koji je implementiran u python