Što je ugrađivanje riječi?
Ugrađivanje riječi vrsta je predstavljanja riječi koja omogućuje razumijevanje riječi sličnog značenja algoritmima strojnog učenja. Tehnički gledano, to je mapiranje riječi u vektore stvarnih brojeva pomoću neuronske mreže, vjerojatnosnog modela ili smanjenja dimenzija na matrici zajedničke pojave riječi. To je modeliranje jezika i tehnika učenja značajki. Ugrađivanje riječi način je za izvođenje mapiranja pomoću neuronske mreže. Dostupni su različiti modeli ugradnje riječi, poput 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 vektorski prostorni model. Čitajući ta imena, nailazite na riječ semantička što znači kategoriziranje sličnih 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, ugrađivanjem riječi stvorit će se vektor voća koji će biti smješten daleko od vektorskog predstavljanja knjiga.
U ovom ćete tutorijalu naučiti
- Što je ugrađivanje riječi?
- Gdje se koristi ugrađivanje riječi?
- Što je word2vec?
- Koja riječ2vec radi?
- Zašto Word2vec?
- Arhitektura Word2vec
- Neprekidna vreća riječi.
- Skip-Gramov model
- Veza između Word2veca i NLTK
- Aktivatore i Word2Vec
- Što je Gensim?
- Kôd Implementacija word2vec pomoću Gensima
Gdje se koristi ugrađivanje riječi?
Ugrađivanje riječi pomaže u generiranju značajki, grupiranju dokumenata, klasifikaciji teksta i zadacima obrade prirodnog jezika. Dopustite nam da ih nabrojimo i porazgovaramo o svakoj od tih aplikacija.
- Izračunavanje sličnih 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.
- Stvorite skupinu srodnih riječi: Koristi se za semantičko grupiranje koje će grupirati stvari sličnih karakteristika i udaljenih.
- Značajka za klasifikaciju teksta: Tekst se preslikava u nizove vektora koji se dodaju na model za vježbanje, kao i predviđanje. Modeli klasifikatora zasnovani na tekstu ne mogu se obučavati na nizu, pa će to pretvoriti tekst u oblik koji se može strojno osposobiti. Dalje njegove značajke izgradnje semantičke pomoći u klasifikaciji zasnovanoj na tekstu.
- Grupiranje dokumenata je još jedna aplikacija u kojoj se ugrađivanje riječi široko koristi
- Obrada prirodnog jezika: Mnogo je aplikacija 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 smo dobili neko znanje o ugrađivanju riječi. Također se baca malo svjetla na različite modele kako bi se implementiralo ugrađivanje riječi. Cijeli je ovaj vodič usredotočen na jedan od modela (word2vec).
Što je word2vec?
Word2vec je tehnika / model za stvaranje ugrađivanja riječi radi boljeg predstavljanja riječi. Obuhvaća velik broj preciznih sintaksičkih i semantičkih odnosa riječi. To je plitka dvoslojna neuronska mreža. Prije nego što krenete dalje, pogledajte razliku između plitke i duboke neuronske mreže:
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 se podvrgava čvorovima dok skriveni sloj, kao i izlazni sloj, sadrži neurone.
Slika: Plitko nasuprot dubokom učenju
word2vec je dvoslojna mreža u kojoj postoji ulazni i skriveni sloj.
Word2vec je razvila skupina istraživača na čelu s Tomasom Mikolovom iz Googlea. Word2vec je bolji i učinkovitiji od latentnog modela semantičke analize.
Koja riječ2vec radi?
Word2vec predstavlja riječi u predstavljanju vektorskog prostora. Riječi su predstavljene u obliku vektora, a postavljanje se vrši 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čkim odnosom. Neuronske mreže ne razumiju tekst, već razumiju samo brojeve. Ugrađivanje riječi pruža način pretvaranja teksta u numerički vektor.
Word2vec rekonstruira jezični kontekst riječi. Prije nego što krenemo dalje, shvatimo što je jezični kontekst? Općenito u životnom scenariju kada govorimo ili pišemo kako 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žu u određivanju značenja konteksta. Word2vec uči vektorsku reprezentaciju riječi kroz kontekst.
Zašto Word2vec?
Prije ugrađivanja riječi
Važno je znati koji se pristup koristi prije ugrađivanja riječi i koje su njegove demerije, a zatim ćemo prijeći na temu kako se demeritivi prevladavaju ugrađivanjem riječi pomoću word2vec pristupa. Na kraju ćemo pomaknuti način na koji word2vec radi jer je važno razumjeti da radi.
Pristup latentnoj semantičkoj analizi
To je pristup koji se koristio prije ugradnje riječi. Upotrijebio je koncept Torbe riječi gdje su riječi predstavljene u obliku kodiranih vektora. Riječ je o oskudnom vektorskom prikazu gdje je dimenzija jednaka veličini rječnika. Ako se riječ pojavi u rječniku, ona se računa, inače ne. Da biste razumjeli više, pogledajte program u nastavku.
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())
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
- CountVectorizer je modul koji se koristi za spremanje rječnika na temelju uklapanja riječi u njega. Ovo se uvozi iz sklearna
- Napravite objekt pomoću klase CountVectorizer.
- Zapišite podatke na popis koji treba ugraditi u CountVectorizer.
- Podaci se uklapaju u objekt stvoren iz klase CountVectorizer.
- Primijenite pristup vrećama riječi za brojanje riječi u podacima pomoću rječnika. Ako riječ ili znak nisu dostupni u rječniku, tada je takav položaj indeksa postavljen na nulu.
- Varijabla u retku 5 koja je x pretvara se u niz (metoda dostupna za x). To će pružiti broj svakog tokena u rečenici ili popisu navedenom u retku 3.
- To će prikazati značajke koje su dio rječnika kada je ugrađen pomoću podataka u retku 4.
U pristupu latentne semantike, red predstavlja jedinstvene riječi, dok stupac predstavlja broj vremena kada se ta riječ pojavljuje u dokumentu. To je prikaz riječi u obliku matrice dokumenata. Termin frekvencija inverzna frekvencija dokumenta (TFIDF) koristi se za brojanje učestalosti riječi u dokumentu, što je frekvencija pojma u dokumentu / frekvencija pojma u cijelom korpusu.
Nedostatak metode vreće riječi
- Zanemaruje redoslijed riječi, na primjer, ovo je loše = loše je ovo.
- Zanemaruje kontekst riječi. Pretpostavimo ako napišem rečenicu "Volio je knjige. Obrazovanje se najbolje može naći u knjigama". Stvorila bi dva vektora, jedan za "Volio je knjige", a drugi za "Obrazovanje je najbolje naći u knjigama". Oboje bi ih tretirao pravokutno što ih čini neovisnima, ali u stvarnosti su međusobno povezani
Da bi se prevladalo ovo ograničenje razvijeno je ugrađivanje riječi, a word2vec je pristup za njihovu primjenu.
Kako Word2vec radi?
Word2vec uči riječ predviđajući okolni kontekst. Na primjer, uzmimo riječ "On voli nogomet".
Želimo izračunati riječ2vec za riječ: voli.
Pretpostavimo
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Riječ voli pokrete preko svake riječi u korpusu. Kodiran je sintaksički, kao i semantički odnos između riječi. To pomaže u pronalaženju sličnih i analognih riječi.
Izračunavaju se sve slučajne značajke riječi voli . Te se značajke mijenjaju ili ažuriraju u vezi sa susjednim ili kontekstnim riječima uz pomoć metode povratnog širenja.
Drugi način učenja je da ako su kontekst dviju riječi slični ili dvije riječi imaju slična obilježja, onda su takve riječi povezane.
Arhitektura Word2vec
Word2vec koristi dvije arhitekture
- Neprekidna vreća riječi (CBOW)
- preskočite gram
Prije nego što krenemo dalje, razgovarajmo zašto su ove arhitekture ili modeli važni s gledišta predstavljanja riječi. Zastupanje riječi u učenju u osnovi nije pod nadzorom, ali za obuku modela potrebni su ciljevi / oznake. Skip-gram i CBOW pretvaraju nenadgledani prikaz u nadgledani oblik za obuku modela.
U CBOW-u se trenutna riječ predviđa pomoću prozora okolnih prozora u okruženju. Na primjer, ako w i-1 , w i-2 , w i + 1 , w i + 2 dobiju riječi ili kontekst, ovaj će model pružiti w i
Skip-Gram izvodi suprotno od CBOW, što podrazumijeva da predviđa zadani slijed ili kontekst iz riječi. Možete obrnuti primjer da biste ga razumjeli. Ako je dano w i , ovo će predvidjeti kontekst ili w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec nudi mogućnost izbora između CBOW (kontinuirana vreća riječi) i obranog grama. Takvi se parametri pružaju tijekom treninga modela. Može se imati mogućnost korištenja negativnog uzorkovanja ili hijerarhijskog softmax sloja.
Neprekidna vreća riječi.
Nacrtajmo jednostavan dijagram kako bismo razumjeli neprekidnu vreću arhitekture riječi.
Slika Kontinuirana vreća arhitekture riječi
Izračunajmo jednadžbe matematički. Pretpostavimo da je V veličina rječnika, a N veličina skrivenog sloja. Ulaz je definiran kao {x i-1 , x i-2, x i + 1, x i + 2 }. Matricu utega dobivamo množenjem V * N. Druga matrica dobivamo množenjem ulaznog vektora s matricom utega. To se može razumjeti i sljedećom jednadžbom.
h = xi t W
gdje su xi t ∧ W ulazni vektor, odnosno matrica težine,
Da biste izračunali podudaranje između konteksta i sljedeće riječi, pogledajte donju jednadžbu
u = predviđena prezentacija * h
gdje se predviđena reprezentacija dobiva modelom∧h u gornjoj jednadžbi.
Skip-Gramov model
Skip-Gramov pristup koristi se za predviđanje rečenice koja ima ulaznu riječ. Da bismo ga bolje razumjeli, nacrtajmo dijagram.
Slika Skip-Gram Model
To se može tretirati kao naličje kontinuiranog vrećice modela riječi gdje je ulaz riječ i model daje kontekst ili slijed. Također možemo zaključiti da se cilj dovodi na ulazni i izlazni sloj replicira se više puta kako bi se prilagodio odabranom broju kontekstnih riječi. Vektor pogrešaka iz svih izlaznih slojeva sažima se za podešavanje težina metodom povratnog širenja.
Koji model odabrati?
CBOW je nekoliko puta brži od preskakanja grama i pruža bolju učestalost za česte riječi, dok za preskakanje grama treba mala količina podataka o treningu i predstavlja čak rijetke riječi ili fraze.
Veza između Word2veca i NLTK
NLTK je priručnik za prirodni jezik. Koristi se za predobradu teksta. Mogu se izvoditi različite operacije poput označavanja dijelova govora, lematiziranja, rezanja, zaustavljanja uklanjanja riječi, uklanjanja rijetkih riječi ili najmanje korištenih riječi. Pomaže u čišćenju teksta, kao i u pripremi značajki iz učinkovitih riječi. Na drugi se način word2vec koristi za semantičko (usko povezane stavke zajedno) i sintaktičko (slijed) podudaranje. Koristeći word2vec, mogu se pronaći slične riječi, različite riječi, redukcija dimenzija i mnoge druge. Sljedeća važna značajka word2veca je pretvaranje višedimenzionalnog prikaza teksta u niže dimenzionalne vektore.
Gdje koristiti NLTK i Word2vec?
Ako netko mora izvršiti neke zadaće opće namjene kao što je gore spomenuto, poput tokenizacije, označavanja i raščlanjivanja POS-a, mora se ići na upotrebu NLTK-a, dok se za predviđanje riječi prema nekom kontekstu, modeliranju teme ili sličnosti dokumenta mora koristiti Word2vec.
Odnos NLTK i Word2vec uz pomoć koda
NLTK i Word2vec mogu se koristiti zajedno za pronalaženje sličnih riječi ili sintaktičko podudaranje. NLTK set alata može se koristiti za učitavanje mnogih paketa koji dolaze s NLTK, a model se može stvoriti pomoću word2vec. Tada se može testirati na riječima u stvarnom vremenu. Pogledajmo kombinaciju oba u sljedećem kodu. Prije daljnje obrade, pogledajte korpuse koje nudi NLTK. Možete preuzeti pomoću naredbe
nltk(nltk.download('all'))
Slika Corpora preuzeta pomoću NLTK
Kod potražite na snimci 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)
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
- uvezena je biblioteka nltk, odakle možete preuzeti abc korpus koji ćemo koristiti u sljedećem koraku.
- Gensim se uvozi. Ako Gensim nije instaliran, instalirajte ga pomoću naredbe "pip3 install gensim". Pogledajte donji snimak zaslona.
Slika Instaliranje Gensima pomoću PIP-a
- uvezite korpus abc koji je preuzet pomoću nltk.download ('abc').
- Proslijedite datoteke modelu word2vec koji se uvozi pomoću Gensima kao rečenice.
- Rječnik je pohranjen u obliku varijable.
- Model je testiran na uzorku riječi znanosti jer su ove datoteke povezane sa znanošću.
- Ovdje model predviđa sličnu riječ "znanost".
Aktivatore 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. Razumijemo funkciju aktivacije kroz sljedeći dijagram.
Slika Razumijevanje funkcije aktivacije
Ovdje je x1, x2,… x4 čvor neuronske mreže.
w1, w2, w3 je težina čvora,
∑ je zbroj svih težina i vrijednosti čvora koji rade kao aktivacijska funkcija.
Zašto funkcija aktivacije?
Ako se ne koristi funkcija aktivacije, izlaz bi bio linearan, ali funkcionalnost linearne funkcije je ograničena. Da bi se postigla složena funkcionalnost kao što su otkrivanje predmeta, klasifikacija slika, tipkanje teksta glasom i mnogi drugi nelinearni izlazi, što se postiže pomoću funkcije aktiviranja.
Kako se izračunava aktivacijski sloj u ugrađivanju riječi (word2vec)
Softmax sloj (normalizirana eksponencijalna funkcija) je funkcija izlaznog sloja koja aktivira ili aktivira svaki čvor. Drugi pristup koji se koristi je Hijerarhijski softmax, gdje se složenost izračunava pomoću O (log 2 V), pri čemu je softmax O (V) gdje je V veličina rječnika. Razlika između njih je smanjenje složenosti hijerarhijskog softmax sloja. Da biste razumjeli njegovu (hijerarhijsku softmax) funkcionalnost, pogledajte donji primjer:
Slika Hijerarhijska softmax stabla poput strukture
Pretpostavimo da želimo izračunati vjerojatnost promatranja riječi ljubav s obzirom na određeni kontekst. Protok od korijena do lisnog čvora bit će prvi prelazak na čvor 2, a zatim na čvor 5. Dakle, ako smo imali rječnik 8, potrebna su samo tri izračuna. Dakle, omogućuje razlaganje, izračunavanje vjerojatnosti jedne riječi ( ljubavi ).
Koje su druge opcije dostupne osim Hijerarhijskog Softmaxa?
Ako su u općenitom smislu riječi za ugrađivanje riječi dostupne, razlikuju se Softmax, CNN-Softmax, Uzorkovanje važnosti, Uzorkovanje prilagodljive važnosti, Procjene kontrasta buke, Negativno uzorkovanje, Samormalizacija i rijetka normalizacija.
Govoreći konkretno o Word2vecu, na raspolaganju imamo negativno uzorkovanje.
Negativno uzorkovanje način je uzorkovanja podataka o treningu. Nešto je poput stohastičkog gradijentnog spuštanja, ali s određenom razlikom. Negativno uzorkovanje traži samo negativne primjere treninga. Temelji se na procjeni kontrastne buke i slučajnim uzorcima riječi, a ne u kontekstu. To je brza metoda treninga i slučajno odabire kontekst. Ako se predviđena riječ pojavi u slučajno odabranom kontekstu, oba vektora su blizu.
Kakav se zaključak može izvesti?
Aktivatori ispaljuju neurone baš kao što se naši neuroni otpuštaju pomoću vanjskih podražaja. Softmax sloj jedna je od funkcija izlaznog sloja koja otpušta neurone u slučaju ugrađivanja riječi. U word2vecu imamo mogućnosti kao što su hijerarhijski softmax i negativno uzorkovanje. Korištenjem aktivatora može se linearna funkcija pretvoriti u nelinearnu funkciju i pomoću nje se može implementirati složeni algoritam strojnog učenja.
Što je Gensim?
Gensim je alat za modeliranje tema koji je implementiran u python. Modeliranje teme otkriva skrivenu strukturu u tijelu teksta. Word2vec se uvozi iz Gensim alata. Imajte na umu da Gensim ne pruža samo implementaciju word2vec već i Doc2vec i FastText, ali ovo je uputstvo o word2vecu, pa ćemo se zadržati na trenutnoj temi.
Implementacija word2veca pomoću Gensima
Do sada smo raspravljali o tome što je word2vec, njegove različite arhitekture, zašto postoji pomak s vreće riječi na word2vec, odnos između word2vec i NLTK s aktivnim kodom i funkcijama aktiviranja. U ovom će odjeljku implementirati word2vec pomoću Gensima
Korak 1) Prikupljanje podataka
Prvi korak za implementaciju bilo kojeg modela strojnog učenja ili primjene obrade prirodnog jezika je prikupljanje podataka
Molimo pripazite na podatke kako biste stvorili inteligentni chatbot.
[{"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 razumijemo iz podataka
- Ovi podaci sadrže tri stvari, oznaku, uzorak i odgovore. Oznaka je namjera (koja je tema rasprave).
- Podaci su u JSON formatu.
- Uzorak je pitanje koje će korisnici postaviti botu
- Responses je odgovor koji će chatbot dati na odgovarajuće pitanje / obrazac.
Korak 2) Predobrada podataka.
Vrlo je važno obraditi sirove podatke. Ako se očišćeni podaci dopremaju u stroj, tada će model reagirati točnije i podatke će naučiti učinkovitije.
Ovaj korak uključuje uklanjanje zaustavnih riječi, korijena, nepotrebnih riječi itd. Prije nastavka važno je učitati podatke i pretvoriti ih u podatkovni okvir. Molimo pogledajte donji kod za takve
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Objašnjenje KODA.
- Kako su podaci u obliku json formata, stoga se json uvozi
- Datoteka se pohranjuje u varijablu
- Datoteka je otvorena i učitana u podatkovnu varijablu
Sada se podaci uvoze i vrijeme je za pretvaranje podataka u podatkovni okvir. Molimo pogledajte donji kod da biste vidjeli sljedeći korak
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Objašnjenje KODA
1. Podaci se pretvaraju u podatkovni okvir pomoću pandi koje su uvezene gore.
2. Pretvorit će popis u uzorcima stupaca u 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()]))
Objašnjenje koda
1. Engleske zaustavne riječi uvoze se pomoću modula zaustavne riječi iz nltk alata
2. Sve riječi teksta pretvaraju se u mala slova pomoću funkcije stanja i lambda funkcije. Lambda funkcija je anonimna funkcija.
3. Svi retci teksta u podatkovnom okviru provjeravaju se zbog interpunkcijskih znakova i oni se filtriraju.
4. Znakovi poput brojeva ili točaka uklanjaju se pomoću regularnog izraza.
5. Znamenke se uklanjaju iz teksta.
6. U ovoj se fazi uklanjaju zaustavne riječi.
7. Riječi se sada filtriraju, a različiti oblici iste riječi uklanjaju se lematizacijom. S njima smo završili s predobradom podataka.
Izlaz:
, 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
Korak 3) Izgradnja neuronske mreže pomoću word2vec
Sada je vrijeme za izgradnju modela pomoću Gensim modula word2vec. Moramo uvesti word2vec iz Gensima. Učinimo to, a zatim ćemo izgraditi i u završnoj fazi provjerit ćemo model na podacima u stvarnom vremenu.
from gensim.models import Word2Vec
Sada možemo uspješno izgraditi model koristeći Word2Vec. U sljedećem retku koda saznajte kako stvoriti model pomoću programa Word2Vec. Tekst se modelu daje u obliku popisa, pa ćemo tekst iz okvira podataka pretvoriti u popis pomoću donjeg koda
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šnjenja kodeksa
1. Stvorio je veći_popis gdje je dodan unutarnji popis. Ovo je format koji se uvodi u model Word2Vec.
2. Izvodi se petlja i ponavlja se svaki unos stupca uzoraka okvira podataka.
3. Svaki element uzoraka stupaca podijeljen je i pohranjen u unutarnji popis li
4. Unutarnji popis dodaje se s vanjskim popisom.
5. Ovaj je popis dostavljen modelu Word2Vec. Razumijemo neke od ovdje danih parametara
Min_count: Zanemarit će sve riječi ukupne frekvencije niže od ove.
Veličina: Govori o dimenzionalnosti riječi vektori.
Radnici: To su niti za osposobljavanje modela
Dostupne su i druge opcije, a neke su važne objašnjene u nastavku
Prozor: maksimalna udaljenost između trenutne i predviđene riječi u rečenici.
Sg: To je algoritam treninga i 1 za preskakanje grama i 0 za kontinuiranu vreću riječi. O njima smo detaljno razgovarali gore.
Hs: Ako je ovo 1, tada za trening koristimo hijerarhijski softmax, a ako je 0, koristi se negativno uzorkovanje.
Alfa: početna stopa učenja
Prikažimo donji konačni kod
#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)
Korak 4) Spremanje modela
Model se može spremiti u obliku kante i modela. Bin je binarni format. Molimo pogledajte donje retke za spremanje modela
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
Ovaj ćemo model koristiti za testiranje u stvarnom vremenu, poput Sličnih riječi, Različitih riječi i Najčešćih riječi.
Korak 5) Učitavanje modela i provođenje testiranja u stvarnom vremenu
Model se učitava pomoću donjeg koda
model = Word2Vec.load('model.bin')
Ako iz njega želite ispisati rječnik, to se vrši pomoću naredbe ispod
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
Primijenimo stvari praktično
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 podudara se s riječima iz isporučenih riječi
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Donijeli smo riječi "Vidimo se kasnije, hvala na posjeti". Ovo će ispisati najrazličitije riječi iz ovih riječi. Pokrenimo ovaj kod i pronađimo rezultat
Rezultat nakon izvršenja gornjeg koda.
Thanks
Korak 8) Pronalaženje sličnosti dviju riječi
To će reći rezultat u vjerojatnosti sličnosti između dvije riječi. Molimo pogledajte donji kod 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 kao u nastavku
0,13706
Slične riječi možete dalje pronać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
- Ugrađivanje riječi vrsta je predstavljanja riječi koja omogućuje razumijevanje riječi sličnog značenja algoritmima strojnog učenja
- Ugrađivanje riječi koristi se za izračunavanje sličnih riječi, stvaranje grupe srodnih riječi, značajka za klasifikaciju teksta, grupiranje dokumenata, obrada prirodnog jezika
- Word2vec je plitki dvoslojni model neuronske mreže za proizvodnju ugrađivanja riječi za bolji prikaz riječi
- Word2vec predstavlja riječi u predstavljanju vektorskog prostora. Riječi su predstavljene u obliku vektora, a postavljanje se vrši na takav način da se riječi sličnog značenja pojavljuju zajedno, a različite riječi nalaze se daleko
- Word2vec je koristio 2 arhitekture Continuous Bag of words (CBOW) i preskočio gram
- CBOW je nekoliko puta brži od preskakanja grama i pruža bolju učestalost za česte riječi, dok za preskakanje grama treba mala količina podataka o treningu i predstavlja čak rijetke riječi ili fraze.
- NLTK i word2vec mogu se zajedno koristiti za stvaranje moćnih aplikacija
- Aktivacijska funkcija neurona definira izlaz tog neurona s obzirom na skup ulaza. U word2vec. Softmax sloj (normalizirana eksponencijalna funkcija) je funkcija izlaznog sloja koja aktivira ili aktivira svaki čvor. Word2vec također ima dostupno negativno uzorkovanje
- Gensim je alat za modeliranje tema koji je implementiran u python