Kas yra žodžio įdėjimas?
Žodžių įterpimas yra žodžių atvaizdavimo tipas, leidžiantis mašininio mokymosi algoritmais suprasti panašios reikšmės žodžius. Techniškai kalbant, tai yra žodžių susiejimas su realių skaičių vektoriais, naudojant neuroninį tinklą, tikimybinį modelį arba dimensijų redukciją žodžių bendro pobūdžio matricoje. Tai kalbos modeliavimas ir funkcijų mokymosi technika. Žodžių įterpimas yra būdas atlikti žemėlapius naudojant neuroninį tinklą. Yra įvairių žodžių įterpimo modelių, tokių kaip „word2vec“ („Google“), „Glove“ (Stanfordas) ir greičiausias („Facebook“).
Žodžio įterpimas taip pat vadinamas paskirstytu semantiniu modeliu arba paskirstytu vaizduojamuoju arba semantiniu vektoriniu kosmosu arba vektorine erdve. Skaitydami šiuos pavadinimus susiduriate su žodžiu semantinis, kuris reiškia panašių žodžių skirstymą į kategorijas. Pavyzdžiui, vaisiai, tokie kaip obuoliai, mangai, bananai, turėtų būti dedami arti, o knygos bus toli nuo šių žodžių. Plačiąja prasme žodžio įterpimas sukurs vaisių vektorių, kuris bus toli nuo vektorinio knygų vaizdavimo.
Šioje pamokoje sužinosite
- Kas yra žodžio įdėjimas?
- Kur naudojamas žodžių įdėjimas?
- Kas yra word2vec?
- Ką daro „word2vec“?
- Kodėl „Word2vec“?
- „Word2vec“ architektūra
- Nepertraukiamas žodžių krepšys.
- „Skip-Gram“ modelis
- Ryšys tarp „Word2vec“ ir NLTK
- Aktyvatoriai ir „Word2Vec“
- Kas yra Gensim?
- Kodas „word2vec“ įgyvendinimas naudojant „Gensim“
Kur naudojamas žodžių įdėjimas?
Žodžių įterpimas padeda kurti funkcijas, kaupti dokumentus, klasifikuoti tekstą ir atlikti natūralios kalbos apdorojimo užduotis. Išvardinkime juos ir šiek tiek aptarkime kiekvieną iš šių programų.
- Apskaičiuokite panašius žodžius: Žodžio įterpimas naudojamas norint pasiūlyti panašius žodžius į žodį, kuriam taikomas prognozavimo modelis. Kartu su tuo taip pat siūlomi skirtingi žodžiai ir dažniausiai naudojami žodžiai.
- Sukurkite susijusių žodžių grupę: jis naudojamas semantiniam grupavimui, kuris sugrupuos panašių charakteristikų dalykus ir toli toli.
- Funkcija, skirta klasifikuoti tekstą: Tekstas suskirstytas į vektorių masyvus, kurie pateikiami mokymui ir numatymui skirtame modelyje. Teksto klasifikatoriaus modelių negalima mokyti pagal eilutę, todėl tai pavers tekstą į mašinoje mokomą formą. Toliau pateikiamos semantinės pagalbos kūrimo ypatybės klasifikuojant pagal tekstą.
- Dokumentų grupavimas yra dar viena programa, kurioje plačiai naudojamas žodžių įterpimas
- Natūralus kalbos apdorojimas: yra daugybė programų, kuriose žodžių įterpimas yra naudingas ir kurie laimi prieš funkcijų išskyrimo fazes, tokias kaip kalbos žymėjimo dalys, sentimentali analizė ir sintaksinė analizė.
Dabar turime žinių apie žodžių įterpimą. Šiek tiek šviesos skleidžiama ir skirtingiems modeliams, norint įgyvendinti žodžių įterpimą. Visa ši pamoka skirta vienam iš modelių (word2vec).
Kas yra word2vec?
„Word2vec“ yra technika / modelis, leidžiantis įterpti žodį, kad būtų geriau vaizduojamas žodis. Tai užfiksuoja daug tikslių sintaksinių ir semantinių žodžių santykių. Tai negilus dviejų sluoksnių nervų tinklas. Prieš eidami toliau, prašome pamatyti skirtumą tarp negilaus ir gilaus nervų tinklo:
Negilus neuroninis tinklas susideda iš vienintelio paslėpto sluoksnio tarp įvesties ir išvesties, o giliame neuroniniame tinkle yra keli paslėpti sluoksniai tarp įvesties ir išvesties. Įvestis yra veikiama mazgų, o paslėptame ir išėjimo sluoksnyje yra neuronai.
Paveikslėlis: Seklus ir gilus mokymasis
„word2vec“ yra dviejų sluoksnių tinklas, kuriame yra vienas paslėptas sluoksnis ir išvestis.
„Word2vec“ sukūrė tyrėjų grupė, kuriai „Google“ vadovavo Tomas Mikolovas. „Word2vec“ yra geresnis ir efektyvesnis tas latentinės semantinės analizės modelis.
Ką daro „word2vec“?
„Word2vec“ reiškia žodžius vektorinėje erdvėje. Žodžiai pavaizduoti vektorių pavidalu, o išdėstymas atliekamas taip, kad panašios reikšmės žodžiai atsirastų kartu, o skirtingi žodžiai būtų toli. Tai taip pat vadinama semantiniais santykiais. Neuroniniai tinklai nesupranta teksto, o supranta tik skaičius. Žodžių įdėjimas suteikia galimybę konvertuoti tekstą į skaitinį vektorių.
„Word2vec“ rekonstruoja kalbinį žodžių kontekstą. Prieš eidami toliau, supraskime, koks yra kalbinis kontekstas? Pagal bendrą gyvenimo scenarijų, kai kalbame ar rašome norėdami bendrauti, kiti žmonės bando išsiaiškinti, kas yra sakinio tikslas. Pavyzdžiui, „Kokia yra Indijos temperatūra“, čia kontekstas yra vartotojas, norintis žinoti „Indijos temperatūra“, kuris yra kontekstas. Trumpai tariant, pagrindinis sakinio tikslas yra kontekstas. Žodis ar sakinys, supantis sakytinę ar rašytinę kalbą (atskleidimas), padeda nustatyti konteksto prasmę. „Word2vec“ išmoksta vektorinį žodžių vaizdavimą per kontekstus.
Kodėl „Word2vec“?
Prieš įterpiant žodį
Svarbu žinoti, kuris metodas naudojamas prieš įterpiant žodį ir kokie yra jo trūkumai, tada pereisime prie temos, kaip trūkumai įveikiami „Word“ įterpiant naudojant „word2vec“ metodą. Galiausiai mes pasistengsime, kaip veikia word2vec, nes svarbu suprasti, kad jis veikia.
Latentinės semantinės analizės metodas
Tai buvo požiūris, kuris buvo naudojamas prieš įterpiant žodį. Jis vartojo žodžių maišo sąvoką, kai žodžiai vaizduojami užkoduotų vektorių pavidalu. Tai negausus vektorinis vaizdavimas, kai matmuo yra lygus žodyno dydžiui. Jei žodis yra žodyne, jis skaičiuojamas, kitaip ne. Norėdami daugiau sužinoti, žiūrėkite žemiau pateiktą programą.
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())
Išvestis:
[[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']
Kodo paaiškinimas
- „CountVectorizer“ yra modulis, naudojamas žodynui saugoti, atsižvelgiant į jame esančių žodžių pritaikymą. Tai importuojama iš „sklearn“
- Padarykite objektą naudodami „CountVectorizer“ klasę.
- Įrašykite duomenis į sąrašą, kuris bus įtrauktas į „CountVectorizer“.
- Duomenys tinka objekte, sukurtame iš „CountVectorizer“ klasės.
- Taikykite žodžio metodą, kad suskaičiuotumėte žodžius į duomenis naudodamiesi žodynu. Jei žodyno ar žetono žodyne nėra, tokia indekso padėtis nustatoma į nulį.
- 5 eilutėje esantis kintamasis, kuris yra x, paverčiamas į masyvą (metodas galimas x). Tai suteiks kiekvieno žetono skaičių sakinyje ar sąraše, pateiktame 3 eilutėje.
- Tai parodys ypatybes, kurios yra žodyno dalis, kai jis pritaikomas naudojant 4 eilutės duomenis.
Taikant latentinį semantinį metodą, eilutė nurodo unikalius žodžius, o stulpelis nurodo, kiek laiko tas žodis pasirodė dokumente. Tai žodžių atvaizdavimas dokumento matricos pavidalu. Terminas-dažnis, atvirkštinis dokumento dažnis (TFIDF) yra naudojamas norint suskaičiuoti dokumento žodžių dažnumą, kuris yra dokumento termino dažnis / termino dažnis visame korpuse.
Žodžių maišo metodo trūkumas
- Nepaisoma žodžio tvarkos, pavyzdžiui, tai yra blogai = blogai yra tai.
- Tai nepaiso žodžių konteksto. Tarkime, jei aš parašysiu sakinį "Jis mėgo knygas. Švietimą geriausia rasti knygose". Tai sukurtų du vektorius, skirtus „Jis mėgo knygas“, o kitas - „Švietimą geriausia rasti knygose“. Tai elgtųsi su abiem stačiakampiais, kurie padaro juos nepriklausomus, tačiau iš tikrųjų jie yra susiję vienas su kitu
Norint įveikti šiuos apribojimus, buvo sukurtas žodžių įterpimas ir „word2vec“ yra būdas tai įgyvendinti.
Kaip veikia „Word2vec“?
„Word2vec“ išmoksta žodžio, numatydamas jį supantį kontekstą. Pavyzdžiui, paimkime žodį „Jis myli futbolą“.
Norime apskaičiuoti žodį2vec žodžiui: myli.
Tarkim
loves = Vin. P(Vout / Vin) is calculatedwhere,Vin is the input word.P is the probability of likelihood.Vout is the output word.
Žodis myli perkelia kiekvieną žodį į korpusą. Užkoduotas sintaksinis, taip pat semantinis žodžių santykis. Tai padeda rasti panašių ir analogiškų žodžių.
Apskaičiuojamos visos atsitiktinės žodžio meilės ypatybės . Šios funkcijos keičiamos arba atnaujinamos, atsižvelgiant į kaimyninius ar kontekstinius žodžius, naudojant atgalinio skleidimo metodą.
Kitas būdas mokytis yra tas, kad jei dviejų žodžių kontekstas yra panašus arba du žodžiai turi panašių bruožų, tai tokie žodžiai yra susiję.
„Word2vec“ architektūra
Yra dvi architektūros, kurias naudoja word2vec
- Nuolatinis maišelis žodžių (CBOW)
- praleisti gramą
Prieš eidami toliau, aptarkime, kodėl šios architektūros ar modeliai yra svarbūs žodžių atvaizdavimo požiūriu. Išmokti žodžio vaizdavimo iš esmės nėra prižiūrimi, tačiau modeliui išmokyti reikalingi tikslai / etiketės. „Skip-gram“ ir „CBOW“ paverčia neprižiūrimą vaizdavimą į prižiūrimą modelio mokymo formą.
CBOW dabartinis žodis numatomas naudojant aplinkinių kontekstinių langų langą. Pvz., Jei w i-1 , w i-2 , w i + 1 , w i + 2 suteikiami žodžiai arba kontekstas, šis modelis suteiks w i
„Skip-Gram“ veikia priešingai nei CBOW, o tai reiškia, kad jis numato nurodytą seką ar kontekstą iš žodžio. Galite pakeisti pavyzdį, kad jį suprastumėte. Jei nurodoma w i , tai nuspės kontekstą arba w i-1 , w i-2 , w i + 1 , w i + 2.
„Word2vec“ suteikia galimybę pasirinkti tarp CBOW (nepertraukiamas žodžių krepšys) ir „skim-gram“. Tokie parametrai pateikiami mokant modelį. Galima turėti galimybę naudoti neigiamą atranką arba hierarchinį „softmax“ sluoksnį.
Nepertraukiamas žodžių krepšys.
Nupieškime paprastą schemą, kad suprastume ištisinį žodžių architektūros krepšį.
Figūra Nepertraukiamas žodžių architektūros krepšys
Apskaičiuokime matematiškai lygtis. Tarkime, kad V yra žodyno dydis, o N - paslėptas sluoksnio dydis. Įvestis apibrėžiama kaip {x i-1 , x i-2, x i + 1, x i + 2 }. Svorio matricą gauname padauginę V * N. Kita matrica gaunama padauginus įvesties vektorių su svorio matrica. Tai taip pat galima suprasti pagal šią lygtį.
h = xi t W
kur xi t ∧ W yra atitinkamai įvesties vektorius ir svorio matrica,
Norėdami apskaičiuoti konteksto ir kito žodžio atitikimą, remkitės žemiau pateikta lygtimi
u = numatoma reprezentacija * h
kur gaunamas numatomas reprezentavimas aukščiau pateiktoje lygtyje model∧h.
„Skip-Gram“ modelis
Skip-Gram metodas naudojamas numatant sakinį, kuriam įvestas žodis. Norėdami geriau suprasti, nupieškime schemą.
Skip-Gram paveikslas
Galima tai traktuoti kaip „Continuous Bag of Word“ modelio atvirkštinę dalį, kur įvestis yra žodis, o modelis pateikia kontekstą arba seką. Mes taip pat galime padaryti išvadą, kad taikinys yra tiekiamas įvesties ir išvesties sluoksnis yra pakartojamas kelis kartus, kad tilptų pasirinktas kontekstinių žodžių skaičius. Visų išvesties sluoksnių klaidų vektorius sumuojamas, kad būtų galima sureguliuoti svorį taikant atgalinio dauginimo metodą.
Kurį modelį pasirinkti?
CBOW yra kelis kartus greitesnis nei praleisti gramą ir suteikia geresnį dažnų žodžių dažnumą, o praleidžiant gramą reikia nedaug treniruočių duomenų ir jis reiškia net retus žodžius ar frazes.
Ryšys tarp „Word2vec“ ir NLTK
NLTK yra natūralus kalbos įrankių rinkinys. Jis naudojamas išankstiniam teksto apdorojimui. Galima atlikti įvairias operacijas, pvz., Kalbos žymėjimo dalis, lemmatizavimą, šalinimą, žodžių pašalinimo sustabdymą, retų ar rečiau vartojamų žodžių pašalinimą. Tai padeda išvalyti tekstą, taip pat padeda paruošti efektyvių žodžių ypatybes. Kitaip žodis 2vec naudojamas semantiniam (glaudžiai susiję elementai kartu) ir sintaksiniam (sekos) derinimui. Naudojant word2vec, galima rasti panašių žodžių, nepanašių žodžių, matmenų mažinimo ir daugelio kitų. Kitas svarbus „word2vec“ bruožas yra konvertuoti aukštesnį teksto matmenį į žemesnį vektorių matmenį.
Kur naudoti NLTK ir „Word2vec“?
Jei reikia atlikti kai kurias pirmiau minėtas bendro pobūdžio užduotis, tokias kaip tokenizavimas, POS žymėjimas ir analizavimas turi būti naudojamas naudojant NLTK, o norint numatyti žodžius pagal tam tikrą kontekstą, temos modeliavimą ar dokumentų panašumą, reikia naudoti „Word2vec“.
NLTK ir Word2vec ryšys kodo pagalba
NLTK ir „Word2vec“ gali būti naudojami kartu ieškant panašių žodžių vaizdavimo ar sintaksinio atitikimo. NLTK įrankių rinkinį galima naudoti norint įkelti daug paketų, kurie pateikiami kartu su NLTK, o modelį galima sukurti naudojant word2vec. Tuomet jį galima išbandyti žodžiais realiuoju laiku. Pažvelkime į abiejų derinį šiame kode. Prieš apdorodami toliau, prašome pasidomėti NLTK teikiamais korpusais. Galite atsisiųsti naudodami komandą
nltk(nltk.download('all'))
Figūrų korpusai atsisiųsti naudojant NLTK
Prašome pamatyti kodą ekrano kopijoje.
import nltkimport gensimfrom nltk.corpus import abcmodel= gensim.models.Word2Vec(abc.sents())X= list(model.wv.vocab)data=model.most_similar('science')print(data)
Išvestis:
[('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)]
Kodo paaiškinimas
- Importuojama nltk biblioteka, iš kurios galite atsisiųsti abc korpusą, kurį naudosime kitame žingsnyje.
- „Gensim“ yra importuojamas. Jei „Gensim“ nėra įdiegtas, įdiekite jį naudodami komandą „pip3 install gensim“. Žiūrėkite žemiau pateiktą ekrano kopiją.
Paveikslėlis „Gensim“ diegimas naudojant PIP
- importuokite korpusą abc, kuris buvo atsisiųstas naudojant nltk.download ('abc').
- Perduokite failus modeliui word2vec, kuris yra importuojamas naudojant „Gensim“ kaip sakinius.
- Žodynas saugomas kintamojo pavidalu.
- Modelis yra išbandytas su žodžių mokslu, nes šios bylos yra susijusios su mokslu.
- Čia panašų žodį „mokslas“ numato modelis.
Aktyvatoriai ir „Word2Vec“
Neurono aktyvavimo funkcija apibrėžia to neurono išėjimą, atsižvelgiant į įvesties rinkinį. Biologiškai įkvėpta veikla mūsų smegenyse, kai naudojant skirtingus dirgiklius aktyvuojami skirtingi neuronai. Leiskite mums suprasti aktyvinimo funkciją pagal šią schemą.
Paveikslėlis Aktyvinimo funkcijos supratimas
Čia x1, x2,… x4 yra neuroninio tinklo mazgas.
w1, w2, w3 yra mazgo svoris,
∑ yra visos svorio ir mazgo vertės, kurios veikia kaip aktyvinimo funkcija, suma.
Kodėl reikia aktyvinimo funkcijos?
Jei nenaudojama jokia aktyvinimo funkcija, išvestis bus tiesinė, tačiau linijinės funkcijos funkcionalumas yra ribotas. Norint pasiekti sudėtingą funkciją, pvz., Objektų aptikimą, vaizdų klasifikavimą, teksto rinkimą balsu ir daugelį kitų netiesinių išėjimų, reikia pasiekti naudojant aktyvinimo funkciją.
Kaip skaičiuojamas aktyvinimo sluoksnis įterpiant žodį (word2vec)
„Softmax Layer“ (normalizuota eksponentinė funkcija) yra išėjimo sluoksnio funkcija, kuri įjungia arba suveikia kiekvieną mazgą. Kitas naudojamas metodas yra hierarchinis „softmax“, kai sudėtingumas apskaičiuojamas pagal O (log 2 V), kur „softmax“ yra O (V), kur V yra žodyno dydis. Skirtumas tarp jų yra hierarchinio „softmax“ sluoksnio sudėtingumo sumažėjimas. Norėdami suprasti jo (hierarchinės programinės įrangos) funkcionalumą, žiūrėkite žemiau pateiktą pavyzdį:
Pav. Hierarchinė „softmax“ tipo medžio struktūra
Tarkime, kad norime apskaičiuoti žodžio meilė stebėjimo tikimybę atsižvelgiant į tam tikrą kontekstą. Srautas nuo šaknies iki lapo mazgo bus pirmas žingsnis į 2 mazgą ir po to į 5 mazgą. Taigi, jei mūsų žodynas buvo 8, reikia tik trijų skaičiavimų. Taigi tai leidžia suskaidyti, apskaičiuoti vieno žodžio ( meilės ) tikimybę .
Kokios dar galimos parinktys, išskyrus „Hierarchical Softmax“?
Jei kalbant bendrąja prasme kalbant apie žodžių įterpimo galimybes, yra diferencijuota „Softmax“, CNN – „Softmax“, svarbos atranka, adaptyvios svarbos atranka, triukšmo kontrastingi įvertinimai, neigiama atranka, savireguliavimas ir retas normalizavimas.
Kalbėdami konkrečiai apie „Word2vec“, turime neigiamą imtį.
Neigiama atranka yra būdas atrinkti mokymo duomenis. Tai šiek tiek panašu į stochastinį gradientinį nusileidimą, tačiau su tam tikru skirtumu. Neigiama atranka ieškoma tik neigiamų mokymo pavyzdžių. Jis pagrįstas triukšmo kontrastingu vertinimu ir atsitiktinai atrenkami žodžiai, o ne kontekste. Tai greitas mokymo metodas ir kontekstą pasirenka atsitiktinai. Jei numatomas žodis pasirodo atsitiktinai pasirinktame kontekste, abu vektoriai yra arti vienas kito.
Kokią išvadą galima padaryti?
Aktyvatoriai šaudo neuronus, kaip ir mūsų neuronai, naudojant išorinius dirgiklius. „Softmax“ sluoksnis yra viena iš išėjimo sluoksnio funkcijų, kuri iššaudo neuronus, jei įterpiamas žodis. „Word2vec“ turime tokias galimybes kaip hierarchinė „softmax“ ir neigiama atranka. Naudojant aktyvatorius, galima konvertuoti tiesinę funkciją į netiesinę funkciją, o naudojant ją galima įgyvendinti sudėtingą mašininio mokymosi algoritmą.
Kas yra Gensim?
„Gensim“ yra temų modeliavimo įrankių rinkinys, įdiegtas „python“. Temų modeliavimas atranda paslėptą struktūrą teksto tekste. „Word2vec“ yra importuojamas iš „Gensim“ įrankių rinkinio. Atkreipkite dėmesį, kad „Gensim“ ne tik pateikia „word2vec“, bet ir „Doc2vec“ bei „FastText“, tačiau ši pamoka skirta „word2vec“, todėl mes laikysimės dabartinės temos.
„Word2vec“ įgyvendinimas naudojant „Gensim“
Iki šiol aptarėme, kas yra „word2vec“, jo skirtingos architektūros, kodėl pereinama nuo žodžių maišo prie „word2vec“, santykio tarp „word2vec“ ir NLTK su tiesioginiu kodu ir aktyvinimo funkcijomis. Šiame skyriuje įgyvendinsite „word2vec“ naudodami „Gensim“
1 žingsnis) Duomenų rinkimas
Pirmasis bet kokio mašininio mokymosi modelio arba natūralios kalbos apdorojimo žingsnis yra duomenų rinkimas
Norėdami sukurti intelektualų pokalbių robotą, atkreipkite dėmesį į duomenis.
[{"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"]}]
Štai ką mes suprantame iš duomenų
- Šiuose duomenyse yra trijų dalykų žyma, šablonas ir atsakymai. Žyma yra ketinimas (kokia yra diskusijos tema).
- Duomenys pateikiami JSON formatu.
- Šablonas yra klausimas, kurį vartotojai užduos robotui
- Atsakymai yra atsakymas, kurį „chatbot“ pateiks į atitinkamą klausimą / modelį.
2 žingsnis) Duomenų išankstinis apdorojimas.
Labai svarbu apdoroti pirminius duomenis. Jei išvalyti duomenys tiekiami į mašiną, modelis atsakys tiksliau ir efektyviau išmoks duomenis.
Šis žingsnis apima stabdymo žodžių pašalinimą, nereikalingus žodžius, nereikalingus žodžius ir kt. Prieš einant į priekį, svarbu įkelti duomenis ir konvertuoti juos į duomenų rėmelius. Prašome žiūrėti žemiau pateiktą kodą
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
KODO paaiškinimas.
- Kadangi duomenys yra „Json“ formato, todėl „Json“ yra importuojamas
- Failas saugomas kintamajame
- Failas atidarytas ir įkeliamas į duomenų kintamąjį
Dabar duomenys yra importuojami ir atėjo laikas konvertuoti duomenis į duomenų rėmelius. Norėdami pamatyti kitą žingsnį, žr. Žemiau pateiktą kodą
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
KODO paaiškinimas
1. Duomenys konvertuojami į duomenų rėmą naudojant anksčiau importuotas pandas.
2. Jis konvertuos stulpelių šablonų sąrašą į eilutę.
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()]))
Kodo paaiškinimas
1. Anglų kalbos žodžiai importuojami naudojant „stop word“ modulį iš „nltk“ įrankių rinkinio
2. Visi teksto žodžiai paverčiami mažosiomis raidėmis, naudojant sąlygą ir lambda funkciją. Lambda funkcija yra anoniminė funkcija.
3. Visos duomenų rėmelio teksto eilutės tikrinamos, ar nėra skyrybos eilutės, ir jos yra filtruojamos.
4. Simboliai, tokie kaip skaičiai ar taškas, pašalinami naudojant įprastą išraišką.
5. Iš teksto pašalinami skaitmenys.
6. Šiame etape sustabdymo žodžiai pašalinami.
7. Dabar žodžiai filtruojami, o to paties žodžio forma pašalinama naudojant lemmatization. Tai baigėme duomenų išankstinį apdorojimą.
Išvestis:
, 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 žingsnis) Neuroninio tinklo kūrimas naudojant „word2vec“
Dabar atėjo laikas sukurti modelį naudojant „Gensim“ modulį word2vec. Turime importuoti „word2vec“ iš „Gensim“. Padarykime tai, tada sukursime ir paskutiniame etape patikrinsime modelį pagal realaus laiko duomenis.
from gensim.models import Word2Vec
Dabar mes galime sėkmingai sukurti modelį naudodami „Word2Vec“. Norėdami sužinoti, kaip sukurti modelį naudojant „Word2Vec“, skaitykite kitoje kodo eilutėje. Modelis pateikia tekstą sąrašo forma, todėl tekstą iš duomenų rėmelio paversime sąrašu naudodami žemiau pateiktą kodą
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)
Kodo paaiškinimai
1. Sukurkite didesnį sąrašą, kuriame pridedamas vidinis sąrašas. Tai formatas, kuris tiekiamas modeliui „Word2Vec“.
2. Įdiegta ciklas ir kartojamas kiekvienas duomenų rėmelio stulpelių šablonų įrašas.
3. Kiekvienas stulpelio modelio elementas yra padalintas ir saugomas vidiniame sąraše li
4. Vidinis sąrašas pridedamas prie išorinio sąrašo.
5. Šis sąrašas pateikiamas „Word2Vec“ modeliui. Supraskime kai kuriuos čia pateiktus parametrus
Min_count: Tai ignoruos visus žodžius, kurių bendras dažnis yra mažesnis nei šis.
Dydis: jis nurodo žodžio vektorių matmenį.
Darbuotojai: tai yra modelio mokymo gijos
Taip pat yra kitų galimų variantų, o kai kurie svarbūs yra paaiškinti toliau
Langas: didžiausias atstumas tarp dabartinio ir numatomo žodžio sakinyje.
SG: Tai mokymo algoritmas ir 1 praleisti gramą ir 0 nepertraukiamo žodžių maišo. Mes tai išsamiai aptarėme aukščiau.
Hs: Jei tai yra 1, mes mokymui naudojame hierarchinę „softmax“ ir, jei 0, tada naudojama neigiama atranka.
Alfa: pradinis mokymosi greitis
Žemiau parodykime galutinį kodą
#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 žingsnis) Modelio taupymas
Modelį galima išsaugoti šiukšliadėžės ir modelio formos pavidalu. Šiukšliadėžė yra dvejetainis formatas. Norėdami išsaugoti modelį, žiūrėkite toliau pateiktas eilutes
model.save("word2vec.model")model.save("model.bin")
Pirmiau minėto kodo paaiškinimas
1. Modelis išsaugomas .model failo pavidalu.
2. modelis išsaugomas .bin failo forma
Šį modelį naudosime tikrindami realiuoju laiku, pvz., Panašūs žodžiai, nepanašūs žodžiai ir dažniausiai naudojami žodžiai.
5 žingsnis) Įkelkite modelį ir atlikite tikralaikį bandymą
Modelis įkeltas naudojant žemiau esantį kodą
model = Word2Vec.load('model.bin')
Jei norite išspausdinti žodyną iš jo, atlikite komandą žemiau
Prašome pamatyti rezultatą
['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 žingsnis) Labiausiai panašių žodžių tikrinimas
Įgyvendinkime dalykus praktiškai
similar_words = model.most_similar('thanks')print(similar_words)
Prašome pamatyti rezultatą
[('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 žingsnis) Neatitinka pateiktų žodžių žodžio
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Pateikėme žodžius „ Iki pasimatymo, ačiū, kad apsilankėte“. Tai atspausdins pačius skirtingiausius žodžius iš šių žodžių. Paleiskime šį kodą ir suraskime rezultatą
Rezultatas įvykdžius aukščiau nurodytą kodą.
Thanks
8 žingsnis) Suraskite dviejų žodžių panašumą
Tai parodys dviejų žodžių panašumo tikimybę. Kaip vykdyti šį skyrių, žiūrėkite žemiau pateiktą kodą.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Minėto kodo rezultatas yra toks, koks yra žemiau
0,13706
Panašių žodžių galite rasti toliau vykdydami žemiau pateiktą kodą
similar = model.similar_by_word('kind')print(similar)
Aukščiau nurodyto kodo išvestis
[('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)]
Išvada
- Žodžių įterpimas yra žodžių atvaizdavimo tipas, leidžiantis mašininio mokymosi algoritmais suprasti panašios reikšmės žodžius
- Žodžių įdėjimas naudojamas panašiems žodžiams apskaičiuoti, Susijusių žodžių grupės sukūrimas, Teksto klasifikavimo funkcija, Dokumentų grupavimas, Natūralios kalbos apdorojimas
- „Word2vec“ yra negilus dviejų sluoksnių neuroninio tinklo modelis, sukuriantis žodžių įterpimą geresniam žodžių atvaizdavimui
- „Word2vec“ reiškia žodžius vektorinėje erdvėje. Žodžiai pateikiami vektorių pavidalu, o išdėstymas atliekamas taip, kad panašios reikšmės žodžiai atsirastų kartu, o skirtingi žodžiai būtų toli
- „Word2vec“ naudojo 2 architektūras „Continuous Bag of words“ (CBOW) ir praleiskite gram
- CBOW yra kelis kartus greitesnis nei praleisti gramą ir suteikia geresnį dažnų žodžių dažnumą, o praleidžiant gramą reikia nedaug treniruočių duomenų ir jis reiškia net retus žodžius ar frazes.
- NLTK ir „word2vec“ gali būti naudojami kartu kuriant galingas programas
- Neurono aktyvavimo funkcija apibrėžia to neurono išėjimą, atsižvelgiant į įvesties rinkinį. Žodžiu2vec. „Softmax Layer“ (normalizuota eksponentinė funkcija) yra išvesties sluoksnio funkcija, kuri įjungia arba įjungia kiekvieną mazgą. „Word2vec“ taip pat yra neigiamų pavyzdžių
- „Gensim“ yra temų modeliavimo įrankių rinkinys, įdiegtas „python“