Sanan upottaminen ja Word2Vec esimerkin avulla

โšก ร„lykรคs yhteenveto

Word Embedding ja Word2Vec muuntavat tekstin tiheiksi numeerisiksi vektoreiksi, jotta koneoppimismallit tunnistavat samanmerkitykseisiรค sanoja. Tรคmรค resurssi selittรครค tekniikan, sen CBOW- ja Skip-Gram-arkkitehtuurit, aktivointifunktiot ja tรคydellisen Gensim-toteutuksen todellisiin sovelluksiin.

  • ๐Ÿ”ข Ydinmรครคritelmรค: Sanan upottaminen kuvaa sanaston reaaliarvoisiksi vektoreiksi sijoittamalla semanttisesti samankaltaiset sanat lรคhelle toisiaan vektoriavaruudessa.
  • ๐Ÿง  Word2Vec-mallit: Jatkuva sanavarasto ennustaa sanan sen kontekstista, kun taas Skip-Gram ennustaa ympรคrรถivรคn kontekstin yksittรคisen sanan perusteella.
  • โš™๏ธ Harjoitusmekaniikka: Softmax, hierarkkinen softmax ja negatiivinen nรคytteenotto aktivoivat neuroneja ja optimoivat oppimista tehokkaasti laajojen sanastojen vรคlillรค.
  • ๐Ÿ”— NLTK-integraatio: NLTK suorittaa esikรคsittelyรค, kuten tokenisointia ja lemmatisointia, kun taas Word2Vec tallentaa semanttisia ja syntaktisia suhteita.
  • ๐Ÿ› ๏ธ Gensimin toteutus: Gensim-kirjasto rakentaa, tallentaa ja lataa uudelleen Word2Vec-mallin sanojen samankaltaisuuden laskemiseksi reaalimaailman datassa.

Sanan upottaminen ja Word2Vec-malli

Mikรค on Wordin upottaminen?

Sanaan upottaminen on sanojen esitystapa, jonka avulla koneoppimisalgoritmit voivat ymmรคrtรครค samankaltaisia โ€‹โ€‹sanoja. Se on kielen mallinnus- ja ominaisuuksien oppimistekniikka, jolla sanat voidaan yhdistรครค reaalilukujen vektoreiksi kรคyttรคmรคllรค neuroverkkoja, probabilistisia malleja tai dimensioiden pienentรคmistรค sanojen yhteisesiintymismatriisissa. Joitakin sanojen upotusmalleja ovat Word2vec (Google), GloVe (Stanford) ja fastText (Facebook).

Sanan upottamista kutsutaan myรถs hajautetuksi semanttiseksi malliksi, hajautetuksi edustetuksi malliksi, semanttiseksi vektoriavaruudeksi tai vektoriavaruusmalliksi. Nรคitรค nimiรค lukiessasi tรถrmรครคt sanaan semanttinen, mikรค tarkoittaa samankaltaisten sanojen luokittelua yhteen. Esimerkiksi hedelmรคt, kuten omena, mango ja banaani, tulisi sijoittaa lรคhelle toisiaan, kun taas kirjat sijoitetaan kauas nรคistรค sanoista. Laajemmassa merkityksessรค sanojen upottaminen luo hedelmistรค vektorin, joka sijoitetaan kauas kirjojen vektoriesityksestรค.

Missรค Word Embeddingia kรคytetรครคn?

Sanan upottaminen auttaa ominaisuuksien luomisessa, asiakirjojen klusteroinnissa, tekstin luokittelussa ja luonnollisen kielen kรคsittelytehtรคvissรค. Listataanpa nรคmรค sovellukset ja kรคsitellรครคn niitรค kaikkia.

  • Laske samanlaiset sanat: Sanan upottamista kรคytetรครคn ehdottamaan samankaltaisia โ€‹โ€‹sanoja ennustusmallin kohteena olevan sanan kanssa. Sen lisรคksi se ehdottaa myรถs erilaisia โ€‹โ€‹sanoja sekรค yleisimpiรค sanoja.
  • Luo ryhmรค toisiinsa liittyviรค sanoja: Sitรค kรคytetรครคn semanttiseen ryhmittelyynping, joka ryhmittelee samankaltaisia โ€‹โ€‹โ€‹โ€‹ominaisuuksia omaavat asiat yhteen ja tyรถntรครค erilaiset kauas pois.
  • Tekstin luokittelun ominaisuus: Teksti mapataan vektoritaulukoiksi, jotka syรถtetรครคn mallille koulutusta ja ennustamista varten. Tekstipohjaisia โ€‹โ€‹luokittelumalleja ei voida kouluttaa merkkijonoilla, joten tรคmรค muuntaa tekstin koneellisesti opetettavaan muotoon. Sen semanttiset rakennusominaisuudet auttavat edelleen tekstipohjaisessa luokittelussa.
  • Asiakirjojen klusterointi: Tรคmรค on toinen sovellus, jossa Word Embeddingiรค ja Word2veciรค kรคytetรครคn laajalti.
  • Luonnollisen kielen kรคsittely: On monia sovelluksia, joissa sanojen upottaminen on hyรถdyllistรค ja voittaa ominaisuusesimerkin.traction vaiheet, kuten sanaluokkien merkitseminen, mielipideanalyysi ja syntaktinen analyysi.

Nyt kun ymmรคrrรคt, mihin sanojen upottamista kรคytetรครคn, katsotaanpa suosituinta mallia, jota kรคytetรครคn nรคiden upotusten luomiseen.

Mikรค on Word2vec?

Word2vec on tekniikka tai malli, joka tuottaa sanojen upotuksia paremman sanojen esitystavan saavuttamiseksi. Se on luonnollisen kielen kรคsittelymenetelmรค, joka tallentaa suuren mรครคrรคn tarkkoja syntaktisia ja semanttisia sanasuhteita. Se on matala kaksikerroksinen neuroverkko, joka pystyy tunnistamaan synonyymeja ja ehdottamaan lisรคsanoja osittaisiin lauseisiin, kun se on koulutettu.

Ennen kuin jatkat, katso ero matalan ja syvรคn neuroverkon vรคlillรค, kuten alla olevasta Word-upotusesimerkkikaaviosta nรคkyy:

Pintainen neuroverkko koostuu vain yhdestรค piilotetusta kerroksesta syรถtteen ja lรคhdรถn vรคlillรค, kun taas syvรคssรค neuroverkossa on useita piilotettuja kerroksia syรถtteen ja lรคhdรถn vรคlillรค. Syรถttรถ on alttiina solmuille, kun taas piilotettu kerros, samoin kuin lรคhtรถkerros, sisรคltรครค neuroneja.

Matala vs. syvรค oppiminen
Matala vs. syvรค oppiminen

Word2vec on kaksikerroksinen verkko, jossa on tulokerros, yksi piilokerros ja lรคhtรถkerros.

Word2vecin kehitti Tomas Mikolovin johtama tutkijaryhmรค GoogleWord2vec on parempi ja tehokkaampi kuin latentti semanttinen analyysimalli.

Miksi Word2vec?

Word2vec esittรครค sanoja vektoriavaruuden esityksessรค. Sanat esitetรครคn vektorien muodossa, ja sijoittelu tehdรครคn siten, ettรค samanmerkitykseiset sanat esiintyvรคt yhdessรค ja erilaiset sanat sijaitsevat kaukana toisistaan. Tรคtรค kutsutaan myรถs semanttiseksi suhteeksi. Neuroverkot eivรคt ymmรคrrรค tekstiรค; sen sijaan ne ymmรคrtรคvรคt vain numeroita. Sanan upottaminen tarjoaa tavan muuntaa teksti numeeriseksi vektoriksi.

Word2vec rekonstruoi sanojen kielellisen kontekstin. Ennen kuin jatkamme, ymmรคrretรครคn, mitรค kielellinen konteksti on. Yleisessรค tilanteessa, kun puhumme tai kirjoitamme kommunikoidaksemme, muut ihmiset yrittรคvรคt selvittรครค lauseen tarkoituksen. Esimerkiksi: "Mikรค on Intian lรคmpรถtila?" Tรคssรค kontekstina on, ettรค kรคyttรคjรค haluaa tietรครค "Intian lรคmpรถtilan". Lyhyesti sanottuna lauseen pรครคtarkoitus on konteksti. Puhuttua tai kirjoitettua kieltรค ympรคrรถivรคt sanat tai lauseet auttavat mรครคrittรคmรครคn kontekstin merkityksen. Word2vec oppii sanojen vektoriesityksen nรคiden kontekstien avulla.

Mitรค Word2vec tekee?

Ennen Wordin upottamista

On tรคrkeรครค tietรครค, mitรค lรคhestymistapaa kรคytettiin ennen sanojen upottamista ja mitkรค ovat sen haitat, ja sen jรคlkeen katsomme, miten nรคmรค haitat korjataan sanojen upottamisella Word2vec-lรคhestymistapaa kรคyttรคen. Lopuksi siirrymme siihen, miten Word2vec toimii, koska on tรคrkeรครค ymmรคrtรครค sen toimintaperiaate.

Lรคhestymistapa piilevรครคn semanttiseen analyysiin

Tรคtรค lรคhestymistapaa kรคytettiin ennen sanojen upottamista. Siinรค kรคytettiin sanapussin kรคsitettรค, jossa sanat esitetรครคn koodattujen vektorien muodossa. Se on harva vektoriesitys, jossa dimensio on yhtรค suuri kuin sanaston koko. Jos sana esiintyy sanakirjassa, se lasketaan; muuten sitรค ei. Lisรคtietoja on alla olevassa ohjelmassa.

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

Code Selitys

  1. CountVectorizer on moduuli, jota kรคytetรครคn sanaston tallentamiseen sanojen sopivuuden perusteella. Tรคmรค on tuotu sklearnista.
  2. Tee objekti kรคyttรคmรคllรค luokkaa CountVectorizer.
  3. Kirjoita listaan โ€‹โ€‹tiedot, jotka sovitetaan CountVectorizeriin.
  4. Data mahtuu luokasta CountVectorizer luotuun objektiin.
  5. Kรคytรค sanapussimenetelmรครค sanojen laskemiseen datassa sanaston avulla. Jos sanaa tai merkkiรค ei ole saatavilla sanastossa, sen indeksisijainti asetetaan nollaksi.
  6. Rivillรค 5 oleva muuttuja, joka on x, muunnetaan taulukoksi (x:lle kรคytettรคvissรค oleva metodi). Tรคmรค antaa rivillรค 3 annetun lauseen tai listan kunkin tunnuksen lukumรครคrรคn.
  7. Tรคmรค nรคyttรครค sanastoon kuuluvat ominaisuudet, kun se sovitetaan rivin 4 tietojen perusteella.

Latenttisemanttisessa lรคhestymistavassa rivi edustaa yksilรถllisiรค sanoja, kun taas sarake edustaa sanan esiintymiskertojen lukumรครคrรครค dokumentissa. Se on sanojen esitys dokumenttimatriisin muodossa. Termin esiintymistiheys-kรครคnteinen dokumenttifrekvenssi (TF-IDF) -funktiota kรคytetรครคn sanojen esiintymistiheyden laskemiseen dokumentissa, joka on termin esiintymistiheys dokumentissa jaettuna termin esiintymistiheydellรค koko korpuksessa.

Bag of Words -menetelmรคn puute

  • Se jรคttรครค sanajรคrjestyksen huomiotta; esim. Tรคmรค on huono = paha onko tรคmรค.
  • Se jรคttรครค sanojen kontekstin huomiotta. Oletetaan, ettรค kirjoitamme lauseen โ€Hรคn rakasti kirjoja. Koulutus lรถytyy parhaiten kirjoista.โ€ Se loisi kaksi vektoria: yhden lauseelle โ€Hรคn rakasti kirjojaโ€ ja toisen lauseelle โ€Koulutus lรถytyy parhaiten kirjoistaโ€. Se kรคsittelisi molempia ortogonaalisina, mikรค tekee niistรค itsenรคisiรค, mutta todellisuudessa ne ovat yhteydessรค toisiinsa.

Nรคiden rajoitusten voittamiseksi kehitettiin sanojen upottaminen, ja Word2vec on yksi sen toteuttamiseen kรคytetty lรคhestymistapa.

Miten Word2vec toimii?

Word2vec oppii sanan ennustamalla sen kontekstin. Otetaan esimerkiksi sana โ€Hรคn rakastaa Jalkapallo."

Haluamme laskea sanan Word2vec-muuttujat: 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รคliset syntaktiset ja semanttiset suhteet koodataan. 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 suhteessa naapuri- tai kontekstisanoihin kรคyttรคmรคllรค Takaisin leviรคminen menetelmรคllรค.

Toinen tapa oppia on, ettรค jos kahden sanan asiayhteydet ovat samankaltaiset tai kahdella sanalla on samankaltaisia โ€‹โ€‹piirteitรค, niin tรคllaiset sanat ovat sukua toisilleen.

Word2vec Archirakenne

Word2vec kรคyttรครค kahta arkkitehtuuria:

  1. Jatkuva sanapussi (CBOW)
  2. Ohitusgrammi

Ennen kuin jatkamme, keskustellaanpa siitรค, miksi nรคmรค arkkitehtuurit tai mallit ovat tรคrkeitรค sanan esityksen kannalta. Sanan esityksen oppiminen on pohjimmiltaan ohjaamatonta, mutta mallin kouluttamiseen tarvitaan kohteita/tunnisteita. Skip-gram ja CBOW muuntavat ohjaamattoman esityksen valvottuun muotoon mallin kouluttamista varten.

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

Skip-Gram toimii CBOW:n vastakkaisella tavalla, mikรค tarkoittaa, ettรค se ennustaa annetun sekvenssin tai kontekstin sanasta. Voit kรครคntรครค esimerkin pรคinvastaiseksi ymmรคrtรครคksesi sitรค. Jos wi jos annetaan, tรคmรค ennustaa kontekstin eli wi-1, Wi-2, Wi + 1, Wi + 2.

Word2vec tarjoaa mahdollisuuden valita CBOW:n (Continuous Bag of Words) ja skip-gramin vรคlillรค. Nรคmรค parametrit annetaan mallin koulutuksen aikana. Voidaan kรคyttรครค negatiivista nรคytteenottoa tai hierarkkista softmax-kerrosta.

Jatkuva sanapussi

Piirretรครคn yksinkertainen Word2vec-esimerkkikaavio jatkuvan sanapussiarkkitehtuurin ymmรคrtรคmiseksi.

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 }. Saamme painomatriisin kertomalla V * N. Toinen matriisi saadaan kertomalla syรถttรถvektori painomatriisilla. Tรคmรค voidaan ymmรคrtรครค myรถs seuraavasta yhtรคlรถstรค.

h = xitW

missรค xit ja W ovat vastaavasti syรถtevektori ja painomatriisi.

Laske kontekstin ja seuraavan sanan vรคlinen vastaavuus alla olevan yhtรคlรถn avulla.

u = ennustettu esitys * h

jossa ennustettu esitys saadaan yllรค olevan yhtรคlรถn mallista.

Skip-Gram malli

Skip-Gram-lรคhestymistapaa kรคytetรครคn lauseen ennustamiseen syรถtetyn sanan perusteella. Ymmรคrtรครคksemme sitรค paremmin, piirretรครคn alla olevassa Word2vec-esimerkissรค esitetty kaavio.

Skip-Gram malli

Skip-Gram malli

Sitรค voidaan kรคsitellรค kรครคnteisenรค versiona jatkuvasta sanasรคkistรค (Continuous Bag of Words), jossa syรถte on sana ja malli tarjoaa kontekstin tai sekvenssin. Voimme myรถs pรครคtellรค, ettรค kohde syรถtetรครคn syรถtteeseen ja tulostekerros replikoidaan useita kertoja valitun kontekstisanojen mรครคrรคn mukauttamiseksi. Kaikkien tulostekerrosten virhevektori summataan painojen sรครคtรคmiseksi takaisinpropagaatiomenetelmรคllรค.

Mikรค malli valita?

CBOW on useita kertoja nopeampi kuin skip-gram ja tarjoaa paremman taajuuden usein esiintyville sanoille, kun taas skip-gram tarvitsee pienen mรครคrรคn harjoitusdataa ja edustaa jopa harvinaisia โ€‹โ€‹sanoja tai lauseita. Alla oleva taulukko vertailee molempia arkkitehtuureja yhdellรค silmรคyksellรค.

Aspect CBOW Skip-Gram
Ennustus Ennustaa kohdesanan asiayhteydestรค Ennustaa kontekstin kohdesanasta
Harjoittelun nopeus Nopeampi hitaampi
Usein esiintyviรค sanoja Suurempi tarkkuus Pienempi tarkkuus
Harvinaisia โ€‹โ€‹sanoja Heikompi edustus Vahvempi edustus
Harjoittelutiedot Tarvitsee lisรครค dataa Toimii vรคhemmรคllรค datalla

Word2vecin ja NLTK:n vรคlinen suhde

NLTK on luonnollinen Language Toolpakkaus. Sitรค kรคytetรครคn tekstin esikรคsittelyyn. Sillรค voidaan suorittaa erilaisia โ€‹โ€‹toimintoja, kuten sanaluokkien merkitsemistรค, lemmatisointia, vartalonmuodostusta, stop-sanojen poistamista sekรค harvinaisten tai vรคhiten kรคytettyjen sanojen poistamista. Se auttaa tekstin puhdistamisessa ja ominaisuuksien valmistelussa tehokkaista sanoista. Toisaalta Word2veciรค kรคytetรครคn semanttiseen (lรคheisesti toisiinsa liittyvรคt kohdat) ja syntaktiseen (sekvenssi) yhteensovittamiseen. Word2vecin avulla voidaan lรถytรครค samankaltaisia โ€‹โ€‹sanoja, erilaisia โ€‹โ€‹sanoja, mittojen pienentรคmistรค ja monia muita toimintoja. Toinen tรคrkeรค Word2vecin ominaisuus on muuntaa tekstin korkeamman ulottuvuuden esitys matalamman ulottuvuuden vektoreiksi.

Missรค NLTK:ta ja Word2vecia kรคytetรครคn?

Jos on suoritettava joitakin edellรค mainittuja yleiskรคyttรถisiรค tehtรคviรค, kuten tokenisointi, POS-tunnisteet ja jรคsentรคminen, on kรคytettรคvรค NLTK:ta, kun taas sanojen ennustamiseen jonkin kontekstin, aihemallinnuksen tai dokumenttien samankaltaisuuden mukaan on kรคytettรคvรค Word2vecia.

NLTK:n ja Word2vecin suhde koodin avulla

NLTK:ta ja Word2veciรค voidaan kรคyttรครค yhdessรค samankaltaisten sanaesitysten tai syntaktisten vastaavuuksien lรถytรคmiseen. NLTK-tyรถkalupakin avulla voidaan ladata useita NLTK:n mukana tulevia paketteja, ja Word2vecin avulla voidaan luoda malli. Sitรค voidaan sitten testata reaaliaikaisilla sanoilla. Katsotaanpa molempien yhdistelmรครค seuraavassa koodissa. Ennen kuin jatkat kรคsittelyรค, tutustu NLTK:n tarjoamiin korpusiin. Voit ladata sen 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 apuna kรคyttรคen Code

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

Selitys Code

  1. Nltk-kirjasto tuodaan, josta voit ladata abc-korpuksen, jota kรคytรคmme seuraavassa vaiheessa.
  2. Gensim on tuotu. Jos Gensim Word2vec ei ole asennettu, asenna se komennolla โ€pip3 install gensimโ€. Katso alla olevaa kuvakaappausta.
Gensimin asentaminen PIP:n avulla

Gensimin asentaminen PIP:n avulla
  1. Tuo abc-korpus, joka on ladattu funktiolla nltk.download('abc').
  2. Vรคlitรค tiedostot lauseina Word2vec-mallille, joka tuodaan Gensimin avulla.
  3. Sanasto tallennetaan muuttujan muodossa.
  4. Mallia testataan esimerkkisanalla tiede, koska nรคmรค tiedostot liittyvรคt tieteeseen.
  5. Tรคssรค malli ennustaa samankaltaisen sanan "tiede".

Aktivaattorit ja Word2Vec

Neuronien aktivaatiofunktio mรครคrittelee neuronien tuotoksen tietyllรค syรถtejoukolla. Se on biologisesti inspiroitunut aivojemme toiminnasta, jossa eri neuronit aktivoituvat erilaisten รคrsykkeiden vaikutuksesta. Ymmรคrretรครคn aktivaatiofunktio seuraavan kaavion avulla.

Aktivointitoiminto Word2vecissรค

Aktivointitoiminnon ymmรคrtรคminen

Tรคssรค x1, x2, โ€ฆ x4 ovat neuroverkon solmut.

w1, w2 ja w3 ovat solmujen painot.

Kaikkien painojen ja solmuarvojen summa (ฮฃ) toimii aktivointifunktiona.

Miksi aktivointitoiminto?

Jos aktivointifunktiota ei kรคytetรค, tuloste olisi lineaarinen, mutta lineaarisen funktion toiminnallisuus on rajoitettu. Monimutkaisten toimintojen, kuten objektien tunnistuksen, kuvan luokittelun, saavuttamiseksiping tekstin tuottamiseen รครคnellรค ja moniin muihin epรคlineaarisiin tulosteisiin tarvitaan aktivointifunktio.

Kuinka aktivointikerros lasketaan sanan upotuksessa (Word2vec)

Softmax-kerros (normalisoitu eksponentiaalifunktio) on lรคhtรถkerroksen funktio, joka aktivoi tai laukaisee jokaisen solmun. Toinen kรคytetty lรคhestymistapa on hierarkkinen softmax, jossa kompleksisuus lasketaan O(log2V), kun taas softmaxissa se on O(V), jossa V on sanaston koko. Nรคiden vรคlinen ero on hierarkkisen softmax-kerroksen monimutkaisuuden vรคhentรคminen. Ymmรคrtรครคksesi sen toiminnallisuuden, katso alla olevaa Wordin upotusesimerkkiรค:

Hierarkkinen Softmax Tree kuten rakenne

Hierarkkinen softmax-puumainen rakenne

Oletetaan, ettรค haluamme laskea sanan havaitsemisen todennรคkรถisyyden rakkaus tietyssรค kontekstissa. Virta juuresta lehtisolmuun siirtyy ensin solmuun 2 ja sitten solmuun 5. Joten jos sanaston koko on 8, tarvitaan vain kolme laskutoimitusta. Tรคmรค mahdollistaa yhden sanan todennรคkรถisyyden laskennan hajottamisen osiin (rakkaus).

Mitรค muita vaihtoehtoja on saatavilla kuin Hierarchical Softmax?

Yleisesti ottaen kรคytettรคvissรค olevat sanojen upotusvaihtoehdot ovat differentioitu Softmax, CNN-Softmax, tรคrkeysnรคytteenotto, adaptiivinen tรคrkeysnรคytteenotto, kohinan kontrastiivinen estimointi, negatiivinen nรคytteenotto, itsenormalisointi ja harvinainen normalisointi.

Erityisesti Word2vecin osalta meillรค on saatavilla negatiivista nรคytteenottoa.

Negatiivinen nรคytteenotto on tapa ottaa nรคytteitรค harjoitusdatasta. Se on jonkin verran kuin stokastinen gradienttilaskeutuminen, mutta sillรค on joitakin eroja. Negatiivinen nรคytteenotto etsii vain negatiivisia harjoitusesimerkkejรค. Se perustuu kohinan kontrastiiviseen estimointiin ja ottaa nรคytteitรค satunnaisesti sanoista, jotka eivรคt ole 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 neuroneja aivan kuten omat neuronimme laukaistaan โ€‹โ€‹ulkoisten รคrsykkeiden vaikutuksesta. Softmax-kerros on yksi tulostuskerroksen funktioista, joka laukaisee neuronit sanojen upottamisen tapauksessa. Word2vecissรค meillรค on vaihtoehtoja, kuten hierarkkinen softmax ja negatiivinen nรคytteenotto. Aktivaattoreiden avulla voidaan muuntaa lineaarinen funktio epรคlineaariseksi funktioksi, ja tรคllaisten funktioiden 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รถkalupakki mahdollistaa Word2vecin tuonnin aiheiden mallintamista varten, jotta voidaan lรถytรครค piilotettuja rakenteita tekstistรค. Gensim tarjoaa paitsi Word2vecin toteutuksen myรถs Doc2vecin ja FastTextin.

Tรคmรค osio keskittyy Word2veciin, joten pysymme nykyisessรค aiheessa.

Kuinka ottaa Word2vec kรคyttรถรถn Gensimin avulla

Tรคhรคn asti olemme kรคsitelleet, mitรค Word2vec on, sen eri arkkitehtuureja, miksi sanapussista on siirrytty Word2veciin, Word2vecin ja NLTK:n vรคlistรค suhdetta reaaliaikaiseen koodiin sekรค aktivointifunktioita.

Alla on vaiheittainen menetelmรค Word2vecin toteuttamiseksi Gensimin avulla:

Vaihe 1) Tiedonkeruu

Ensimmรคinen askel minkรค tahansa koneoppimismallin toteuttamisessa tai luonnollisen kielen kรคsittelyn toteuttamisessa 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 datasta:

  • Tรคmรค data sisรคltรครค kolme asiaa: tagin, mallin ja vastaukset. Tagi on tarkoitus (mikรค on keskustelun aihe).
  • Tiedot ovat JSON-muodossa.
  • Kuvio on kysymys, jonka kรคyttรคjรคt kysyvรคt botilta.
  • Vastaukset ovat vastauksia, jotka chatbot antaa vastaavaan kysymykseen/kuvioon.

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รคssรค vaiheessa poistetaan pysรคytyssanat, rungonmuodostus, tarpeettomat sanat jne. Ennen jatkamista on tรคrkeรครค ladata data ja muuntaa se datakehykseksi. Katso alla oleva koodi tรคstรค.

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

Selitys Code:

  1. Koska data on JSON-muodossa, json tuodaan.
  2. Tiedosto tallennetaan muuttujaan.
  3. Tiedosto avataan ja ladataan datamuuttujaan.

Nyt tiedot on tuotu, ja on aika muuntaa ne datakehykseksi. Katso seuraava vaihe alla olevasta koodista.

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

Selitys Code:

1. Data muunnetaan datakehykseksi kรคyttรคmรคllรค edellรค tuotuja pandoja.

2. Se muuntaa sarakekuvioiden 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'] = 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 x not in stop))
df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))

Code Selitys:

1. Englanninkieliset pysรคytyssanat tuodaan nltk-tyรถkalupakin stop-word-moduulilla.

2. Kaikki tekstin sanat muunnetaan pieniksi kirjaimiksi kรคyttรคmรคllรค for-ehtoa ja lambda-funktiota. A Lambda toiminto on anonyymi toiminto.

3. Kaikki datakehyksen tekstirivit tarkistetaan merkkijonojen vรคlimerkkien varalta ja ne suodatetaan.

4. Merkit, kuten numerot tai pisteet, poistetaan sรครคnnรถllisen lausekkeen avulla.

5. Digits poistetaan tekstistรค.

6. Stop-sanat poistetaan tรคssรค vaiheessa.

7. Sanat suodatetaan nyt ja saman sanan eri muodot poistetaan lemmatisoinnin avulla. Nรคillรค olemme saattaneet datan 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 dont worry']",payments

Vaihe 3) Neuraaliverkon rakentaminen Word2vecillรค

Nyt on aika rakentaa malli Gensim Word2vec -moduulia kรคyttรคen. Meidรคn on tuotava Word2vec Gensimistรค. Tehdรครคn tรคmรค, minkรค jรคlkeen rakennamme mallin ja viimeisessรค vaiheessa tarkistamme mallin reaaliaikaisen datan avulla.

from gensim.models import Word2Vec

Nyt voimme onnistuneesti rakentaa mallin Word2Vecillรค. Katso seuraavalta koodiriviltรค, โ€‹โ€‹miten malli luodaan Word2Vecillรค. Teksti annetaan mallille luettelon muodossa, joten muunnamme datakehyksen tekstin 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)

Selitys Code:

1. Luotiin bigger_list-lista, johon sisรคlista liitetรครคn. Tรคmรค on muoto, joka syรถtetรครคn Word2Vec-mallille.

2. Toteutetaan silmukka ja jokainen datakehyksen kuviosarakkeen merkintรค iteroidaan.

3. Sarakekuvioiden jokainen elementti jaetaan ja tallennetaan sisempรครคn listaan โ€‹โ€‹li.

4. Sisรคiseen luetteloon liitetรครคn ulompi luettelo.

5. Tรคmรค lista on tarkoitettu Word2Vec-mallille. Tarkastellaanpa joitakin tรคssรค annettuja parametreja.

Min_count: Se jรคttรครค huomiotta kaikki sanat, joiden kokonaisfrekvenssi on tรคtรค pienempi.

Koko: Se kertoo sanavektorien ulottuvuuden.

tyรถntekijรคt: Nรคmรค ovat sรคikeet mallin kouluttamiseen.

Tarjolla on myรถs muita vaihtoehtoja, ja joitakin tรคrkeimmistรค selitetรครคn alla.

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

Sg: Se on harjoitusalgoritmi: 1 skip-grammille ja 0 jatkuvalle sanapussille. Olemme kรคsitelleet nรคitรค yksityiskohtaisesti edellรค.

Hs: Jos tรคmรค on 1, kรคytรคmme opetuksessa hierarkkista softmaxia, ja jos 0, kรคytรคmme 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)
# 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 x not 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)

Vaihe 4) Mallin tallennus

Malli voidaan tallentaa bin- ja mallitiedostomuotoon. 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 samankaltaisten sanojen, erilaisten sanojen ja yleisimpien sanojen testaamiseen.

Vaihe 5) Lataa malli ja suorita reaaliaikainen testaus

Malli ladataan alla olevalla koodilla:

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

Jos haluat tulostaa sanaston siitรค, se tehdรครคn seuraavalla komennolla:

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 vierailustasi.Tรคmรค tulostaa nรคistรค sanoista toisistaan โ€‹โ€‹โ€‹โ€‹poikkeavimman sanan. 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 kahden sanan samankaltaisuuden todennรคkรถisyyden funktiona. Katso alla olevasta koodista ohjeet tรคmรคn osion suorittamiseen.

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รครค lisรครค samankaltaisia โ€‹โ€‹sanoja suorittamalla seuraavan koodin:

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

Yllรค olevan koodin tuloste:

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

UKK

Word2Vec tuottaa yhden kiinteรคn vektorin sanaa kohden. Nykyaikaiset tekoรคlymallit, kuten BERT ja GPT, luovat kontekstuaalisia upotuksia, mikรค tarkoittaa, ettรค sama sana saa eri vektorit ympรคrรถivรคstรค lauseesta riippuen, mikรค tallentaa merkityksen tarkemmin.

Kyllรค. Sanapohjaiset upotukset ovat edelleen hyรถdyllisiรค kevyissรค tehtรคvissรค, haussa, suosittelussa ja klusteroinnissa, joissa nopeus ja alhainen laskentateho ovat tรคrkeitรค. Ne toimivat myรถs perustana upotuskerroksille, joita kรคytetรครคn laajoissa kielimalleissa.

Ei. Word2Vec on matala neuroverkko, jossa on yksi piilotettu kerros. Vaikka se on saanut inspiraationsa neuroverkoista, sitรค ei pidetรค syvรคoppimisena, joka vaatii useita piilotettuja kerroksia syรถtteen ja lรคhdรถn vรคlillรค.

Yleisten vektorien koot vaihtelevat 100:sta 300:aan ulottuvuuteen. Pienemmรคt koot kouluttavat nopeammin ja sopivat pieniin tietojoukkoihin, kun taas suuremmat koot tallentavat monipuolisempia suhteita, mutta vaativat enemmรคn dataa ja laskentaa ylisovituksen vรคlttรคmiseksi.

Ei. Word2Vec ei pysty kรคsittelemรครคn sanaston ulkopuolisia sanoja, koska se oppii yhden vektorin jokaista tunnettua sanaa kohden. Mallit, kuten FastText, ratkaisevat tรคmรคn rakentamalla sanavektoreita merkkien n-grammeista, mikรค mahdollistaa nรคkymรคttรถmien sanojen esittรคmisen.

Tiivistรค tรคmรค viesti seuraavasti: