Word Embedding Tutorial: word2vec ved hjelp av Gensim (EXAMPLE)

Innholdsfortegnelse:

Anonim

Hva er innebygging av ord?

Word Embedding er en type ordrepresentasjon som gjør det mulig å forstå ord med lignende betydning av maskinlæringsalgoritmer. Teknisk sett er det en kartlegging av ord til vektorer med reelle tall ved hjelp av nevrale nettverk, sannsynlighetsmodell eller dimensjonsreduksjon på ordets samforekomstmatrise. Det er språkmodellering og funksjonslæringsteknikk. Innbygging av ord er en måte å utføre kartlegging ved hjelp av et nevralt nettverk. Det er forskjellige ordintegreringsmodeller tilgjengelig som word2vec (Google), Glove (Stanford) og raskeste (Facebook).

Word Embedding kalles også som distribuert semantisk modell eller distribuert representert eller semantisk vektorrom eller vektorrommodell. Når du leser disse navnene, kommer du over ordet semantisk som betyr å kategorisere lignende ord sammen. For eksempel skal frukt som eple, mango, banan plasseres i nærheten, mens bøker vil være langt borte fra disse ordene. I bredere forstand vil ordintegrering skape fruktvektoren som vil bli plassert langt borte fra vektorrepresentasjon av bøker.

I denne veiledningen vil du lære

  • Hva er innebygging av ord?
  • Hvor brukes Word-innebygging?
  • Hva er word2vec?
  • Hva word2vec gjør?
  • Hvorfor Word2vec?
  • Word2vec Arkitektur
  • Kontinuerlig pose med ord.
  • Skip-Gram-modell
  • Forholdet mellom Word2vec og NLTK
  • Aktivatorer og Word2Vec
  • Hva er Gensim?
  • Kodeimplementering av word2vec ved bruk av Gensim

Hvor brukes Word-innebygging?

Innbygging av ord hjelper til med generering av funksjoner, gruppering av dokumenter, tekstklassifisering og naturlige språkbehandlingsoppgaver. La oss liste dem og diskutere hver av disse programmene.

  • Beregn lignende ord: Innbygging av ord brukes til å foreslå lignende ord til ordet som blir utsatt for prediksjonsmodellen. Sammen med det antyder det også forskjellige ord, så vel som vanligste ord.
  • Lag en gruppe beslektede ord: Den brukes til semantisk gruppering som vil gruppere ting av lignende karakteristikk sammen og ulikt langt borte.
  • Funksjon for tekstklassifisering: Tekst er kartlagt i matriser av vektorer som blir matet til modellen for trening så vel som prediksjon. Tekstbaserte klassifiseringsmodeller kan ikke trenes på strengen, så dette vil konvertere teksten til maskinopplærbar form. Videre funksjonene ved å bygge semantisk hjelp i tekstbasert klassifisering.
  • Dokumentklynging er et annet program der ordintegrering er mye brukt
  • Naturlig språkbehandling: Det er mange applikasjoner der ordintegrering er nyttig og vinner over funksjonsutvinningsfaser som deler av talemerking, sentimental analyse og syntaktisk analyse.

    Nå har vi fått litt kunnskap om ordinnbetting. Noe lys kastes også på forskjellige modeller for å implementere ordinnbetting. Hele denne opplæringen er fokusert på en av modellene (word2vec).

Hva er word2vec?

Word2vec er teknikken / modellen for å produsere ordinnbetting for bedre ordrepresentasjon. Den fanger et stort antall presise syntaktiske og semantiske ordforhold. Det er et grunt to-lags nevralt nettverk. Før du går videre, se forskjellen mellom grunt og dypt nevralt nettverk:

Det grunne nevrale nettverket består av det eneste skjulte laget mellom inngang og utgang, mens dypt nevrale nettverk inneholder flere skjulte lag mellom inngang og utgang. Inngangen utsettes for noder mens det skjulte laget, så vel som utgangslaget, inneholder nerveceller.

Figur: Grunn kontra dyp læring

word2vec er et to-lags nettverk hvor det er inngang ett skjult lag og utdata.

Word2vec ble utviklet av en gruppe forskere ledet av Tomas Mikolov hos Google. Word2vec er bedre og mer effektiv enn den latente semantiske analysemodellen.

Hva word2vec gjør?

Word2vec representerer ord i vektorplassrepresentasjon. Ord er representert i form av vektorer og plassering gjøres på en slik måte at lignende betydningsord vises sammen og forskjellige ord ligger langt unna. Dette blir også betegnet som et semantisk forhold. Nevrale nettverk forstår ikke tekst i stedet for de forstår bare tall. Word Embedding gir en måte å konvertere tekst til en numerisk vektor.

Word2vec rekonstruerer ordets språklige kontekst. Før vi går videre, la oss forstå, hva er språklig sammenheng? I et generelt livsscenario når vi snakker eller skriver for å kommunisere, prøver andre mennesker å finne ut hva som er objektivt med setningen. For eksempel, "Hva er temperaturen i India", her er konteksten brukeren vil vite "temperaturen i India" som er kontekst. Kort sagt, hovedmålsettingen med en setning er kontekst. Ord eller setning rundt talespråk eller skriftspråk (avsløring) hjelper til med å bestemme betydningen av kontekst. Word2vec lærer vektorrepresentasjon av ord gjennom sammenhengene.

Hvorfor Word2vec?

Før Word-innebygging

Det er viktig å vite hvilken tilnærming som brukes før innebygging av ord og hva som er ulemper, og så vil vi gå til temaet om hvordan ødeleggelser blir overvunnet av Word-innebygging ved hjelp av word2vec-tilnærming. Til slutt vil vi flytte hvordan word2vec fungerer fordi det er viktig å forstå at det fungerer.

Tilnærming for latent semantisk analyse

Dette er tilnærmingen som ble brukt før ordintegrering. Den brukte begrepet Bag of words der ord er representert i form av kodede vektorer. Det er en sparsom vektorrepresentasjon der dimensjonen er lik vokabularets størrelse. Hvis ordet forekommer i ordboken, telles det, ellers ikke. For å forstå mer, vennligst se programmet nedenfor.

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

Produksjon:

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

Kode Forklaring

  1. CountVectorizer er modulen som brukes til å lagre ordforrådet basert på å tilpasse ordene i det. Dette importeres fra sklearn
  2. Lag objektet ved hjelp av klassen CountVectorizer.
  3. Skriv dataene i listen som skal monteres i CountVectorizer.
  4. Data passer inn i objektet opprettet fra klassen CountVectorizer.
  5. Bruk en pose med ordtilnærming for å telle ord i dataene ved hjelp av ordforråd. Hvis ord eller token ikke er tilgjengelig i ordforrådet, er slik indeksposisjon satt til null.
  6. Variabel i linje 5 som er x konverteres til en matrise (metode tilgjengelig for x). Dette vil gi antall token i setningen eller listen gitt i linje 3.
  7. Dette viser funksjonene som er en del av ordforrådet når det monteres ved hjelp av dataene i linje 4.

I latent semantisk tilnærming representerer raden unike ord, mens kolonnen representerer hvor lenge ordet vises i dokumentet. Det er en representasjon av ord i form av dokumentmatrisen. Term-frekvens invers dokumentfrekvens (TFIDF) brukes til å telle frekvensen av ord i dokumentet som er frekvensen av begrepet i dokumentet / frekvensen av begrepet i hele corpus.

Mangel på Bag of Words-metoden

  • Det ignorerer ordets ordre, for eksempel, dette er dårlig = dårlig er dette.
  • Det ignorerer konteksten av ord. Anta at hvis jeg skriver setningen "Han elsket bøker. Utdanning finnes best i bøker". Det ville skape to vektorer, en for "Han elsket bøker" og en for "Utdanning finnes best i bøker." Det ville behandle dem begge ortogonale som gjør dem uavhengige, men i virkeligheten er de i slekt med hverandre

For å overvinne disse begrensningene ble ordintegrering utviklet, og word2vec er en tilnærming til å implementere slike.

Hvordan fungerer Word2vec?

Word2vec lærer ord ved å forutsi den omgivende konteksten. La oss for eksempel ta ordet "Han elsker fotball."

Vi ønsker å beregne word2vec for ordet: elsker.

Anta

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

Word elsker beveger seg over hvert ord i corpus. Syntaktisk så vel som semantisk forhold mellom ord er kodet. Dette hjelper med å finne lignende ord og analogier.

Alle tilfeldige trekk ved ordet elsker er beregnet. Disse funksjonene endres eller oppdateres når det gjelder nabo- eller kontekstord ved hjelp av en forplantningsmetode for ryggen.

En annen måte å lære på er at hvis sammenhengen mellom to ord er lik eller to ord har lignende funksjoner, så er slike ord relatert.

Word2vec Arkitektur

Det er to arkitekturer som brukes av word2vec

  1. Kontinuerlig pose med ord (CBOW)
  2. hopp over gram

Før vi går videre, la oss diskutere hvorfor disse arkitekturene eller modellene er viktige sett fra ordrepresentasjon. Læring av ordrepresentasjon er i det vesentlige uten tilsyn, men mål / etiketter er nødvendig for å trene modellen. Skip-gram og CBOW konverterer uten tilsyn representasjon til veiledet skjema for modellopplæring.

I CBOW blir det nåværende ordet forutsagt ved hjelp av vinduet til omgivende kontekstvinduer. For eksempel, hvis w i-1 , w i-2 , w i + 1 , w i + 2 får ord eller kontekst, vil denne modellen gi w i

Skip-Gram utfører motsatt av CBOW, noe som innebærer at det forutsier gitt sekvens eller kontekst fra ordet. Du kan snu eksemplet for å forstå det. Hvis w i er gitt, vil dette forutsi konteksten eller w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec gir et alternativ å velge mellom CBOW (kontinuerlig pose med ord) og skum-gram. Slike parametere er gitt under trening av modellen. Man kan ha muligheten til å bruke negativ prøvetaking eller hierarkisk softmax-lag.

Kontinuerlig pose med ord.

La oss tegne et enkelt diagram for å forstå den kontinuerlige posen med ordarkitektur.

Figur Kontinuerlig pose med Word Architecture

La oss beregne ligningene matematisk. Anta at V er vokabularstørrelsen og N er den skjulte lagstørrelsen. Inngang er definert som {x i-1 , x i-2, x i + 1, x i + 2 }. Vi oppnår vektmatrisen ved å multiplisere V * N. En annen matrise oppnås ved å multiplisere inngangsvektoren med vektmatrisen. Dette kan også forstås av følgende ligning.

h = xi t W

hvor xi t ∧ W er henholdsvis inngangsvektoren og vektmatrisen,

For å beregne samsvaret mellom kontekst og neste ord, referer du til ligningen nedenfor

u = forutsagt representasjon * h

der prediksert fremstilling er oppnådd modell∧h i ovenstående ligning.

Skip-Gram-modell

Skip-Gram-tilnærming brukes til å forutsi en setning gitt et inngangsord. For å forstå det bedre, la oss tegne diagrammet.

Figur Skip-Gram-modell

Man kan behandle det som det motsatte av den kontinuerlige posen med ordmodell der inngangen er ordet og modellen gir konteksten eller sekvensen. Vi kan også konkludere med at målet blir matet til inngangs- og utgangslaget replikert flere ganger for å imøtekomme det valgte antall kontekstord. Feilvektor fra alt utgangslaget oppsummeres for å justere vekter via en backpropagation-metode.

Hvilken modell skal du velge?

CBOW er flere ganger raskere enn skip gram og gir en bedre frekvens for hyppige ord, mens skip gram trenger en liten mengde treningsdata og representerer til og med sjeldne ord eller uttrykk.

Forholdet mellom Word2vec og NLTK

NLTK er naturlig språkverktøy. Den brukes til forbehandling av teksten. Man kan gjøre forskjellige operasjoner som deler av talemerking, lemmatisering, stemming, stopp av fjerning av ord, fjerning av sjeldne ord eller minst brukte ord. Det hjelper med å rense teksten, samt hjelper deg med å forberede funksjonene fra de effektive ordene. På den andre måten brukes word2vec til semantisk (nært beslektede elementer sammen) og syntaktisk (sekvens) matching. Ved hjelp av word2vec kan man finne lignende ord, forskjellige ord, dimensjonsreduksjon og mange andre. Et annet viktig trekk ved word2vec er å konvertere den høyere dimensjonale representasjonen av teksten til lavere dimensjonale av vektorer.

Hvor skal jeg bruke NLTK og Word2vec?

Hvis man må utføre noen generelle oppgaver som nevnt ovenfor, som tokenisering, POS-merking og parsing, må man gå for å bruke NLTK, mens man forutsier ord i henhold til en eller annen kontekst, emnemodellering eller dokumentlikhet, må bruke Word2vec.

Forholdet mellom NLTK og Word2vec ved hjelp av kode

NLTK og Word2vec kan brukes sammen for å finne lignende ordrepresentasjon eller syntaktisk samsvar. NLTK verktøysett kan brukes til å laste inn mange pakker som følger med NLTK, og modellen kan opprettes ved hjelp av word2vec. Det kan deretter testes på ordene i sanntid. La oss se kombinasjonen av begge i følgende kode. Før du behandler videre, ta en titt på korpora som NLTK tilbyr. Du kan laste ned ved hjelp av kommandoen

nltk(nltk.download('all'))

Figur Corpora lastet ned ved hjelp av NLTK

Se skjermbildet for koden.

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

Produksjon:

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

Forklaring av kode

  1. nltk-biblioteket importeres, hvorfra du kan laste ned abc corpus som vi vil bruke i neste trinn.
  2. Gensim importeres. Hvis Gensim ikke er installert, kan du installere det ved hjelp av kommandoen "pip3 install gensim". Se skjermbildet nedenfor.

Figur Installere Gensim ved hjelp av PIP

  1. importere corpus abc som er lastet ned ved hjelp av nltk.download ('abc').
  2. Send filene til modellen word2vec som importeres med Gensim som setninger.
  3. Ordforråd lagres i form av variabelen.
  4. Modellen testes på eksempler på ordvitenskap, da disse filene er relatert til vitenskap.
  5. Her er det lignende ordet "vitenskap" forutsagt av modellen.

Aktivatorer og Word2Vec

Aktiveringsfunksjonen til nevronet definerer utgangen til nevronet gitt et sett med innganger. Biologisk inspirert av en aktivitet i hjernen vår der forskjellige nevroner aktiveres ved hjelp av forskjellige stimuli. La oss forstå aktiveringsfunksjonen gjennom følgende diagram.

Figur Forstå aktivering funksjon

Her er x1, x2, ... x4 noden til det nevrale nettverket.

w1, w2, w3 er vekten til noden,

∑ er summeringen av all vekt og nodeverdi som fungerer som aktiveringsfunksjon.

Hvorfor aktiveringsfunksjon?

Hvis ingen aktiveringsfunksjoner brukes, vil utdata være lineær, men funksjonaliteten til lineær funksjon er begrenset. For å oppnå kompleks funksjonalitet som objektgjenkjenning, bildeklassifisering, skriving av tekst ved hjelp av tale og mange andre ikke-lineære utganger er det nødvendig som oppnås ved hjelp av aktiveringsfunksjon.

Hvordan aktiveringslaget beregnes i ordet innebygging (word2vec)

Softmax Layer (normalisert eksponensiell funksjon) er utgangslagsfunksjonen som aktiverer eller utløser hver node. En annen tilnærming som brukes er Hierarkisk softmax der kompleksiteten beregnes av O (log 2 V) hvor softmax det er O (V) hvor V er vokabularstørrelsen. Forskjellen mellom disse er reduksjonen av kompleksiteten i hierarkisk softmax-lag. For å forstå funksjonen (hierarkisk softmax), se eksemplet nedenfor:

Figur Hierarkisk softmax-trelignende struktur

Anta at vi vil beregne sannsynligheten for å observere ordet kjærlighet gitt en viss kontekst. Flyten fra roten til bladnoden vil være den første flyttingen til node 2 og deretter til node 5. Så hvis vi har hatt vokabularstørrelsen 8, er det bare tre beregninger som trengs. Så det tillater nedbrytning, beregning av sannsynligheten for ett ord ( kjærlighet ).

Hvilke andre alternativer er tilgjengelige annet enn Hierarkisk Softmax?

Hvis du snakker i generell forstand for tilgjengelige ordinnbeddingsalternativer, er Differensiert Softmax, CNN-Softmax, Viktighetssampling, Adaptiv betydningssampling, Støykontrastiv estimering, Negativ prøvetaking, Selvnormalisering og sjelden normalisering.

Når vi snakker spesielt om Word2vec, har vi negativ prøvetaking tilgjengelig.

Negativ prøvetaking er en måte å prøve treningsdataene på. Det er noe som stokastisk gradient nedstigning, men med en viss forskjell. Negativ prøvetaking ser bare etter negative treningseksempler. Den er basert på støykontrastiv estimering og prøver ord tilfeldig, ikke i sammenheng. Det er en rask treningsmetode og velger konteksten tilfeldig. Hvis det forutsagte ordet vises i tilfeldig valgt sammenheng, er begge vektorene nær hverandre.

Hvilken konklusjon kan trekkes?

Aktivatorer skyter nevronene akkurat som nevronene våre blir avfyrt ved hjelp av eksterne stimuli. Softmax-lag er en av funksjonene for utgangslaget som avfyrer nevronene i tilfelle ordinnstøping. I word2vec har vi alternativer som hierarkisk softmax og negativ prøvetaking. Ved hjelp av aktivatorer kan man konvertere den lineære funksjonen til den ikke-lineære funksjonen, og en kompleks maskinlæringsalgoritme kan implementeres ved hjelp av en slik.

Hva er Gensim?

Gensim er et verktøysett for modellering av emner som er implementert i python. Temamodellering er å oppdage skjult struktur i tekstteksten. Word2vec importeres fra Gensim verktøykasse. Vær oppmerksom på at Gensim ikke bare gir en implementering av word2vec, men også Doc2vec og FastText, men denne opplæringen handler om word2vec, så vi vil holde oss til det aktuelle emnet.

Implementering av word2vec ved bruk av Gensim

Til nå har vi diskutert hva word2vec er, dets forskjellige arkitekturer, hvorfor det er et skifte fra en pose med ord til word2vec, forholdet mellom word2vec og NLTK med live kode og aktiveringsfunksjoner. I denne delen vil Word2vec implementeres ved hjelp av Gensim

Trinn 1) Datainnsamling

Det første trinnet for å implementere en hvilken som helst maskinlæringsmodell eller implementere naturlig språkbehandling er datainnsamling

Vær oppmerksom på dataene for å lage en intelligent chatbot.

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

Her er hva vi forstår fra dataene

  • Disse dataene inneholder tre ting, merke, mønster og svar. Merkelappen er intensjonen (hva er diskusjonstemaet).
  • Dataene er i JSON-format.
  • Et mønster er et spørsmål brukerne vil stille til boten
  • Svar er svaret som chatbot vil gi på det tilsvarende spørsmålet / mønsteret.

Trinn 2) Forbehandling av data.

Det er veldig viktig å behandle rådataene. Hvis renset data blir matet til maskinen, vil modellen svare mer nøyaktig og vil lære dataene mer effektivt.

Dette trinnet innebærer å fjerne stoppord, stemming, unødvendige ord osv. Før du går videre, er det viktig å laste inn data og konvertere dem til en dataramme. Se koden nedenfor for slike

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

Forklaring av KODE.

  1. Siden data er i form av json-format, blir json derfor importert
  2. Filen er lagret i variabelen
  3. Filen er åpen og lastet inn i datavariabel

Nå importeres data, og det er på tide å konvertere data til dataramme. Se koden nedenfor for å se neste trinn

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

Forklaring av KODE

1. Data konverteres til dataramme ved hjelp av pandaer som ble importert ovenfor.

2. Det vil konvertere listen i kolonnemønstre til streng.

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

Kode Forklaring

1. Engelske stoppord importeres ved hjelp av stoppordmodul fra nltk toolkit

2. Alle ordene i teksten blir konvertert til små bokstaver ved bruk av tilstand og lambda-funksjon. Lambda-funksjon er en anonym funksjon.

3. Alle tekstradene i datarammen blir sjekket for strengtegn, og disse blir filtrert.

4. Tegn som tall eller prikk fjernes med et vanlig uttrykk.

5. Sifre fjernes fra teksten.

6. Stoppord fjernes på dette stadiet.

7. Ord blir filtrert nå, og annen form for det samme ordet blir fjernet ved hjelp av lemmatisering. Med disse er vi ferdig med databehandlingen.

Produksjon:

, 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

Trinn 3) Nevrale nettverksbygging ved hjelp av word2vec

Nå er det på tide å bygge en modell ved hjelp av Gensim-modulen word2vec. Vi må importere word2vec fra Gensim. La oss gjøre dette, og så vil vi bygge og i sluttfasen vil vi sjekke modellen på sanntidsdata.

from gensim.models import Word2Vec

Nå kan vi lykkes med å bygge modellen ved hjelp av Word2Vec. Se neste kodelinje for å lære hvordan du lager modellen ved hjelp av Word2Vec. Teksten er gitt til modellen i form av en liste, så vi konverterer teksten fra dataramme til liste ved hjelp av koden nedenfor

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)

Forklaringer til koden

1. Lag den større listen der den indre listen er lagt til. Dette er formatet som blir matet til Word2Vec-modellen.

2. Loop implementeres, og hver oppføring i mønsterkolonnen i datarammen blir iterert.

3. Hvert element i kolonnemønstrene deles og lagres i den indre listen li

4. den indre listen er lagt sammen med den ytre listen.

5. Denne listen er gitt til Word2Vec-modellen. La oss forstå noen av parametrene som er gitt her

Min_telling: Det vil ignorere alle ordene med en total frekvens lavere enn dette.

Størrelse: Den forteller dimensjonaliteten til ordet vektorer.

Arbeidere: Dette er trådene for å trene modellen

Det er også andre alternativer tilgjengelig, og noen viktige blir forklart nedenfor

Vindu: Maksimal avstand mellom gjeldende og forutsagt ord i en setning.

Sg: Det er en treningsalgoritme og 1 for skip-gram og 0 for en kontinuerlig pose med ord. Vi har diskutert disse i detaljer ovenfor.

Hs: Hvis dette er 1, bruker vi hierarkisk softmax for trening, og hvis 0 så brukes negativ prøvetaking.

Alpha: Innledende læringsgrad

La oss vise den endelige koden nedenfor

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

Trinn 4) Modellsparing

Modell kan lagres i form av søppel og modellskjema. Bin er det binære formatet. Se linjene nedenfor for å lagre modellen

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

Forklaring av ovennevnte kode

1. Modellen lagres i form av en .modellfil.

2. modellen lagres i form av .bin-fil

Vi vil bruke denne modellen til å utføre sanntidstesting, for eksempel lignende ord, forskjellige ord og vanligste ord.

Trinn 5) Laster modell og utfører sanntidstesting

Modellen lastes med koden nedenfor

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

Hvis du vil skrive ut ordforrådet fra det, gjøres det med kommandoen nedenfor

vokab = liste (model.wv.vocab)

Vennligst se resultatet

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

Trinn 6) Mest lik ordkontroll

La oss implementere tingene praktisk

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

Vennligst se resultatet

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

Trinn 7) Matcher ikke ord fra ord som er levert

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

Vi har levert ordene "Vi sees senere, takk for besøket". Dette vil skrive ut de mest forskjellige ordene fra disse ordene. La oss kjøre denne koden og finne resultatet

Resultatet etter utførelse av ovennevnte kode.

Thanks

Trinn 8) Finn likheten mellom to ord

Dette vil fortelle resultat i sannsynlighet for likhet mellom to ord. Se koden nedenfor for hvordan du utfører denne delen.

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

Resultatet av koden ovenfor er som nedenfor

0,13706

Du kan videre finne lignende ord ved å utføre koden nedenfor

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

Utdata fra ovennevnte kode

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

Konklusjon

  • Word Embedding er en type ordrepresentasjon som gjør det mulig å forstå ord med lignende betydning av maskinlæringsalgoritmer
  • Innbygging av ord brukes til å beregne lignende ord, lage en gruppe relaterte ord, funksjon for tekstklassifisering, dokumentklynging, behandling av naturlig språk
  • Word2vec er en grunne to-lags nevralt nettverksmodell for å produsere ordintegrering for bedre ordrepresentasjon
  • Word2vec representerer ord i vektorplassrepresentasjon. Ord er representert i form av vektorer og plassering gjøres på en slik måte at lignende betydningsord vises sammen og forskjellige ord ligger langt unna
  • Word2vec brukte to arkitekturer Kontinuerlig pose med ord (CBOW) og hopp over gram
  • CBOW er flere ganger raskere enn skip gram og gir en bedre frekvens for hyppige ord, mens skip gram trenger en liten mengde treningsdata og representerer til og med sjeldne ord eller uttrykk.
  • NLTK og word2vec kan brukes sammen for å skape kraftige applikasjoner
  • Aktiveringsfunksjonen til nevronet definerer utgangen til nevronet gitt et sett med innganger. I word2vec. Softmax Layer (normalisert eksponensiell funksjon) er utgangslagsfunksjonen som aktiverer eller utløser hver node. Word2vec har også negativ prøvetaking tilgjengelig
  • Gensim er et verktøysett for modellering av emner som er implementert i python