Word Embedding ja Word2Vec malli esimerkillä

Mikä on Wordin upottaminen?

Sanaan upottaminen on sanan esitystyyppi, jonka avulla koneoppimisalgoritmit voivat ymmärtää sanoja, joilla on samanlainen merkitys. Se on kielen mallinnus- ja ominaisuusoppimistekniikka, joka kuvaa sanojen reaalilukuvektoreita käyttämällä hermoverkkoja, todennäköisyysmalleja tai dimensiovähennystä sanan yhteisesiintymämatriisissa. Jotkut sanan upotusmallit ovat Word2vec (Google), Glove (Stanford) ja nopein (Facebook).

Word Embeddingia kutsutaan myös hajautetuksi semanttiseksi malliksi tai hajautetuksi esitetyksi tai semanttiseksi vektoriavaruuden tai vektoriavaruuden malliksi. Kun luet näitä nimiä, törmäät sanaan semanttinen, joka tarkoittaa samankaltaisten sanojen luokittelua 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 hedelmien vektorin, joka sijoittuu kauas kirjojen vektorikuvauksesta.

Missä Word Embeddingia käytetään?

Wordin upottaminen auttaa ominaisuuksien luomisessa, asiakirjojen klusteroinnissa, tekstin luokittelussa ja luonnollisen kielen käsittelyssä. Luetteloimme ne ja keskustelkaamme jokaisesta näistä sovelluksista.

  • Laske samanlaiset sanat: Sanojen upottamista käytetään ehdottamaan samanlaisia ​​sanoja kuin ennustemallin kohteena oleva sana. Sen lisäksi se ehdottaa myös erilaisia ​​sanoja sekä yleisimpiä sanoja.
  • Luo ryhmä toisiinsa liittyviä sanoja: Sitä käytetään semanttiseen ryhmittelyyn, joka ryhmittelee asioita, joilla on samankaltaisia ​​ominaisuuksia ja jotka ovat kaukana toisistaan.
  • Tekstin luokittelun ominaisuus: Teksti kartoitetaan vektoriryhmiksi, jotka syötetään malliin harjoittelua ja ennustamista varten. Tekstipohjaisia ​​luokitinmalleja ei voi harjoitella merkkijonolla, joten tämä muuntaa tekstin koneella koulutettavaan muotoon. Lisäksi sen ominaisuuksia rakentaa semanttista apua tekstipohjaisessa luokittelussa.
  • Asiakirjojen klusterointi: on toinen sovellus, jossa Word Embedding Word2vec on laajalti käytössä
  • Luonnollisen kielen käsittely: On monia sovelluksia, joissa sanan upottaminen on hyödyllistä ja voittaa ominaisuuksien poimintavaiheet, kuten puhetunnisteiden osien, tunneanalyysin ja syntaktisen analyysin. Nyt meillä on jonkin verran tietoa sanan upottamisesta. Jonkin verran valoa heitetään myös eri malleihin sanan upotuksen toteuttamiseksi. Tämä koko Word Embedding -opetusohjelma keskittyy yhteen malleista (Word2vec).

Mikä on Word2vec?

Word2vec on tekniikka/malli sanan upotuksen tuottamiseksi sanan parempaan esitykseen. Se on luonnollinen kielen käsittelymenetelmä, joka kaappaa suuren määrän tarkkoja syntaktisia ja semanttisia sanasuhteita. Se on matala kaksikerroksinen hermoverkko, joka voi havaita synonyymejä sanoja ja ehdottaa lisäsanoja osittaisille lauseille, kun se on koulutettu.

Ennen kuin jatkat tässä Word2vec-opetusohjelmassa, katso ero matalan ja syvän hermoverkon välillä alla olevan Wordin upotusesimerkkikaavion mukaisesti:

Matala hermoverkko koostuu vain piilotetusta kerroksesta tulon ja lähdön välillä, kun taas syvä neuroverkko sisältää useita piilotettuja kerroksia tulon ja lähdön välillä. Syöttö on alttiina solmuille, kun taas piilotettu kerros, kuten myös lähtökerros, sisältää neuroneja.

Matala vs. syvä oppiminen
Matala vs. syvä oppiminen

Word2vec on kaksikerroksinen verkko, jossa on tulo yksi piilotettu kerros ja tulos.

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

Miksi Word2vec?

Word2vec edustaa sanoja vektoriavaruuden esityksessä. Sanat esitetään vektoreina ja sijoittelu tapahtuu siten, että samankaltaiset sanat esiintyvät yhdessä ja erilaiset sanat sijaitsevat kaukana. Tätä kutsutaan myös semanttiseksi suhteeksi. Neuroverkot eivät ymmärrä tekstiä, vaan ne ymmärtävät vain numeroita. Word Embedding tarjoaa tavan muuntaa teksti numeeriseksi vektoriksi.

Word2vec rekonstruoi sanojen kielellisen kontekstin. Ennen kuin menemme pidemmälle, meidän on ymmärrettävä, mikä on kielellinen konteksti? Yleisessä elämäntilanteessa, kun puhumme tai kirjoitamme kommunikoidaksemme, muut ihmiset yrittävät selvittää, mikä on lauseen tarkoitus. Esimerkiksi "Mikä on Intian lämpötila", tässä kontekstissa 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.

Mitä Word2vec tekee?

Ennen Wordin upottamista

On tärkeää tietää, mitä lähestymistapaa käytetään ennen sanan upottamista ja mitkä ovat sen haitat, ja sitten siirrymme aiheeseen, kuinka haitat voidaan voittaa Word-upotuksella Word2vec-lähestymistapaa käyttämällä. Lopuksi siirrämme Word2vecin toimintaan, koska on tärkeää ymmärtää, että se toimii.

Lähestymistapa piilevään semanttiseen analyysiin

Tämä on lähestymistapa, jota käytettiin ennen sanan upottamista. Siinä käytettiin sanapussin käsitettä, jossa sanat esitetään koodattujen vektoreiden muodossa. Se on harvalukuinen vektoriesitys, jonka ulottuvuus on yhtä suuri kuin sanaston koko. Jos sana esiintyy sanakirjassa, se lasketaan, muuten ei. Jos haluat ymmärtää enemmän, katso alla oleva ohjelma.

Word2vec esimerkki

Word2vec esimerkki

from sklearn.feature_extraction.text import CountVectorizer

vectorizer = CountVectorizer()
data_corpus = ["guru99 is the best site for online tutorials. I love to visit guru99."]
vocabulary = vectorizer.fit(data_corpus)
X = vectorizer.transform(data_corpus)

print(X.toarray())
print(vectorizer.get_feature_names_out())

lähtö:

[[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 perusteella, että ne sopivat siihen. Tämä on tuotu sklearnista.
  2. Tee objekti käyttämällä luokkaa CountVectorizer.
  3. Kirjoita luetteloon tiedot, jotka sovitetaan CountVectorizeriin.
  4. Data mahtuu luokasta CountVectorizer luotuun objektiin.
  5. Käytä pussillista sanalähestymistapaa laskeaksesi sanoja datassa sanaston avulla. Jos sanaa tai merkkiä ei ole saatavilla sanastossa, tällainen indeksipaikka asetetaan nollaan.
  6. Rivin 5 muuttuja, joka on x, muunnetaan taulukoksi (käytettävissä oleva menetelmä x:lle). Tämä antaa jokaisen rivillä 3 olevan lauseen tai luettelon merkkien määrän.
  7. Tämä näyttää ominaisuudet, jotka ovat osa sanastoa, kun se sovitetaan rivin 4 tietojen avulla.

Piilevässä semanttisessa lähestymistavassa rivi edustaa yksilöllisiä sanoja, kun taas sarake edustaa sitä, kuinka monta kertaa sana esiintyy asiakirjassa. Se on sanojen esitys asiakirjamatriisin muodossa. Termi-Frequency Inverse Document Frequency (TFIDF) -funktiota käytetään laskemaan sanojen tiheys asiakirjassa, joka on termin taajuus asiakirjassa / termin taajuus koko korpusessa.

Bag of Words -menetelmän puute

  • Se jättää huomioimatta sanajärjestyksen, esimerkiksi tämä on huono = huono tämä.
  • Se jättää huomioimatta sanojen kontekstin. Oletetaan, että jos kirjoitan lauseen "Hän rakasti kirjoja. Koulutus löytyy parhaiten kirjoista." Se luo kaksi vektoria: "Hän rakasti kirjoja" ja toinen "Koulutus löytyy parhaiten kirjoista". Se kohtelisi molempia ortogonaalisesti, mikä tekee niistä itsenäisiä, mutta todellisuudessa ne liittyvät toisiinsa

Näiden rajoitusten voittamiseksi kehitettiin sanan upottaminen, ja Word2vec on lähestymistapa sellaisen toteuttamiseen.

Miten Word2vec toimii?

Word2vec oppii sanan ennustamalla sen ympäröivää kontekstia. Otetaan esimerkiksi sana "Hän rakastaa Jalkapallo."

Haluamme laskea Word2vecin sanalle: rakastaa.

Olettaa

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

sana rakastaa siirtyy jokaisen korpuksen sanan yli. Sanojen välinen syntaktinen ja semanttinen suhde on koodattu. Tämä auttaa löytämään samankaltaisia ​​ja analogisia sanoja.

Kaikki sanan satunnaiset ominaisuudet rakastaa lasketaan. Näitä ominaisuuksia muutetaan tai päivitetään naapuri- tai kontekstisanojen osalta a Takaisin leviäminen menetelmällä.

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

Word2vec Archirakenne

Word2vec käyttää kahta arkkitehtuuria:

  1. Jatkuva sanapussi (CBOW)
  2. Ohita gramma

Ennen kuin jatkamme tässä Word2vec-opetusohjelmassa, pohditaan, miksi nämä arkkitehtuurit tai mallit ovat tärkeitä sanan esittämisen kannalta. Sanan esityksen oppiminen on käytännössä ilman valvontaa, mutta mallin kouluttamiseen tarvitaan tavoitteita/tarroja. Skip-gram ja CBOW muuntaa valvomattoman esityksen ohjattuun muotoon mallin harjoittelua varten.

CBOW:ssa nykyinen sana ennustetaan käyttämällä ympäröivien kontekstiikkunoiden ikkunaa. Esimerkiksi jos wi-1,wi-2,wi + 1,wi + 2on annettu sanoja tai konteksti, tämä malli tarjoaa wi

Skip-Gram toimii vastakohtana CBOW:lle, mikä tarkoittaa, että se ennustaa tietyn sekvenssin tai kontekstin sanasta. Voit kääntää esimerkin ymmärtääksesi sen. Jos wi on annettu, tämä ennustaa kontekstin tai wi-1,wi-2,wi + 1,wi+2.

Word2vec tarjoaa mahdollisuuden valita CBOW:n (jatkuva sanapussi) ja skim-gram välillä. Tällaiset parametrit tarjotaan mallin koulutuksen aikana. Voidaan käyttää negatiivista näytteenottoa tai hierarkkista softmax-kerrosta.

Jatkuva sanapussi

Piirretään yksinkertainen Word2vec-esimerkkikaavio ymmärtääksemme sanaarkkitehtuurin jatkuvan pussin.

Jatkuva sanapussi Archirakenne

Jatkuva sanapussi Archirakenne

Lasketaan yhtälöt matemaattisesti. Oletetaan, että V on sanaston koko ja N on piilotetun kerroksen koko. Syöte määritellään muodossa { xi-1, xi-2, xi+1, xi + 2}. Painomatriisi saadaan kertomalla V * N. Toinen matriisi saadaan kertomalla syötevektori painomatriisilla. Tämä voidaan ymmärtää myös seuraavalla yhtälöllä.

h = xitW

missä xit? W ovat syöttövektori ja painomatriisi, vastaavasti,

Alla olevasta yhtälöstä voit laskea vastaavuuden kontekstin ja seuraavan sanan välillä

u=ennustettu esitys*h

jossa ennustettu esitys saadaan malli?h yllä olevassa yhtälössä.

Skip-Gram malli

Skip-Gram -lähestymistapaa käytetään ennustamaan syötesanalla annettu lause. Ymmärtääksemme sitä paremmin piirtäkäämme kaavio alla olevan Word2vec-esimerkin mukaisesti.

Skip-Gram malli

Skip-Gram malli

Sitä voidaan pitää Continuous bag of word -mallin käänteisenä, jossa syöte on sana ja malli tarjoaa kontekstin tai sekvenssin. Voimme myös päätellä, että kohde syötetään syöttöön ja lähtökerros replikoidaan useita kertoja valitun kontekstin sanojen määrän mukauttamiseksi. Virhevektori kaikista tulostekerroksista lasketaan yhteen painojen säätämiseksi takaisinpropagaatiomenetelmällä.

Mikä malli valita?

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

Word2vecin ja NLTK:n välinen suhde

NLTK on luonnollisen kielen työkalupakki. Sitä käytetään tekstin esikäsittelyyn. Voidaan tehdä erilaisia ​​toimintoja, kuten puheen osien merkitseminen, lemmatisointi, stemming, lopetussanojen poistaminen, harvinaisten sanojen tai vähiten käytettyjen sanojen poistaminen. Se auttaa puhdistamaan tekstiä sekä valmistelemaan ominaisuuksia tehokkaista sanoista. Toisaalta Word2veciä käytetään semanttiseen (läheisesti toisiinsa liittyvien kohteiden) ja syntaktiseen (sekvenssi) täsmäytykseen. Word2vecin avulla voit löytää samanlaisia ​​sanoja, erilaisia ​​sanoja, ulottuvuuden vähentämistä ja monia muita. Toinen Word2vecin tärkeä ominaisuus on muuntaa tekstin korkeampiulotteinen esitys alemman ulottuvuuden vektoreiksi.

Missä NLTK:ta ja Word2vecia käytetään?

Jos on suoritettava joitain yllä mainittuja yleiskäyttöisiä tehtäviä, kuten tokenointi, POS-koodaus ja jäsentäminen, on käytettävä NLTK:ta, kun taas sanojen ennustamiseen jonkin kontekstin, aiheen mallintamisen tai asiakirjan samankaltaisuuden mukaan on käytettävä Word2vec-ohjelmaa.

NLTK:n ja Word2vecin suhde koodin avulla

NLTK:ta ja Word2veciä voidaan käyttää yhdessä samankaltaisten sanojen esityksen tai syntaktisen vastaavuuden löytämiseen. NLTK-työkalupakin avulla voidaan ladata monia NLTK:n mukana tulevia paketteja ja malli voidaan luoda Word2vecillä. Sitä voidaan sitten testata reaaliaikaisilla sanoilla. Katsotaanpa molempien yhdistelmä seuraavassa koodissa. Ennen kuin jatkat käsittelyä, ole hyvä ja tutustu NLTK:n tarjoamiin korpuihin. Voit ladata komennolla

nltk(nltk.download('all'))

NLTK:n ja Word2vecin suhde

Corpora ladattu NLTK:lla

Katso koodi kuvakaappauksesta.

import nltk
import gensim
from nltk.corpus import abc

model= gensim.models.Word2Vec(abc.sents())
X= list(model.wv.vocab)
data=model.most_similar('science')
print(data)

NLTK:n ja Word2vecin suhde Coden avulla

lähtö:

[('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. nltk-kirjasto tuodaan, josta voit ladata abc-korpuksen, jota käytämme seuraavassa vaiheessa.
  2. Gensim tuodaan maahan. Jos Gensim Word2veciä ei ole asennettu, asenna se komennolla ”pip3 install gensim”. Katso alla oleva kuvakaappaus.
Gensimin asentaminen PIP:n avulla

Gensimin asentaminen PIP:n avulla
  1. tuo abc-korpus, joka on ladattu käyttämällä nltk.download('abc').
  2. Välitä tiedostot malliin Word2vec, joka tuodaan Gensimillä lauseina.
  3. Sanasto tallennetaan muuttujan muodossa.
  4. Malli on testattu esimerkkisanatieteen avulla, koska nämä tiedostot liittyvät tieteeseen.
  5. Tässä malli ennustaa samanlaisen sanan "tiede".

Aktivaattorit ja Word2Vec

Hermosolun aktivointitoiminto määrittää tuon hermosolun tuotoksen syötejoukon perusteella. Biologisesti inspiroitunut aivoissamme tapahtuvasta toiminnasta, jossa eri hermosolut aktivoituvat erilaisten ärsykkeiden avulla. Ymmärrämme aktivointitoiminnon seuraavan kaavion avulla.

Aktivointitoiminto Word2vecissä

Aktivointitoiminnon ymmärtäminen

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

w1, w2, w3 on solmun paino,

? on kaikkien aktivointifunktiona toimivien paino- ja solmuarvojen summa.

Miksi aktivointitoiminto?

Jos aktivointitoimintoa ei käytetä, lähtö olisi lineaarinen, mutta lineaarisen toiminnon toiminnallisuus on rajoitettu. Monimutkaisten toimintojen, kuten objektien havaitsemisen, kuvan luokittelun, tekstin kirjoittamisen puheella ja monien muiden epälineaaristen tulosteiden saavuttamiseksi tarvitaan aktivointitoiminnolla.

Kuinka aktivointikerros lasketaan sanan upotuksessa (Word2vec)

Softmax Layer (normalisoitu eksponentiaalinen funktio) on lähtökerroksen toiminto, joka aktivoi tai laukaisee jokaisen solmun. Toinen käytetty lähestymistapa on Hierarchical softmax, jossa monimutkaisuus lasketaan O(log2V) jossa softmax on O(V), jossa V on sanaston koko. Ero näiden välillä on hierarkkisen softmax-kerroksen monimutkaisuuden väheneminen. Ymmärtääksesi sen (Hierarchical softmax) toiminnallisuuden, katso alla oleva Wordin upotusesimerkki:

Hierarkkinen Softmax Tree kuten rakenne

Hierarkkinen softmax-puumainen rakenne

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

Mitä muita vaihtoehtoja on saatavilla kuin Hierarchical Softmax?

Jos puhutaan yleisesti sanan upotusvaihtoehdoista, ovat Differentiated Softmax, CNN-Softmax, tärkeysnäytteenotto, mukautuva tärkeysnäytteenotto, kohinan kontrastiarviointi, negatiivinen näytteenotto, itsenormalisointi ja harvinainen normalisointi.

Erityisesti Word2vecistä puhuttaessa meillä on negatiivinen otanta käytettävissä.

Negatiivinen näytteenotto on tapa ottaa näytteitä harjoitustiedoista. Se on jossain määrin kuin stokastinen gradienttilasku, mutta jollain tavalla. Negatiivinen otanta etsii vain negatiivisia koulutusesimerkkejä. Se perustuu kohinan kontrastiiviseen estimointiin ja poimii 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.

Mitä johtopäätöstä voidaan vetää?

Aktivaattorit laukaisevat hermosoluja aivan kuten neuronimme laukaisevat ulkoisia ärsykkeitä. Softmax-kerros on yksi tuloskerroksen funktioista, joka laukaisee hermosolut sanan upotusten yhteydessä. Word2vecissä meillä on vaihtoehtoja, kuten hierarkkinen softmax ja negatiivinen näytteenotto. Aktivaattoreita käyttämällä voidaan muuntaa lineaarinen funktio epälineaariseksi funktioksi, jonka avulla voidaan toteuttaa monimutkainen koneoppimisalgoritmi.

Mikä on Gensim?

Gensim on avoimen lähdekoodin aihemallinnuksen ja luonnollisen kielen käsittelyn työkalupakki, joka on toteutettu Python ja Cython. Gensim-työkalupakin avulla käyttäjät voivat tuoda Word2vecin aiheen mallintamista varten löytääkseen piilotetun rakenteen tekstin rungosta. Gensim tarjoaa Word2vecin toteutuksen lisäksi myös Doc2vecille ja FastTextille.

Tämä opetusohjelma koskee vain Word2veciä, joten pysymme nykyisessä aiheessa.

Kuinka ottaa Word2vec käyttöön Gensimin avulla

Tähän mennessä olemme keskustelleet siitä, mikä Word2vec on, sen erilaisista arkkitehtuureista, miksi on siirrytty sanapussista Word2veciin, Word2vecin ja NLTK:n välisestä suhteesta live-koodilla ja aktivointitoiminnoilla.

Alla on askel askeleelta menetelmä Word2vecin käyttöönottamiseksi Gensimin avulla:

Vaihe 1) Tiedonkeruu

Ensimmäinen askel minkä tahansa koneoppimismallin tai luonnollisen kielen käsittelyn toteuttamiseksi on tiedonkeruu

Tarkkaile tietoja rakentaaksesi älykkään chatbotin alla olevan Gensim Word2vec -esimerkin mukaisesti.

[{"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 -tunnisteen, kuvion ja vastaukset. Tunniste on tarkoitus (mikä on keskustelun aihe).
  • Tiedot ovat JSON-muodossa.
  • Malli on kysymys, jonka käyttäjät kysyvät robotilta
  • Responses on vastaus, jonka chatbot antaa vastaavaan kysymykseen/malliin.

Vaihe 2) Tietojen esikäsittely

On erittäin tärkeää käsitellä raakadataa. Jos koneeseen syötetään puhdistettua dataa, malli reagoi tarkemmin ja oppii tiedot tehokkaammin.

Tämä vaihe sisältää lopetussanojen, varsinaisten, tarpeettomien sanojen jne. poistamisen. Ennen kuin jatkat, on tärkeää ladata tiedot ja muuntaa se tietokehykseksi. Katso alla oleva koodi sellaisille

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

Koodin selitys:

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

Nyt tiedot on tuotu ja on aika muuntaa tiedot tietokehykseksi. Katso alla oleva koodi nähdäksesi seuraavan vaiheen

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

Koodin selitys:

1. Tiedot muunnetaan tietokehykseksi käyttämällä edellä tuotuja pandoja.

2. Se muuntaa sarakemallien luettelon merkkijonoksi.

from nltk.corpus import stopwords
from textblob import Word
stop = stopwords.words('english')
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns't']= df['patterns''].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation)
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Koodin selitys:

1. Englanninkieliset lopetussanat tuodaan käyttämällä lopetussanamoduulia nltk-työkalupakista

2. Kaikki tekstin sanat muunnetaan pieniksi kirjaimilla käyttämällä ehtoa ja lambda-funktiota. Lambda toiminto on anonyymi toiminto.

3. Kaikilta tietokehyksen tekstiriveiltä tarkistetaan merkkijonojen välimerkit ja ne suodatetaan.

4. Merkit, kuten numerot tai pisteet, poistetaan käyttämällä säännöllistä lauseketta.

5. Digits poistetaan tekstistä.

6. Stop-sanat poistetaan tässä vaiheessa.

7. Sanat suodatetaan nyt ja saman sanan eri muoto poistetaan lemmatisoinnin avulla. Näillä olemme saaneet tietojen esikäsittelyn päätökseen.

lähtö:

, patterns, responses, tag
0,hi one talk hello hi available,"['Hello, thanks for contacting us', 'Good to see you here', ' Hi there, how may I assist you?']",welcome
1,bye see later goodbye come back soon,"['See you later, thanks for visiting', 'have a great day ahead', 'Wish you Come back again soon.']",goodbye
2,thanks helping thank guidance thats helpful kind,"['Happy to help!', 'Any time!', 'My pleasure', 'It is my duty to help you']",thankful
3,hour open tell opening time open timing please,"[""We're open every day 8am-7pm"", 'Our office hours are 8am-7pm every day', 'We open office at 8 am and close at 7 pm']",hoursopening
4,pay using credit card pay using mastercard pay using cash,"['We accept VISA, Mastercard and credit card', 'We accept credit card, debit cards and cash. Please don’t worry']",payments

Vaihe 3) Neuraaliverkon rakentaminen Word2vecillä

Nyt on aika rakentaa malli Gensim Word2vec -moduulilla. Meidän on tuotava Word2vec Gensimistä. Tehdään tämä, ja sitten rakennetaan ja viimeisessä vaiheessa tarkistetaan malli reaaliaikaisten tietojen perusteella.

from gensim.models import Word2Vec

Nyt tässä Gensim Word2vec -opetusohjelmassa voimme rakentaa mallin onnistuneesti Word2Vecillä. Katso seuraavalta koodiriviltä lisätietoja mallin luomisesta Word2Vecillä. Teksti toimitetaan malliin luettelon muodossa, joten muunnamme tekstin tietokehyksestä 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 selitys:

1. Luotu bigger_list, johon sisäinen lista liitetään. Tämä on muoto, joka syötetään malliin Word2Vec.

2. Silmukka toteutetaan, ja jokainen tietokehyksen kuviosarakkeen merkintä iteroidaan.

3. Jokainen sarakekuvioiden elementti jaetaan ja tallennetaan sisempään listaan ​​li

4. Sisäinen lista liitetään ulompaan luetteloon.

5. Tämä luettelo toimitetaan Word2Vec-mallille. Ymmärrämme joitakin tässä annetuista parametreista

Min_count: Se jättää huomioimatta 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ä selostetaan alla

ikkuna: Maksimietäisyys nykyisen ja ennustetun sanan välillä lauseessa.

Sg: Se on harjoitusalgoritmi ja 1 ohitusgrammille ja 0 jatkuvalle sanapussille. Olemme keskustelleet näistä yksityiskohtaisesti edellä.

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

alpha: Alkuperäinen oppimisnopeus

Näytä lopullinen koodi alla:

#list of libraries used by the code
import string
from gensim.models import Word2Vec
import logging
from nltk.corpus import stopwords
from textblob import Word
import json
import pandas as pd
#data in json format
json_file = 'intents.json'
with open('intents.json','r') as f:
    data = json.load(f)
#displaying the list of stopwords
stop = stopwords.words('english')
#dataframe
df = pd.DataFrame(data)

df['patterns'] = df['patterns'].apply(', '.join)
# print(df['patterns'])
#print(df['patterns'])
#cleaning the data using the NLP approach
print(df)
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x.lower() for x in x.split()))
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if x not in string.punctuation))
df['patterns']= df['patterns'].str.replace('[^\w\s]','')
df['patterns']= df['patterns'].apply(lambda x: ' '.join(x for x in x.split() if  not x.isdigit()))
df['patterns'] = df['patterns'].apply(lambda x:' '.join(x for x in x.split() if not x in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
#taking the outer list
bigger_list=[]
for i in df['patterns']:
    li = list(i.split(" "))
    bigger_list.append(li)
#structure of data to be taken by the model.word2vec
print("Data format for the overall list:",bigger_list)
#custom data is fed to machine for further processing
model = Word2Vec(bigger_list, min_count=1,size=300,workers=4)
#print(model)

Vaihe 4) Mallin tallennus

Malli voidaan tallentaa laatikon ja mallilomakkeen muodossa. Bin on binäärimuoto. Katso alla olevat rivit mallin tallentamiseksi

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 samankaltaisiin sanoihin, erilaisiin sanoihin ja yleisimpiin sanoihin.

Vaihe 5) Lataa malli ja suorita reaaliaikainen testaus

Malli ladataan alla olevalla koodilla:

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

Jos haluat tulostaa sanaston, se tehdään käyttämällä alla olevaa komentoa:

vocab = list(model.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) Useimpien samankaltaisten sanojen tarkistus

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 sanaa toimitetuista sanoista

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

Olemme toimittaneet sanat 'Nähdään myöhemmin, kiitos vierailusta'. Tämä tulosta useimmat toisistaan ​​poikkeavat sanat näistä sanoista. Suoritetaan tämä koodi ja etsitään tulos

Tulos yllä olevan koodin suorittamisen jälkeen:

Thanks

Vaihe 8) Etsi samankaltaisuus kahden sanan välillä

Tämä kertoo tuloksen samankaltaisuuden todennäköisyydestä kahden sanan välillä. Katso alla olevasta koodista, kuinka tämä osio 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 alla

0.13706

Voit löytää samanlaisia ​​sanoja lisää 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)] 

Yhteenveto

  • Word Embedding on eräänlainen sanaesitys, jonka avulla koneoppimisalgoritmit voivat ymmärtää samankaltaisia ​​sanoja
  • Word Embeddingia käytetään samankaltaisten sanojen laskemiseen, toisiinsa liittyvien sanojen ryhmän luomiseen, tekstin luokittelun ominaisuus, asiakirjojen klusterointiin, luonnollisen kielen käsittelyyn
  • Word2vec selitti: Word2vec on matala kaksikerroksinen hermoverkkomalli, joka tuottaa sanan upotuksia sanan parempaa esittämistä varten
  • Word2vec edustaa sanoja vektoriavaruuden esityksessä. Sanat esitetään vektoreina ja sijoittelu tapahtuu siten, että samankaltaiset sanat esiintyvät yhdessä ja erilaiset sanat sijaitsevat kaukana
  • Word2vec-algoritmi käyttää kahta arkkitehtuuria Continuous Bag of words (CBOW) ja ohita grammaa
  • CBOW on useita kertoja nopeampi kuin ohitusgramma ja tarjoaa paremman taajuuden tavallisille sanoille, kun taas ohitusgramma tarvitsee pienen määrän harjoitustietoja ja edustaa jopa harvinaisia ​​sanoja tai lauseita.
  • NLTK:ta ja Word2veciä voidaan käyttää yhdessä luomaan tehokkaita sovelluksia
  • Hermosolun aktivointitoiminto määrittää tuon hermosolun tuotoksen syötejoukon perusteella. Word2vecissä. Softmax Layer (normalisoitu eksponentiaalinen funktio) on lähtökerroksen toiminto, joka aktivoi tai laukaisee jokaisen solmun. Word2vecissä on myös negatiivinen näytteenotto käytettävissä
  • Gensim on aihemallinnustyökalusarja, joka on toteutettu pythonissa