Încorporarea cuvântului și modelul Word2Vec cu exemplu
Ce este Word Embedding?
Încorporarea cuvintelor este un tip de reprezentare a cuvintelor care permite algoritmilor de învățare automată să înțeleagă cuvinte cu semnificații similare. Este o tehnică de modelare a limbajului și de învățare a caracteristicilor pentru a mapa cuvinte în vectori de numere reale folosind rețele neuronale, modele probabilistice sau reducerea dimensiunii pe matricea de co-ocurență a cuvintelor. Unele modele de încorporare a cuvintelor sunt Word2vec (Google), Glove (Stanford) și cele mai rapide (Facebook).
Încorporarea cuvântului este denumită și model semantic distribuit sau model de spațiu vectorial reprezentat distribuit sau semantic sau model de spațiu vectorial. Pe măsură ce citiți aceste nume, dați peste cuvântul semantic, care înseamnă clasificarea cuvintelor similare împreună. De exemplu, fructe precum măr, mango, banane ar trebui să fie plasate aproape, în timp ce cărțile vor fi departe de aceste cuvinte. Într-un sens mai larg, încorporarea cuvintelor va crea vectorul fructelor care va fi plasat departe de reprezentarea vectorială a cărților.
Unde se utilizează Word Embedding?
Încorporarea Word ajută la generarea de caracteristici, gruparea documentelor, clasificarea textului și sarcinile de procesare a limbajului natural. Să le enumerăm și să avem câteva discuții despre fiecare dintre aceste aplicații.
- Calculați cuvinte similare: Încorporarea cuvântului este utilizată pentru a sugera cuvinte similare cu cuvântul supus modelului de predicție. Împreună cu asta sugerează și cuvinte diferite, precum și cele mai comune cuvinte.
- Creați un grup de cuvinte înrudite: Este folosit pentru gruparea semantică care va grupa lucruri cu caracteristici similare împreună și diferite de la distanță.
- Caracteristica pentru clasificarea textului: Textul este mapat în matrice de vectori care este alimentat modelului pentru antrenament, precum și pentru predicție. Modelele de clasificare bazate pe text nu pot fi antrenate pe șir, astfel încât acest lucru va converti textul într-o formă care poate fi antrenată automat. În plus, caracteristicile sale de construire a ajutorului semantic în clasificarea bazată pe text.
- Gruparea documentelor: este o altă aplicație în care Word Embedding Word2vec este utilizat pe scară largă
- Procesarea limbajului natural: Există multe aplicații în care încorporarea cuvintelor este utilă și câștigă fazele de extracție a caracteristicilor, cum ar fi părți din etichetarea vorbirii, analiza sentimentală și analiza sintactică. Acum avem câteva cunoștințe despre încorporarea cuvintelor. De asemenea, se aruncă puțină lumină asupra diferitelor modele pentru a implementa încorporarea cuvintelor. Tot acest tutorial Word Embedding este axat pe unul dintre modele (Word2vec).
Ce este Word2vec?
Word2vec este o tehnică/model pentru a produce încorporarea cuvintelor pentru o mai bună reprezentare a cuvintelor. Este o metodă de procesare a limbajului natural care surprinde un număr mare de relații precise de cuvinte sintactice și semantice. Este o rețea neuronală superficială, cu două straturi, care poate detecta cuvinte sinonime și poate sugera cuvinte suplimentare pentru propoziții parțiale odată ce este instruită.
Înainte de a merge mai departe în acest tutorial Word2vec, vă rugăm să vedeți diferența dintre rețeaua neuronală superficială și cea profundă, așa cum se arată în diagrama exemplu de încorporare Word de mai jos:
Rețeaua neuronală superficială constă dintr-un singur strat ascuns între intrare și ieșire, în timp ce rețeaua neuronală profundă conține mai multe straturi ascunse între intrare și ieșire. Intrarea este supusă nodurilor, în timp ce stratul ascuns, precum și stratul de ieșire, conține neuroni.
Word2vec este o rețea cu două straturi în care există o intrare și un strat ascuns și ieșire.
Word2vec a fost dezvoltat de un grup de cercetători condus de Tomas Mikolov la Google. Word2vec este mai bun și mai eficient decât modelul de analiză semantică latentă.
De ce Word2vec?
Word2vec reprezintă cuvinte în reprezentarea spațiului vectorial. Cuvintele sunt reprezentate sub formă de vectori și plasarea se face în așa fel încât cuvintele cu sens similar să apară împreună și cuvintele diferite să fie situate departe. Aceasta este denumită și relație semantică. Rețelele neuronale nu înțeleg textul, ci doar numerele. Word Embedding oferă o modalitate de a converti textul într-un vector numeric.
Word2vec reconstruiește contextul lingvistic al cuvintelor. Înainte de a merge mai departe, să înțelegem, ce este contextul lingvistic? În scenariul general de viață, când vorbim sau scriem pentru a comunica, alți oameni încearcă să-și dea seama care este obiectivul propoziției. De exemplu, „Care este temperatura Indiei”, aici contextul este că utilizatorul dorește să știe „temperatura Indiei”, care este context. Pe scurt, obiectivul principal al unei propoziții este contextul. Cuvântul sau propoziția din jurul limbajului vorbit sau scris (dezvăluire) ajută la determinarea sensului contextului. Word2vec învață reprezentarea vectorială a cuvintelor prin contexte.
Ce face Word2vec?
Înainte de încorporarea Word
Este important să știm ce abordare este folosită înainte de încorporarea cuvântului și care sunt dezavantajele acesteia, apoi vom trece la subiectul cum sunt depășite demeritele prin încorporarea Word folosind abordarea Word2vec. În cele din urmă, vom muta modul în care funcționează Word2vec, deoarece este important să înțelegem că funcționează.
Abordare pentru analiza semantică latentă
Aceasta este abordarea care a fost folosită înainte de încorporarea cuvintelor. A folosit conceptul de sac de cuvinte în care cuvintele sunt reprezentate sub formă de vectori codificați. Este o reprezentare vectorială rară în care dimensiunea este egală cu dimensiunea vocabularului. Dacă cuvântul apare în dicționar, este numărat, altfel nu. Pentru a înțelege mai multe, vă rugăm să consultați programul de mai jos.
Exemplu 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())
ieșire:
[[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']
Explicarea codului
- CountVectorizer este modulul care este folosit pentru a stoca vocabularul bazat pe potrivirea cuvintelor în el. Acesta este importat din sklearn.
- Creați obiectul folosind clasa CountVectorizer.
- Scrieți datele în lista care urmează să fie montată în CountVectorizer.
- Datele se potrivesc în obiectul creat din clasa CountVectorizer.
- Aplicați o abordare de tip sac de cuvinte pentru a număra cuvintele din date folosind vocabular. Dacă cuvântul sau simbolul nu este disponibil în vocabular, atunci această poziție de index este setată la zero.
- Variabila din linia 5 care este x este convertită într-o matrice (metodă disponibilă pentru x). Aceasta va furniza numărul fiecărui jeton din propoziția sau lista furnizată în rândul 3.
- Aceasta va afișa caracteristicile care fac parte din vocabular atunci când este montat folosind datele din rândul 4.
În abordarea semantică latentă, rândul reprezintă cuvinte unice, în timp ce coloana reprezintă numărul de când acel cuvânt apare în document. Este o reprezentare a cuvintelor sub forma matricei documentului. Frecvența inversă a documentului termen-frecvență (TFIDF) este folosită pentru a număra frecvența cuvintelor din document, care este frecvența termenului din document/frecvența termenului în întregul corpus.
Deficiența metodei Bag of Words
- Ignoră ordinea cuvântului, de exemplu, acest lucru este rău = rău este acesta.
- Ignoră contextul cuvintelor. Să presupunem că dacă scriu propoziția „El iubea cărțile. Educația se găsește cel mai bine în cărți”. Ar crea doi vectori unul pentru „El iubea cărțile” și altul pentru „Educația se găsește cel mai bine în cărți”. Le-ar trata pe ambele ortogonale, ceea ce le face independente, dar, în realitate, sunt legate între ele
Pentru a depăși aceste limitări, a fost dezvoltată încorporarea de cuvinte și Word2vec este o abordare pentru implementarea acestora.
Cum funcționează Word2vec?
Word2vec învață cuvântul prezicând contextul înconjurător. De exemplu, să luăm cuvântul „El iubeste Fotbal."
Vrem să calculăm Word2vec pentru cuvântul: iubiri.
Presupune
loves = Vin. P(Vout / Vin) is calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
Cuvânt iubeste se deplasează peste fiecare cuvânt din corpus. Relația sintactică și semantică dintre cuvinte este codificată. Acest lucru vă ajută să găsiți cuvinte similare și analogii.
Toate caracteristicile aleatorii ale cuvântului iubeste este calculată. Aceste caracteristici sunt modificate sau actualizate cu privire la cuvintele vecine sau de context cu ajutorul a Propagarea înapoi metodă.
Un alt mod de a învăța este că dacă contextul a două cuvinte este similar sau două cuvinte au caracteristici similare, atunci astfel de cuvinte sunt legate.
Word2vec Architectură
Există două arhitecturi folosite de Word2vec:
- Pungă continuă de cuvinte (CBOW)
- Sari peste gram
Înainte de a merge mai departe în acest tutorial Word2vec, să discutăm de ce aceste arhitecturi sau modele sunt importante din punct de vedere al reprezentării cuvintelor. Învățarea reprezentării cuvintelor este în esență nesupravegheată, dar sunt necesare ținte/etichete pentru a antrena modelul. Skip-gram și CBOW convertesc reprezentarea nesupravegheată în formă supravegheată pentru antrenamentul modelului.
În CBOW, cuvântul curent este prezis folosind fereastra ferestrelor de context din jur. De exemplu, dacă wI-1,wI-2,wi + 1,wi + 2sunt date cuvinte sau context, acest model va oferi wi
Skip-Gram efectuează opusul CBOW, ceea ce implică faptul că prezice secvența sau contextul dat din cuvânt. Puteți inversa exemplul pentru a-l înțelege. Dacă wi este dat, aceasta va prezice contextul sau wI-1,wI-2,wi + 1,wi+2.
Word2vec oferă o opțiune de a alege între CBOW (Bac continuu de cuvinte) și skim-gram. Astfel de parametri sunt furnizați în timpul antrenamentului modelului. Se poate avea opțiunea de a utiliza eșantionarea negativă sau stratul softmax ierarhic.
Pungă continuă de cuvinte
Să desenăm un exemplu de diagramă Word2vec simplă pentru a înțelege punga continuă a arhitecturii cuvintelor.
Să calculăm ecuațiile matematic. Să presupunem că V este dimensiunea vocabularului și N este dimensiunea stratului ascuns. Intrarea este definită ca { xI-1, Xi-2, xi+1, xi + 2}. Obținem matricea de ponderi prin înmulțirea V * N. O altă matrice se obține prin înmulțirea vectorului de intrare cu matricea de ponderi. Acest lucru poate fi înțeles și prin următoarea ecuație.
h=xitW
unde xit? W sunt vectorul de intrare și, respectiv, matricea de greutate,
Pentru a calcula potrivirea dintre context și cuvântul următor, consultați ecuația de mai jos
u=reprezentare prezisă*h
unde se obține reprezentarea prevăzută modelul?h în ecuația de mai sus.
Model Skip-Gram
Abordarea Skip-Gram este folosită pentru a prezice o propoziție având în vedere un cuvânt introdus. Pentru a înțelege mai bine, să desenăm diagrama așa cum se arată în exemplul Word2vec de mai jos.
Se poate trata ca reversul modelului Continuous bag of word, unde intrarea este cuvântul și modelul furnizează contextul sau secvența. De asemenea, putem concluziona că ținta este alimentată la stratul de intrare și de ieșire este replicată de mai multe ori pentru a se adapta la numărul ales de cuvinte de context. Vectorul de eroare din tot stratul de ieșire este însumat pentru a ajusta greutăți printr-o metodă de propagare inversă.
Ce model sa aleg?
CBOW este de câteva ori mai rapid decât skip gram și oferă o frecvență mai bună pentru cuvintele frecvente, în timp ce skip gram necesită o cantitate mică de date de antrenament și reprezintă chiar și cuvinte sau fraze rare.
Relația dintre Word2vec și NLTK
NLTK este trusa de instrumente pentru limbajul natural. Este folosit pentru preprocesarea textului. Se pot face diferite operații, cum ar fi etichetarea unor părți ale vorbirii, lematizarea, stemmingul, eliminarea cuvintelor oprite, eliminarea cuvintelor rare sau a cuvintelor cel mai puțin utilizate. Ajută la curățarea textului, precum și la pregătirea caracteristicilor din cuvintele eficiente. În alt mod, Word2vec este folosit pentru potrivirea semantică (articole strâns legate între ele) și sintactică (secvență). Folosind Word2vec, puteți găsi cuvinte similare, cuvinte diferite, reducere dimensională și multe altele. O altă caracteristică importantă a Word2vec este de a converti reprezentarea dimensională superioară a textului în dimensională inferioară a vectorilor.
Unde să folosiți NLTK și Word2vec?
Dacă trebuie să îndepliniți unele sarcini cu scop general, așa cum s-a menționat mai sus, cum ar fi tokenizarea, etichetarea POS și analizarea, trebuie să utilizați NLTK, în timp ce pentru a prezice cuvinte în funcție de un anumit context, modelarea subiectului sau similaritatea documentelor, trebuie să utilizați Word2vec.
Relația dintre NLTK și Word2vec cu ajutorul codului
NLTK și Word2vec pot fi folosite împreună pentru a găsi reprezentări similare de cuvinte sau potriviri sintactice. Setul de instrumente NLTK poate fi folosit pentru a încărca multe pachete care vin cu NLTK, iar modelul poate fi creat folosind Word2vec. Acesta poate fi apoi testat pe cuvinte în timp real. Să vedem combinația ambelor în codul următor. Înainte de a continua procesarea, vă rugăm să aruncați o privire asupra corpurilor oferite de NLTK. Puteți descărca folosind comanda
nltk(nltk.download('all'))
Vă rugăm să vedeți captura de ecran pentru cod.
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)
ieșire:
[('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)]
Explicația Codului
- Este importată biblioteca nltk de unde puteți descărca corpus abc pe care îl vom folosi în pasul următor.
- Gensim este importat. Dacă Gensim Word2vec nu este instalat, vă rugăm să îl instalați folosind comanda „pip3 install gensim”. Vă rugăm să vedeți captura de ecran de mai jos.
- importați corpus abc care a fost descărcat folosind nltk.download('abc').
- Transmite fișierele la modelul Word2vec care este importat folosind Gensim ca propoziții.
- Vocabularul este stocat sub forma variabilei.
- Modelul este testat pe un exemplu de știință a cuvintelor, deoarece aceste fișiere sunt legate de știință.
- Aici cuvântul similar „știință” este prezis de model.
Activatori și Word2Vec
Funcția de activare a neuronului definește ieșirea acelui neuron având în vedere un set de intrări. Inspirat biologic de o activitate din creierul nostru în care diferiți neuroni sunt activați folosind diferiți stimuli. Să înțelegem funcția de activare prin următoarea diagramă.
Aici x1,x2,..x4 este nodul rețelei neuronale.
w1, w2, w3 este greutatea nodului,
? este suma totală a greutății și valorii nodului care funcționează ca funcție de activare.
De ce funcția de activare?
Dacă nu este utilizată nicio funcție de activare, ieșirea ar fi liniară, dar funcționalitatea funcției liniare este limitată. Pentru a obține funcționalități complexe, cum ar fi detectarea obiectelor, clasificarea imaginilor, tastarea textului folosind voce și multe alte ieșiri neliniare, este nevoie de o funcție de activare.
Cum este calculat stratul de activare în încorporarea cuvântului (Word2vec)
Softmax Layer (funcția exponențială normalizată) este funcția stratului de ieșire care activează sau declanșează fiecare nod. O altă abordare utilizată este Softmax ierarhic în care complexitatea este calculată de O(log2V) în care softmax este O(V) unde V este dimensiunea vocabularului. Diferența dintre acestea este reducerea complexității în stratul ierarhic softmax. Pentru a înțelege funcționalitatea sa (Hierarhic softmax), vă rugăm să priviți exemplul de încorporare Word de mai jos:
Să presupunem că vrem să calculăm probabilitatea de a observa cuvântul dragoste dat un anumit context. Fluxul de la rădăcină la nodul frunză va fi prima mutare către nodul 2 și apoi către nodul 5. Deci, dacă am avut dimensiunea vocabularului de 8, sunt necesare doar trei calcule. Deci permite descompunerea, calculul probabilității unui cuvânt (dragoste).
Ce alte opțiuni sunt disponibile în afară de Hierarchical Softmax?
Dacă vorbim într-un sens general, opțiunile de încorporare a cuvintelor disponibile sunt Softmax diferențiat, CNN-Softmax, Eșantionare importanță, Eșantionare importanță adaptivă, Estimări contrastante de zgomot, Eșantionare negativă, Auto-normalizare și Normalizare rare.
Vorbind în special despre Word2vec, avem eșantionare negativă disponibilă.
Eșantionarea negativă este o modalitate de a eșantiona datele de antrenament. Este oarecum ca o coborâre a gradientului stocastic, dar cu o oarecare diferență. Eșantionarea negativă caută doar exemple de antrenament negative. Se bazează pe estimarea contrastantă a zgomotului și eșantionează aleatoriu cuvintele, nu în context. Este o metodă de antrenament rapidă și alege contextul la întâmplare. Dacă cuvântul prezis apare în contextul ales aleatoriu, ambii vectori sunt aproape unul de celălalt.
Ce concluzie se poate trage?
Activatorii activează neuronii la fel cum neuronii noștri sunt declanșați folosind stimulii externi. Stratul Softmax este una dintre funcțiile stratului de ieșire care activează neuronii în cazul înglobărilor de cuvinte. În Word2vec avem opțiuni precum softmax ierarhic și eșantionare negativă. Folosind activatori, se poate converti funcția liniară în funcție neliniară, iar un algoritm complex de învățare automată poate fi implementat folosind astfel.
Ce este Gensim?
Gensim este un set de instrumente de modelare a subiectelor și procesare a limbajului natural, care este implementat în Python și Cython. Setul de instrumente Gensim permite utilizatorilor să importe Word2vec pentru modelarea subiectului pentru a descoperi structura ascunsă în corpul textului. Gensim oferă nu numai o implementare a Word2vec, ci și pentru Doc2vec și FastText.
Acest tutorial este despre Word2vec, așa că ne vom menține la subiectul curent.
Cum să implementați Word2vec folosind Gensim
Până acum am discutat despre ce este Word2vec, diferitele sale arhitecturi, de ce există o trecere de la un sac de cuvinte la Word2vec, relația dintre Word2vec și NLTK cu cod live și funcții de activare.
Mai jos este metoda pas cu pas pentru a implementa Word2vec folosind Gensim:
Pasul 1) Colectarea datelor
Primul pas pentru a implementa orice model de învățare automată sau pentru a implementa procesarea limbajului natural este colectarea datelor
Vă rugăm să respectați datele pentru a construi un chatbot inteligent, așa cum se arată în exemplul Gensim Word2vec de mai jos.
[{"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"] } ]
Iată ce înțelegem din date
- Aceste date conțin trei etichete, model și răspunsuri. Eticheta este intenția (care este subiectul discuției).
- Datele sunt în format JSON.
- Un model este o întrebare pe care utilizatorii o vor pune botului
- Răspunsurile este răspunsul pe care chatbot-ul îl va oferi la întrebarea/modelul corespunzător.
Pasul 2) Preprocesarea datelor
Este foarte important să procesați datele brute. Dacă datele curățate sunt transmise mașinii, atunci modelul va răspunde mai precis și va învăța datele mai eficient.
Acest pas implică eliminarea cuvintelor stop, a rădăcinii, a cuvintelor inutile etc. Înainte de a continua, este important să încărcați datele și să le convertiți într-un cadru de date. Vă rugăm să consultați codul de mai jos pentru acest lucru
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Explicația codului:
- Deoarece datele sunt sub formă de format json, json este importat
- Fișierul este stocat în variabilă
- Fișierul este deschis și încărcat în variabila de date
Acum datele sunt importate și este timpul să convertiți datele în cadru de date. Vă rugăm să consultați codul de mai jos pentru a vedea următorul pas
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Explicația codului:
1. Datele sunt convertite în cadru de date folosind panda care a fost importat mai sus.
2. Va converti lista în modele de coloană în șir.
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()]))
Explicația codului:
1. Cuvintele stop în limba engleză sunt importate folosind modulul cuvânt stop din setul de instrumente nltk
2. Toate cuvintele textului sunt convertite în minuscule folosind pentru condiție și funcția lambda. Funcția lambda este o funcție anonimă.
3. Toate rândurile de text din cadrul de date sunt verificate pentru punctuația de șir, iar acestea sunt filtrate.
4. Caracterele precum numerele sau punctul sunt eliminate folosind o expresie regulată.
5. Digits sunt eliminate din text.
6. Cuvintele stop sunt eliminate în această etapă.
7. Cuvintele sunt filtrate acum și forme diferite ale aceluiași cuvânt sunt eliminate folosind lematizare. Cu acestea, am terminat preprocesarea datelor.
ieșire:
, 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
Pasul 3) Construirea rețelei neuronale folosind Word2vec
Acum este timpul să construim un model folosind modulul Gensim Word2vec. Trebuie să importam Word2vec de la Gensim. Să facem asta, apoi vom construi și în etapa finală vom verifica modelul pe date în timp real.
from gensim.models import Word2Vec
Acum, în acest tutorial Gensim Word2vec, putem construi cu succes modelul folosind Word2Vec. Vă rugăm să consultați următoarea linie de cod pentru a afla cum să creați modelul folosind Word2Vec. Textul este furnizat modelului sub forma unei liste, așa că vom converti textul din cadru de date în listă folosind codul de mai jos
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)
Explicația codului:
1. S-a creat bigger_list unde este atașată lista interioară. Acesta este formatul care este alimentat modelului Word2Vec.
2. Bucla este implementată și fiecare intrare a coloanei modele a cadrului de date este iterată.
3. Fiecare element al modelelor de coloane este împărțit și stocat în lista interioară li
4. Lista interioară este atașată cu lista exterioară.
5. Această listă este furnizată modelului Word2Vec. Să înțelegem câțiva dintre parametrii furnizați aici
Număr_min: Va ignora toate cuvintele cu o frecvență totală mai mică decât aceasta.
Mărimea: Spune dimensionalitatea cuvântului vectori.
Muncitorii: Acestea sunt firele pentru a antrena modelul
Există și alte opțiuni disponibile, iar unele importante sunt explicate mai jos
Fereastră: Distanța maximă dintre cuvântul curent și cel prezis dintr-o propoziție.
Sg: Este un algoritm de antrenament și 1 pentru skip-gram și 0 pentru un sac continuu de cuvinte. Am discutat despre acestea în detaliu mai sus.
Hs: Dacă acesta este 1, atunci folosim softmax ierarhic pentru antrenament și dacă 0, atunci se utilizează eșantionarea negativă.
Alfa: Rata de învățare inițială
Să afișăm codul final mai jos:
#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)
Pasul 4) Salvarea modelului
Modelul poate fi salvat sub formă de coș și formular de model. Bin este formatul binar. Consultați rândurile de mai jos pentru a salva modelul
model.save("word2vec.model") model.save("model.bin")
Explicația codului de mai sus
1. Modelul este salvat sub forma unui fișier .model.
2. modelul este salvat sub formă de fișier .bin
Vom folosi acest model pentru a face teste în timp real, cum ar fi cuvinte similare, cuvinte diferite și cele mai comune cuvinte.
Pasul 5) Încărcarea modelului și efectuarea testării în timp real
Modelul este încărcat folosind codul de mai jos:
model = Word2Vec.load('model.bin')
Dacă doriți să imprimați vocabularul din acesta, se face folosind comanda de mai jos:
vocab = list(model.wv.vocab)
Vă rugăm să vedeți rezultatul:
['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']
Pasul 6) Verificarea celor mai multe cuvinte similare
Să implementăm lucrurile practic:
similar_words = model.most_similar('thanks') print(similar_words)
Vă rugăm să vedeți rezultatul:
[('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)]
Pasul 7) Nu se potrivește cu cuvântul din cuvintele furnizate
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split()) print(dissimlar_words)
Noi am furnizat cuvintele „Ne vedem mai târziu, mulțumesc pentru vizită”. Acest lucru va tipăriți cele mai diferite cuvinte din aceste cuvinte. Să rulăm acest cod și să găsim rezultatul
Rezultatul după executarea codului de mai sus:
Thanks
Pasul 8) Găsirea asemănării dintre două cuvinte
Acest lucru va indica rezultatul probabilității de similitudine între două cuvinte. Consultați codul de mai jos cum să executați această secțiune.
similarity_two_words = model.similarity('please','see') print("Please provide the similarity between these two words:") print(similarity_two_words)
Rezultatul codului de mai sus este ca mai jos
0.13706
Puteți găsi în continuare cuvinte similare executând codul de mai jos
similar = model.similar_by_word('kind') print(similar)
Ieșirea codului de mai sus:
[('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)]
Concluzie
- Word Embedding este un tip de reprezentare a cuvintelor care permite cuvintelor cu semnificație similară să fie înțelese de algoritmii de învățare automată.
- Încorporarea cuvintelor este folosită pentru a calcula cuvinte similare, Crearea unui grup de cuvinte înrudite, Caracteristica pentru clasificarea textului, Gruparea documentelor, Procesarea limbajului natural
- Word2vec a explicat: Word2vec este un model de rețea neuronală superficială cu două straturi pentru a produce înglobare de cuvinte pentru o mai bună reprezentare a cuvintelor
- Word2vec reprezintă cuvinte în reprezentarea spațiului vectorial. Cuvintele sunt reprezentate sub formă de vectori și plasarea se face în așa fel încât cuvintele cu sens similar să apară împreună și cuvintele diferite să fie situate departe
- Algoritmul Word2vec folosește 2 arhitecturi Continuous Bag of words (CBOW) și skip gram
- CBOW este de câteva ori mai rapid decât skip gram și oferă o frecvență mai bună pentru cuvintele frecvente, în timp ce skip gram necesită o cantitate mică de date de antrenament și reprezintă chiar și cuvinte sau fraze rare.
- NLTK și Word2vec pot fi folosite împreună pentru a crea aplicații puternice
- Funcția de activare a neuronului definește ieșirea acelui neuron având în vedere un set de intrări. În Word2vec. Softmax Layer (funcția exponențială normalizată) este funcția stratului de ieșire care activează sau declanșează fiecare nod. Word2vec are, de asemenea, eșantionare negativă disponibilă
- Gensim este un set de instrumente de modelare a subiectelor care este implementat în python