Word Embedding og Word2Vec-modell med eksempel
Hva er Word Embedding?
Innbygging av ord er en ordrepresentasjonstype som lar maskinlæringsalgoritmer forstå ord med lignende betydninger. Det er en språkmodellerings- og funksjonslæringsteknikk for å kartlegge ord til vektorer av reelle tall ved å bruke nevrale nettverk, sannsynlighetsmodeller eller dimensjonsreduksjon på ord-samforekomstmatrisen. Noen ordinnbyggingsmodeller er 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 bør frukt som eple, mango, banan plasseres i nærheten, mens bøker vil være langt unna disse ordene. I en bredere forstand vil ordinnbygging skape vektoren av frukt som vil bli plassert langt unna vektorrepresentasjon av bøker.
Hvor brukes Word Embedding?
Ordinnbygging hjelper i funksjonsgenerering, dokumentgruppering, tekstklassifisering og naturlig språkbehandling. La oss liste dem opp og ha en diskusjon om hver av disse applikasjonene.
- Regn ut lignende ord: Ordinnbygging brukes til å foreslå ord som ligner på ordet som blir utsatt for prediksjonsmodellen. Sammen med det foreslår det også forskjellige ord, så vel som de vanligste ordene.
- Lag en gruppe beslektede ord: Den brukes til semantisk gruppering som vil gruppere ting med lignende egenskaper sammen og ulikt langt unna.
- Funksjon for tekstklassifisering: Tekst er kartlagt i arrays av vektorer som mates til modellen for trening så vel som prediksjon. Tekstbaserte klassifiseringsmodeller kan ikke trenes på strengen, så dette vil konvertere teksten til maskinopplærbar form. Ytterligere funksjonene for å bygge semantisk hjelp i tekstbasert klassifisering.
- Dokumentgruppering: er et annet program der Word Embedding Word2vec er mye brukt
- Naturlig språkbehandling: Det er mange applikasjoner der ordinnbygging er nyttig og vinner over funksjonsutvinningsfaser som deler av talemerking, sentimental analyse og syntaktisk analyse. Nå har vi fått litt kunnskap om ordinnbygging. Litt lys kastes også over forskjellige modeller for å implementere ordinnbygging. Hele denne opplæringen for Word Embedding er fokusert på en av modellene (Word2vec).
Hva er Word2vec?
Word2vec er en teknikk/modell for å produsere ordinnbygging for bedre ordrepresentasjon. Det er en naturlig språkbehandlingsmetode som fanger opp et stort antall presise syntaktiske og semantiske ordforhold. Det er et grunt tolags nevralt nettverk som kan oppdage synonyme ord og foreslå flere ord for delsetninger når det først er trent.
Før du går videre i denne Word2vec-opplæringen, vennligst se forskjellen mellom grunt og dypt nevralt nettverk som vist i eksempeldiagrammet nedenfor for Word-innbygging:
Det grunne nevrale nettverket består av det eneste skjulte laget mellom input og output, mens dypt nevrale nettverk inneholder flere skjulte lag mellom input og output. Inndata blir utsatt for noder, mens det skjulte laget, så vel som utgangslaget, inneholder nevroner.
Word2vec er et to-lags nettverk hvor det er input ett skjult lag og utgang.
Word2vec ble utviklet av en gruppe forskere ledet av Tomas Mikolov ved Google. Word2vec er bedre og mer effektiv den latente semantiske analysemodellen.
Hvorfor Word2vec?
Word2vec representerer ord i vektorromrepresentasjon. Ord er representert i form av vektorer og plassering gjøres på en slik måte at lignende betydningsord vises sammen og forskjellige ord er plassert langt unna. Dette er også betegnet som et semantisk forhold. Nevrale nettverk forstår ikke tekst i stedet forstår de bare tall. Word Embedding gir en måte å konvertere tekst til en numerisk vektor.
Word2vec rekonstruerer den språklige konteksten til ord. Før vi går videre, la oss forstå, hva er språklig kontekst? I et generelt livsscenario når vi snakker eller skriver for å kommunisere, prøver andre mennesker å finne ut hva som er målet med setningen. For eksempel, "Hva er temperaturen i India", her er konteksten at brukeren ønsker å vite "temperaturen i India", som er kontekst. Kort sagt, hovedmålet med en setning er kontekst. Ord eller setninger som omgir tale- eller skriftspråk (avsløring) hjelper til med å bestemme betydningen av kontekst. Word2vec lærer vektorrepresentasjon av ord gjennom kontekstene.
Hva gjør Word2vec?
Før Word-innbygging
Det er viktig å vite hvilken tilnærming som brukes før innbygging av ord og hva som er dens ulemper, og så vil vi gå over til temaet hvordan ulemper overvinnes ved Word-innbygging 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 ordinnbygging. Den brukte konseptet Bag of words der ord er representert i form av kodede vektorer. Det er en sparsom vektorrepresentasjon der dimensjonen er lik størrelsen på ordforrådet. Hvis ordet forekommer i ordboken, telles det, ellers ikke. For å forstå mer, se programmet nedenfor.
Word2vec eksempel
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())
Utgang:
[[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
- CountVectorizer er modulen som brukes til å lagre vokabularet basert på å passe ordene i den. Dette er importert fra sklearn.
- Lag objektet ved å bruke klassen CountVectorizer.
- Skriv dataene i listen som skal monteres i CountVectorizer.
- Data passer inn i objektet som er opprettet fra klassen CountVectorizer.
- Bruk en pose med ord tilnærming for å telle ord i dataene ved å bruke ordforråd. Hvis ord eller token ikke er tilgjengelig i vokabularet, settes en slik indeksposisjon til null.
- Variabel i linje 5 som er x konverteres til en matrise (metode tilgjengelig for x). Dette vil gi tellingen av hver token i setningen eller listen i linje 3.
- Dette vil vise funksjonene som er en del av vokabularet når det er tilpasset ved hjelp av dataene i linje 4.
I latent semantisk tilnærming representerer raden unike ord, mens kolonnen representerer antall ganger det ordet vises i dokumentet. Det er en representasjon av ord i form av dokumentmatrisen. Term-Frequency inverse document frequency (TFIDF) brukes til å telle frekvensen av ord i dokumentet som er frekvensen av termen i dokumentet/ frekvensen av termen i hele korpuset.
Mangel på Bag of Words-metoden
- Den ignorerer rekkefølgen på ordet, for eksempel, dette er dårlig = dårlig er dette.
- Den ignorerer konteksten til 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 annen for "Utdanning finnes best i bøker." Det ville behandle dem begge ortogonale, noe som gjør dem uavhengige, men i virkeligheten er de relatert til hverandre
For å overvinne disse begrensningene ble ordinnbygging utviklet og Word2vec er en tilnærming for å 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 calculated where, Vin is the input word. P is the probability of likelihood. Vout is the output word.
ord elsker beveger seg over hvert ord i korpuset. Syntaktisk så vel som det semantiske forholdet 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 angående nabo- eller kontekstord ved hjelp av en Ryggformering metoden.
En annen måte å lære på er at hvis konteksten til to ord er like eller to ord har lignende egenskaper, så er slike ord relatert.
Word2vec Architecture
Det er to arkitekturer som brukes av Word2vec:
- Kontinuerlig pose med ord (CBOW)
- Hopp over gram
Før vi går videre i denne Word2vec-opplæringen, la oss diskutere hvorfor disse arkitekturene eller modellene er viktige fra ordrepresentasjonssynspunkt. Å lære ordrepresentasjon er i hovedsak uten tilsyn, men mål/etiketter er nødvendig for å trene modellen. Skip-gram og CBOW konverterer uovervåket representasjon til overvåket form for modelltrening.
I CBOW blir det gjeldende ordet forutsagt ved å bruke vinduet til omkringliggende kontekstvinduer. For eksempel, hvis wi-1,wi-2,wjeg + 1,wjeg + 2gis ord eller kontekst, vil denne modellen gi wi
Skip-Gram utfører det motsatte av CBOW som innebærer at det forutsier den gitte sekvensen eller konteksten fra ordet. Du kan snu eksemplet for å forstå det. Hvis wi er gitt, vil dette forutsi konteksten eller wi-1,wi-2,wjeg + 1,wi+2.
Word2vec gir en mulighet til å velge mellom CBOW (continuous Bag of words) og skim-gram. Slike parametere er gitt under opplæring av modellen. Man kan ha muligheten til å bruke negativ sampling eller hierarkisk softmax-lag.
Kontinuerlig pose med ord
La oss tegne et enkelt Word2vec-eksempeldiagram for å forstå den kontinuerlige posen med ordarkitektur.
La oss regne ut ligningene matematisk. Anta at V er vokabularstørrelsen og N er størrelsen på det skjulte laget. Inndata er definert som { xi-1, xi-2, xi+1, xjeg + 2}. Vi får vektmatrisen ved å multiplisere V * N. En annen matrise oppnås ved å multiplisere inngangsvektor med vektmatrisen. Dette kan også forstås av følgende ligning.
h=xitW
hvor xit? W er henholdsvis inngangsvektoren og vektmatrisen,
For å beregne samsvaret mellom kontekst og det neste ordet, se ligningen nedenfor
u=forutsagt fremstilling*h
hvor predikert fremstilling er oppnådd modell?h i ligningen ovenfor.
Skip-Gram-modell
Skip-Gram-tilnærming brukes til å forutsi en setning gitt et inngangsord. For å forstå det bedre, la oss tegne diagrammet som vist i Word2vec-eksemplet nedenfor.
Man kan behandle det som det motsatte av Continuous bag of word-modellen der input er ordet og modellen gir konteksten eller sekvensen. Vi kan også konkludere med at målet mates til input og output-laget blir replikert flere ganger for å imøtekomme det valgte antallet kontekstord. Feilvektor fra hele utdatalaget summeres for å justere vekter via en tilbakepropageringsmetode.
Hvilken modell å velge?
CBOW er flere ganger raskere enn hopp over gram og gir en bedre frekvens for hyppige ord, mens hopp over gram trenger en liten mengde treningsdata og representerer til og med sjeldne ord eller setninger.
Forholdet mellom Word2vec og NLTK
NLTK er naturlig språkverktøysett. Den brukes til forbehandling av teksten. Man kan gjøre forskjellige operasjoner som deler av talemerking, lemmatisering, stemming, stoppe ordfjerning, fjerne sjeldne ord eller minst brukte ord. Det hjelper med å rense teksten, samt hjelper til med å forberede funksjonene fra de effektive ordene. På den andre måten brukes Word2vec for semantisk (nært beslektede elementer sammen) og syntaktisk (sekvens) matching. Ved å bruke Word2vec kan man finne lignende ord, forskjellige ord, dimensjonsreduksjon og mange andre. En annen viktig funksjon ved Word2vec er å konvertere den høyere dimensjonale representasjonen av teksten til lavere dimensjonale vektorer.
Hvor skal jeg bruke NLTK og Word2vec?
Hvis man må utføre noen generelle oppgaver som nevnt ovenfor, som tokenisering, POS-tagging og parsing, må man gå for å bruke NLTK, mens man for å forutsi ord i henhold til en kontekst, emnemodellering eller dokumentlikhet må bruke Word2vec.
Relasjon mellom NLTK og Word2vec ved hjelp av kode
NLTK og Word2vec kan brukes sammen for å finne lignende ordrepresentasjon eller syntaktisk samsvar. NLTK-verktøysettet kan brukes til å laste inn mange pakker som følger med NLTK, og modellen kan lages ved hjelp av Word2vec. Det kan deretter testes på sanntidsord. La oss se kombinasjonen av begge i følgende kode. Før du behandler videre, vennligst ta en titt på korpusene som NLTK gir. Du kan laste ned ved å bruke kommandoen
nltk(nltk.download('all'))
Se skjermbildet for koden.
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)
Utgang:
[('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
- nltk-biblioteket importeres hvorfra du kan laste ned abc-korpuset som vi skal bruke i neste trinn.
- Gensim er importert. Hvis Gensim Word2vec ikke er installert, installer det ved å bruke kommandoen "pip3 install gensim". Vennligst se skjermbildet nedenfor.
- importer corpus abc som er lastet ned ved hjelp av nltk.download('abc').
- Send filene til modellen Word2vec som er importert med Gensim som setninger.
- Ordforrådet lagres i form av variabelen.
- Modellen er testet på eksempelordvitenskap da disse filene er relatert til vitenskap.
- Her er det lignende ordet "vitenskap" spådd av modellen.
Aktivatorer og Word2Vec
Aktiveringsfunksjonen til nevronet definerer utgangen til det nevronet gitt et sett med innganger. Biologisk inspirert av en aktivitet i hjernen vår der ulike nevroner aktiveres ved hjelp av ulike stimuli. La oss forstå aktiveringsfunksjonen gjennom følgende diagram.
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 aktiveringsfunksjon brukes, vil utgangen være lineær, men funksjonaliteten til lineær funksjon er begrenset. For å oppnå kompleks funksjonalitet som objektgjenkjenning, er bildeklassifisering, skriving av tekst ved hjelp av stemme nødvendig og mange andre ikke-lineære utganger som oppnås ved bruk av aktiveringsfunksjon.
Hvordan aktiveringslaget beregnes i ordet innebygging (Word2vec)
Softmax Layer (normalisert eksponentiell funksjon) er utgangslagsfunksjonen som aktiverer eller avfyrer hver node. En annen tilnærming som brukes er Hierarchical softmax hvor kompleksiteten beregnes av O(log2V) hvor softmax det er O(V) hvor V er ordforrådets størrelse. Forskjellen mellom disse er reduksjonen av kompleksiteten i hierarkisk softmax-lag. For å forstå dens (hierarkiske softmax) funksjonalitet, vennligst se på Word-innbyggingseksemplet nedenfor:
Anta at vi ønsker å beregne sannsynligheten for å observere ordet elsker gitt en viss kontekst. Strømmen fra roten til bladnoden vil være det første trekket til node 2 og deretter til node 5. Så hvis vi har hatt vokabularstørrelsen 8, trengs bare tre beregninger. Så det tillater nedbryting, beregning av sannsynligheten for ett ord (elsker).
Hvilke andre alternativer er tilgjengelige enn Hierarchical Softmax?
Hvis du snakker i en generell forstand for innebygging av ord, er tilgjengelige alternativer Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance Sampling, Noise Contrasive Estimations, Negative Sampling, Self-Normalization, and Infrequent Normalization.
Når vi snakker spesifikt om Word2vec, har vi negativ sampling tilgjengelig.
Negativ prøvetaking er en måte å prøve treningsdataene på. Det er litt som stokastisk gradientnedstigning, men med en viss forskjell. Negativ prøvetaking ser bare etter negative treningseksempler. Den er basert på støykontrast-estimering og prøver tilfeldig ord, ikke i konteksten. Det er en rask treningsmetode og velger konteksten tilfeldig. Hvis det forutsagte ordet vises i den tilfeldig valgte konteksten, er begge vektorene nær hverandre.
Hvilken konklusjon kan man trekke?
Aktivatorer avfyrer nevronene akkurat som nevronene våre avfyres ved hjelp av ytre stimuli. Softmax-laget er en av utgangslagsfunksjonene som avfyrer nevronene i tilfelle ordinnbygging. I Word2vec har vi alternativer som hierarkisk softmax og negativ sampling. 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 en åpen kildekode-emnemodellering og verktøysett for behandling av naturlig språk som er implementert i Python og Cython. Gensim verktøysett lar brukere importere Word2vec for emnemodellering for å oppdage skjult struktur i tekstbrødteksten. Gensim gir ikke bare en implementering av Word2vec, men også for Doc2vec og FastText.
Denne opplæringen handler om Word2vec, så vi vil holde oss til det gjeldende emnet.
Hvordan implementere Word2vec ved hjelp 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.
Nedenfor er den trinnvise metoden for å implementere Word2vec ved hjelp av Gensim:
Trinn 1) Datainnsamling
Det første trinnet for å implementere en maskinlæringsmodell eller implementere naturlig språkbehandling er datainnsamling
Vennligst observer dataene for å bygge en intelligent chatbot som vist i Gensim Word2vec-eksemplet nedenfor.
[{"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 av dataene
- Disse dataene inneholder tre ting-tag, mønster og svar. Taggen er intensjonen (hva er diskusjonstemaet).
- Dataene er i JSON-format.
- Et mønster er et spørsmål brukere vil stille til boten
- Svar er svaret som chatbot vil gi på det tilsvarende spørsmålet/mønsteret.
Trinn 2) Dataforbehandling
Det er svært viktig å behandle rådataene. Hvis rensede data mates til maskinen, vil modellen reagere mer nøyaktig og lære dataene mer effektivt.
Dette trinnet innebærer å fjerne stoppord, ordstamming, unødvendige ord osv. Før du går videre, er det viktig å laste inn data og konvertere dem til en dataramme. Vennligst se koden nedenfor for slikt
import json json_file =’intents.json' with open('intents.json','r') as f: data = json.load(f)
Forklaring av kode:
- Siden data er i form av json-format, importeres derfor json
- Filen er lagret i variabelen
- Filen er åpen og lastet inn i datavariabel
Nå er data importert og det er på tide å konvertere data til dataramme. Se koden nedenfor for å se neste trinn
import pandas as pd df = 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 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()]))
Kodeforklaring:
1. Engelske stoppord importeres ved hjelp av stoppordmodulen fra nltk toolkit
2. Alle ordene i teksten konverteres til små bokstaver ved å bruke for tilstand og lambda-funksjon. Lambda funksjon er en anonym funksjon.
3. Alle radene i teksten i datarammen sjekkes for strengtegnsetting, og disse filtreres.
4. Tegn som tall eller prikk fjernes ved hjelp av et regulært uttrykk.
5. Digits fjernes fra teksten.
6. Stoppord fjernes på dette stadiet.
7. Ord filtreres nå, og forskjellige former for det samme ordet fjernes ved hjelp av lemmatisering. Med disse er vi ferdige med dataforbehandlingen.
Utgang:
, 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
Trinn 3) Bygging av nevrale nettverk ved hjelp av Word2vec
Nå er det på tide å bygge en modell ved hjelp av Gensim Word2vec-modulen. Vi må importere Word2vec fra Gensim. La oss gjøre dette, og så skal vi bygge og i sluttfasen vil vi sjekke modellen på sanntidsdata.
from gensim.models import Word2Vec
Nå i denne Gensim Word2vec-opplæringen kan vi lykkes med å bygge modellen ved å bruke Word2Vec. Se neste kodelinje for å lære hvordan du lager modellen ved hjelp av Word2Vec. Tekst leveres til modellen i form av en liste, så vi vil konvertere teksten fra dataramme til liste ved å bruke 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)
Forklaring av kode:
1. Laget bigger_list der den indre listen er lagt til. Dette er formatet som mates til modellen Word2Vec.
2. Loop implementeres, og hver oppføring av mønsterkolonnen i datarammen itereres.
3. Hvert element i kolonnemønstrene deles og lagres i den indre listen li
4. Den indre listen er vedlagt den ytre listen.
5. Denne listen er gitt til Word2Vec-modellen. La oss forstå noen av parameterne som er gitt her
Min_antall: Den vil ignorere alle ordene med en total frekvens som er 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 er forklart nedenfor
Vindu: Maksimal avstand mellom gjeldende og predikerte 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 detalj ovenfor.
Hs: Hvis dette er 1 bruker vi hierarkisk softmax for trening og hvis 0 brukes negativ sampling.
Alpha: Innledende læringsrate
La oss vise den endelige koden nedenfor:
#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)
Trinn 4) Modelllagring
Modell kan lagres i form av bin og modellform. Bin er det binære formatet. Se linjene nedenfor for å lagre modellen
model.save("word2vec.model") model.save("model.bin")
Forklaring av koden ovenfor
1. Modellen lagres i form av en .model-fil.
2. modellen lagres i form av en .bin-fil
Vi vil bruke denne modellen til å utføre sanntidstesting, for eksempel Lignende ord, forskjellige ord og de vanligste ordene.
Trinn 5) Laster modellen og utfører sanntidstesting
Modellen lastes ved hjelp av koden nedenfor:
model = Word2Vec.load('model.bin')
Hvis du vil skrive ut vokabularet fra, gjøres det ved å bruke kommandoen nedenfor:
vocab = list(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) De fleste lignende ord sjekker
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) Samsvarer ikke med 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 koden ovenfor:
Thanks
Trinn 8) Finne likheten mellom to ord
Dette vil fortelle resultatet i sannsynligheten for likhet mellom to ord. Vennligst se koden nedenfor 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 finne lignende ord ved å utføre koden nedenfor
similar = model.similar_by_word('kind') print(similar)
Utgang av koden ovenfor:
[('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
- Ordinnbygging er en type ordrepresentasjon som gjør at ord med lignende betydning kan forstås av maskinlæringsalgoritmer
- Ordinnbygging brukes til å beregne lignende ord, lage en gruppe beslektede ord, funksjon for tekstklassifisering, dokumentgruppering, naturlig språkbehandling
- Word2vec forklart: Word2vec er en grunn to-lags nevrale nettverksmodell for å produsere ordinnbygginger for bedre ordrepresentasjon
- Word2vec representerer ord i vektorromrepresentasjon. Ord er representert i form av vektorer og plassering gjøres på en slik måte at lignende betydningsord vises sammen og forskjellige ord er plassert langt unna
- Word2vec-algoritmen bruker 2 arkitekturer Continuous Bag of words (CBOW) og hopp over gram
- CBOW er flere ganger raskere enn hopp over gram og gir en bedre frekvens for hyppige ord, mens hopp over gram trenger en liten mengde treningsdata og representerer til og med sjeldne ord eller setninger.
- NLTK og Word2vec kan brukes sammen og skape kraftige applikasjoner
- Aktiveringsfunksjonen til nevronet definerer utgangen til det nevronet gitt et sett med innganger. I Word2vec. Softmax Layer (normalisert eksponentiell funksjon) er utgangslagsfunksjonen som aktiverer eller avfyrer hver node. Word2vec har også negativ sampling tilgjengelig
- Gensim er et verktøysett for emnemodellering som er implementert i python