Wordi manustamine ja Word2Vec mudel koos näitega

Mis on Wordi manustamine?

Sõna kinnistamine on sõna esitustüüp, mis võimaldab masinõppe algoritmidel mõista sarnase tähendusega sõnu. See on keele modelleerimise ja funktsioonide õppimise meetod sõnade vastendamiseks reaalarvude vektoriteks, kasutades närvivõrke, tõenäosusmudeleid või mõõtmete vähendamist sõnade koosesinemismaatriksil. Mõned sõna manustamise mudelid on Word2vec (Google), Glove (Stanford) ja kiireim (Facebook).

Sõna manustamist nimetatakse ka hajutatud semantiliseks mudeliks või hajusesitatud või semantiliseks vektorruumiks või vektorruumi mudeliks. Neid nimesid lugedes puutute kokku sõnaga semantiline, mis tähendab sarnaste sõnade kategoriseerimist. Näiteks puuviljad, nagu õun, mango, banaan, tuleks asetada lähedale, samas kui raamatud jäävad neist sõnadest kaugele. Laiemas mõttes loob sõna manustamine puuviljade vektori, mis asetatakse raamatute vektorkujutusest kaugele.

Kus Wordi manustamist kasutatakse?

Wordi manustamine aitab funktsioonide genereerimisel, dokumentide rühmitamisel, teksti klassifitseerimisel ja loomuliku keele töötlemisel. Loetleme need ja arutleme iga rakenduse üle.

  • Arvutage sarnased sõnad: Sõna manustamist kasutatakse ennustusmudelile allutatud sõnaga sarnaste sõnade soovitamiseks. Lisaks sellele soovitab see ka erinevaid sõnu, aga ka kõige tavalisemaid sõnu.
  • Looge seotud sõnade rühm: Seda kasutatakse semantilise rühmitamise jaoks, mis rühmitab sarnase tunnusega asjad kokku ja kaugelt erinevad.
  • Teksti klassifitseerimise funktsioon: Tekst kaardistatakse vektorite massiivideks, mis suunatakse mudelisse nii treenimiseks kui ka ennustamiseks. Tekstipõhiseid klassifikaatorimudeleid ei saa stringil treenida, seega teisendab see teksti masintreenitavasse vormi. Lisaks on selle semantilise abi loomise omadused tekstipõhises klassifitseerimises.
  • Dokumentide rühmitamine: on veel üks rakendus, kus Word Embedding Word2veci kasutatakse laialdaselt
  • Loomuliku keele töötlemine: On palju rakendusi, kus sõna manustamine on kasulik ja võidab funktsioonide eraldamise faasid, nagu kõne märgistamise osad, sentimentaalne analüüs ja süntaktiline analüüs. Nüüd oleme saanud teadmisi sõna manustamise kohta. Mõnevõrra valgustatakse ka erinevaid mudeleid, et rakendada sõna manustamist. Kogu see Wordi manustamise õpetus keskendub ühele mudelile (Word2vec).

Mis on Word2vec?

Word2vec on tehnika/mudel sõna manustamise tootmiseks sõnade paremaks esituseks. See on loomuliku keele töötlemise meetod, mis fikseerib suure hulga täpseid süntaktilisi ja semantilisi sõnasuhteid. See on madal kahekihiline närvivõrk, mis suudab tuvastada sünonüümseid sõnu ja soovitada täiendavaid sõnu osalausete jaoks, kui see on treenitud.

Enne selles Word2veci õpetuses edasi liikumist vaadake erinevust madala ja sügava närvivõrgu vahel, nagu on näidatud alloleval Wordi manustamise näite diagrammil:

Madal närvivõrk koosneb ainsast peidetud kihist sisendi ja väljundi vahel, samas kui sügav närvivõrk sisaldab sisendi ja väljundi vahel mitut peidetud kihti. Sisend allutatakse sõlmedele, samas kui peidetud kiht ja ka väljundkiht sisaldavad neuroneid.

Madal vs sügav õppimine
Madal vs sügav õppimine

Word2vec on kahekihiline võrk, kus on sisend üks peidetud kiht ja väljund.

Word2veci töötas välja Google'i teadlaste rühm, mida juhib Tomas Mikolov. Word2vec on parem ja tõhusam kui latentne semantilise analüüsi mudel.

Miks Word2vec?

Word2vec esindab sõnu vektorruumi esituses. Sõnad on kujutatud vektorite kujul ja paigutamine toimub nii, et sarnase tähendusega sõnad ilmuvad koos ja erinevad sõnad asuvad kaugel. Seda nimetatakse ka semantiliseks suhteks. Närvivõrgud ei mõista teksti, vaid mõistavad ainult numbreid. Wordi manustamine võimaldab teksti teisendada numbriliseks vektoriks.

Word2vec rekonstrueerib sõnade keelelise konteksti. Enne kui läheme edasi, mõistame, mis on keeleline kontekst? Üldise elustsenaariumi korral, kui me suhtlemiseks räägime või kirjutame, püüavad teised inimesed aru saada, mis on lause eesmärk. Näiteks "Mis on India temperatuur", siin on kontekstiks kasutaja, kes soovib teada "India temperatuuri", mis on kontekst. Lühidalt öeldes on lause peamine eesmärk kontekst. Kõne- või kirjakeelt ümbritsev sõna või lause (avaldamine) aitab määrata konteksti tähendust. Word2vec õpib kontekstide kaudu sõnade vektoresitust.

Mida Word2vec teeb?

Enne Wordi manustamist

Oluline on teada, millist lähenemist kasutatakse enne sõna manustamist ja millised on selle puudused. Seejärel liigume teema juurde, kuidas Word2veci lähenemisviisi kasutades Wordi manustamisel puudused ületatakse. Lõpuks selgitame, kuidas Word2vec töötab, sest on oluline mõista, et see töötab.

Varjatud semantilise analüüsi lähenemisviis

See on lähenemine, mida kasutati enne sõna manustamist. See kasutas sõnade koti mõistet, kus sõnad on esitatud kodeeritud vektorite kujul. See on hõre vektoresitus, mille mõõde on võrdne sõnavara suurusega. Kui sõna esineb sõnastikus, siis see loetakse, muidu mitte. Lisateabe saamiseks vaadake allolevat programmi.

Word2vec näide

Word2vec näide

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

Väljund:

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

Koodi selgitus

  1. CountVectorizer on moodul, mida kasutatakse sõnavara salvestamiseks sellesse sõnade sobitamise alusel. See imporditakse sklearnist.
  2. Loo objekt kasutades klassi CountVectorizer.
  3. Kirjutage loendisse andmed, mis tuleb CountVectorizerisse mahutada.
  4. Andmed mahuvad klassist CountVectorizer loodud objekti.
  5. Sõnavara abil andmetes olevate sõnade loendamiseks kasutage sõnakogumisviisi. Kui sõna või tunnus pole sõnavaras saadaval, määratakse selline indeksi asukoht nulliks.
  6. Muutuja real 5, mis on x, teisendatakse massiiviks (x jaoks on saadaval meetod). See annab iga märgi arvu 3. real esitatud lauses või loendis.
  7. See näitab funktsioone, mis kuuluvad sõnavarasse, kui see on kohandatud rea 4 andmetega.

Varjatud semantilise lähenemise korral tähistab rida unikaalseid sõnu, samas kui veerg tähistab selle sõna dokumendis esinemise arvu. See on sõnade esitus dokumendimaatriksi kujul. Termini sageduse pöörddokumentide sagedus (TFIDF) kasutatakse sõnade sageduse loendamiseks dokumendis, mis on termini sagedus dokumendis / termini sagedus kogu korpuses.

Sõnade koti meetodi puudujääk

  • See ignoreerib sõna järjekorda, näiteks see on halb = halb on see.
  • See ignoreerib sõnade konteksti. Oletame, et kui ma kirjutan lause "Ta armastas raamatuid. Haridust leiab kõige paremini raamatutest”. See looks kaks vektorit, millest üks on "Ta armastas raamatuid" ja teine ​​"Haridus on kõige parem leida raamatutest". See käsitleks neid mõlemaid ortogonaalsetena, mis muudab nad iseseisvaks, kuid tegelikult on nad üksteisega seotud

Nende piirangute ületamiseks töötati välja sõna manustamine ja Word2vec on lähenemisviis selle rakendamiseks.

Kuidas Word2vec töötab?

Word2vec õpib sõna, ennustades seda ümbritsevat konteksti. Näiteks võtame sõna „Ta armastab Jalgpall."

Tahame arvutada Word2vec sõnale: armastab.

Oletame

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

sõna armastab liigub korpuses üle iga sõna. Kodeeritud on nii süntaktiline kui ka semantiline suhe sõnade vahel. See aitab leida sarnaseid ja analoogilisi sõnu.

Kõik sõna juhuslikud tunnused armastab arvutatakse. Neid funktsioone muudetakse või värskendatakse naaber- või kontekstisõnade a abil Tagasi paljundamine meetod.

Teine õppimisviis on see, et kui kahe sõna kontekst on sarnane või kahel sõnal on sarnased tunnused, siis on sellised sõnad seotud.

Word2vec Architektuur

Word2vec kasutab kahte arhitektuuri:

  1. Pidev sõnade kott (CBOW)
  2. Jäta gramm vahele

Enne selles Word2veci õpetuses edasi minekut arutleme selle üle, miks need arhitektuurid või mudelid on sõnaesituse seisukohast olulised. Sõnade esituse õppimine on sisuliselt ilma järelevalveta, kuid mudeli koolitamiseks on vaja sihtmärke/silte. Skip-gram ja CBOW teisendavad mudelitreeningu jaoks järelevalveta esituse juhendatud vormiks.

CBOW-s ennustatakse praegust sõna ümbritsevate kontekstiakende akna abil. Näiteks kui wi-1,wi-2,wi+1,wi+2kui on antud sõnad või kontekst, pakub see mudel wi

Skip-Gram toimib vastupidiselt CBOW-le, mis tähendab, et see ennustab antud jada või konteksti sõnast. Selle mõistmiseks võite näite ümber pöörata. Kui wi on antud, ennustab see konteksti või wi-1,wi-2,wi+1,wi+2.

Word2vec pakub võimalust valida CBOW (Continuous Bag of words) ja skim-grami vahel. Sellised parameetrid antakse mudeli väljaõppe ajal. Võimalik on kasutada negatiivset diskreetimist või hierarhilist softmax kihti.

Pidev sõnade kott

Joonistame lihtsa Word2veci näite diagrammi, et mõista sõnaarhitektuuri pidevat kotti.

Pidev sõnakott Architektuur

Pidev sõnakott Architektuur

Arvutame võrrandid matemaatiliselt. Oletame, et V on sõnavara suurus ja N on peidetud kihi suurus. Sisend on määratletud kui { xi-1, xi-2, xi+1, xi+2}. Kaalumaatriksi saame korrutades V * N. Teine maatriks saadakse sisendvektori korrutamisel kaalumaatriksiga. Seda saab mõista ka järgmise võrrandi abil.

h=xitW

kus xit? W on vastavalt sisendvektor ja kaalumaatriks,

Konteksti ja järgmise sõna vahelise vaste arvutamiseks vaadake allolevat võrrandit

u=prognoositud esitus*h

kus prognoositud esitus saadakse ülaltoodud võrrandis mudel?h.

Skip-Gram mudel

Skip-Gram lähenemist kasutatakse sisendsõnaga lause ennustamiseks. Selle paremaks mõistmiseks joonistagem diagramm, nagu on näidatud allolevas Word2veci näites.

Skip-Gram mudel

Skip-Gram mudel

Seda võib käsitleda kui Continuous bag of word mudeli pööret, kus sisendiks on sõna ja mudel annab konteksti või jada. Samuti võime järeldada, et sihtmärk suunatakse sisendisse ja väljundkihti korratakse mitu korda, et mahutada valitud arv kontekstisõnu. Kõigi väljundkihtide veavektor summeeritakse, et kohandada kaalusid tagasiulatuva meetodi abil.

Millist mudelit valida?

CBOW on mitu korda kiirem kui vahelejätmise gramm ja tagab sagedaste sõnade parema sageduse, samas kui vahelejätmise gramm vajab vähesel määral treeningandmeid ja esindab isegi haruldasi sõnu või fraase.

Word2veci ja NLTK seos

NLTK on loomuliku keele tööriistakomplekt. Seda kasutatakse teksti eeltöötluseks. Saab teha erinevaid toiminguid, nagu kõneosade märgistamine, lemmatiseerimine, tüve moodustamine, sõnade eemaldamise peatamine, haruldaste sõnade või kõige vähem kasutatud sõnade eemaldamine. See aitab nii teksti puhastada kui ka tõhusatest sõnadest funktsioone ette valmistada. Teisel viisil kasutatakse Word2veci semantilise (tihedalt seotud üksuste koos) ja süntaktilise (jada) sobitamiseks. Word2veci abil võib leida sarnaseid sõnu, erinevaid sõnu, mõõtmete vähendamist ja palju muud. Teine Word2veci oluline omadus on teisendada teksti kõrgema mõõtmega esitus vektorite madalama mõõtmega.

Kus kasutada NLTK-d ja Word2veci?

Kui peate täitma mõnda ülalmainitud üldotstarbelist ülesannet, nagu märgistamine, POS-i märgistamine ja sõelumine, tuleb kasutada NLTK-d, samas kui sõnade ennustamiseks mõne konteksti, teema modelleerimise või dokumendi sarnasuse järgi tuleb kasutada Word2veci.

NLTK ja Word2veci seos koodi abil

NLTK-d ja Word2veci saab kasutada koos sarnaste sõnade esitusviisi või süntaktilise vaste leidmiseks. NLTK tööriistakomplekti saab kasutada paljude NLTK-ga kaasas olevate pakettide laadimiseks ja mudelit saab luua Word2veci abil. Seejärel saab seda testida reaalajas sõnadega. Vaatame mõlema kombinatsiooni järgmises koodis. Enne edasist töötlemist vaadake NLTK pakutavat korpust. Saate alla laadida käsuga

nltk(nltk.download('all'))

NLTK ja Word2veci seos

Corpora laaditi alla NLTK abil

Vaadake koodi ekraanipilti.

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)

NLTK ja Word2veci seos koodi abil

Väljund:

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

Koodi selgitus

  1. Imporditakse nltk teek, kust saate alla laadida abc korpuse, mida kasutame järgmises etapis.
  2. Gensim on imporditud. Kui Gensim Word2vec pole installitud, installige see käsuga "pip3 install gensim". Vaadake allolevat ekraanipilti.
Gensimi installimine PIP-i abil

Gensimi installimine PIP-i abil
  1. importige korpus abc, mis on alla laaditud kasutades nltk.download('abc').
  2. Edastage failid mudelile Word2vec, mis imporditakse lausetena Gensimi abil.
  3. Sõnavara salvestatakse muutuja kujul.
  4. Mudelit testitakse sõnateaduse näidises, kuna need failid on teadusega seotud.
  5. Siin ennustab mudel sarnast sõna "teadus".

Aktivaatorid ja Word2Vec

Neuroni aktiveerimisfunktsioon määrab selle neuroni väljundi sisendite kogumiga. Bioloogiliselt inspireeritud tegevusest meie ajus, kus erinevad neuronid aktiveeruvad erinevate stiimulite abil. Mõistame aktiveerimisfunktsiooni järgmise diagrammi kaudu.

Aktiveerimisfunktsioon Word2vecis

Aktiveerimisfunktsiooni mõistmine

Siin on x1,x2,..x4 närvivõrgu sõlm.

w1, w2, w3 on sõlme kaal,

? on kõigi aktiveerimisfunktsioonina töötavate kaalude ja sõlmede väärtuste liitmine.

Miks aktiveerimisfunktsioon?

Kui aktiveerimisfunktsiooni ei kasutata, oleks väljund lineaarne, kuid lineaarse funktsiooni funktsionaalsus on piiratud. Keeruliste funktsioonide, nagu objekti tuvastamine, kujutiste klassifitseerimine, teksti sisestamine hääle abil ja paljud muud mittelineaarsed väljundid, saavutamiseks on vaja, mis saavutatakse aktiveerimisfunktsiooni abil.

Kuidas arvutatakse aktiveerimiskiht sõna manustamisel (Word2vec)

Softmax Layer (normaliseeritud eksponentsiaalne funktsioon) on väljundkihi funktsioon, mis aktiveerib või käivitab iga sõlme. Teine kasutatav lähenemisviis on hierarhiline softmax, kus keerukus arvutatakse O(log2V) kus softmax on O(V), kus V on sõnavara suurus. Nende erinevus seisneb hierarhilise softmax kihi keerukuse vähenemises. Selle (Hierarchical softmax) funktsionaalsuse mõistmiseks vaadake allolevat Wordi manustamise näidet:

Hierarhiline Softmax Tree sarnane struktuur

Hierarhiline softmax puulaadne struktuur

Oletame, et tahame arvutada sõna vaatlemise tõenäosuse armastus arvestades teatud konteksti. Voog juurest lehesõlmeni on esimene käik sõlme 2 ja seejärel sõlme 5. Seega, kui meie sõnavara suurus on 8, on vaja ainult kolme arvutust. Seega võimaldab see lagundada, arvutada ühe sõna tõenäosust (armastus).

Milliseid muid valikuid on peale Hierarchical Softmaxi?

Kui räägime üldises mõttes sõna manustamise valikutest, on saadaval järgmised valikud: Diferentseeritud Softmax, CNN-Softmax, tähtsuse proovivõtt, kohanduv tähtsuse proovivõtt, müra kontrastsed hinnangud, negatiivne proovivõtt, enesenormaliseerimine ja harv normaliseerimine.

Rääkides konkreetselt Word2veci kohta, on saadaval negatiivne valim.

Negatiivne proovivõtt on viis treeningandmete proovivõtmiseks. See sarnaneb mõnevõrra stohhastilise gradiendi laskumisega, kuid mõne erinevusega. Negatiivne valim otsib ainult negatiivseid koolitusnäiteid. See põhineb müra kontrastsel hinnangul ja valib sõnu juhuslikult, mitte kontekstis. See on kiire treeningmeetod ja valib konteksti juhuslikult. Kui ennustatud sõna esineb juhuslikult valitud kontekstis, on mõlemad vektorid üksteise lähedal.

Millise järelduse saab teha?

Aktivaatorid vallandavad neuroneid just nagu meie neuronid vallandatakse väliste stiimulite abil. Softmax kiht on üks väljundkihi funktsioonidest, mis käivitab neuronid sõna manustamise korral. Word2vecis on sellised valikud nagu hierarhiline softmax ja negatiivne diskreetimine. Aktivaatorite abil saab lineaarse funktsiooni teisendada mittelineaarseks funktsiooniks ja selle abil saab rakendada keeruka masinõppe algoritmi.

Mis on Gensim?

Gensim on avatud lähtekoodiga teemade modelleerimise ja loomuliku keele töötlemise tööriistakomplekt, mida rakendatakse Python ja Cython. Gensimi tööriistakomplekt võimaldab kasutajatel importida Word2veci teemade modelleerimiseks, et avastada teksti kehas peidetud struktuur. Gensim pakub mitte ainult Word2veci, vaid ka Doc2veci ja FastTexti rakendust.

See õpetus puudutab Word2veci, nii et jääme praeguse teema juurde.

Word2veci rakendamine Gensimi abil

Siiani oleme arutanud, mis on Word2vec, selle erinevaid arhitektuure, miks toimub nihe sõnade kotilt Word2vecile, Word2veci ja NLTK seost reaalajas koodi ja aktiveerimisfunktsioonidega.

Allpool on toodud samm-sammult meetod Word2veci rakendamiseks Gensimi abil:

Samm 1) Andmete kogumine

Esimene samm mis tahes masinõppemudeli või loomuliku keele töötlemise rakendamiseks on andmete kogumine

Järgige andmeid, et luua intelligentne vestlusrobot, nagu on näidatud allolevas Gensim Word2veci näites.

[{"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"]
        }
   ]

Siin on see, mida me andmete põhjal mõistame

  • Need andmed sisaldavad kolme asja silti, mustrit ja vastust. Silt on kavatsus (mis on aruteluteema).
  • Andmed on JSON-vormingus.
  • Muster on küsimus, mille kasutajad robotile esitavad
  • Vastused on vastus, mille chatbot annab vastavale küsimusele/mustrile.

Etapp 2) Andmete eeltöötlus

Väga oluline on algandmete töötlemine. Kui puhastatud andmed sisestatakse masinasse, reageerib mudel täpsemalt ja õpib andmeid tõhusamalt õppima.

See samm hõlmab stoppsõnade, tüvest, mittevajalike sõnade jne eemaldamist. Enne jätkamist on oluline laadida andmed ja teisendada need andmeraamiks. Selle jaoks vaadake allolevat koodi

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

Koodi selgitus:

  1. Kuna andmed on json-vormingus, imporditakse json
  2. Fail salvestatakse muutujasse
  3. Fail on avatud ja laaditud andmemuutujas

Nüüd on andmed imporditud ja on aeg andmed andmeraamiks teisendada. Järgmise sammu vaatamiseks vaadake allolevat koodi

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

Koodi selgitus:

1. Andmed teisendatakse andmeraamiks, kasutades ülal imporditud pandasid.

2. See teisendab veerumustrite loendi stringiks.

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

Koodi selgitus:

1. Ingliskeelsed stoppsõnad imporditakse nltk tööriistakomplekti stop wordi mooduli abil

2. Kõik teksti sõnad teisendatakse väiketähtedeks, kasutades tingimuse ja lambda funktsiooni. Lambda funktsioon on anonüümne funktsioon.

3. Andmeraami kõiki tekstiridu kontrollitakse stringi kirjavahemärkide suhtes ja need filtreeritakse.

4. Tähemärgid, nagu numbrid või punkt, eemaldatakse regulaaravaldise abil.

5. Digits on tekstist eemaldatud.

6. Selles etapis eemaldatakse stoppsõnad.

7. Sõnad filtreeritakse nüüd ja sama sõna erinevad vormid eemaldatakse lemmatiseerimise abil. Nendega oleme andmete eeltöötluse lõpetanud.

Väljund:

, 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

Samm 3) Närvivõrgu loomine Word2veci abil

Nüüd on aeg luua mudel Gensim Word2vec mooduli abil. Peame importima Word2veci Gensimist. Teeme seda ja siis ehitame ja viimases etapis kontrollime mudelit reaalajas andmete põhjal.

from gensim.models import Word2Vec

Nüüd selles Gensim Word2veci õpetuses saame mudeli edukalt Word2Vec abil üles ehitada. Mudeli loomise kohta Word2Vec abil vaadake järgmist koodirida. Tekst antakse mudelile loendi kujul, nii et teisendame teksti andmeraamist loendiks, kasutades allolevat koodi

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)

Koodi selgitus:

1. Loodud bigger_list, kuhu on lisatud sisemine loend. See on vorming, mis edastatakse mudelile Word2Vec.

2. Loop on realiseeritud ja andmeraami mustrite veeru iga kirje itereeritakse.

3. Veerumustrite iga element on poolitatud ja salvestatud sisemisse loendisse li

4. Sisemine loend lisatakse välimise loendiga.

5. See loend antakse Word2Vec mudelile. Mõistame mõnda siin esitatud parameetrit

Min_count: See ignoreerib kõiki sõnu, mille kogusagedus on sellest väiksem.

Suurus: See räägib sõna vektorite mõõtmelisusest.

Töötajad: Need on niidid modelli koolitamiseks

Saadaval on ka teisi valikuid ja mõnda olulist selgitatakse allpool

Aken: Maksimaalne vahemaa praeguse ja ennustatud sõna vahel lauses.

Sg: See on treeningalgoritm ja 1 vahelejätmise jaoks ja 0 pideva sõnapaki jaoks. Oleme neid eespool üksikasjalikult arutanud.

Hs: Kui see on 1, siis kasutame treenimiseks hierarhilist softmaxi ja kui 0, siis kasutatakse negatiivset diskreetimist.

Alfa: Esialgne õppimismäär

Kuvame allpool lõpliku koodi:

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

Samm 4) Mudeli salvestamine

Mudelit saab salvestada prügikasti ja mudelvormi kujul. Bin on kahendvorming. Mudeli salvestamiseks vaadake allolevaid ridu

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

Ülaltoodud koodi selgitus

1. Mudel salvestatakse .model faili kujul.

2. mudel salvestatakse .bin faili kujul

Kasutame seda mudelit reaalajas testimiseks, näiteks sarnased sõnad, erinevad sõnad ja kõige tavalisemad sõnad.

Samm 5) Mudeli laadimine ja reaalajas testimine

Mudel laaditakse alloleva koodi abil:

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

Kui soovite sõnavara printida, kasutage allolevat käsku:

vocab = list(model.wv.vocab)

Palun vaadake tulemust:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

6. samm) Kõige sarnasemate sõnade kontrollimine

Rakendame asjad praktiliselt:

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

Palun vaadake tulemust:

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

Samm 7) Ei vasta sõnale esitatud sõnadest

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

Oleme sõnad andnud "Hiljemini näeme, aitäh külastamast." See tahe printige nendest sõnadest kõige erinevamad sõnad. Käitame selle koodi ja leiame tulemuse

Tulemus pärast ülaltoodud koodi täitmist:

Thanks

8. samm) Kahe sõna sarnasuse leidmine

See näitab kahe sõna sarnasuse tõenäosust. Selle jaotise täitmiseks vaadake allolevat koodi.

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

Ülaltoodud koodi tulemus on järgmine

0.13706

Sarnaseid sõnu leiate veelgi, kui käivitate alloleva koodi

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

Ülaltoodud koodi väljund:

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

Järeldus

  • Sõnade manustamine on sõna esitusviis, mis võimaldab masinõppe algoritmidel mõista sarnase tähendusega sõnu
  • Sõnade manustamist kasutatakse sarnaste sõnade arvutamiseks, seotud sõnade rühma loomiseks, teksti klassifitseerimise funktsiooniks, dokumentide rühmitamiseks, loomuliku keele töötlemiseks
  • Word2vec selgitas: Word2vec on pinnapealne kahekihiline närvivõrgu mudel, mis loob sõnade parema esituse jaoks sõna manuseid
  • Word2vec esindab sõnu vektorruumi esituses. Sõnad on kujutatud vektorite kujul ja paigutamine toimub nii, et sarnase tähendusega sõnad ilmuvad koos ja erinevad sõnad asuvad kaugel
  • Word2vec algoritm kasutab 2 arhitektuuri pidevat sõnade kotti (CBOW) ja grammi vahelejätmist
  • CBOW on mitu korda kiirem kui vahelejätmise gramm ja tagab sagedaste sõnade parema sageduse, samas kui vahelejätmise gramm vajab vähesel määral treeningandmeid ja esindab isegi haruldasi sõnu või fraase.
  • NLTK-d ja Word2veci saab koos kasutada võimsate rakenduste loomiseks
  • Neuroni aktiveerimisfunktsioon määrab selle neuroni väljundi sisendite kogumiga. Word2vecis. Softmax Layer (normaliseeritud eksponentsiaalne funktsioon) on väljundkihi funktsioon, mis aktiveerib või käivitab iga sõlme. Word2vecis on saadaval ka negatiivne diskreetimine
  • Gensim on teemade modelleerimise tööriistakomplekt, mida rakendatakse Pythonis