Kaj je vdelava besed?
Word Embedding je vrsta predstavitve besed, ki omogoča razumevanje besed s podobnim pomenom algoritmov strojnega učenja. Tehnično gledano gre za preslikavo besed v vektorje realnih števil s pomočjo nevronske mreže, verjetnostnega modela ali zmanjšanja dimenzij na matriki sočasnega pojavljanja besed. Gre za jezikovno modeliranje in tehniko učenja. Vdelava besed je način za preslikavo z uporabo nevronske mreže. Na voljo so različni modeli vdelave besed, kot so word2vec (Google), Glove (Stanford) in najhitrejši (Facebook).
Vdelava besed se imenuje tudi porazdeljeni semantični model ali porazdeljeni predstavljeni ali semantični vektorski prostor ali vektorski vesoljski model. Ko berete ta imena, naletite na besedo semantično, kar pomeni kategoriziranje podobnih besed skupaj. Na primer sadje, kot so jabolko, mango, banana, naj bo blizu, knjige pa bodo daleč stran od teh besed. V širšem smislu bo vdelava besed ustvarila vektor sadja, ki bo postavljen daleč od vektorskega predstavljanja knjig.
V tej vadnici boste izvedeli
- Kaj je vdelava besed?
- Kje se uporablja vdelava besed?
- Kaj je word2vec?
- Kaj word2vec počne?
- Zakaj Word2vec?
- Arhitektura Word2vec
- Neprekinjena vreča besed.
- Preskoči gramov model
- Povezava med Word2vec in NLTK
- Aktivatorji in Word2Vec
- Kaj je Gensim?
- Koda Implementacija word2vec z uporabo Gensima
Kje se uporablja vdelava besed?
Vdelava besed pomaga pri ustvarjanju funkcij, razvrščanju dokumentov v skupine, razvrščanju besedil in pri obdelavi naravnega jezika. Naj jih naštejemo in se pogovorimo o vsaki od teh aplikacij.
- Izračunajte podobne besede: Vdelava besed se uporablja za predlaganje podobnih besed kot beseda, ki je predmet modela napovedovanja. Poleg tega predlaga tudi različne besede in najpogostejše besede.
- Ustvarite skupino sorodnih besed: Uporablja se za pomensko združevanje, ki bo stvari podobnih značilnosti združilo skupaj in drugače daleč stran.
- Značilnost za razvrščanje besedil: Besedilo je preslikano v vektorske nize, ki se navajajo na model za vadbo in napovedovanje. Modelov klasifikatorjev, ki temeljijo na besedilu, ni mogoče usposobiti na nizu, zato bo besedilo pretvorjeno v obliko, ki jo je mogoče strojno usposobiti. Nadalje njegove značilnosti gradnje semantične pomoči pri besedilni klasifikaciji.
- Skupina dokumentov je še ena aplikacija, pri kateri se vdelava besed pogosto uporablja
- Obdelava naravnega jezika: Obstaja veliko aplikacij, kjer je vdelava besed koristna in zmaga nad fazami ekstrakcije funkcij, kot so deli označevanja govora, sentimentalna analiza in skladenjska analiza.
Zdaj imamo nekaj znanja o vdelavi besed. Nekaj svetlobe se vrže tudi na različne modele za izvedbo vdelave besed. Ta celotna vadnica je osredotočena na enega od modelov (word2vec).
Kaj je word2vec?
Word2vec je tehnika / model za izdelavo vdelave besed za boljšo predstavitev besed. Zajema veliko število natančnih skladenjskih in pomenskih besednih odnosov. Je plitka dvoslojna nevronska mreža. Preden nadaljujete, si oglejte razliko med plitvo in globoko nevronsko mrežo:
Plitva nevronska mreža je sestavljena iz edine skrite plasti med vhodom in izhodom, medtem ko globoka nevronska mreža vsebuje več skritih plasti med vhodom in izhodom. Vhod je podvržen vozliščem, medtem ko skrita plast, kot tudi izhodna plast, vsebuje nevrone.
Slika: Plitko in globoko učenje
word2vec je dvoslojno omrežje, kjer je vhodna ena skrita plast in izhodna.
Word2vec je razvila skupina raziskovalcev, ki jo je pri Googlu vodil Tomas Mikolov. Word2vec je boljši in učinkovitejši od modela latentne semantične analize.
Kaj word2vec počne?
Word2vec predstavlja besede v predstavitvi vektorskega prostora. Besede so predstavljene v obliki vektorjev, umestitev pa je narejena tako, da se podobne besedne besede pojavljajo skupaj, različne besede pa se nahajajo daleč stran. To se imenuje tudi semantično razmerje. Nevronske mreže ne razumejo besedila, temveč razumejo samo številke. Word Embedding ponuja način za pretvorbo besedila v številski vektor.
Word2vec rekonstruira jezikovni kontekst besed. Preden gremo naprej, naj razumemo, kaj je jezikovni kontekst? V splošnem življenjskem scenariju, ko govorimo ali pišemo za komunikacijo, drugi ljudje poskušajo ugotoviti, kaj je cilj stavka. Na primer, "Kakšna je temperatura Indije", tukaj kontekst je, da uporabnik želi vedeti "temperatura Indije", ki je kontekst. Skratka, glavni cilj stavka je kontekst. Beseda ali stavek, ki obdaja govorjeni ali pisni jezik (razkritje), pomaga pri določanju pomena konteksta. Word2vec se v kontekstu nauči vektorske predstavitve besed.
Zakaj Word2vec?
Pred vdelavo besed
Pomembno je vedeti, kateri pristop se uporablja pred vdelavo besed in kakšne so njegove pomanjkljivosti, nato pa bomo prešli na temo, kako premagovanje pomanjkljivosti z vdelavo besed uporablja pristop word2vec. Na koncu bomo prenesli, kako word2vec deluje, ker je pomembno razumeti, kako deluje.
Pristop za latentno semantično analizo
To je pristop, ki je bil uporabljen pred vdelavo besed. Uporabil je koncept vrečke besed, kjer so besede predstavljene v obliki kodiranih vektorjev. Gre za redko vektorsko predstavitev, kjer je dimenzija enaka velikosti besedišča. Če se beseda pojavi v slovarju, se šteje, sicer ne. Za več informacij si oglejte spodnji program.
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())
Izhod:
[[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']
Razlaga kode
- CountVectorizer je modul, ki se uporablja za shranjevanje besedišča glede na prilagajanje besed v njem. Ta se uvozi iz sklearna
- Naredite predmet z uporabo razreda CountVectorizer.
- Podatke zapišite na seznam, ki ga je treba namestiti v CountVectorizer.
- Podatki so primerni za objekt, ustvarjen iz razreda CountVectorizer.
- Za štetje besed v podatkih z uporabo besedišča uporabite pristop z besedo. Če beseda ali žeton ni na voljo v besednjaku, je tak položaj indeksa nastavljen na nič.
- Spremenljivka v vrstici 5, ki je x, se pretvori v matriko (metoda je na voljo za x). To bo zagotovilo štetje vsakega žetona v stavku ali na seznamu v vrstici 3.
- To bo prikazalo funkcije, ki so del besedišča, ko je vgrajen s podatki v vrstici 4.
Pri pristopu latentne semantike vrstica predstavlja edinstvene besede, stolpec pa predstavlja, kolikokrat se beseda pojavi v dokumentu. Je predstavitev besed v obliki matrike dokumentov. Termin-Frekvenca inverzna frekvenca dokumenta (TFIDF) se uporablja za štetje pogostosti besed v dokumentu, kar je pogostost izraza v dokumentu / pogostost izraza v celotnem korpusu.
Pomanjkljivost metode vrečk besed
- Ne upošteva vrstnega reda besede, na primer to je slabo = slabo je to.
- Ignorira kontekst besed. Recimo, če napišem stavek "Ljubil je knjige. Izobrazbo je najbolje najti v knjigah". Ustvaril bi dva vektorja, enega za "Ljubil je knjige" in drugega za "Izobraževanje je najbolje najti v knjigah." Oba bi obravnaval pravokotno, zaradi česar sta neodvisna, v resnici pa sta med seboj povezana
Da bi odpravili te omejitve, je bilo razvito vdelavo besed in word2vec je pristop za njihovo izvajanje.
Kako deluje Word2vec?
Word2vec se besede nauči s predvidevanjem okoliškega okolja. Za primer vzemimo besedo " Obožuje nogomet".
Besedo2vec želimo izračunati za besedo: ljubi.
Recimo
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Beseda ljubi premike nad vsako besedo v korpusu. Sintaksični kot tudi semantični odnos med besedami je kodiran. To pomaga pri iskanju podobnih in analognih besed.
Izračunane so vse naključne značilnosti besede ljubi . Te funkcije se spremenijo ali posodobijo glede sosednjih ali kontekstnih besed s pomočjo metode razmnoževanja nazaj.
Drug način učenja je, da če sta si besedi podobni ali imata dve besedi podobne značilnosti, so take besede sorodne.
Arhitektura Word2vec
Word2vec uporablja dve arhitekturi
- Neprekinjena vreča besed (CBOW)
- preskočite gram
Pred nadaljevanjem se pogovorimo, zakaj so te arhitekture ali modeli pomembni z vidika predstavitve besed. Predstavitev učnih besed v bistvu ni pod nadzorom, vendar so za učenje modela potrebni cilji / oznake. Skip-gram in CBOW pretvorita nenadzorovano predstavitev v nadzorovano obliko za trening modelov.
V CBOW je trenutna beseda predvidena z uporabo okna okoliških kontekstnih oken. Če na primer w i-1 , w i-2 , w i + 1 , w i + 2 dobijo besede ali kontekst, bo ta model zagotovil w i
Skip-Gram deluje nasprotno od CBOW, kar pomeni, da iz besede predvideva dano zaporedje ali kontekst. Primer lahko obrnete, da ga razumete. Če je podan w i , bo to predvidelo kontekst ali w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec ponuja možnost izbire med CBOW (neprekinjena vreča besed) in posnetim gramom. Takšni parametri so zagotovljeni med treningom modela. Lahko imamo možnost uporabe negativnega vzorčenja ali hierarhične plasti softmax.
Neprekinjena vreča besed.
Narišimo preprost diagram, da bomo razumeli neprekinjeno vrečo besedne arhitekture.
Slika Neprekinjena vreča besedne arhitekture
Izračunajmo enačbe matematično. Recimo, da je V velikost besedišča, N pa velikost skrite plasti. Vnos je definiran kot {x i-1 , x i-2, x i + 1, x i + 2 }. Matriko uteži dobimo z množenjem V * N. Drugo matriko dobimo z množenjem vhodnega vektorja z matriko uteži. To lahko razumemo tudi z naslednjo enačbo.
h = xi t W
kjer so xi t ∧ W vhodni vektor oziroma matrika uteži,
Če želite izračunati ujemanje med kontekstom in naslednjo besedo, glejte spodnjo enačbo
u = predvidena predstavitev * h
kjer je predvidena predstavitev dobljena kot model∧h v zgornji enačbi.
Preskoči gramov model
Pristop Skip-Gram se uporablja za napovedovanje stavka z vhodno besedo. Da ga bomo bolje razumeli, narišimo diagram.
Slika Skip-Gram Model
Lahko ga obravnavamo kot hrbtno stran modela Continuous bag of word, kjer je vhod beseda, model pa daje kontekst ali zaporedje. Sklepamo lahko tudi, da se cilj dovaja na vhodni in izhodni sloj večkrat ponovi, da sprejme izbrano število kontekstnih besed. Vektor napak iz celotne izhodne plasti se sešteje za prilagoditev uteži z metodo povratnega razmnoževanja.
Kateri model izbrati?
CBOW je nekajkrat hitrejši od preskakovanja gramov in zagotavlja boljšo pogostnost pogostih besed, medtem ko preskoči gram potrebuje majhno količino podatkov o treningu in predstavlja celo redke besede ali besedne zveze.
Povezava med Word2vec in NLTK
NLTK je orodje za naravni jezik. Uporablja se za predobdelavo besedila. Izvajamo lahko različne operacije, kot so označevanje delov govora, lematiziranje, zarezovanje, odstranjevanje besed, ustavitev redkih besed ali najmanj uporabljenih besed. Pomaga pri čiščenju besedila in pri pripravi lastnosti iz učinkovitih besed. Na drugi način se word2vec uporablja za pomensko (tesno povezane postavke skupaj) in skladenjsko (zaporedje) ujemanje. Z uporabo word2vec lahko najdemo podobne besede, različne besede, dimenzijsko redukcijo in številne druge. Druga pomembna značilnost word2vec je pretvorba predstavitve besedila z višjo dimenzijo v vektorje z nižjo dimenzijo.
Kje uporabiti NLTK in Word2vec?
Če je treba opraviti nekatere splošne naloge, kot je omenjeno zgoraj, na primer tokenizacija, označevanje in razčlenitev POS, je treba uporabiti NLTK, medtem ko je za napovedovanje besed glede na nek kontekst, modeliranje tem ali podobnost dokumentov treba uporabiti Word2vec.
Povezava NLTK in Word2vec s pomočjo kode
NLTK in Word2vec lahko skupaj uporabimo za iskanje podobnih besed ali skladenjskega ujemanja. Z orodjem NLTK lahko naložite številne pakete, ki so priloženi NLTK, model pa lahko ustvarite s pomočjo word2vec. Nato ga je mogoče preizkusiti na besedah v realnem času. Oglejmo si kombinacijo obeh v naslednji kodi. Pred nadaljnjo obdelavo si oglejte korpuse, ki jih ponuja NLTK. Prenesete lahko z ukazom
nltk(nltk.download('all'))
Slika Corpora, prenesena s pomočjo NLTK
Za kodo si oglejte posnetek zaslona.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Izhod:
[('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)]
Pojasnilo kode
- uvožena je knjižnica nltk, od koder lahko prenesete korpus abc, ki ga bomo uporabili v naslednjem koraku.
- Gensim je uvožen. Če Gensim ni nameščen, ga namestite z ukazom "pip3 install gensim". Oglejte si spodnji posnetek zaslona.
Slika Namestitev Gensima s pomočjo PIP
- uvozite korpus abc, ki ste ga prenesli s pomočjo nltk.download ('abc').
- Datoteke posredujte modelu word2vec, ki je uvožen z uporabo Gensima kot stavka.
- Besedni zaklad je shranjen v obliki spremenljivke.
- Model je preizkušen na vzorčni besedi znanost, saj so te datoteke povezane z znanostjo.
- Tu model napoveduje podobno besedo "znanost".
Aktivatorji in Word2Vec
Aktivacijska funkcija nevrona definira izhod tega nevrona glede na niz vhodov. Biološko navdihnjeno z aktivnostjo v naših možganih, kjer se različni nevroni aktivirajo z različnimi dražljaji. Razumejmo funkcijo aktivacije na naslednjem diagramu.
Slika Razumevanje funkcije aktiviranja
Tu je x1, x2,… x4 vozlišče nevronske mreže.
w1, w2, w3 je teža vozlišča,
∑ je vsota vseh vrednosti teže in vozlišča, ki delujejo kot aktivacijska funkcija.
Zakaj funkcija aktiviranja?
Če se ne uporablja nobena aktivacijska funkcija, bi bil izhod linearen, funkcionalnost linearne funkcije pa je omejena. Za doseganje kompleksne funkcionalnosti, kot so zaznavanje predmetov, razvrščanje slik, tipkanje besedila z uporabo glasu in številni drugi nelinearni izhodi, ki se doseže z uporabo funkcije aktiviranja.
Kako se v vdelani besedi (word2vec) izračuna aktivacijski sloj
Softmax Layer (normalizirana eksponentna funkcija) je funkcija izhodne plasti, ki aktivira ali sproži vsako vozlišče. Drug uporabljen pristop je Hierarhični softmax, kjer se zapletenost izračuna z O (log 2 V), pri čemer je softmax O (V), kjer je V velikost besedišča. Razlika med njimi je zmanjšanje kompleksnosti hierarhične plasti softmax. Če želite razumeti njegovo (Hierarchical softmax) funkcionalnost, si oglejte spodnji primer:
Slika Hierarhična struktura, podobna drevesu softmax
Recimo, da želimo izračunati verjetnost opazovanja besede ljubezen glede na določen kontekst. Pretok iz korena v listno vozlišče bo prvi premik do vozlišča 2 in nato do vozlišča 5. Torej, če imamo besednjak v velikosti 8, so potrebni le trije izračuni. Torej omogoča razgradnjo, izračun verjetnosti ene besede ( ljubezen ).
Katere druge možnosti so na voljo razen Hierarchical Softmax?
Če govorimo v splošnem smislu, so na voljo možnosti za vdelavo besed Diferencirani Softmax, CNN-Softmax, Vzorčenje pomembnosti, Vzorčenje prilagodljivega pomena, Ocene kontrastnega hrupa, Negativno vzorčenje, Samoregulacija in redka normalizacija.
Če govorimo posebej o programu Word2vec, imamo na voljo negativno vzorčenje.
Negativno vzorčenje je način vzorčenja podatkov o vadbi. Je nekoliko podoben stohastičnemu gradientnemu spustu, vendar z nekaj razlike. Negativno vzorčenje je videti samo za primere negativnega treninga. Temelji na oceni kontrastnega hrupa in naključnem vzorčenju besed, ne v kontekstu. Je hitra metoda treninga in kontekst izbira naključno. Če se predvidena beseda pojavi v naključno izbranem kontekstu, sta si oba vektorja blizu.
Kakšen zaključek je mogoče narediti?
Aktivatorji sprožijo nevrone, tako kot naše nevrone sprožijo zunanji dražljaji. Plast Softmax je ena od funkcij izhodne plasti, ki sproži nevrone v primeru vdelave besed. V word2vec imamo možnosti, kot sta hierarhični softmax in negativno vzorčenje. Z uporabo aktivatorjev lahko linearno funkcijo pretvorimo v nelinearno funkcijo in z uporabo te lahko izvedemo zapleten algoritem strojnega učenja.
Kaj je Gensim?
Gensim je orodje za modeliranje tem, ki je implementirano v python. Modeliranje tem je odkrivanje skrite strukture v besedilu. Word2vec je uvožen iz orodja Gensim. Upoštevajte, da Gensim ne ponuja le implementacije word2vec, temveč tudi Doc2vec in FastText, vendar je v tej vadnici vse o word2vec, zato se bomo držali trenutne teme.
Izvedba word2vec z uporabo Gensima
Do zdaj smo razpravljali o tem, kaj je word2vec, njegove različne arhitekture, zakaj je prišlo do premika od vrečke besed k word2vec, povezavi med word2vec in NLTK s kodo v živo in aktivacijskimi funkcijami. V tem razdelku bomo izvedli word2vec z uporabo Gensima
1. korak) Zbiranje podatkov
Prvi korak k uvedbi katerega koli modela strojnega učenja ali izvajanju obdelave naravnega jezika je zbiranje podatkov
Prosimo, upoštevajte podatke, da ustvarite inteligentnega chatbota.
[{"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"]}]
Tukaj razumemo podatke
- Ti podatki vsebujejo tri stvari, oznako, vzorec in odgovore. Oznaka je namen (kaj je tema razprave).
- Podatki so v obliki JSON.
- Vzorec je vprašanje, ki ga bodo uporabniki postavili botu
- Responses je odgovor, ki ga bo chatbot ponudil na ustrezno vprašanje / vzorec.
2. korak) Predobdelava podatkov.
Zelo pomembno je obdelati neobdelane podatke. Če se na stroj dovajajo očiščeni podatki, se bo model natančneje odzval in podatke naučil učinkoviteje.
Ta korak vključuje odstranjevanje zaustavitvenih besed, izvornih besed, nepotrebnih besed itd. Pred nadaljevanjem je pomembno, da podatke naložite in pretvorite v podatkovni okvir. Prosimo, glejte spodnjo kodo za take
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Pojasnilo KODE.
- Ker so podatki v obliki json, je json uvožen
- Datoteka je shranjena v spremenljivki
- Datoteka je odprta in naložena v podatkovno spremenljivko
Zdaj se podatki uvozijo in čas je, da podatke pretvorite v podatkovni okvir. Za naslednji korak si oglejte spodnjo kodo
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Pojasnilo KODE
1. Podatki se pretvorijo v podatkovni okvir z uporabo pand, ki so bile uvožene zgoraj.
2. Seznam v vzorcih stolpcev bo pretvoril v niz.
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()]))
Razlaga kode
1. Angleške stop besede se uvozijo z uporabo modula stop word iz orodja nltk
2. Vse besede v besedilu se pretvorijo v male črke z uporabo funkcije pogoja in lambda. Lambda funkcija je anonimna funkcija.
3. Vse vrstice besedila v podatkovnem okviru se preverijo zaradi ločil v nizu in se filtrirajo.
4. Znaki, kot so številke ali pike, se odstranijo z regularnim izrazom.
5. Številke so odstranjene iz besedila.
6. Stop-besede so na tej stopnji odstranjene.
7. Besede zdaj filtriramo in z lematizacijo odstranimo različne oblike iste besede. S tem smo zaključili s predhodno obdelavo podatkov.
Izhod:
, 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. korak) Gradnja nevronske mreže z uporabo word2vec
Zdaj je čas, da zgradimo model z uporabo modula Gensim word2vec. Word2vec moramo uvoziti iz Gensima. Naredimo to, nato bomo zgradili in v zadnji fazi preverili model na podatkih v realnem času.
from gensim.models import Word2Vec
Zdaj lahko model uspešno izdelamo z uporabo programa Word2Vec. Oglejte si naslednjo vrstico kode, če želite izvedeti, kako ustvariti model z uporabo programa Word2Vec. Besedilo je na voljo modelu v obliki seznama, zato bomo besedilo iz podatkovnega okvira pretvorili v seznam z uporabo spodnje kode
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)
Pojasnila kodeksa
1. Ustvaril je večji_list, kjer je dodan notranji seznam. To je oblika, ki se doda modelu Word2Vec.
2. Izvedena je zanka in ponovljen je vsak vnos stolpca z vzorci podatkovnega okvira.
3. Vsak element vzorcev stolpcev je razdeljen in shranjen na notranjem seznamu li
4. Notranji seznam je priložen zunanjemu seznamu.
5. Ta seznam je na voljo modelu Word2Vec. Dovolite nam, da razumemo nekatere tukaj naštete parametre
Min_count: prezrl bo vse besede s skupno frekvenco, nižjo od te.
Velikost: Pove dimenzionalnost besednih vektorjev.
Delavci: To so niti za urjenje modela
Na voljo so tudi druge možnosti, nekatere pomembne pa so razložene spodaj
Okno: največja razdalja med trenutno in predvideno besedo v stavku.
Sg: Gre za algoritem za vadbo in 1 za preskočni gram in 0 za neprekinjeno vrečko besed. O njih smo podrobno razpravljali zgoraj.
Hs: Če je to 1, potem za trening uporabljamo hierarhični softmax, če je 0, pa negativno vzorčenje.
Alfa: začetna stopnja učenja
Naj spodaj prikažemo končno kodo
#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. korak) Shranjevanje modela
Model lahko shranite v obliki koša in modela. Bin je binarna oblika. Prosimo, glejte spodnje vrstice, da shranite model
model.save("word2vec.model")model.save("model.bin")
Pojasnilo zgornje kode
1. Model se shrani v obliki datoteke .model.
2. model je shranjen v obliki datoteke .bin
Ta model bomo uporabili za testiranje v realnem času, kot so podobne besede, različne besede in najpogostejše besede.
5. korak) Nalaganje modela in izvajanje preskusov v realnem času
Model je naložen s spodnjo kodo
model = Word2Vec.load('model.bin')
Če želite iz njega natisniti besednjak, uporabite spodnji ukaz
Oglejte si 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']
6. korak) Preverjanje najbolj podobnih besed
Uresničimo stvari praktično
similar_words = model.most_similar('thanks')print(similar_words)
Oglejte si 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 ustreza besedi iz priloženih besed
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Priskrbeli smo vam besede "Se vidimo kasneje, hvala za obisk". To bo natisnilo najbolj različne besede iz teh besed. Zaženimo to kodo in poiščimo rezultat
Rezultat po izvedbi zgornje kode.
Thanks
Korak 8) Iskanje podobnosti med dvema besedama
To bo pokazalo rezultat v verjetnosti podobnosti med dvema besedama. Prosimo, glejte spodnjo kodo za izvedbo tega razdelka.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Rezultat zgornje kode je naslednji
0,13706
Podobne besede lahko poiščete tudi tako, da izvedete spodnjo kodo
similar = model.similar_by_word('kind')print(similar)
Izhod zgornje kode
[('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ček
- Word Embedding je vrsta predstavitve besed, ki omogoča razumevanje besed s podobnim pomenom algoritmov strojnega učenja
- Vdelava besed se uporablja za izračun podobnih besed, ustvarjanje skupine sorodnih besed, funkcija za razvrščanje besedil, razvrščanje dokumentov v skupine, obdelava naravnega jezika
- Word2vec je plitki dvoslojni model nevronske mreže za izdelavo vdelave besed za boljšo predstavitev besed
- Word2vec predstavlja besede v predstavitvi vektorskega prostora. Besede so predstavljene v obliki vektorjev, umestitev pa je narejena tako, da se podobne besede pomenijo skupaj, različne besede pa se nahajajo daleč stran
- Word2vec je uporabil 2 arhitekturi Continuous Bag of words (CBOW) in preskočil gram
- CBOW je nekajkrat hitrejši od preskakovanja gramov in zagotavlja boljšo pogostnost pogostih besed, medtem ko preskoči gram potrebuje majhno količino podatkov o treningu in predstavlja celo redke besede ali besedne zveze.
- NLTK in word2vec lahko skupaj uporabimo za ustvarjanje zmogljivih aplikacij
- Aktivacijska funkcija nevrona definira izhod tega nevrona glede na niz vhodov. V word2vec. Softmax Layer (normalizirana eksponentna funkcija) je funkcija izhodne plasti, ki aktivira ali sproži vsako vozlišče. Word2vec ima na voljo tudi negativno vzorčenje
- Gensim je orodje za modeliranje tem, ki je implementirano v python