Tutorial de încorporare a cuvintelor: word2vec folosind Gensim (EXEMPLU)

Cuprins:

Anonim

Ce este Word Embedding?

Încorporarea cuvintelor este un tip de reprezentare a cuvintelor care permite înțelegerea cuvintelor cu semnificație similară prin algoritmi de învățare automată. Din punct de vedere tehnic, este o mapare a cuvintelor în vectori de numere reale utilizând rețeaua neuronală, modelul probabilistic sau reducerea dimensiunii pe matricea de co-apariție a cuvintelor. Este modelarea limbajului și tehnica de învățare a caracteristicilor. Incorporarea cuvintelor este o modalitate de a efectua maparea utilizând o rețea neuronală. Există diferite modele de încorporare a cuvintelor disponibile, cum ar fi word2vec (Google), Glove (Stanford) și cel mai rapid (Facebook).

Încorporarea cuvintelor este, de asemenea, numită model semantic distribuit sau spațiu vectorial reprezentat sau semantic distribuit sau model de spațiu vectorial. Pe măsură ce citiți aceste nume, dați peste cuvântul semantic, ceea ce înseamnă categorisirea cuvintelor similare împreună. De exemplu, fructele precum mărul, mango, banana ar trebui să fie așezate 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.

În acest tutorial, veți învăța

  • Ce este Word Embedding?
  • Unde se folosește Word Embedding?
  • Ce este word2vec?
  • Ce face word2vec?
  • De ce Word2vec?
  • Arhitectura Word2vec
  • Pungă continuă de cuvinte.
  • Skip-Gram Model
  • Relația dintre Word2vec și NLTK
  • Activatori și Word2Vec
  • Ce este Gensim?
  • Implementarea codului word2vec folosind Gensim

Unde se folosește Word Embedding?

Incorporarea cuvintelor ajută la generarea de caracteristici, gruparea documentelor, clasificarea textului și sarcinile de procesare a limbajului natural. Să le enumerăm și să discutăm despre fiecare dintre aceste aplicații.

  • Calculați cuvinte similare: încorporarea cuvintelor este utilizată pentru a sugera cuvinte similare cuvântului care este supus modelului de predicție. Împreună cu aceasta, sugerează, de asemenea, cuvinte diferite, precum și cele mai frecvente cuvinte.
  • Creați un grup de cuvinte înrudite: este folosit pentru gruparea semantică, care va grupa lucruri cu caracteristici similare împreună și diferite de departe.
  • Caracteristică pentru clasificarea textului: Textul este mapat în matrici de vectori care este alimentat modelului pentru antrenament, precum și pentru predicție. Modelele de clasificare bazate pe text nu pot fi instruite pe șir, deci acest lucru va converti textul într-o formă care poate fi antrenată automat. Mai departe caracteristicile sale de a construi ajutor semantic în clasificarea bazată pe text.
  • Gruparea documentelor este o altă aplicație în care încorporarea cuvintelor este utilizată pe scară largă
  • Procesarea limbajului natural: Există multe aplicații în care încorporarea cuvintelor este utilă și câștigă faze de extragere a caracteristicilor, cum ar fi părți ale etichetării vorbirii, analize sentimentale și analize sintactice.

    Acum avem cunoștințe despre încorporarea cuvintelor. Oarecare lumină este aruncată și asupra diferitelor modele pentru a implementa încorporarea cuvintelor. Tot acest tutorial este axat pe unul dintre modele (word2vec).

Ce este word2vec?

Word2vec este tehnica / modelul pentru a produce încorporarea cuvintelor pentru o mai bună reprezentare a cuvintelor. Captează un număr mare de relații sintactice și semantice precise. Este o rețea neuronală cu două straturi de mică adâncime. Înainte de a merge mai departe, vă rugăm să vedeți diferența dintre rețeaua neuronală superficială și cea profundă:

Rețeaua neuronală superficială constă din singurul 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.

Figura: Învățare superficială vs. Învățare profundă

word2vec este o rețea cu două straturi în care există un strat ascuns și o 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ă.

Ce face 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 o relație semantică. Rețelele neuronale nu înțeleg textul, în schimb, înțeleg doar numerele. Încorporarea cuvintelor oferă o modalitate de a converti textul într-un vector numeric.

Word2vec reconstituie contextul lingvistic al cuvintelor. Înainte de a merge mai departe, să ne î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 vrea să știe „temperatura Indiei” care este contextul. Pe scurt, obiectivul principal al unei propoziții este contextul. Cuvântul sau propoziția din jurul limbii vorbite sau scrise (dezvăluire) ajută la determinarea semnificației contextului. Word2vec învață reprezentarea vectorială a cuvintelor prin contexte.

De ce Word2vec?

Înainte de încorporarea cuvântului

Este important să știm ce abordare este utilizată înainte de încorporarea cuvintelor și care sunt dezavantajele acesteia și apoi vom trece la subiectul despre cum sunt depășite demeritele prin încorporarea Word utilizând abordarea word2vec. În cele din urmă, vom muta cum funcționează word2vec, deoarece este important să înțelegem că funcționează.

Abordare pentru analiza semantică latentă

Aceasta este abordarea care a fost utilizată înainte de încorporarea cuvintelor. A folosit conceptul de Bag of words î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, acesta este numărat, altfel nu. Pentru a înțelege mai multe, vă rugăm să consultați programul de mai jos.

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

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

  1. CountVectorizer este modulul care este utilizat pentru a stoca vocabularul bazat pe potrivirea cuvintelor din el. Aceasta este importată din sklearn
  2. Faceți obiectul folosind clasa CountVectorizer.
  3. Scrieți datele în lista care urmează să fie inserată în CountVectorizer.
  4. Datele se încadrează în obiectul creat din clasa CountVectorizer.
  5. Aplicați o metodă de abordare a cuvintelor pentru a număra cuvintele din date folosind vocabular. Dacă cuvântul sau simbolul nu sunt disponibile în vocabular, atunci această poziție de index este setată la zero.
  6. 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 prevăzută în linia 3.
  7. Aceasta va arăta caracteristicile care fac parte din vocabular atunci când este montat folosind datele din Linia 4.

În abordarea semantică latentă, rândul reprezintă cuvinte unice, în timp ce coloana reprezintă numărul de apariții ale cuvântului în document. Este o reprezentare a cuvintelor sub forma matricei documentului. Frecvența inversă a documentului (TFIDF) este utilizată pentru a număra frecvența cuvintelor din document, care este frecvența termenului din document / frecvența termenului din întregul corpus.

Deficiența metodei Bag of Words

  • Acesta 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 a iubit cărțile. Educația se găsește cel mai bine în cărți". Ar crea doi vectori, unul pentru „A iubit cărțile” și altul pentru „Educația se găsește cel mai bine în cărți”. Le-ar trata pe amândouă ortogonal, ceea ce le face independente, dar în realitate, ele sunt legate între ele

Pentru a depăși aceste limitări, s-a dezvoltat încorporarea cuvintelor și word2vec este o abordare pentru a implementa astfel de cuvinte.

Cum funcționează Word2vec?

Word2vec învață cuvântul prin prezicerea contextului său din jur. De exemplu, să luăm cuvântul „ Iubește fotbalul”.

Vrem să calculăm cuvântul2vec pentru cuvântul: iubiri.

Presupune

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

Cuvântul iubește se mișcă peste fiecare cuvânt din corpus. Relația sintactică, precum și relația semantică dintre cuvinte este codificată. Acest lucru ajută la găsirea unor cuvinte similare și analogii.

Toate caracteristicile aleatorii ale cuvântului iubiri sunt calculate. Aceste caracteristici sunt modificate sau actualizate cu privire la cuvintele vecine sau contextuale cu ajutorul unei metode de propagare înapoi.

Un alt mod de învățare este că, dacă contextul a două cuvinte este similar sau două cuvinte au caracteristici similare, atunci aceste cuvinte sunt înrudite.

Arhitectura Word2vec

Există două arhitecturi utilizate de word2vec

  1. Pungă continuă de cuvinte (CBOW)
  2. sări peste gram

Înainte de a merge mai departe, 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 instrui modelul. Skip-gram și CBOW convertesc reprezentarea nesupravegheată într-o formă supravegheată pentru formarea modelului.

În CBOW, cuvântul curent este prezis folosind fereastra ferestrelor contextuale înconjurătoare. De exemplu, dacă w i-1 , w i-2 , w i + 1 , w i + 2 sunt date cuvinte sau context, acest model va furniza w i

Skip-Gram funcționează opus 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ă w i este dat, acest lucru va prezice contextul sau w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec oferă o opțiune de a alege între CBOW (Bag continuu de cuvinte) și skim-gram. Astfel de parametri sunt furnizați în timpul instruirii modelului. Se poate avea opțiunea de a utiliza eșantionare negativă sau strat ierarhic softmax.

Pungă continuă de cuvinte.

Să desenăm o diagramă simplă pentru a înțelege pachetul continuu de arhitectură de cuvinte.

Figura Continuous Bag of Word Architecture

Să calculăm ecuațiile matematic. Să presupunem că V este dimensiunea vocabularului și N este dimensiunea stratului ascuns. Intrarea este definită ca {x i-1 , x i-2, x i + 1, x i + 2 }. Obținem matricea greutății înmulțind V * N. O altă matrice se obține înmulțind vectorul de intrare cu matricea greutății. Acest lucru poate fi înțeles și prin următoarea ecuație.

h = xi t W

unde xi t ∧ 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 anticipată * h

unde se obține reprezentarea prezisă model∧h în ecuația de mai sus.

Skip-Gram Model

Abordarea Skip-Gram este utilizată pentru a prezice o propoziție având un cuvânt introdus. Pentru a o înțelege mai bine, permiteți-ne să desenăm diagrama.

Figura Model Skip-Gram

Se poate trata ca inversul modelului Continuous bag of word, unde intrarea este cuvântul și modelul oferă contextul sau secvența. Putem concluziona, de asemenea, că ținta este alimentată la stratul de intrare și de ieșire este reprodusă de mai multe ori pentru a se potrivi cu numărul ales de cuvinte de context. Vectorul de eroare din întregul strat de ieșire este rezumat pentru a regla greutățile printr-o metodă de propagare înapoi.

Ce model să alegi?

CBOW este de câteva ori mai rapid decât sări peste gram și oferă o frecvență mai bună pentru cuvintele frecvente, în timp ce sări de gram are nevoie de o cantitate mică de date de antrenament și reprezintă chiar cuvinte sau expresii rare.

Relația dintre Word2vec și NLTK

NLTK este un set de instrumente de limbaj natural. Este folosit pentru preprocesarea textului. Se pot face operații diferite, cum ar fi părți ale etichetării vorbirii, lematizarea, stemming-ul, oprirea eliminării cuvintelor, eliminarea cuvintelor rare sau a celor mai puțin folosite. Ajută la curățarea textului, precum și la pregătirea caracteristicilor din cuvintele eficiente. Pe de altă parte, word2vec este utilizat pentru potrivirea semantică (articole strâns legate împreună) și sintactic (secvența). 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 dimensiunea inferioară a vectorilor.

Unde să utilizați NLTK și Word2vec?

Dacă trebuie să îndepliniți unele sarcini de uz general, așa cum s-a menționat mai sus, cum ar fi tokenizarea, etichetarea POS și analiza, trebuie să folosiți NLTK, în timp ce pentru prezicerea cuvintelor în funcție de context, modelarea subiectului sau similitudinea documentelor, trebuie să utilizați Word2vec.

Relația dintre NLTK și Word2vec cu ajutorul codului

NLTK și Word2vec pot fi utilizate împreună pentru a găsi reprezentarea cuvintelor similare sau potrivirea sintactică. Setul de instrumente NLTK poate fi folosit pentru a încărca multe pachete care vin cu NLTK, iar modelul poate fi creat folosind word2vec. Poate fi apoi testat pe cuvintele în timp real. Să vedem combinația ambelor în următorul cod. Înainte de a prelucra în continuare, vă rugăm să aruncați o privire asupra corpurilor pe care le oferă NLTK. Puteți descărca folosind comanda

nltk(nltk.download('all'))

Figura Corpora descărcată utilizând NLTK

Vă rugăm să consultați captura de ecran pentru cod.

import nltkimport gensimfrom nltk.corpus import abcmodel= 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

  1. Este importată biblioteca nltk, de unde puteți descărca corpul abc pe care îl vom folosi în pasul următor.
  2. Gensim este importat. Dacă Gensim nu este instalat, vă rugăm să îl instalați folosind comanda „pip3 install gensim”. Vă rugăm să consultați captura de ecran de mai jos.

Figura Instalarea Gensim folosind PIP

  1. importați corpusul abc care a fost descărcat folosind nltk.download („abc”).
  2. Treceți fișierele la modelul word2vec care este importat folosind Gensim ca propoziții.
  3. Vocabularul este stocat sub forma variabilei.
  4. Modelul este testat pe cuvântul știință eșantion, deoarece aceste fișiere sunt legate de știință.
  5. Aici cuvântul similar al „științei” 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 neuroni diferiți sunt activați folosind stimuli diferiți. Să înțelegem funcția de activare prin următoarea diagramă.

Figura Înțelegerea funcției de activare

Aici x1, x2, ... x4 este nodul rețelei neuronale.

w1, w2, w3 este greutatea nodului,

∑ este însumarea tuturor 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 utilizând vocea și multe alte ieșiri neliniare este necesară, care se realizează utilizând funcția de activare.

Cum se calculează stratul de activare în încorporarea cuvântului (word2vec)

Softmax Layer (funcție 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 (log 2 V) î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 (softmax ierarhică), vă rugăm să consultați exemplul de mai jos:

Figura Structura ierarhică a arborelui softmax

Să presupunem că dorim să calculăm probabilitatea de a observa cuvântul dragoste într-un anumit context. Fluxul de la rădăcină la nodul frunzei va fi prima mutare la nodul 2 și apoi la nodul 5. Așadar, dacă am avut dimensiunea vocabularului 8, sunt necesare doar trei calcule. Deci permite descompunerea, calcularea probabilității unui singur cuvânt ( dragoste ).

Ce alte opțiuni sunt disponibile în afară de Hierarchical Softmax?

Dacă vorbiți într-un sens general pentru opțiunile de încorporare a cuvintelor disponibile sunt Softmax diferențiat, CNN-Softmax, eșantionare de importanță, eșantionare adaptivă de importanță, estimări contrastive de zgomot, eșantionare negativă, auto-normalizare și normalizare rară.

Vorbind în mod specific despre Word2vec, avem disponibile eșantionări negative.

Eșantionarea negativă este o modalitate de eșantionare a datelor de instruire. Se aseamănă oarecum cu descendența stocastică în gradient, dar cu o oarecare diferență. Eșantionarea negativă caută doar exemple de antrenament negativ. Se bazează pe estimarea contrastivă a zgomotului și eșantionează aleatoriu cuvinte, nu în context. Este o metodă rapidă de antrenament și alege contextul la întâmplare. Dacă cuvântul prezis apare în contextul ales aleatoriu, ambii vectori sunt apropiați unul de celălalt.

Ce concluzie se poate trage?

Activatorii trag neuronii la fel cum neuronii noștri sunt declanșați folosind stimuli externi. Stratul Softmax este una dintre funcțiile stratului de ieșire care declanșează neuronii în cazul încorporării cuvintelor. Î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 care este implementat în python. Modelarea subiectului este descoperirea structurii ascunse în corpul textului. Word2vec este importat din setul de instrumente Gensim. Vă rugăm să rețineți că Gensim oferă nu numai o implementare a word2vec, ci și Doc2vec și FastText, dar acest tutorial este despre word2vec, așa că vom rămâne la subiectul curent.

Implementarea word2vec folosind Gensim

Până acum am discutat despre ce este word2vec, diferitele sale arhitecturi, de ce există o trecere de la o pungă de cuvinte la word2vec, relația dintre word2vec și NLTK cu codul live și funcțiile de activare. În această secțiune, va implementa word2vec folosind Gensim

Pasul 1) Colectarea datelor

Primul pas pentru implementarea oricărui model de învățare automată sau implementarea procesării limbajului natural este colectarea de date

Vă rugăm să respectați datele pentru a crea un chatbot inteligent.

[{"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 elemente etichetă, 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ăspunsuri este răspunsul pe care chatbot îl va oferi la întrebarea / modelul corespunzător.

Pasul 2) Preprocesarea datelor.

Este foarte important să prelucrați datele brute. Dacă datele curățate sunt introduse în mașină, modelul va răspunde mai precis și va învăța datele mai eficient.

Acest pas implică eliminarea cuvintelor de oprire, a cuvintelor stemming, 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 jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)

Explicația CODULUI.

  1. Deoarece datele sunt sub forma json, prin urmare, json este importat
  2. Fișierul este stocat în variabilă
  3. Fișierul este deschis și încărcat în variabila de date

Acum datele sunt importate și este timpul să le convertiți în cadru de date. Vă rugăm să consultați codul de mai jos pentru a vedea pasul următor

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

Explicația CODULUI

1. Datele sunt convertite în cadru de date folosind panda importate mai sus.

2. Va converti lista în modele de coloane în șir.

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

Explicarea codului

1. Cuvintele de oprire în limba engleză sunt importate folosind modulul de cuvinte de oprire 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 textului din cadrul de date sunt verificate pentru punctuațiile șirului, iar acestea sunt filtrate.

4. Caracterele precum numerele sau punctele sunt eliminate cu ajutorul unei expresii regulate.

5. Cifrele sunt eliminate din text.

6. Cuvintele de oprire sunt eliminate în acest stadiu.

7. Cuvintele sunt filtrate acum și o formă diferită a aceluiași cuvânt este eliminată folosind lematizarea. Cu acestea, am terminat preprocesarea datelor.

Ieșire:

, 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

Pasul 3) Construirea rețelei neuronale folosind word2vec

Acum este timpul să construim un model folosind modulul Gensim word2vec. Trebuie să importăm word2vec de la Gensim. Să facem acest lucru și apoi vom construi și în etapa finală vom verifica modelul pe date în timp real.

from gensim.models import Word2Vec

Acum, 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 utilizând Word2Vec. Textul este furnizat modelului sub formă de listă, 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ții ale codului

1. S-a creat lista mai mare unde este adăugată lista interioară. Acesta este formatul care este alimentat modelului Word2Vec.

2. Bucla este implementată și fiecare intrare a coloanei tipare 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 anexată cu lista exterioară.

5. Această listă este furnizată modelului Word2Vec. Să înțelegem câțiva dintre parametrii furnizați aici

Min_count: va ignora toate cuvintele cu o frecvență totală mai mică decât aceasta.

Dimensiune: Indică dimensionalitatea cuvintelor vectori.

Muncitori: Acestea sunt firele pentru instruirea modelului

Există și alte opțiuni disponibile, iar unele importante sunt explicate mai jos

Fereastra: Distanța maximă dintre cuvântul curent și cel prezis în cadrul unei propoziții.

Sg: Este un algoritm de antrenament și 1 pentru skip-gram și 0 pentru o pungă continuă de cuvinte. Am discutat despre acestea în detalii mai sus.

Hs: Dacă acesta este 1, atunci folosim softmax ierarhic pentru antrenament și dacă 0 atunci se utilizează eșantionare negativă.

Alfa: rata inițială de învățare

Să afișăm codul final mai jos

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

Pasul 4) Salvarea modelului

Modelul poate fi salvat sub formă de coș de gunoi și formular de model. Bin este formatul binar. Vă rugăm să consultați liniile 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 forma unui fișier .bin

Vom folosi acest model pentru a efectua teste în timp real, cum ar fi cuvinte similare, cuvinte diferite și cele mai frecvente 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ă consultaț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) Cele mai multe cuvinte similare verificare

Să implementăm lucrurile practic

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

Vă rugăm să consultaț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 cuvântului din cuvintele furnizate

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

Am furnizat cuvintele „Ne vedem mai târziu, vă mulțumim pentru vizită”. Aceasta va imprima 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 spune că va rezulta o probabilitate de asemănare între două cuvinte. Vă rugăm să consultați codul de mai jos pentru a executa 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 cel de 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

  • Încorporarea cuvintelor este un tip de reprezentare a cuvintelor care permite înțelegerea cuvintelor cu semnificație similară prin algoritmi de învățare automată
  • Încorporarea cuvintelor este utilizată pentru a calcula cuvinte similare, a crea un grup de cuvinte conexe, caracteristică pentru clasificarea textului, gruparea documentelor, procesarea limbajului natural
  • Word2vec este un model de rețea neuronală cu două straturi de mică adâncime pentru a produce încorporarea cuvintelor 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
  • Word2vec a folosit 2 arhitecturi Bag continuu de cuvinte (CBOW) și sări peste gram
  • CBOW este de câteva ori mai rapid decât sări peste gram și oferă o frecvență mai bună pentru cuvintele frecvente, în timp ce sări de gram are nevoie de o cantitate mică de date de antrenament și reprezintă chiar cuvinte sau expresii rare.
  • NLTK și word2vec pot fi utilizate î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ție exponențială normalizată) este funcția stratului de ieșire care activează sau declanșează fiecare nod. Word2vec are, de asemenea, disponibile eșantionări negative
  • Gensim este un set de instrumente de modelare a subiectelor care este implementat în python