Vārdu iegulšanas apmācība: word2vec, izmantojot Gensim (PIEMĒRS)

Satura rādītājs:

Anonim

Kas ir vārdu iegulšana?

Vārdu iegulšana ir vārdu reprezentācijas veids, kas ļauj mašīnmācīšanās algoritmos saprast vārdus ar līdzīgu nozīmi. Tehniski runājot, tā ir vārdu kartēšana reālu skaitļu vektoros, izmantojot neironu tīklu, varbūtības modeli vai dimensiju samazinājumu vārdu līdzāspastāvēšanas matricā. Tā ir valodas modelēšana un funkciju apguves tehnika. Vārdu iegulšana ir veids, kā veikt kartēšanu, izmantojot neironu tīklu. Ir pieejami dažādi vārdu iegulšanas modeļi, piemēram, word2vec (Google), Glove (Stanford) un ātrākais (Facebook).

Vārda iegulšanu sauc arī par sadalītu semantisko modeli vai sadalītu attēloto vai semantisko vektoru telpu vai vektoru telpas modeli. Lasot šos nosaukumus, jūs sastopaties ar vārdu semantiskais, kas nozīmē līdzīgu vārdu kategorizēšanu kopā. Piemēram, augļi, piemēram, ābols, mango, banāns, jānovieto tuvu, turpretī grāmatas būs tālu no šiem vārdiem. Plašākā nozīmē vārda iegulšana radīs augļu vektoru, kas tiks novietots tālu no grāmatu vektoru attēlojuma.

Šajā apmācībā jūs uzzināsiet

  • Kas ir vārdu iegulšana?
  • Kur tiek izmantota Word iegulšana?
  • Kas ir word2vec?
  • Ko dara word2vec?
  • Kāpēc Word2vec?
  • Word2vec arhitektūra
  • Nepārtraukta vārdu soma.
  • Skip-Gram modelis
  • Saistība starp Word2vec un NLTK
  • Aktivatori un Word2Vec
  • Kas ir Gensim?
  • Kods Word2vec ieviešana, izmantojot Gensim

Kur tiek izmantota Word iegulšana?

Vārdu iegulšana palīdz funkciju ģenerēšanā, dokumentu kopēšanā, teksta klasifikācijā un dabiskās valodas apstrādes uzdevumos. Ļaujiet mums tos uzskaitīt un nedaudz apspriesties par katru no šīm lietojumprogrammām.

  • Aprēķiniet līdzīgus vārdus: vārdu iegulšana tiek izmantota, lai ieteiktu līdzīgus vārdus vārdam, uz kuru attiecas prognozēšanas modelis. Kopā ar to tiek piedāvāti arī atšķirīgi vārdi, kā arī visbiežāk lietotie vārdi.
  • Izveidojiet saistītu vārdu grupu: to izmanto semantiskai grupēšanai, kas grupēs līdzīgu īpašību lietas un atšķirīgas tālu.
  • Funkcija teksta klasifikācijai: Teksts tiek kartēts vektoru masīvos, kas tiek padoti modelim apmācībai, kā arī prognozēšanai. Teksta bāzes klasifikatora modeļus nevar apmācīt uz virknes, tāpēc tas tekstu pārveidos mašīnā apmācāmā formā. Papildu tās semantiskās palīdzības veidošanas iezīmes teksta klasifikācijā.
  • Dokumentu kopēšana ir vēl viena lietojumprogramma, kurā tiek plaši izmantota vārdu iegulšana
  • Dabas valodas apstrāde: ir daudzas lietojumprogrammas, kurās vārdu iegulšana ir noderīga, un tā uzvar pār iezīmju iegūšanas fāzēm, piemēram, runas iezīmēšanas daļas, sentimentālā analīze un sintaktiskā analīze.

    Tagad mēs esam ieguvuši zināmas zināšanas par vārdu iegulšanu. Neliela gaisma tiek izmesta arī dažādiem modeļiem, lai ieviestu vārdu iegulšanu. Visa šī apmācība ir vērsta uz vienu no modeļiem (word2vec).

Kas ir word2vec?

Word2vec ir tehnika / modelis, kā izveidot vārdu iegulšanu, lai labāk attēlotu vārdu. Tas uztver lielu skaitu precīzu sintaktisko un semantisko vārdu attiecību. Tas ir sekls divslāņu neironu tīkls. Pirms doties tālāk, lūdzu, skatiet atšķirību starp seklo un dziļo neironu tīklu:

Seklais neironu tīkls sastāv no vienīgā slēptā slāņa starp ieeju un izeju, turpretī dziļajā neironu tīklā ir vairāki slēpti slāņi starp ieeju un izeju. Ievade tiek pakļauta mezgliem, savukārt slēptais slānis, kā arī izvades slānis, satur neironus.

Attēls: sekla un dziļa mācīšanās

word2vec ir divslāņu tīkls, kurā tiek ievadīts viens slēptais slānis un izvade.

Word2vec izstrādāja pētnieku grupa, kuru vadīja Tomas Mikolov no Google. Word2vec ir labāks un efektīvāks latentās semantiskās analīzes modelis.

Ko dara word2vec?

Word2vec apzīmē vārdus vektoru telpas attēlojumā. Vārdi tiek attēloti vektoru formā, un izvietojums tiek veikts tā, ka līdzīgas nozīmes vārdi parādās kopā, un atšķirīgi vārdi atrodas tālu. To sauc arī par semantiskām attiecībām. Neironu tīkli nesaprot tekstu, bet saprot tikai skaitļus. Vārdu iegulšana nodrošina iespēju tekstu konvertēt ciparu vektorā.

Word2vec rekonstruē vārdu lingvistisko kontekstu. Pirms iet tālāk, ļaujiet mums saprast, kāds ir valodas konteksts? Parasti dzīves scenārijā, kad mēs runājam vai rakstām, lai sazinātos, citi cilvēki cenšas noskaidrot, kas ir teikuma mērķis. Piemēram, "Kāda ir Indijas temperatūra", šeit konteksts ir tāds, kā lietotājs vēlas uzzināt "Indijas temperatūra", kas ir konteksts. Īsāk sakot, teikuma galvenais mērķis ir konteksts. Vārds vai teikums ap runāto vai rakstisko valodu (atklāšana) palīdz noteikt konteksta nozīmi. Word2vec apgūst vārdu vektoru attēlojumu, izmantojot kontekstus.

Kāpēc Word2vec?

Pirms Word iegulšanas

Ir svarīgi zināt, kura pieeja tiek izmantota pirms vārda iegulšanas un kādi ir tā trūkumi, un tad mēs pāriet uz tēmu par to, kā nepilnības tiek pārvarētas, izmantojot Word iegulšanu, izmantojot pieeju word2vec. Visbeidzot, mēs mainīsim, kā darbojas word2vec, jo ir svarīgi saprast, ka tas darbojas.

Latentās semantiskās analīzes pieeja

Šī ir pieeja, kas tika izmantota pirms vārda iegulšanas. Tas izmantoja vārdu maisu jēdzienu, kur vārdi tiek attēloti kodētu vektoru formā. Tas ir mazs vektoru attēlojums, kur dimensija ir vienāda ar vārdu krājuma lielumu. Ja vārds atrodas vārdnīcā, tas tiek ieskaitīts, citādi ne. Lai saprastu vairāk, lūdzu, skatiet zemāk esošo programmu.

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

Izeja:

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

Kods Paskaidrojums

  1. CountVectorizer ir modulis, kas tiek izmantots vārdu krājuma glabāšanai, pamatojoties uz tajā esošo vārdu ievietošanu. Tas tiek importēts no sklearn
  2. Izveidojiet objektu, izmantojot klases CountVectorizer.
  3. Ierakstiet datus sarakstā, kas jāinstalē CountVectorizer.
  4. Dati ir piemēroti objektam, kas izveidots no klases CountVectorizer.
  5. Lietojiet vārdu pieejas maisu, lai skaitītu vārdus datos, izmantojot vārdu krājumu. Ja vārds vai marķieris nav pieejams vārdu krājumā, šāda indeksa pozīcija tiek iestatīta uz nulli.
  6. Mainīgais 5. rindā, kas ir x, tiek pārveidots par masīvu (pieejamā metode x). Tas nodrošinās katra marķiera skaitu teikumā vai sarakstā, kas norādīts 3. rindā.
  7. Tas parādīs funkcijas, kas ir daļa no vārdu krājuma, kad tas ir aprīkots, izmantojot 4. rindas datus.

Latentajā semantiskajā pieejā rinda apzīmē unikālus vārdus, bet kolonna norāda, cik reizes šis vārds parādās dokumentā. Tas ir vārdu attēlojums dokumenta matricas formā. Term-Frequency inverse document frequency (TFIDF) izmanto, lai uzskaitītu vārdu biežumu dokumentā, kas ir dokumenta termina biežums / termina biežums visā korpusā.

Vārdu maisa metodes trūkums

  • Tas ignorē vārda secību, piemēram, tas ir slikti = slikti tas ir.
  • Tas ignorē vārdu kontekstu. Pieņemsim, ja es uzrakstīšu teikumu "Viņš mīlēja grāmatas. Izglītība vislabāk ir grāmatās". Tas radītu divus vektorus, kas domāti vienumam “Viņš mīlēja grāmatas”, bet citam - “Izglītība vislabāk ir atrodama grāmatās”. Tas izturētos pret abiem ortogonāli, kas padara viņus neatkarīgus, bet patiesībā viņi ir saistīti viens ar otru

Lai pārvarētu šos ierobežojumus, tika izstrādāts vārdu iegulšana, un word2vec ir pieeja, lai to ieviestu.

Kā darbojas Word2vec?

Word2vec apgūst vārdu, paredzot tā apkārtējo kontekstu. Piemēram, pieņemsim vārdu "Viņš mīl futbolu".

Mēs vēlamies aprēķināt vārdu2vec vārdam: mīl.

Pieņemsim

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

Vārdu mīlestība pārvietojas virs katra vārda korpusā. Tiek kodētas sintaktiskās, kā arī semantiskās attiecības starp vārdiem. Tas palīdz atrast līdzīgus un līdzīgus vārdus.

Visas izlases iezīmes vārdu mīl tiek aprēķināts. Šīs funkcijas tiek mainītas vai atjauninātas attiecībā uz kaimiņu vai konteksta vārdiem, izmantojot aizmugures izplatīšanas metodi.

Vēl viens mācīšanās veids ir tāds, ka, ja divu vārdu konteksts ir līdzīgs vai diviem vārdiem ir līdzīgas pazīmes, tad šādi vārdi ir saistīti.

Word2vec arhitektūra

Ir divas arhitektūras, ko izmanto word2vec

  1. Nepārtraukts vārdu maiss (CBOW)
  2. izlaist gramu

Pirms iet tālāk, apspriedīsim, kāpēc šīs arhitektūras vai modeļi ir svarīgi no vārdu attēlojuma viedokļa. Vārda attēlojuma mācīšanās būtībā nav uzraudzīta, taču modeļa apmācībai ir nepieciešami mērķi / etiķetes. Skip-gram un CBOW pārvērš nepārraudzītu attēlojumu modeļa apmācības uzraudzītā formā.

CBOW pašreizējais vārds tiek prognozēts, izmantojot apkārtējo konteksta logu logu. Piemēram, ja w i-1 , w i-2 , w i + 1 , w i + 2 ir doti vārdi vai konteksts, šis modelis nodrošinās w i

Skip-Gram darbojas pretēji CBOW, kas nozīmē, ka tas no vārda paredz konkrēto secību vai kontekstu. Varat mainīt piemēru, lai to saprastu. Ja tiek dots w i , tas paredz kontekstu vai w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec nodrošina iespēju izvēlēties starp CBOW (nepārtraukts vārdu maiss) un skim-gram. Šādi parametri tiek sniegti modeļa apmācības laikā. Var būt iespēja izmantot negatīvu izlasi vai hierarhisku softmax slāni.

Nepārtraukta vārdu soma.

Uzzīmēsim vienkāršu diagrammu, lai saprastu nepārtraukto vārdu arhitektūras maisu.

Attēls Nepārtrauktā vārdu arhitektūras soma

Aprēķināsim matemātiski vienādojumus. Pieņemsim, ka V ir vārdu krājuma lielums un N ir slēptais slāņa lielums. Ievade ir definēta kā {x i-1 , x i-2, x i + 1, x i + 2 }. Mēs iegūstam svara matricu, reizinot V * N. Citu matricu iegūst, reizinot ievades vektoru ar svara matricu. To var saprast arī ar šādu vienādojumu.

h = xi t W

kur xi t ∧ W ir attiecīgi ievades vektors un svara matrica,

Lai aprēķinātu atbilstību starp kontekstu un nākamo vārdu, lūdzu, skatiet zemāk esošo vienādojumu

u = paredzētā reprezentācija * h

kur prognozēto pārstāvību iegūst model∧h iepriekšminētajā vienādojumā.

Skip-Gram modelis

Skip-Gram pieeju izmanto, lai paredzētu teikumu, kuram tiek ievadīts ievades vārds. Lai labāk to saprastu, uzzīmēsim diagrammu.

Skip-Gram attēls

To var uzskatīt par nepārtraukta vārda modeļa maisiņa reversu, kur ievade ir vārds, un modelis sniedz kontekstu vai secību. Mēs varam arī secināt, ka mērķis tiek ievadīts ievades un izvades slānis tiek atkārtots vairākas reizes, lai pielāgotos izvēlētajam konteksta vārdu skaitam. Kļūdu vektors no visa izvades slāņa tiek summēts, lai pielāgotu svaru, izmantojot backpropagation metodi.

Kuru modeli izvēlēties?

CBOW ir vairākas reizes ātrāks nekā izlaist gramu un nodrošina labāku biežumu biežiem vārdiem, savukārt izlaist gramam ir nepieciešams neliels treniņu datu daudzums un tas pārstāv pat retus vārdus vai frāzes.

Saistība starp Word2vec un NLTK

NLTK ir dabisks valodas rīku komplekts. To izmanto teksta pirmapstrādei. Var veikt dažādas darbības, piemēram, runas iezīmēšanas daļas, lemmatizēšanu, atvasināšanu, vārdu atcelšanu, retu vārdu vai vismazāk lietoto vārdu noņemšanu. Tas palīdz attīrīt tekstu, kā arī palīdz sagatavot funkcijas no efektīvajiem vārdiem. Citā veidā vārdu2vec izmanto semantiskai (cieši saistīti vienumi kopā) un sintaktiskai (secības) saskaņošanai. Izmantojot vārdu2vec, var atrast līdzīgus vārdus, atšķirīgus vārdus, izmēru samazināšanu un daudzus citus. Vēl viena svarīga Word2vec iezīme ir pārveidot teksta augstāku dimensiju vektoru zemākā dimensijā.

Kur izmantot NLTK un Word2vec?

Ja ir jāveic daži vispāratzīti uzdevumi, kā minēts iepriekš, piemēram, marķēšana, POS marķēšana un parsēšana ir jāizmanto NLTK, turpretī vārdu prognozēšanai pēc kāda konteksta, tēmas modelēšanas vai dokumentu līdzības jāizmanto Word2vec.

NLTK un Word2vec saistība ar koda palīdzību

NLTK un Word2vec var izmantot kopā, lai atrastu līdzīgu vārdu attēlojumu vai sintaktisko atbilstību. NLTK rīkkopu var izmantot, lai ielādētu daudzas paketes, kas nāk ar NLTK, un modeli var izveidot, izmantojot word2vec. Pēc tam to var pārbaudīt ar reāllaika vārdiem. Ļaujiet mums redzēt abu kombināciju nākamajā kodā. Pirms turpmākas apstrādes, lūdzu, apskatiet NLTK piedāvātos korpusus. Jūs varat lejupielādēt, izmantojot komandu

nltk(nltk.download('all'))

Attēlu korpusi lejupielādēti, izmantojot NLTK

Lūdzu, skatiet koda ekrānuzņēmumu.

import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)

Izeja:

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

Kodeksa skaidrojums

  1. Tiek importēta nltk bibliotēka, no kuras varat lejupielādēt abc korpusu, kuru mēs izmantosim nākamajā solī.
  2. Gensim tiek importēts. Ja Gensim nav instalēts, lūdzu, instalējiet to, izmantojot komandu "pip3 install gensim". Lūdzu, skatiet zemāk redzamo ekrānuzņēmumu.

Attēls Gensim instalēšana, izmantojot PIP

  1. importējiet korpusa abc, kas ir lejupielādēts, izmantojot nltk.download ('abc').
  2. Nododiet failus modelim word2vec, kas tiek importēts, izmantojot Gensim kā teikumus.
  3. Vārdnīca tiek saglabāta mainīgā formā.
  4. Modelis tiek pārbaudīts ar vārdu zinātnes paraugu, jo šie faili ir saistīti ar zinātni.
  5. Šeit modeli paredz līdzīgu vārdu "zinātne".

Aktivatori un Word2Vec

Neirona aktivācijas funkcija nosaka šī neirona izvadi, ņemot vērā ievadu kopumu. Bioloģiski iedvesmojoties no aktivitātes mūsu smadzenēs, kur dažādi neironi tiek aktivizēti, izmantojot dažādus stimulus. Ļaujiet mums saprast aktivizācijas funkciju, izmantojot šo diagrammu.

Attēls Aktivizācijas funkcijas izpratne

Šeit x1, x2,… x4 ir neironu tīkla mezgls.

w1, w2, w3 ir mezgla svars,

∑ ir visu svara un mezgla vērtību summēšana, kas darbojas kā aktivizācijas funkcija.

Kāpēc aktivizēšanas funkcija?

Ja netiek izmantota aktivizācijas funkcija, izvade būtu lineāra, bet lineārās funkcijas funkcionalitāte ir ierobežota. Lai sasniegtu sarežģītu funkcionalitāti, piemēram, objektu noteikšanu, attēlu klasifikāciju, teksta ievadīšanu, izmantojot balsi, un daudzas citas nelineāras izejas, kas tiek panāktas, izmantojot aktivizācijas funkciju.

Kā tiek aprēķināts aktivizācijas slānis vārda iegulšanā (word2vec)

Softmax Layer (normalizēta eksponenciālā funkcija) ir izvades slāņa funkcija, kas aktivizē vai aktivizē katru mezglu. Cita izmantotā pieeja ir hierarhiska programmatūra, kur sarežģītību aprēķina ar O (log 2 V), kur softmax ir O (V), kur V ir vārdu krājuma lielums. Atšķirība starp tām ir hierarhiskā softmax slāņa sarežģītības samazināšanās. Lai saprastu tā (hierarhiskās programmatūras) funkcionalitāti, lūdzu, skatiet šo piemēru:

Attēls Hierarhiska softmax kokam līdzīga struktūra

Pieņemsim, ka mēs vēlamies aprēķināt vārda mīlestība novērošanas varbūtību, ņemot vērā noteiktu kontekstu. Plūsma no saknes uz lapu mezglu būs pirmais solis uz mezglu 2 un pēc tam uz mezglu 5. Tātad, ja mūsu vārdu krājuma lielums ir 8, ir nepieciešami tikai trīs aprēķini. Tātad tas ļauj sadalīties, aprēķināt viena vārda ( mīlestības ) varbūtību .

Kādas citas iespējas ir pieejamas, izņemot hierarhisko programmatūru Softmax?

Ja runājot vispārīgā nozīmē par vārdu iegulšanas iespējām, ir pieejamas diferencētas Softmax, CNN-Softmax, svarīguma paraugu ņemšana, adaptīvas nozīmes paraugu ņemšana, trokšņa kontrastējošas aplēses, negatīva paraugu ņemšana, pašnormalizācija un reti sastopama normalizēšana.

Runājot tieši par Word2vec, mums ir pieejama negatīva paraugu ņemšana.

Negatīvā paraugu ņemšana ir veids, kā izlasīt apmācības datus. Tas nedaudz atgādina stohastisko gradienta nolaišanos, taču ar zināmu atšķirību. Negatīvās izlases veidā tiek meklēti tikai negatīvi apmācības piemēri. Tas ir balstīts uz trokšņa kontrastējošu novērtējumu un nejauši izlasa vārdus, nevis kontekstā. Tā ir ātra apmācības metode, un tā kontekstu izvēlas nejauši. Ja pareģotais vārds parādās nejauši izvēlētā kontekstā, abi vektori atrodas tuvu viens otram.

Kādu secinājumu var izdarīt?

Aktivatori neironus izšauj tāpat kā mūsu neironus, izmantojot ārējos stimulus. Softmax slānis ir viena no izvades slāņa funkcijām, kas iedarbina neironus vārdu iegulšanas gadījumā. Word2vec mums ir tādas iespējas kā hierarhiska programmatūra un negatīva paraugu ņemšana. Izmantojot aktivatorus, lineāro funkciju var pārveidot par nelineāru funkciju, un, izmantojot tādu, var ieviest sarežģītu mašīnmācīšanās algoritmu.

Kas ir Gensim?

Gensim ir tēmu modelēšanas rīkkopa, kas tiek ieviesta pitonā. Tēmas modelēšana ir slēptās struktūras atklāšana teksta pamattekstā. Word2vec tiek importēts no Gensim rīkkopa. Lūdzu, ņemiet vērā, ka Gensim nodrošina ne tikai word2vec, bet arī Doc2vec un FastText ieviešanu, taču šī apmācība ir par Word2vec, tāpēc mēs paliksim pie pašreizējās tēmas.

Word2vec ieviešana, izmantojot Gensim

Līdz šim mēs esam apsprieduši, kas ir word2vec, tā dažādās arhitektūras, kāpēc notiek pāreja no vārdu maisa uz word2vec, saikne starp word2vec un NLTK ar dzīvo kodu un aktivizācijas funkcijām. Šajā sadaļā tiks ieviests vārds2vec, izmantojot Gensim

1. solis) Datu vākšana

Pirmais solis jebkura mašīnmācīšanās modeļa ieviešanai vai dabiskās valodas apstrādes ieviešanai ir datu vākšana

Lūdzu, ievērojiet datus, lai izveidotu inteliģentu tērzēšanas robotu.

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

Lūk, ko mēs saprotam no datiem

  • Šie dati satur trīs lietu tagu, modeli un atbildes. Atzīme ir nolūks (kāda ir diskusijas tēma).
  • Dati ir JSON formātā.
  • Modelis ir jautājums, ko lietotāji uzdos robotam
  • Atbildes ir atbilde, ko chatbot sniegs attiecīgajam jautājumam / modelim.

2. solis) Datu pirmapstrāde.

Ir ļoti svarīgi apstrādāt sākotnējos datus. Ja iztīrītie dati tiek ievadīti mašīnā, tad modelis reaģēs precīzāk un efektīvāk apgūs datus.

Šis solis ir saistīts ar stop vārdu noņemšanu, liekiem vārdiem, nevajadzīgiem vārdiem utt. Pirms turpināt, ir svarīgi ielādēt datus un pārveidot tos par datu rāmi. Lūdzu, skatiet šādu kodu

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

CODE skaidrojums.

  1. Tā kā dati ir json formātā, tāpēc json tiek importēts
  2. Fails tiek saglabāts mainīgajā
  3. Fails ir atvērts un ielādēts datu mainīgajā

Tagad dati tiek importēti, un ir pienācis laiks datus konvertēt datu rāmī. Lūdzu, skatiet zemāk esošo kodu, lai redzētu nākamo soli

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

CODE skaidrojums

1. Datus pārvērš datu rāmjos, izmantojot iepriekš importētās pandas.

2. Tas konvertēs sarakstu kolonnu rakstos par virkni.

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

Kods Paskaidrojums

1. Angļu valodas stop vārdi tiek importēti, izmantojot stop vārdu moduli no nltk rīkkopa

2. Visi teksta vārdi tiek konvertēti ar mazajiem burtiem, izmantojot nosacījumu un lambda funkciju. Lambda funkcija ir anonīma funkcija.

3. Visas datu rāmī esošās teksta rindas tiek pārbaudītas, vai nav pieturzīmju virknes, un tās tiek filtrētas.

4. Tādas rakstzīmes kā cipari vai punkts tiek noņemtas, izmantojot parasto izteiksmi.

5. No teksta tiek noņemti cipari.

6. Šajā posmā tiek apturēti vārdi.

7. Vārdi tiek filtrēti tagad, un tā paša vārda atšķirīgā forma tiek noņemta, izmantojot lemmatization. Ar šiem mēs esam pabeiguši datu pirmapstrādi.

Izeja:

, 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

3. solis) Neironu tīkla veidošana, izmantojot vārdu2vec

Tagad ir pienācis laiks izveidot modeli, izmantojot Gensim moduli word2vec. Mums ir jāimportē word2vec no Gensim. Darīsim to, un tad mēs izveidosim un pēdējā posmā pārbaudīsim modeli uz reāllaika datiem.

from gensim.models import Word2Vec

Tagad mēs varam veiksmīgi izveidot modeli, izmantojot Word2Vec. Lūdzu, skatiet nākamo koda rindiņu, lai uzzinātu, kā izveidot modeli, izmantojot Word2Vec. Teksts tiek piegādāts modelim saraksta veidā, tāpēc mēs pārveidosim tekstu no datu rāmja uz sarakstu, izmantojot zemāk esošo kodu

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)

Kodeksa skaidrojumi

1. Izveidoja lielāko sarakstu, kur pievienots iekšējais saraksts. Šis ir formāts, kas tiek padots modelim Word2Vec.

2. Tiek ieviesta cilpa, un katrs datu rāmja kolonnas raksts tiek atkārtots.

3. Katrs kolonnu rakstu elements ir sadalīts un saglabāts iekšējā saraksta li

4. Iekšējais saraksts ir pievienots ārējam sarakstam.

5. Šis saraksts ir paredzēts Word2Vec modelim. Ļaujiet mums saprast dažus šeit norādītos parametrus

Min_count: Tas ignorēs visus vārdus, kuru kopējā frekvence ir zemāka par šo.

Izmērs: Tas norāda vārda vektoru dimensiju.

Darbinieki: šie ir pavedieni, lai apmācītu modeli

Ir pieejamas arī citas iespējas, un dažas svarīgas ir paskaidrotas tālāk

Logs: maksimālais attālums starp pašreizējo un paredzamo vārdu teikumā.

Sg: Tas ir apmācības algoritms un 1 izlaižamajam gramam un 0 nepārtrauktam vārdu maisiņam. Mēs tos iepriekš detalizēti apspriedām.

Hs: Ja tas ir 1, mēs apmācībai izmantojam hierarhisku programmatūru un, ja 0, tad tiek izmantota negatīva paraugu ņemšana.

Alfa: sākotnējais mācīšanās ātrums

Ļaujiet mums zemāk parādīt galīgo kodu

#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. solis) Modeļa saglabāšana

Modeli var saglabāt atkritumu tvertnes un modeļa formā. Bin ir binārs formāts. Lūdzu, skatiet zemāk redzamās rindas, lai saglabātu modeli

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

Iepriekš minētā koda skaidrojums

1. Modelis tiek saglabāts .model faila formā.

2. modelis tiek saglabāts .bin faila formā

Mēs izmantosim šo modeli, lai veiktu reāllaika testēšanu, piemēram, Līdzīgi vārdi, atšķirīgi vārdi un visbiežāk lietotie vārdi.

5. solis) Ielādē modeli un veic reāllaika testēšanu

Modelis tiek ielādēts, izmantojot zemāk esošo kodu

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

Ja vēlaties izdrukāt vārdu krājumu, tas tiek darīts, izmantojot komandu zemāk

vocab = saraksts (model.wv.vocab)

Lūdzu, skatiet rezultātu

['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. solis) Visvairāk līdzīgu vārdu pārbaude

Īstenosim lietas praktiski

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

Lūdzu, skatiet rezultātu

[('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. solis) Neatbilst vārdam no piegādātajiem vārdiem

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

Mēs esam piegādājuši vārdus “Tiekamies vēlāk, paldies, ka apmeklējāt”. Tas izdrukās visatšķirīgākos vārdus no šiem vārdiem. Palaidīsim šo kodu un atradīsim rezultātu

Rezultāts pēc iepriekš minētā koda izpildes.

Thanks

8. solis) Atrodiet divu vārdu līdzību

Tas parādīs divu vārdu līdzības varbūtību. Lūdzu, skatiet zemāk esošo kodu, kā izpildīt šo sadaļu.

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

Iepriekš minētā koda rezultāts ir šāds

0,13706

Jūs varat atrast līdzīgus vārdus, izpildot zemāk esošo kodu

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

Iepriekš minētā koda izvade

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

Secinājums

  • Vārdu iegulšana ir vārdu reprezentācijas veids, kas ļauj mašīnmācīšanās algoritmos saprast vārdus ar līdzīgu nozīmi
  • Vārdu iegulšana tiek izmantota, lai aprēķinātu līdzīgus vārdus, izveidotu saistītu vārdu grupu, iezīme teksta klasifikācijai, dokumentu kopēšana, dabiskās valodas apstrāde
  • Word2vec ir sekls divslāņu neironu tīkla modelis, kas nodrošina vārdu iegulšanu, lai labāk attēlotu vārdu
  • Word2vec apzīmē vārdus vektoru telpas attēlojumā. Vārdi tiek attēloti vektoru formā, un izvietojums tiek veikts tā, lai līdzīgas nozīmes vārdi parādās kopā, un atšķirīgi vārdi atrodas tālu
  • Word2vec izmantoja 2 arhitektūras Nepārtraukts vārdu maiss (CBOW) un izlaist gramu
  • CBOW ir vairākas reizes ātrāks nekā izlaist gramu un nodrošina labāku biežumu biežiem vārdiem, savukārt izlaist gramam ir nepieciešams neliels treniņu datu daudzums un tas pārstāv pat retus vārdus vai frāzes.
  • NLTK un word2vec var izmantot kopā, lai izveidotu jaudīgas lietojumprogrammas
  • Neirona aktivācijas funkcija nosaka šī neirona izvadi, ņemot vērā ievadu kopumu. Vārdā2vec. Softmax Layer (normalizēta eksponenciālā funkcija) ir izvades slāņa funkcija, kas aktivizē vai aktivizē katru mezglu. Word2vec ir pieejama arī negatīva paraugu ņemšana
  • Gensim ir tēmu modelēšanas rīkkopa, kas tiek ieviesta pitonā