Sanan upottamisen opas: word2vec käyttäen Gensimiä (ESIMERKKI)

Sisällysluettelo:

Anonim

Mikä on sanan upottaminen?

Sanan upottaminen on eräänlainen sanan esitys, jonka avulla koneoppimisalgoritmit ymmärtävät samanlaiset merkitykset. Teknisesti ottaen se on sanojen kartoitus reaalilukujen vektoreihin käyttämällä hermoverkkoa, todennäköisyysmallia tai ulottuvuusvähennystä sanojen rinnakkaismatriisimatriisissa. Se on kielen mallinnus ja ominaisuusoppimistekniikka. Sanan upottaminen on tapa suorittaa kartoitus käyttämällä hermoverkkoa. Saatavilla on useita sanojen upotusmalleja, kuten word2vec (Google), Glove (Stanford) ja nopein (Facebook).

Sanan upottamista kutsutaan myös hajautetuksi semanttimalliksi tai hajautetuksi edustetuksi tai semanttiseksi vektoritilaksi tai vektori-avaruusmalliksi. Kun luet näitä nimiä, törmäät sanaan semanttinen, mikä tarkoittaa samanlaisten sanojen luokittelemista yhteen. Esimerkiksi hedelmät, kuten omena, mango, banaani, tulisi sijoittaa lähelle, kun taas kirjat ovat kaukana näistä sanoista. Laajemmassa merkityksessä sanan upottaminen luo hedelmävektorin, joka sijoitetaan kauas kirjojen vektoriesityksestä.

Tässä opetusohjelmassa opit

  • Mikä on sanan upottaminen?
  • Missä Word Upottamista käytetään?
  • Mikä on word2vec?
  • Mitä word2vec tekee?
  • Miksi Word2vec?
  • Word2vec-arkkitehtuuri
  • Jatkuva sanapussi.
  • Skip-Gram-malli
  • Word2vecin ja NLTK: n suhde
  • Aktivaattorit ja Word2Vec
  • Mikä on Gensim?
  • Koodi word2vecin toteutus Gensimillä

Missä Word Upottamista käytetään?

Sanan upottaminen auttaa ominaisuuksien luomisessa, asiakirjojen ryhmittelyssä, tekstin luokittelussa ja luonnollisen kielen käsittelytehtävissä. Luetteloimme ne ja keskustelkaamme kustakin näistä sovelluksista.

  • Laske samanlaiset sanat: Sanojen upottamista käytetään ehdottamaan samankaltaisia ​​sanoja ennustemallin kohteena olevalle sanalle. Yhdessä sen kanssa ehdotetaan myös erilaisia ​​sanoja sekä yleisimpiä sanoja.
  • Luo ryhmä toisiinsa liittyviä sanoja: Sitä käytetään semanttiseen ryhmittelyyn, joka ryhmittelee samanlaiset ominaisuudet yhteen ja kaukana toisistaan ​​poikkeavilla tavoilla.
  • Ominaisuus tekstiluokitusta varten: Teksti kartoitetaan vektoriryhmiksi, jotka syötetään malliin koulutusta ja ennustamista varten. Tekstipohjaisia ​​luokittelumalleja ei voida kouluttaa merkkijonossa, joten se muuntaa tekstin koneellisesti koulutettavaksi. Edelleen semanttisen avun rakentamisen ominaisuuksia tekstipohjaisessa luokittelussa.
  • Asiakirjojen ryhmittely on toinen sovellus, jossa sanojen upottamista käytetään laajasti
  • Luonnollinen kielenkäsittely: On monia sovelluksia, joissa sanan upottaminen on hyödyllistä ja voittaa ominaisuuksien poimintavaiheet, kuten puheen merkinnän osat, sentimentaalinen analyysi ja syntaktinen analyysi.

    Nyt meillä on jonkin verran tietoa sanojen upottamisesta. Jotkut valot heitetään myös eri malleihin sanojen upottamisen toteuttamiseksi. Tämä koko opetusohjelma on keskittynyt yhteen malleista (word2vec).

Mikä on word2vec?

Word2vec on tekniikka / malli sanan upottamisen tuottamiseksi parempaa sanan esitystä varten. Se sieppaa suuren määrän tarkkaa syntaktista ja semanttista sanasuhdetta. Se on matala kaksikerroksinen hermoverkko. Ennen kuin jatkat, tutustu matalan ja syvän hermoverkon väliseen eroon:

Matala hermoverkko koostuu ainoasta piilotetusta kerroksesta tulon ja lähdön välillä, kun taas syvä hermoverkko sisältää useita piilotettuja kerroksia tulon ja lähdön välillä. Syöttö altistuu solmuille, kun taas piilotettu kerros samoin kuin lähtökerros sisältää neuroneja.

Kuva: Matala vs. syvä oppiminen

word2vec on kaksikerroksinen verkko, jossa on yksi piilotettu kerros ja lähtö.

Word2vecin kehitti tutkijaryhmä, jota johtaa Tomas Mikolov Googlessa. Word2vec on parempi ja tehokkaampi kuin piilevä semanttinen analyysimalli.

Mitä word2vec tekee?

Word2vec edustaa sanoja vektoriavaruuden esityksessä. Sanat esitetään vektorien muodossa ja sijoitus tehdään siten, että samanlaiset merkityssanat esiintyvät yhdessä ja erilaiset sanat sijaitsevat kaukana. Tätä kutsutaan myös semanttiseksi suhteeksi. Neuroverkot eivät ymmärrä tekstiä, vaan vain numerot. Sanan upottaminen tarjoaa tavan muuntaa teksti numeeriseksi vektoriksi.

Word2vec rekonstruoi sanojen kielellisen kontekstin. Ennen kuin menemme pidemmälle, ymmärrämme, mikä on kielellinen asiayhteys? Yleisessä elämänskenaariossa, kun puhumme tai kirjoitamme kommunikoida, muut ihmiset yrittävät selvittää, mikä on lauseen tavoite. Esimerkiksi "Mikä on Intian lämpötila", tässä konteksti on käyttäjä haluaa tietää "Intian lämpötilan", joka on konteksti. Lyhyesti sanottuna lauseen päätavoite on konteksti. Puhuttua tai kirjoitettua kieltä ympäröivä sana tai lause (paljastaminen) auttaa määrittämään kontekstin merkityksen. Word2vec oppii sanojen vektoriesityksen kontekstien kautta.

Miksi Word2vec?

Ennen sanan upottamista

On tärkeää tietää, mitä lähestymistapaa käytetään ennen sanan upottamista ja mitkä ovat sen haittoja, ja sitten siirrymme aiheeseen, kuinka haittapuolet voitetaan Wordin upottamalla käyttämällä word2vec-lähestymistapaa. Lopuksi siirrymme siihen, miten word2vec toimii, koska on tärkeää ymmärtää, että se toimii.

Lähestymistapa piilevään semanttiseen analyysiin

Tätä lähestymistapaa käytettiin ennen sanan upottamista. Siinä käytettiin sanapussin käsitettä, jossa sanat on esitetty koodattujen vektorien muodossa. Se on harvinainen vektoriesitys, jossa ulottuvuus on yhtä suuri kuin sanaston koko. Jos sana esiintyy sanakirjassa, se lasketaan, muuten ei. Jos haluat lisätietoja, katso alla oleva ohjelma.

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

Tuotos:

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

Koodin selitys

  1. CountVectorizer on moduuli, jota käytetään sanaston tallentamiseen sen sanojen sovittamisen perusteella. Tämä tuodaan sklearnista
  2. Tee objekti luokan CountVectorizer avulla.
  3. Kirjoita tiedot luetteloon, joka on määrä asentaa CountVectorizeriin.
  4. Tiedot sopivat luokkaan CountVectorizer luotuun objektiin.
  5. Käytä sanapussia sanojen laskemiseksi tietoihin sanaston avulla. Jos sanaa tai tunnusta ei ole käytettävissä sanastossa, tällainen hakemiston sijainti on nolla.
  6. Rivillä 5 oleva muuttuja, joka on x, muunnetaan taulukoksi (menetelmä on käytettävissä x: lle). Tämä antaa jokaisen merkin määrän rivillä 3 annetussa lauseessa tai luettelossa.
  7. Tämä näyttää ominaisuudet, jotka ovat osa sanastoa, kun se asennetaan käyttäen rivin 4 tietoja.

Piilotetussa semanttisessa lähestymistavassa rivi edustaa ainutlaatuisia sanoja, kun taas sarake edustaa kuinka monta kertaa sana esiintyy asiakirjassa. Se edustaa sanoja asiakirjamatriisin muodossa. Term-Frequency inverse document frequency (TFIDF) käytetään laskemaan asiakirjassa olevien sanojen taajuus, joka on asiakirjassa olevan termin taajuus / termin taajuus koko korpusessa.

Sanapussi-menetelmän puute

  • Se jättää huomiotta sanan järjestyksen, esimerkiksi tämä on huono = huono tämä.
  • Se jättää huomiotta sanojen kontekstin. Oletetaan, että jos kirjoitan lauseen "Hän rakasti kirjoja. Koulutus löytyy parhaiten kirjoista". Se loisi kaksi vektoria, yhden "Hän rakasti kirjoja" ja toisen "Koulutus löytyy parhaiten kirjoista". Se kohtelee molempia ortogonaalisesti, mikä tekee heistä itsenäisiä, mutta todellisuudessa ne ovat yhteydessä toisiinsa

Näiden rajoitusten voittamiseksi kehitettiin sanojen upottaminen ja word2vec on lähestymistapa sellaisten toteuttamiseen.

Kuinka Word2vec toimii?

Word2vec oppii sanan ennustamalla ympäröivän kontekstin. Otetaan esimerkiksi sana "Hän rakastaa jalkapalloa".

Haluamme laskea sana2vec sanalle: rakastaa.

Olettaa

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

Sana rakastaa liikkuu korpuksen jokaisen sanan yli. Sekä syntaktinen että semanttinen suhde sanojen välillä on koodattu. Tämä auttaa löytämään samankaltaisia ​​ja analogisia sanoja.

Kaikki sanan rakkaudet satunnaiset piirteet lasketaan. Näitä ominaisuuksia muutetaan tai päivitetään naapuri- tai kontekstisanojen suhteen taaksepäin etenemismenetelmän avulla.

Toinen tapa oppia on, että jos kahden sanan konteksti on samanlainen tai kahdella sanalla on samanlaiset piirteet, niin tällaiset sanat liittyvät toisiinsa.

Word2vec-arkkitehtuuri

Word2vec käyttää kahta arkkitehtuuria

  1. Jatkuva sanapussi (CBOW)
  2. ohita gramma

Ennen kuin menemme pidemmälle, keskustelkaamme siitä, miksi nämä arkkitehtuurit tai mallit ovat tärkeitä sananesityksen kannalta. Sanan esittelyn oppiminen on käytännössä valvomatonta, mutta mallin kouluttamiseen tarvitaan tavoitteita / tunnisteita. Ohita grammi ja CBOW muuntaa valvomattoman edustuksen valvotuksi muodoksi mallikoulutusta varten.

CBOW: ssa nykyinen sana ennustetaan ympäröivien kontekstiikkunoiden ikkunasta. Esimerkiksi jos w i-1 , w i-2 , w i + 1 , w i + 2 annetaan sanoja tai asiayhteyttä, tämä malli antaa w i

Skip-Gram toimii päinvastoin kuin CBOW, mikä tarkoittaa, että se ennustaa annetun sekvenssin tai kontekstin sanasta. Voit kääntää esimerkin ymmärtämään sitä. Jos w i on annettu, se ennustaa yhteydessä tai w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec tarjoaa vaihtoehdon valita CBOW: n (jatkuva sanapussi) ja skim-gramman välillä. Tällaiset parametrit annetaan mallin koulutuksen aikana. Voi olla mahdollisuus käyttää negatiivista näytteenottoa tai hierarkkista softmax-kerrosta.

Jatkuva sanapussi.

Piirretään yksinkertainen kaavio ymmärtääksemme sana-arkkitehtuurin jatkuvaa laukkua.

Kuva jatkuva sana Word-arkkitehtuurista

Lasketaan yhtälöt matemaattisesti. Oletetaan, että V on sanaston koko ja N on piilotetun kerroksen koko. Syöttö määritellään seuraavasti: {x i-1 , x i-2, x i + 1, x i + 2 }. Saamme painomatriisin kertomalla V * N. Toinen matriisi saadaan kertomalla syöttövektori painomatriisilla. Tämä voidaan ymmärtää myös seuraavalla yhtälöllä.

h = xi t W

missä xi t ∧ W ovat tulosvektori ja painomatriisi,

Voit laskea kontekstin ja seuraavan sanan välisen vastaavuuden seuraavasta yhtälöstä

u = ennustettu edustus * h

missä ennustettu edustus saadaan malli∧h yllä olevassa yhtälössä.

Skip-Gram-malli

Skip-Gram-lähestymistapaa käytetään ennustamaan syötesanalle annettu lause. Piirrämme kaavio ymmärtääksemme sen paremmin.

Kuva Skip-Gram -malli

Voidaan kohdella sitä käänteisenä jatkuvan sanamallin pussista, jossa syötteenä on sana ja malli antaa kontekstin tai sekvenssin. Voimme myös päätellä, että kohde syötetään syöttö- ja ulostulokerrokseen, joka toistetaan useita kertoja valitun määrän kontekstisanojen mukauttamiseksi. Virhevektori kaikista lähtökerroksista summataan painojen säätämiseksi backpropage-menetelmällä.

Mikä malli valita?

CBOW on useita kertoja nopeampi kuin ohita gramma ja tarjoaa paremman taajuuden toistuville sanoille, kun taas ohita gramma tarvitsee pienen määrän harjoitustietoja ja edustaa jopa harvinaisia ​​sanoja tai lauseita.

Word2vecin ja NLTK: n suhde

NLTK on luonnollinen kielen työkalupakki. Sitä käytetään tekstin esikäsittelyyn. Voidaan tehdä erilaisia ​​toimintoja, kuten osia puheen merkitsemisestä, lemmatisoinnista, juonittelusta, sanojen poistamisen lopettamisesta, harvinaisten tai vähiten käytettyjen sanojen poistamisesta. Se auttaa sekä tekstin puhdistamisessa että ominaisuuksien valmistelussa tehokkaista sanoista. Toisin sanoen sanaa2vec käytetään semanttiseen (läheisesti liittyvät kohteet yhdessä) ja syntaktiseen (sekvenssi) vastaavuuteen. Käyttämällä word2vec-sovellusta voidaan löytää samanlaisia ​​sanoja, erilaisia ​​sanoja, ulottuvuuden pienennys ja monia muita. Toinen tärkeä ominaisuus word2vecissä on muuntaa tekstin korkeampi ulottuvuus vektorien matalammaksi.

Missä käyttää NLTK: ta ja Word2veciä?

Jos joudut suorittamaan joitain edellä mainittuja yleiskäyttöisiä tehtäviä, kuten tokenisaatio, POS-koodaus ja jäsentäminen, on käytettävä NLTK: ta, kun taas sanojen ennustamiseksi jonkin kontekstin, aihemallinnuksen tai asiakirjan samankaltaisuuden mukaan on käytettävä Word2veciä.

NLTK: n ja Word2vecin suhde koodin avulla

NLTK: ta ja Word2vec: ää voidaan käyttää yhdessä samankaltaisten sanojen esityksen tai syntaktisen vastaavuuden löytämiseksi. NLTK-työkalupakilla voidaan ladata monia paketteja, jotka tulevat NLTK: n kanssa, ja malli voidaan luoda Word2vec-ohjelmalla. Sitten se voidaan testata reaaliaikaisilla sanoilla. Katsotaanpa molempien yhdistelmä seuraavassa koodissa. Ennen kuin jatkat käsittelyä, tutustu NLTK: n tarjoamiin ruumiisiin. Voit ladata komennolla

nltk(nltk.download('all'))

Kuvakorpukset ladattiin NLTK: n avulla

Katso koodi kuvakaappauksesta.

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

Tuotos:

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

Koodin selitys

  1. Tuodaan nltk-kirjasto, josta voit ladata abc-korpusen, jota käytämme seuraavassa vaiheessa.
  2. Gensim tuodaan. Jos Gensimiä ei ole asennettu, asenna se komennolla "pip3 install gensim". Katso alla oleva kuvakaappaus.

Kuva Gensimin asentaminen PIP: n avulla

  1. tuo corpus abc, joka on ladattu käyttäen nltk.download ('abc').
  2. Siirrä tiedostot mallille word2vec, joka on tuotu Gensimillä lauseina.
  3. Sanasto tallennetaan muuttujan muodossa.
  4. Malli testataan näytesanatiede, koska nämä tiedostot liittyvät tieteeseen.
  5. Tässä malli ennustaa samanlaisen sanan "tiede".

Aktivaattorit ja Word2Vec

Neuronin aktivointitoiminto määrittelee kyseisen hermosyötön tuotoksen annetulla syötesarjalla. Biologisesti innoittamana aivojemme toiminnasta, jossa eri neuronit aktivoidaan käyttämällä erilaisia ​​ärsykkeitä. Ymmärretään aktivointitoiminto seuraavan kaavion avulla.

Kuva Aktivointitoiminnon ymmärtäminen

Tässä x1, x2,… x4 on hermoverkon solmu.

w1, w2, w3 on solmun paino,

∑ on kaikkien aktivointitoimintona toimivien painojen ja solmuarvojen summa.

Miksi aktivointi-toiminto?

Jos aktivointitoimintoa ei käytetä, tulos olisi lineaarinen, mutta lineaarisen funktion toiminnallisuus on rajallinen. Monimutkaisten toimintojen, kuten kohteen havaitseminen, kuvaluokitus, tekstin kirjoittaminen äänellä ja monilla muilla epälineaarisilla ulostuloilla tarvitaan aktivointitoiminnon avulla.

Kuinka aktivointikerros lasketaan sanan upotuksessa (word2vec)

Softmax Layer (normalisoitu eksponenttifunktio) on lähtökerroksen toiminto, joka aktivoi tai käynnistää jokaisen solmun. Toinen käytetty lähestymistapa on hierarkkinen softmax, jossa kompleksisuus lasketaan O: lla (log 2 V), jolloin softmax on O (V), jossa V on sanaston koko. Näiden ero on hierarkkisen softmax-kerroksen monimutkaisuuden väheneminen. Katso alla oleva esimerkki ymmärtääksesi sen (hierarkkisen softmax) toiminnallisuuden:

Kuva Hierarkkinen softmax-puun kaltainen rakenne

Oletetaan, että haluamme laskea todennäköisyyden tarkkailla sanaa rakkaus tietyssä kontekstissa. Virta juuresta lehtisolmuun on ensimmäinen siirto solmuun 2 ja sitten solmuun 5. Joten jos sanaston koko on ollut 8, tarvitaan vain kolme laskutoimitusta. Joten se mahdollistaa hajoamisen, yhden sanan ( rakkauden ) todennäköisyyden laskemisen .

Mitä muita vaihtoehtoja on muita kuin hierarkkinen Softmax?

Jos puhutaan yleisessä mielessä sanojen upotusvaihtoehdoista, käytettävissä ovat eriytetty Softmax, CNN-Softmax, tärkeyden näytteenotto, adaptiivinen tärkeyden näytteenotto, melun kontrastiset estimaatit, negatiivinen näytteenotto, itsestään normalisointi ja harvinainen normalisointi.

Erityisesti Word2vecistä puhuttaessa meillä on käytettävissä negatiivinen näytteenotto.

Negatiivinen näytteenotto on tapa kerätä harjoitustiedot. Se on jonkin verran kuin stokastinen kaltevuuslasku, mutta jonkin verran eroa. Negatiivinen näytteenotto etsii vain negatiivisia harjoitusesimerkkejä. Se perustuu melukontrastiiviseen estimointiin ja otantaa satunnaisesti sanoja, ei kontekstissa. Se on nopea harjoitusmenetelmä ja valitsee kontekstin satunnaisesti. Jos ennustettu sana esiintyy satunnaisesti valitussa kontekstissa, molemmat vektorit ovat lähellä toisiaan.

Mikä johtopäätös voidaan tehdä?

Aktivaattorit ampuvat neuroneja samalla tavalla kuin neuronimme ammutaan käyttämällä ulkoisia ärsykkeitä. Softmax-kerros on yksi ulostulotason toiminnoista, joka laukaisee neuronit sanan upotuksen yhteydessä. Word2vecissä meillä on vaihtoehtoja, kuten hierarkkinen softmax ja negatiivinen näytteenotto. Aktivaattoreita käyttämällä lineaarinen funktio voidaan muuntaa epälineaariseksi funktioksi, ja monimutkainen koneoppimisalgoritmi voidaan toteuttaa sellaisilla.

Mikä on Gensim?

Gensim on aihemallinnuksen työkalupakki, joka on toteutettu pythonissa. Aihemallinnus on piilorakenteen löytämistä tekstirungosta. Word2vec tuodaan Gensim-työkalupakista. Huomaa, että Gensim tarjoaa Word2vecin lisäksi myös Doc2vecin ja FastTextin, mutta tässä opetusohjelmassa on kyse word2vecistä, joten pidämme kiinni nykyisestä aiheesta.

Word2vecin toteutus Gensimillä

Tähän asti olemme keskustelleet siitä, mikä on word2vec, sen erilaiset arkkitehtuurit, miksi siirtyminen sanapussista word2veciin, word2vecin ja NLTK: n suhde reaaliaikaisella koodilla ja aktivointitoiminnot. Tässä osassa toteuttaa word2vec Gensimillä

Vaihe 1) Tiedonkeruu

Ensimmäinen vaihe minkä tahansa koneoppimismallin tai luonnollisen kielenkäsittelyn toteuttamiseksi on tiedonkeruu

Noudata tietoja rakentaaksesi älykkään chatbotin.

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

Tässä on mitä ymmärrämme tiedoista

  • Nämä tiedot sisältävät kolme asiaa -tagia, mallia ja vastauksia. Tunniste on tarkoitus (mikä on keskustelun aihe).
  • Tiedot ovat JSON-muodossa.
  • Kuvio on kysymys, jonka käyttäjät esittävät botille
  • Vastaukset on vastaus, jonka chatbot antaa vastaavaan kysymykseen / malliin.

Vaihe 2) Tietojen esikäsittely.

On erittäin tärkeää käsitellä raakatiedot. Jos koneeseen syötetään puhdistettuja tietoja, malli reagoi tarkemmin ja oppii tiedot tehokkaammin.

Tähän vaiheeseen sisältyy pysäytyssanojen poistaminen, tarpeettomat sanat jne. Ennen jatkamista on tärkeää ladata tiedot ja muuntaa ne datakehykseksi. Katso alla oleva koodi

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

CODE-selitys.

  1. Koska tiedot ovat json-muodossa, json tuodaan
  2. Tiedosto tallennetaan muuttujaan
  3. Tiedosto on auki ja ladattu tietomuuttujaan

Nyt tiedot tuodaan ja on aika muuntaa tiedot datakehykseksi. Katso seuraava koodi alla olevasta koodista

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

CODE-selitys

1. Tiedot muunnetaan datakehykseksi käyttämällä yllä tuotuja pandoja.

2. Se muuntaa sarakekuvioiden luettelon merkkijonoksi.

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

Koodin selitys

1. Englanninkieliset lopetussanat tuodaan nltk-työkalupakin pysäytyssanamoduulin avulla

2. Kaikki tekstin sanat muunnetaan pieniksi kirjaimiksi käyttämällä ehtoa ja lambda-funktiota. Lambda-toiminto on nimetön toiminto.

3. Kaikki datakehyksen tekstirivit tarkistetaan merkkijonojen välimerkkien varalta, ja ne suodatetaan.

4. Merkit, kuten numerot tai piste, poistetaan säännöllisen lausekkeen avulla.

5. Numerot poistetaan tekstistä.

6. Lopetussanat poistetaan tässä vaiheessa.

7. Sanat suodatetaan nyt ja saman sanan erilainen muoto poistetaan lemmatisaatiolla. Näillä olemme saattaneet tietojen esikäsittelyn päätökseen.

Tuotos:

, 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

Vaihe 3) Neuroverkon rakentaminen Word2vec-sovelluksella

Nyt on aika rakentaa malli käyttämällä Gensim-moduulia word2vec. Meidän on tuotava word2vec Gensimistä. Tehkäämme tämä, ja sitten rakennamme ja viimeisessä vaiheessa tarkistamme mallin reaaliaikaisilla tiedoilla.

from gensim.models import Word2Vec

Nyt voimme rakentaa mallin onnistuneesti Word2Vecin avulla. Katso mallin luominen Word2Vec-ohjelmalla seuraavalla koodirivillä. Teksti toimitetaan mallille luettelon muodossa, joten muunnamme tekstin datakehyksestä luetteloksi alla olevan koodin avulla

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)

Koodin selitykset

1. Luo suurempi_lista, johon sisempi luettelo on liitetty. Tämä on muoto, joka syötetään malliin Word2Vec.

2. Silmukka on toteutettu, ja jokainen tietokehyksen kuviosarakkeen merkintä toistetaan.

3. Sarakekuvioiden kukin osa jaetaan ja tallennetaan sisempään luetteloon li

4. Sisempi luettelo on liitetty ulompaan luetteloon.

5. Tämä luettelo toimitetaan Word2Vec-mallille. Ymmärretään joitain tässä annettuja parametreja

Min_luku: Se jättää huomiotta kaikki sanat, joiden kokonaistaajuus on tätä pienempi.

Koko: Se kertoo sanavektorien ulottuvuuden.

Työntekijät: Nämä ovat langat mallin kouluttamiseen

Saatavilla on myös muita vaihtoehtoja, ja joitain tärkeitä vaihtoehtoja selitetään alla

Ikkuna: Suurin etäisyys nykyisen ja ennustetun sanan välillä lauseessa.

Sg: Se on harjoitusalgoritmi ja 1 ohita grammaa ja 0 jatkuvalle sanapussille. Olemme keskustelleet näistä yksityiskohtaisesti yllä.

Hs: Jos tämä on 1, käytämme hierarkkista softmaxia koulutukseen ja jos 0, niin negatiivista näytteistystä käytetään.

Alpha: Alkuperäinen oppimisnopeus

Näytetään lopullinen koodi alla

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

Vaihe 4) Mallin säästö

Malli voidaan tallentaa roskakorin ja mallin muodossa. Alusta on binaarimuoto. Tallenna malli alla olevilla riveillä

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

Yllä olevan koodin selitys

1. Malli tallennetaan .model-tiedostona.

2. malli tallennetaan .bin-tiedostona

Käytämme tätä mallia reaaliaikaiseen testaukseen, kuten Samankaltaiset sanat, erilaiset sanat ja yleisimmät sanat.

Vaihe 5) Ladataan mallia ja suoritetaan reaaliaikainen testaus

Malli ladataan alla olevan koodin avulla

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

Jos haluat tulostaa sanaston siitä, tee se alla olevan komennon avulla

vocab = luettelo (malli.wv.vocab)

Katso tulos

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

Vaihe 6) Useimmat samanlaiset sanat tarkistetaan

Toteutetaan asiat käytännössä

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

Katso tulos

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

Vaihe 7) Ei vastaa toimitettujen sanojen sanaa

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

Olemme toimittaneet sanat "Nähdään myöhemmin, kiitos vierailustasi". Tämä tulostaa kaikkein erilaisimmat sanat näistä sanoista. Suoritetaan tämä koodi ja löydetään tulos

Tulos yllä olevan koodin suorittamisen jälkeen.

Thanks

Vaihe 8) Kahden sanan samankaltaisuuden löytäminen

Tämä kertoo kahden sanan samankaltaisuuden todennäköisyyden. Katso alla oleva koodi kuinka tämä osa suoritetaan.

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

Yllä olevan koodin tulos on seuraava

0,13706

Voit löytää vastaavia sanoja suorittamalla alla olevan koodin

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

Yllä olevan koodin tulos

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

Johtopäätös

  • Sanan upottaminen on eräänlainen sanan esitys, jonka avulla koneoppimisalgoritmit ymmärtävät samanlaiset merkitykset
  • Sanojen upottamista käytetään vastaavien sanojen laskemiseen, Luo ryhmä toisiinsa liittyviä sanoja, Ominaisuus tekstiluokitukseen, Asiakirjojen ryhmittely, Luonnollisen kielen käsittely
  • Word2vec on matala kaksikerroksinen hermoverkkomalli, joka tuottaa sanan upottamisen parempaan sanan esitykseen
  • Word2vec edustaa sanoja vektoriavaruuden esityksessä. Sanat esitetään vektorien muodossa ja sijoitus tehdään siten, että samanlaiset merkityssanat esiintyvät yhdessä ja erilaiset sanat sijaitsevat kaukana
  • Word2vec käytti kahta arkkitehtuuria Jatkuva sanasäkki (CBOW) ja ohitti gramman
  • CBOW on useita kertoja nopeampi kuin ohita gramma ja tarjoaa paremman taajuuden toistuville sanoille, kun taas ohita gramma tarvitsee pienen määrän harjoitustietoja ja edustaa jopa harvinaisia ​​sanoja tai lauseita.
  • NLTK: ta ja word2veciä voidaan käyttää yhdessä luomaan tehokkaita sovelluksia
  • Neuronin aktivointitoiminto määrittelee kyseisen hermosyötön tuotoksen annetulla syötesarjalla. Sanassa2vec. Softmax Layer (normalisoitu eksponenttifunktio) on lähtökerroksen toiminto, joka aktivoi tai laukaisee jokaisen solmun. Word2vecillä on myös negatiivinen näytteenotto
  • Gensim on aiheen mallintamisen työkalupakki, joka on toteutettu pythonissa