Mis on sõna sisestamine?
Sõna sisseehitamine on sõna esitusviis, mis võimaldab masinõppe algoritmide abil mõista sarnase tähendusega sõnu. Tehniliselt öeldes on see sõnade kaardistamine reaalarvude vektoriteks, kasutades närvivõrku, tõenäosusmudelit või dimensiooni vähendamist sõna koos esinemise maatriksil. See on keele modelleerimine ja funktsioonide õppimise tehnika. Sõna manustamine on viis kaardistamiseks neuronivõrgu abil. Saadaval on erinevaid sõnade kinnistamise mudeleid, näiteks word2vec (Google), Glove (Stanford) ja fastest (Facebook).
Sõna manustamist nimetatakse ka hajutatud semantiliseks mudeliks või hajutatud kujutatud või semantiliseks vektorruumiks või vektorruumi mudeliks. Neid nimesid lugedes puutute kokku sõnaga semantiline, mis tähendab sarnaste sõnade koos kategoriseerimist. Näiteks puuviljad, näiteks õun, mango, banaan, tuleks paigutada lähedale, samas kui raamatud jäävad neist sõnadest kaugele. Laiemas tähenduses loob sõnade kinnistamine puuviljade vektori, mis asetatakse raamatute vektori kujutamisest kaugele.
Selles õpetuses saate teada
- Mis on sõna sisestamine?
- Kus kasutatakse Wordi manustamist?
- Mis on word2vec?
- Mis sõna2vec teeb?
- Miks Word2vec?
- Word2veci arhitektuur
- Pidev sõnakott.
- Skip-Grami mudel
- Seos Word2veci ja NLTK vahel
- Aktiveerijad ja Word2Vec
- Mis on Gensim?
- Kood Word2veci rakendamine Gensimi abil
Kus kasutatakse Wordi manustamist?
Sõna manustamine aitab funktsioonide genereerimisel, dokumentide klasterdamisel, teksti klassifitseerimisel ja loomuliku keele töötlemisel. Olgem loetlege need ja arutleme kõigi nende rakenduste üle.
- Arvutage sarnased sõnad: Sõna kinnistamist kasutatakse sarnaste sõnade pakkumiseks ennustusmudeli all oleva sõnaga. Koos sellega soovitab see ka erinevaid sõnu ja kõige tavalisemaid sõnu.
- Looge seotud sõnade rühm: seda kasutatakse semantiliseks rühmitamiseks, mis rühmitab sarnaste omadustega asjad kaugele ja erinevad.
- Funktsioon tekstide klassifitseerimiseks: Tekst kaardistatakse vektorite massiivideks, mis sisestatakse mudelisse nii koolituse kui ka ennustamise jaoks. Tekstipõhiseid klassifikaatori mudeleid ei saa stringi abil koolitada, nii et see teisendab teksti masinakoolitatavaks. Täiendage selle semantilise abi loomise funktsioone tekstipõhises klassifikatsioonis.
- Dokumendiklasterdamine on veel üks rakendus, kus sõna manustamist kasutatakse laialdaselt
- Loomuliku keele töötlemine: on palju rakendusi, kus sõnade kinnistamine on kasulik ja võidab funktsioonide väljavõtmise faasid, näiteks kõnemärgistuse osad, sentimentaalne analüüs ja süntaktiline analüüs.
Nüüd oleme saanud mõned teadmised sõnade kinnistamisest. Natuke valgust heidetakse ka erinevatele mudelitele, et rakendada sõnade kinnistamist. Kogu see õpetus on keskendunud ühele mudelile (word2vec).
Mis on word2vec?
Word2vec on tehnika / mudel, mis võimaldab sõnade manust paremaks sõnaesituseks. See haarab suure hulga täpseid süntaktilisi ja semantilisi sõnasuhteid. See on madal kahekihiline närvivõrk. Enne kaugemale minekut vaadake palun erinevust madalas ja sügavas närvivõrgus:
Madal närvivõrk koosneb ainsast varjatud 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.
Joonis: Madal ja sügav õppimine
word2vec on kahekihiline võrk, kuhu on sisestatud üks peidetud kiht ja väljund.
Word2veci töötas välja uurijate rühm, mida juhtis Google'is Tomas Mikolov. Word2vec on latentse semantilise analüüsi mudel parem ja tõhusam.
Mis sõna2vec teeb?
Word2vec tähistab sõnu vektorruumi esituses. Sõnad on esindatud vektorite kujul ja paigutus toimub nii, et sarnased tähendussõnad ilmuvad koos ja erinevad sõnad asuvad kaugel. Seda nimetatakse ka semantiliseks suhteks. Närvivõrgud ei mõista teksti, vaid ainult numbreid. Sõna manustamine annab võimaluse teksti teisendamiseks numbriliseks vektoriks.
Word2vec rekonstrueerib sõnade keelelise konteksti. Enne kaugemale minekut mõistkem, mis on keeleline kontekst? Üldise elustsenaariumi korral, kui me räägime või kirjutame suhtlemiseks, üritavad teised inimesed välja mõelda, mis on lause eesmärk. Näiteks "Mis on India temperatuur", siin on kontekst kasutaja sooviks teada saada "India temperatuuri", mis on kontekst. Lühidalt öeldes on lause peamine eesmärk kontekst. Suulise või kirjaliku keele (avalikustamine) ümbritsev sõna või lause aitab määrata konteksti tähendust. Word2vec õpib sõnade vektorkujutist kontekstide kaudu.
Miks Word2vec?
Enne sõna sisestamist
Oluline on teada, millist lähenemist kasutatakse enne sõna sisestamist ja millised on selle nõrgad küljed ning seejärel liigume teema juurde, kuidas Word2 põimimine Word2veci lähenemisviisi abil ületab nõudeid. Lõpuks liigutame, kuidas word2vec töötab, sest on oluline mõista, kas see töötab.
Varjatud semantilise analüüsi lähenemine
Seda lähenemist kasutati enne sõna kinnistamist. Selles kasutati sõnade koti mõistet, kus sõnu esitatakse kodeeritud vektorite kujul. See on hõre vektoresitus, kus mõõde on võrdne sõnavara suurusega. Kui sõna esineb sõnastikus, siis see loendatakse, muidu mitte. Lisateabe saamiseks vaadake palun allolevat programmi.
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())
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
- CountVectorizer on moodul, mida kasutatakse sõnavara salvestamiseks, lähtudes selles sisalduvatest sõnadest. See imporditakse sklearnist
- Tehke objekt, kasutades klassi CountVectorizer.
- Kirjutage andmed loendisse, mis tuleb CountVectorizerisse lisada.
- Andmed sobivad klassi CountVectorizer loodud objektiga.
- Sõnavara abil andmetes olevate sõnade loendamiseks kasutage sõnade kogumit. Kui sõna või märge pole sõnavaras saadaval, on selline indeksi asukoht null.
- Muutuja real 5, mis on x, teisendatakse massiiviks (meetod on saadaval x jaoks). See annab 3. real esitatud loos või loendis iga loa loendi.
- See näitab funktsioone, mis on osa sõnavarast, kui see on paigaldatud 4. rea andmeid kasutades.
Varjatud semantilises käsitluses tähistab rida unikaalseid sõnu, samas kui veerg tähistab selle sõna dokumendis kuvamise aega. See on sõnade esitus dokumendimaatriksi kujul. Term-Frequency inverse document frequency (TFIDF) kasutatakse dokumendis sisalduvate sõnade sageduse loendamiseks, mis on dokumendis oleva termini sagedus / termini sagedus kogu korpuses.
Sõnade koti meetodi puudus
- See eirab näiteks 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. Haridus on kõige parem raamatutes". See looks kaks vektorit, üks lehele "Ta armastas raamatuid" ja teine "Haridust leidub kõige paremini raamatutes". See kohtleks mõlemat ortogonaalselt, mis muudab nad iseseisvaks, kuid tegelikult on nad omavahel seotud
Nende piirangute ületamiseks töötati välja sõnade kinnistamine ja Word2vec on lähenemisviis selle rakendamiseks.
Kuidas Word2vec töötab?
Word2vec õpib sõna, ennustades ümbritsevat konteksti. Võtame näiteks sõna "Ta armastab jalgpalli".
Tahame arvutada sõna2vec sõnale: armastab.
Oletame
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Sõna armastab liigub korpuses iga sõna kohal. Kodeeritud on nii süntaktiline kui ka sõnade semantiline suhe. See aitab leida sarnaseid ja analoogiaga sõnu.
Kõik juhuslik omadused sõna armastab arvutatakse. Neid funktsioone muudetakse või värskendatakse naaber- või kontekstisõnade osas seljatoetuse meetodi abil.
Teine õppimisviis on see, et kui kahe sõna kontekst on sarnane või kahel on sarnased tunnused, siis on sellised sõnad omavahel seotud.
Word2veci arhitektuur
Word2vec kasutab kahte arhitektuuri
- Pidev sõnakott (CBOW)
- jäta gramm vahele
Enne kaugemale minekut arutame, miks need arhitektuurid või mudelid on sõna esitamise seisukohast olulised. Sõnaesituse õppimine on sisuliselt järelevalveta, kuid mudeli koolitamiseks on vaja sihtmärke / silte. Skip-grammi ja CBOW-i abil muudetakse järelevalveta kujutis mudeli koolituse jaoks järelevalve all olevaks vormiks.
CBOW-s ennustatakse praegune sõna ümbritsevate kontekstiakende akna abil. Näiteks kui w i-1 , w i-2 , w i + 1 , w i + 2 on antud sõnad või kontekst, annab see mudel w i
Skip-Gram toimib CBOW-le vastupidiselt, mis tähendab, et see ennustab antud järjestuse või konteksti sõnast. Selle mõistmiseks saate näite ümber pöörata. Kui antakse w i , ennustab see konteksti või w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec pakub võimalust valida CBOW (pidev sõnade kott) ja skim-grammi vahel. Sellised parameetrid antakse mudeli koolituse ajal. Võib olla võimalus kasutada negatiivset valimit või hierarhilist softmax-kihti.
Pidev sõnakott.
Joonistame lihtsa skeemi, et mõista sõnaarhitektuuri pidevat koti.
Joonis Sõnaarhitektuuri pidev kott
Arvutame võrrandid matemaatiliselt. Oletame, et V on sõnavara suurus ja N on peidetud kihi suurus. Sisend on määratletud kui {x i-1 , x i-2, x i + 1, x i + 2 }. Kaalumaatriksi saame korrutades V * N. Teine maatriks saadakse sisendvektori korrutamisel kaalumaatriksiga. Seda saab mõista ka järgmise võrrandi abil.
h = xi t W
kus xi t ∧ W on vastavalt sisendvektor ja kaalumaatriks,
Konteksti ja järgmise sõna vastavuse arvutamiseks vaadake palun allpool olevat võrrandit
u = prognoositav esindatus * h
kus prognoositav esindatus saadakse mudelis∧h ülaltoodud võrrandis.
Skip-Grami mudel
Skip-Grami lähenemist kasutatakse sisendsõnale antud lause ennustamiseks. Selle paremaks mõistmiseks joonistame skeemi.
Joonise Skip-Gram mudel
Seda võib käsitleda kui sõnalise mudeli Pidev kott tagakülge, kus sisendiks on sõna ja mudel annab konteksti või järjestuse. Samuti võime järeldada, et sihtmärk suunatakse sisendisse ja väljundkihti korratakse mitu korda, et mahutada valitud arv kontekstisõnu. Kaalude reguleerimiseks backpropage meetodi abil summeeritakse kogu väljundkihi vektori vektor.
Millist mudelit valida?
CBOW on mitu korda kiirem kui grammi vahelejätmine ja pakub sagedasemate sõnade jaoks paremat sagedust, samas kui grammi vahelejätmine vajab väikest kogust treeningandmeid ja esindab isegi haruldasi sõnu või väljendeid.
Seos Word2veci ja NLTK vahel
NLTK on loomulik keele tööriistakomplekt. Seda kasutatakse teksti eeltöötlemiseks. Võimalik on teha erinevaid toiminguid, näiteks kõnesiltide lisamine, lemmatsiseerimine, tuletamine, sõnade eemaldamise peatamine, haruldaste või vähemkasutatavate sõnade eemaldamine. See aitab nii teksti puhastada kui ka tõhusate sõnade funktsioone ette valmistada. Muul viisil kasutatakse sõna2vec semantiliste (omavahel tihedalt seotud üksused) ja süntaktiliste (jada) sobitamiseks. Kasutades sõna2vec, võib leida sarnaseid sõnu, erinevaid sõnu, mõõtmete vähendamist ja paljusid teisi. Word2veci teine oluline omadus on teisendada teksti kõrgem dimensiooniline esitus vektorite madalamaks dimensiooniks.
Kus NLTK-d ja Word2veci kasutada?
Kui keegi peab täitma mõnda eespool nimetatud üldotstarbelist ülesannet, näiteks tokeniseerimine, tuleb POS-i märgistamine ja sõelumine kasutada NLTK-d, samas kui sõnade ennustamiseks mõne konteksti, teema modelleerimise või dokumentide sarnasuse järgi tuleb kasutada Word2vec-i.
NLTK ja Word2vec seos koodi abil
NLTK-d ja Word2vec-i saab kasutada koos, et leida sarnaseid sõnu esindav tekst või süntaktiline sobivus. NLTK tööriistakomplekti saab kasutada paljude NLTK-ga kaasas olevate pakettide laadimiseks ja mudeli saab luua Word2veci abil. Seejärel saab seda testida reaalajas sõnade abil. Vaatame mõlema kombinatsiooni järgmises koodis. Enne edasist töötlemist vaadake palun NLTK pakutavaid korpuseid. Saate alla laadida käsu abil
nltk(nltk.download('all'))
Jooniskorpused on alla laaditud NLTK abil
Palun vaadake koodi ekraanipilt.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
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
- Imporditakse nltk teek, kust saate alla laadida abc korpuse, mida kasutame järgmises etapis.
- Gensim on imporditud. Kui Gensimi pole installitud, installige see käsuga "pip3 install gensim". Palun vaadake allolevat ekraanipilti.
Joonis Gensimi installimine PIP abil
- importige korpus korpus abc, mis on alla laaditud nltk.download ('abc') abil.
- Edastage failid mudelile word2vec, mis imporditakse lausetena Gensimi abil.
- Sõnavara on salvestatud muutuja kujul.
- Mudelit katsetatakse sõnateaduse näidisega, kuna need failid on seotud teadusega.
- Siin ennustatakse mudeli sarnast sõna "teadus".
Aktiveerijad ja Word2Vec
Neuroni aktiveerimisfunktsioon määratleb selle neuroni väljundi, kui on antud sisendite kogum. Bioloogiliselt inspireeritud tegevusest meie ajus, kus erinevad neuronid aktiveeritakse erinevate stiimulite abil. Mõistame järgmise skeemi abil aktiveerimisfunktsiooni.
Joonis Aktiveerimise funktsiooni mõistmine
Siin on x1, x2,… x4 närvivõrgu sõlm.
w1, w2, w3 on sõlme kaal,
∑ on kogu kaalu ja sõlme väärtuste liitmine, mis toimivad aktiveerimisfunktsioonina.
Miks aktiveerimisfunktsioon?
Kui aktiveerimisfunktsiooni ei kasutata, oleks väljund lineaarne, kuid lineaarse funktsiooni funktsionaalsus on piiratud. Kompleksse funktsionaalsuse, näiteks objekti tuvastamine, pildi klassifitseerimine, teksti sisestamine hääle abil ja paljud muud mittelineaarsed väljundid on vajalikud aktiveerimisfunktsiooni abil.
Kuidas arvutatakse aktiveerimiskiht sõna embedding (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 pehme maks, kus keerukus arvutatakse O (log 2 V) abil, kusjuures see on O (V), kus V on sõnavara suurus. Nende erinevus seisneb hierarhilise softmax-kihi keerukuse vähenemises. Selle (hierarhilise softmax) funktsionaalsuse mõistmiseks vaadake järgmist näidet:
Joonis Hierarhiline softmax-tüüpi struktuur
Oletame, et tahame arvutada sõna armastuse jälgimise tõenäosuse antud kontekstis. Vool juurest lehesõlmesse on esimene liikumine sõlme 2 ja seejärel sõlme 5. Nii et kui meil on olnud sõnavara suurus 8, on vaja ainult kolme arvutust. Nii et see võimaldab laguneda, arvutada ühe sõna ( armastus ) tõenäosust .
Millised muud valikud on peale hierarhilise Softmaxi saadaval?
Kui sõna kaasamise võimaluste osas räägitakse üldises tähenduses, on saadaval diferentseeritud Softmax, CNN-Softmax, tähtsuse proovide võtmine, adaptiivse tähtsuse proovide võtmine, müra kontrastsed hinnangud, negatiivsete proovide võtmine, enesest normaliseerimine ja harvaesinev normaliseerimine.
Rääkides konkreetselt Word2vecist, on meil olemas negatiivne valim.
Negatiivne proovivõtt on viis treeningandmete valimiseks. See on mõnevõrra nagu stohhastiline gradientne laskumine, kuid teatud erinevusega. Negatiivsete proovide võtmine otsib ainult negatiivseid koolitusnäiteid. See põhineb müra kontrastsel hindamisel ja valib juhuslikult sõnu, mitte kontekstis. See on kiire koolitusmeetod ja valib konteksti juhuslikult. Kui ennustatud sõna ilmub juhuslikult valitud kontekstis, on mõlemad vektorid üksteise lähedal.
Millise järelduse saab teha?
Aktivaatorid vallandavad neuroneid täpselt nii nagu meie neuroneid väliste stiimulite abil. Softmaxi kiht on üks väljundkihi funktsioonidest, mis käivitab neuroneid sõna kinnistamise korral. Word2vecis on meil sellised valikud nagu hierarhiline softmax ja negatiivne valim. Aktivaatorite abil saab lineaarse funktsiooni teisendada mittelineaarseks funktsiooniks ja sellise abil saab rakendada keerulise masinõppe algoritmi.
Mis on Gensim?
Gensim on teema modelleerimise tööriistakomplekt, mida rakendatakse pythonis. Teema modelleerimine on varjatud struktuuri avastamine tekstis. Word2vec imporditakse Gensimi tööriistakomplektist. Pange tähele, et Gensim pakub lisaks Word2vecile ka rakendusi Doc2vec ja FastText, kuid see õpetus on seotud Word2veciga, nii et jääme praeguse teema juurde.
Word2veci rakendamine Gensimi abil
Siiani oleme arutanud, mis on sõna2vec, selle erinevad arhitektuurid, miks toimub nihe sõnakotilt sõnale2vec, seos sõna2vec ja NLTK vahel reaalajas koodi ja aktiveerimisfunktsioonidega. Selles jaotises rakendab sõna2vec Gensimi abil
1. samm) andmete kogumine
Esimene samm mis tahes masinõppemudeli juurutamiseks või loomuliku keele töötlemise juurutamiseks on andmete kogumine
Aruka vestlusroboti loomiseks järgige andmeid.
[{"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"]}]
Siit saame aru andmetest
- Need andmed sisaldavad kolme asja silti, mustrit ja vastuseid. Silt on kavatsus (mis on arutelu teema).
- Andmed on JSON-vormingus.
- Muster on küsimus, mille kasutajad robotile esitavad
- Vastused on vastus, mille chatbot annab vastavale küsimusele / mustrile.
2. samm. Andmete eeltöötlus.
Algandmete töötlemine on väga oluline. Kui masinasse sisestatakse puhastatud andmed, vastab mudel täpsemalt ja õpib andmeid tõhusamalt.
See samm hõlmab stopp-sõnade eemaldamist, tüvelisi, mittevajalikke sõnu jne. Enne jätkamist on oluline andmed laadida ja teisendada need andmeraamiks. Palun vaadake allpool olevat koodi
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
KOODI selgitus.
- Kuna andmed on jsoni vormingus, imporditakse json
- Fail on salvestatud muutujasse
- Fail on avatud ja laaditud andmemuutujasse
Nüüd on andmed imporditud ja on aeg andmed teisendada andmeraamiks. Järgmise sammu nägemiseks lugege allolevat koodi
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
KOODI selgitus
1. Andmed teisendatakse andmeraamiks, kasutades eespool imporditud pandasid.
2. See teisendab veerumustrites oleva loendi stringiks.
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()]))
Koodi selgitus
1. Ingliskeelsed stopp-sõnad imporditakse nltk-tööriistakomplekti stop-sõna mooduli abil
2. Kõik teksti sõnad teisendatakse väiketähtedeks, kasutades tingimuse ja lambda funktsiooni. Lambda funktsioon on anonüümne funktsioon.
3. Kõiki andmeraami teksti ridu kontrollitakse stringide kirjavahemärkide osas ja need filtreeritakse.
4. Märkid nagu numbrid või punkt eemaldatakse regulaaravaldise abil.
5. Numbrid eemaldatakse tekstist.
6. Selles etapis eemaldatakse peatussõnad.
7. Sõnad filtreeritakse nüüd ja lemmatsisatsiooni abil eemaldatakse sama sõna erinev vorm. Nendega oleme andmete eeltöötluse lõpetanud.
Väljund:
, 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
Samm 3) Närvivõrgu loomine sõna2vec abil
Nüüd on aeg ehitada mudel, kasutades Gensimi moodulit word2vec. Peame Gensimist importima sõna2vec. Tehkem seda ja siis ehitame ning kontrollime viimases etapis mudelit reaalajas.
from gensim.models import Word2Vec
Nüüd saame mudeli Word2Vec abil edukalt üles ehitada. Palun lugege koodi järgmist rida, et õppida mudeli loomist Word2Veci abil. Mudelile antakse tekst loendi kujul, nii et teisendame teksti andmeraamist loendisse, kasutades allpool toodud 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 selgitused
1. Loonud suurema_loendi, kuhu on lisatud sisemine loend. See on vorming, mis antakse mudelile Word2Vec.
2. Loop on rakendatud ja andmeraami mustrite veeru iga kirje kordatakse.
3. Iga veerumustri element jagatakse ja salvestatakse sisemisse loendisse li
4. Sisemine loend on lisatud välimise loendiga.
5. See loend antakse mudelile Word2Vec. Mõistame mõningaid siin toodud parameetreid
Min_count: see ignoreerib kõiki sõnu, mille kogu sagedus on sellest madalam.
Suurus: see ütleb sõnavektorite mõõtmete.
Töötajad: need on mudeli koolitamiseks mõeldud niidid
Saadaval on ka teisi valikuid ja mõned olulised neist on selgitatud allpool
Aken: maksimaalne kaugus praeguse ja ennustatud sõna vahel lauses.
Sg: See on treeningalgoritm ja 1 vahele jätmise grammi jaoks ja 0 pideva sõnakoti jaoks. Oleme neid eespool üksikasjalikult arutanud.
Hs: Kui see on 1, siis kasutame koolituseks hierarhilist pehmendust ja kui 0, siis kasutatakse negatiivset valimit.
Alfa: esialgne õppimise määr
Kuvagem allpool lõplik kood
#list of libraries used by the codeimport stringfrom gensim.models import Word2Vecimport loggingfrom nltk.corpus import stopwordsfrom textblob import Wordimport jsonimport pandas as pd#data in json formatjson_file = 'intents.json'with open('intents.json','r') as f:data = json.load(f)#displaying the list of stopwordsstop = stopwords.words('english')#dataframedf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)# print(df['patterns'])#print(df['patterns'])#cleaning the data using the NLP approachprint(df)df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))df['patterns']= df['patterns'].str.replace('[^\w\s]','')df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if not x.isdigit()))df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))#taking the outer listbigger_list=[]for i in df['patterns']:li = list(i.split(" "))bigger_list.append(li)#structure of data to be taken by the model.word2vecprint("Data format for the overall list:",bigger_list)#custom data is fed to machine for further processingmodel = Word2Vec(bigger_list, min_count=1,size=300,workers=4)#print(model)
4. samm. Mudeli salvestamine
Mudeli saab salvestada prügikasti ja mudeli kujul. Bin on binaarne vorming. Mudeli salvestamiseks vaadake palun allolevaid ridu
model.save("word2vec.model")model.save("model.bin")
Ülaltoodud koodi selgitus
1. Mudel salvestatakse .modeli failina.
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.
5. samm. Mudeli laadimine ja reaalajas testimine
Mudel laaditakse allpool oleva koodi abil
model = Word2Vec.load('model.bin')
Kui soovite sõnavara sellest printida, tehke seda käsuga allpool
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
Rakendagem asju 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)]
7. samm) ei ühti tarnitud sõnade sõnadega
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Oleme edastanud sõnad "Näeme hiljem, täname külastamast". See trükib nende sõnade põhjal kõige erinevamad sõnad. Käivitame selle koodi ja leiame tulemuse
Tulemus pärast ülaltoodud koodi täitmist.
Thanks
8. samm. Leidke kahe sõna sarnasus
See annab tulemuseks kahe sõna sarnasuse tõenäosuse. Selle jaotise käivitamiseks 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 allpool oleva koodi käivitamisega
similar = model.similar_by_word('kind')print(similar)
Ülaloleva 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õna manustamine on sõna esitusviis, mis võimaldab masinõppe algoritmide abil mõista sarnase tähendusega sõnu
- Sõna manustamist kasutatakse sarnaste sõnade arvutamiseks, seotud sõnade rühma loomiseks, funktsiooni teksti liigitamiseks, dokumentide klastriks, loomuliku keele töötlemiseks
- Word2vec on madal kahekihiline närvivõrgu mudel, mis tagab sõna paremaks esitamiseks sõna manuse
- Word2vec tähistab sõnu vektorruumi esituses. Sõnad on esindatud vektorite kujul ja paigutus toimub nii, et sarnased tähendussõnad ilmuvad koos ja erinevad sõnad asuvad kaugel
- Word2vec kasutas kahte arhitektuuri Pidev kott sõnu (CBOW) ja jäta gramm vahele
- CBOW on mitu korda kiirem kui grammi vahelejätmine ja pakub sagedasemate sõnade jaoks paremat sagedust, samas kui grammi vahelejätmine vajab väikest kogust treeningandmeid ja esindab isegi haruldasi sõnu või väljendeid.
- NLTK-d ja word2vec-i saab koos kasutada võimsate rakenduste loomiseks
- Neuroni aktiveerimisfunktsioon määratleb selle neuroni väljundi, kui on antud sisendite kogum. Ühesõnaga2vec. Softmax Layer (normaliseeritud eksponentsiaalne funktsioon) on väljundkihi funktsioon, mis aktiveerib või käivitab iga sõlme. Word2vecil on saadaval ka negatiivne valim
- Gensim on teema modelleerimise tööriistakomplekt, mida rakendatakse pythonis