Hvad er ordindlejring?
Ordindlejring er en type ordrepræsentation, der gør det muligt at forstå ord med lignende betydning af maskinlæringsalgoritmer. Teknisk set er det en kortlægning af ord til vektorer med reelle tal ved hjælp af det neurale netværk, den probabilistiske model eller dimensionreduktion på ordets co-forekomstmatrix. Det er sprogmodellering og funktionslæringsteknik. Indlejring af ord er en måde at udføre kortlægning ved hjælp af et neuralt netværk. Der er forskellige ordindlejringsmodeller tilgængelige som word2vec (Google), Glove (Stanford) og hurtigste (Facebook).
Ordindlejring kaldes også som distribueret semantisk model eller distribueret repræsenteret eller semantisk vektorrum eller vektorrummodel. Når du læser disse navne, støder du på ordet semantisk, hvilket betyder at kategorisere lignende ord sammen. For eksempel skal frugter som æble, mango, banan placeres tæt, mens bøger vil være langt væk fra disse ord. I en bredere forstand vil ordindlejring skabe frugtvektoren, der placeres langt væk fra vektorrepræsentation af bøger.
I denne vejledning lærer du
- Hvad er ordindlejring?
- Hvor bruges Word-indlejring?
- Hvad er word2vec?
- Hvad word2vec gør?
- Hvorfor Word2vec?
- Word2vec Arkitektur
- Kontinuerlig pose med ord.
- Skip-Gram-model
- Forholdet mellem Word2vec og NLTK
- Aktivatorer og Word2Vec
- Hvad er Gensim?
- Kodeimplementering af word2vec ved hjælp af Gensim
Hvor bruges Word-indlejring?
Indlejring af ord hjælper med generering af funktioner, dokumentklynger, tekstklassificering og naturlige sprogbehandlingsopgaver. Lad os liste dem og drøfte hver af disse applikationer.
- Beregn lignende ord: Ordindlejring bruges til at foreslå lignende ord til det ord, der udsættes for forudsigelsesmodellen. Sammen med det antyder det også forskellige ord såvel som de mest almindelige ord.
- Opret en gruppe relaterede ord: Det bruges til semantisk gruppering, som grupperer ting af lignende karakteristik sammen og adskiller sig langt væk.
- Funktion til tekstklassificering: Tekst kortlægges i matrixer af vektorer, der tilføres modellen til træning såvel som forudsigelse. Tekstbaserede klassificeringsmodeller kan ikke trænes på strengen, så dette konverterer teksten til maskinoplærbar form. Yderligere dens funktioner ved opbygning af semantisk hjælp i tekstbaseret klassificering.
- Dokumentklyngedannelse er et andet program, hvor ordindlejring er meget udbredt
- Naturlig sprogbehandling: Der er mange applikationer, hvor indlejring af ord er nyttigt og vinder over funktionsekstraktionsfaser såsom dele af talemærkning, sentimental analyse og syntaktisk analyse.
Nu har vi fået noget kendskab til ordindlejring. Noget lys kastes også på forskellige modeller for at implementere ordindlejring. Hele denne tutorial er fokuseret på en af modellerne (word2vec).
Hvad er word2vec?
Word2vec er teknikken / modellen til at producere ordindlejring for bedre ordrepræsentation. Det fanger et stort antal præcise syntaktiske og semantiske ordforhold. Det er et lavt totrins neuralt netværk. Inden du går videre, se forskellen mellem lavt og dybt neuralt netværk:
Det lave neurale netværk består af det eneste skjulte lag mellem input og output, mens dybt neuralt netværk indeholder flere skjulte lag mellem input og output. Input udsættes for knudepunkter, mens det skjulte lag såvel som outputlaget indeholder neuroner.
Figur: Shallow vs. Deep learning
word2vec er et to-lags netværk, hvor der er input et skjult lag og output.
Word2vec blev udviklet af en gruppe forskere ledet af Tomas Mikolov hos Google. Word2vec er bedre og mere effektiv end den latente semantiske analysemodel.
Hvad word2vec gør?
Word2vec repræsenterer ord i vektorrumsrepræsentation. Ord er repræsenteret i form af vektorer, og placering sker på en sådan måde, at ensbetydende ord vises sammen og forskellige ord er placeret langt væk. Dette betegnes også som et semantisk forhold. Neurale netværk forstår ikke tekst i stedet for de forstår kun tal. Ordindlejring giver en måde at konvertere tekst til en numerisk vektor.
Word2vec rekonstruerer ordets sproglige kontekst. Før vi går videre, lad os forstå, hvad er sproglig sammenhæng? I almindelige livsscenarier, når vi taler eller skriver for at kommunikere, prøver andre mennesker at finde ud af, hvad der er objektivt med sætningen. For eksempel "Hvad er temperaturen i Indien", her er konteksten brugeren ønsker at vide "temperatur i Indien", som er kontekst. Kort sagt er hovedformålet med en sætning kontekst. Ord eller sætning omkring talt eller skriftligt sprog (afsløring) hjælper med at bestemme betydningen af sammenhæng. Word2vec lærer vektorrepræsentation af ord gennem sammenhængene.
Hvorfor Word2vec?
Før ordindlejring
Det er vigtigt at vide, hvilken fremgangsmåde der bruges inden indlejring af ord, og hvad er dens ulemper, og så vil vi gå over til emnet for, hvordan demeriter overvindes ved indlejring af ord ved hjælp af word2vec-tilgang. Endelig vil vi flytte, hvordan word2vec fungerer, fordi det er vigtigt at forstå, at det fungerer.
Tilgang til latent semantisk analyse
Dette er den tilgang, der blev brugt før ordindlejring. Det brugte begrebet "Bag of words", hvor ord er repræsenteret i form af kodede vektorer. Det er en sparsom vektorrepræsentation, hvor dimensionen er lig med størrelsen på ordforrådet. Hvis ordet forekommer i ordbogen, tælles det, ellers ikke. For at forstå mere, se venligst nedenstående program.
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())
Produktion:
[[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 det modul, der bruges til at gemme ordforrådet baseret på tilpasning af ordene i det. Dette importeres fra sklearn
- Lav objektet ved hjælp af klassen CountVectorizer.
- Skriv dataene i listen, der skal monteres i CountVectorizer.
- Data passer ind i objektet oprettet fra klassen CountVectorizer.
- Anvend en pose med ordtilgang for at tælle ord i dataene ved hjælp af ordforråd. Hvis ord eller token ikke er tilgængelig i ordforrådet, sættes en sådan indeksposition til nul.
- Variabel i linje 5, som er x, konverteres til en matrix (metode tilgængelig for x). Dette giver optællingen af hvert token i sætningen eller listen i linje 3.
- Dette viser de funktioner, der er en del af ordforrådet, når det monteres ved hjælp af dataene i linje 4.
I latent semantisk tilgang repræsenterer rækken unikke ord, mens kolonnen repræsenterer det antal gange, ordet vises i dokumentet. Det er en gengivelse af ord i form af dokumentmatrixen. Term-frekvens omvendt dokumentfrekvens (TFIDF) bruges til at tælle hyppigheden af ord i dokumentet, som er frekvensen af udtrykket i dokumentet / frekvensen af udtrykket i hele corpus.
Manglende metode til Bag of Words
- Det ignorerer ordets rækkefølge, for eksempel er dette dårligt = dårligt er dette.
- Det ignorerer konteksten af ord. Antag, at hvis jeg skriver sætningen "Han elskede bøger. Uddannelse findes bedst i bøger". Det ville skabe to vektorer, en til "Han elskede bøger" og en til "Uddannelse findes bedst i bøger." Det ville behandle dem begge ortogonale, hvilket gør dem uafhængige, men i virkeligheden er de beslægtede med hinanden
For at overvinde disse begrænsninger blev ordindlejring udviklet, og word2vec er en tilgang til at implementere sådan.
Hvordan fungerer Word2vec?
Word2vec lærer ord ved at forudsige dets omgivende kontekst. Lad os f.eks. Tage ordet "Han elsker fodbold."
Vi vil beregne word2vec for ordet: elsker.
Formode
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 bevæger sig over hvert ord i corpus. Syntaktisk såvel som det semantiske forhold mellem ord er kodet. Dette hjælper med at finde lignende ord og analogier.
Alle tilfældige træk ved ordet elsker beregnes. Disse funktioner ændres eller opdateres med hensyn til nabo- eller kontekstord ved hjælp af en metode til tilbageformering.
En anden måde at lære på er, at hvis sammenhængen med to ord er ens eller to ord har lignende funktioner, så er sådanne ord relateret.
Word2vec Arkitektur
Der er to arkitekturer, der bruges af word2vec
- Kontinuerlig pose med ord (CBOW)
- spring gram over
Før vi går videre, lad os diskutere, hvorfor disse arkitekturer eller modeller er vigtige set fra ordrepræsentation. Læring af ordrepræsentation er i det væsentlige uden opsyn, men mål / etiketter er nødvendige for at træne modellen. Skip-gram og CBOW konverterer ikke-overvåget repræsentation til overvåget form til modeluddannelse.
I CBOW forudsiges det aktuelle ord ved hjælp af vinduet i de omgivende kontekstvinduer. For eksempel, hvis w i-1 , w i-2 , w i + 1 , w i + 2 får ord eller kontekst, vil denne model give w i
Skip-Gram udfører modsat af CBOW, hvilket betyder, at det forudsiger den givne sekvens eller kontekst fra ordet. Du kan vende eksemplet for at forstå det. Hvis w i er givet, forudsiger dette konteksten eller w i-1 , w i-2 , w i + 1 , w i + 2.
Word2vec giver mulighed for at vælge mellem CBOW (kontinuerlig pose med ord) og skum-gram. Sådanne parametre leveres under træning af modellen. Man kan have mulighed for at bruge negativ sampling eller hierarkisk softmax-lag.
Kontinuerlig pose med ord.
Lad os tegne et simpelt diagram for at forstå den kontinuerlige pose med ordarkitektur.
Figur Kontinuerlig pose med Word Architecture
Lad os beregne ligningerne matematisk. Antag, at V er ordforrådets størrelse, og N er den skjulte lagstørrelse. Input er defineret som {x i-1 , x i-2, x i + 1, x i + 2 }. Vi opnår vægtmatrixen ved at multiplicere V * N. En anden matrix opnås ved at multiplicere inputvektoren med vægtmatricen. Dette kan også forstås ved følgende ligning.
h = xi t W
hvor xi t ∧ W er henholdsvis inputvektoren og vægtmatricen,
For at beregne matchningen mellem kontekst og det næste ord henvises til nedenstående ligning
u = forudsagt repræsentation * h
hvor forudsagt repræsentation opnås model∧h i ovenstående ligning.
Skip-Gram-model
Skip-Gram-tilgang bruges til at forudsige en sætning givet et inputord. For at forstå det bedre, lad os tegne diagrammet.
Figur Skip-Gram-model
Man kan behandle det som det modsatte af den kontinuerlige pose med ordmodel, hvor input er ordet og modellen giver konteksten eller sekvensen. Vi kan også konkludere, at målet tilføres input- og outputlaget replikeres flere gange for at imødekomme det valgte antal kontekstord. Fejlvektor fra hele outputlaget opsummeres for at justere vægte via en backpropagation-metode.
Hvilken model skal du vælge?
CBOW er flere gange hurtigere end skip gram og giver en bedre frekvens for hyppige ord, mens skip gram har brug for en lille mængde træningsdata og repræsenterer endda sjældne ord eller sætninger.
Forholdet mellem Word2vec og NLTK
NLTK er et naturligt sprogværktøjssæt. Det bruges til forbehandling af teksten. Man kan udføre forskellige operationer såsom dele af talemærkning, lemmatisering, stemming, stoppe fjernelse af ord, fjerne sjældne ord eller mindst brugte ord. Det hjælper med at rense teksten såvel som hjælper med at forberede funktionerne fra de effektive ord. På den anden måde bruges word2vec til semantisk (nært beslægtede emner sammen) og syntaktisk (sekvens) matching. Ved hjælp af word2vec kan man finde lignende ord, forskellige ord, dimensionel reduktion og mange andre. Et andet vigtigt træk ved word2vec er at konvertere den højere dimensionelle repræsentation af teksten til lavere dimensionelle af vektorer.
Hvor skal man bruge NLTK og Word2vec?
Hvis man skal udføre nogle generelle opgaver som nævnt ovenfor som tokenisering, POS-tagging og parsing, skal man gå til at bruge NLTK, mens man til at forudsige ord i henhold til en kontekst, emnemodellering eller dokumentlighed skal bruge Word2vec.
Forholdet mellem NLTK og Word2vec ved hjælp af kode
NLTK og Word2vec kan bruges sammen til at finde lignende ordrepræsentation eller syntaktisk matching. NLTK-værktøjssæt kan bruges til at indlæse mange pakker, der følger med NLTK, og modellen kan oprettes ved hjælp af word2vec. Det kan derefter testes på ordene i realtid. Lad os se kombinationen af begge i følgende kode. Inden du behandler yderligere, skal du se på de korpusser, som NLTK leverer. Du kan downloade ved hjælp af kommandoen
nltk(nltk.download('all'))
Figur Corpora downloadet ved hjælp af NLTK
Se skærmbilledet 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)
Produktion:
[('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 af kode
- nltk-biblioteket importeres, hvorfra du kan downloade abc corpus, som vi vil bruge i næste trin.
- Gensim importeres. Hvis Gensim ikke er installeret, skal du installere det ved hjælp af kommandoen "pip3 install gensim". Se nedenstående skærmbillede.
Figur Installation af Gensim ved hjælp af PIP
- importere corpus abc, som er downloadet ved hjælp af nltk.download ('abc').
- Videresend filerne til model word2vec, der importeres ved hjælp af Gensim som sætninger.
- Ordforråd gemmes i form af variablen.
- Modellen testes på eksempler på ordvidenskab, da disse filer er relateret til videnskab.
- Her forudsiges det lignende ord af "videnskab" af modellen.
Aktivatorer og Word2Vec
Aktiveringsfunktionen af neuronen definerer output fra den neuron givet et sæt input. Biologisk inspireret af en aktivitet i vores hjerner, hvor forskellige neuroner aktiveres ved hjælp af forskellige stimuli. Lad os forstå aktiveringsfunktionen gennem følgende diagram.
Figur Forståelse af aktiveringsfunktion
Her er x1, x2,… x4 knudepunktet for det neurale netværk.
w1, w2, w3 er vægten af noden,
∑ er summeringen af al vægt og node-værdi, der fungerer som aktiveringsfunktionen.
Hvorfor aktiveringsfunktion?
Hvis der ikke bruges nogen aktiveringsfunktion, ville output være lineær, men funktionaliteten for lineær funktion er begrænset. For at opnå kompleks funktionalitet som f.eks. Objektdetektering, billedklassificering, indtastning af tekst ved hjælp af stemme og mange andre ikke-lineære output er det nødvendigt, hvilket opnås ved hjælp af aktiveringsfunktion.
Sådan beregnes aktiveringslaget i ordindlejring (word2vec)
Softmax Layer (normaliseret eksponentiel funktion) er outputlagsfunktionen, der aktiverer eller affyrer hver node. En anden anvendt fremgangsmåde er hierarkisk softmax, hvor kompleksiteten beregnes af O (log 2 V), hvor softmax det er O (V) hvor V er ordforrådets størrelse. Forskellen mellem disse er reduktionen af kompleksiteten i hierarkisk softmax-lag. For at forstå dens (hierarkiske softmax) funktionalitet, se venligst eksemplet nedenfor:
Figur Hierarkisk softmax-trælignende struktur
Antag, at vi vil beregne sandsynligheden for at observere ordet kærlighed givet en bestemt sammenhæng. Strømmen fra roden til bladknuden vil være den første bevægelse til knude 2 og derefter til knude 5. Så hvis vi har haft ordforrådets størrelse 8, er der kun behov for tre beregninger. Så det tillader nedbrydning, beregning af sandsynligheden for et ord ( kærlighed ).
Hvilke andre indstillinger er tilgængelige bortset fra Hierarkisk Softmax?
Hvis der tales i generel forstand for ordindlejringsindstillinger, der er tilgængelige, er Differentieret Softmax, CNN-Softmax, Stikprøvetagning, Adaptiv Stikprøveudtagning, Støjkontrastiv skøn, Negativ prøvetagning, Selvnormalisering og sjælden normalisering.
Når vi taler specifikt om Word2vec, har vi negativ prøveudtagning til rådighed.
Negativ prøveudtagning er en måde at prøve træningsdataene på. Det ligner stokastisk gradientafstamning, men med en vis forskel. Negativ prøveudtagning ser kun efter negative træningseksempler. Det er baseret på støjkontrastiv estimering og stikprøver tilfældigt ord, ikke i sammenhængen. Det er en hurtig træningsmetode og vælger tilfældigt sammenhængen. Hvis det forudsagte ord vises i den tilfældigt valgte kontekst, er begge vektorerne tæt på hinanden.
Hvilken konklusion kan drages?
Aktivatorer skyder neuronerne ligesom vores neuroner fyres ved hjælp af de eksterne stimuli. Softmax-lag er en af outputlagsfunktionen, der affyrer neuroner i tilfælde af ordindlejring. I word2vec har vi indstillinger som hierarkisk softmax og negativ sampling. Ved hjælp af aktivatorer kan man konvertere den lineære funktion til den ikke-lineære funktion, og en kompleks maskinlæringsalgoritme kan implementeres ved hjælp af en sådan.
Hvad er Gensim?
Gensim er et emnemodelleringsværktøjssæt, der er implementeret i python. Emnemodellering opdager skjult struktur i tekstteksten. Word2vec importeres fra Gensim toolkit. Bemærk, at Gensim ikke kun giver en implementering af word2vec, men også Doc2vec og FastText, men denne tutorial handler om word2vec, så vi vil holde os til det aktuelle emne.
Implementering af word2vec ved hjælp af Gensim
Indtil nu har vi diskuteret, hvad word2vec er, dets forskellige arkitekturer, hvorfor der skiftes fra en pose med ord til word2vec, forholdet mellem word2vec og NLTK med live kode og aktiveringsfunktioner. I dette afsnit implementeres word2vec ved hjælp af Gensim
Trin 1) Dataindsamling
Det første trin til at implementere enhver maskinlæringsmodel eller implementere naturlig sprogbehandling er dataindsamling
Overhold dataene for at oprette 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 hvad vi forstår ud fra dataene
- Disse data indeholder tre ting tag, mønster og svar. Tagget er hensigten (hvad er diskussionsemnet).
- Dataene er i JSON-format.
- Et mønster er et spørgsmål, som brugerne vil stille til boten
- Svar er svaret, som chatbot vil give til det tilsvarende spørgsmål / mønster.
Trin 2) Forbehandling af data.
Det er meget vigtigt at behandle rådataene. Hvis der føres rensede data til maskinen, reagerer modellen mere præcist og lærer dataene mere effektivt.
Dette trin indebærer at fjerne stopord, stemming, unødvendige ord osv. Inden du går videre, er det vigtigt at indlæse data og konvertere dem til en dataramme. Se nedenstående kode for sådan
import jsonjson_file =’intents.json'with open('intents.json','r') as f:data = json.load(f)
Forklaring af KODE.
- Da data er i form af json-format, importeres json derfor
- Filen er gemt i variablen
- Filen er åben og indlæst i datavariabel
Nu importeres data, og det er tid til at konvertere data til dataramme. Se nedenstående kode for at se det næste trin
import pandas as pddf = pd.DataFrame(data)df['patterns'] = df['patterns'].apply(', '.join)
Forklaring af KODE
1. Data konverteres til dataramme ved hjælp af pandaer, der blev importeret ovenfor.
2. Det konverterer 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 stopord importeres ved hjælp af stop word-modul fra nltk toolkit
2. Alle ordene i teksten konverteres til små bogstaver ved hjælp af tilstanden og lambda-funktionen. Lambda-funktion er en anonym funktion.
3. Alle rækker af teksten i datarammen kontrolleres for strengespørgsmål, og disse filtreres.
4. Tegn som tal eller prik fjernes ved hjælp af et regulært udtryk.
5. Cifre fjernes fra teksten.
6. Stopord fjernes på dette tidspunkt.
7. Ord filtreres nu, og forskellige former for det samme ord fjernes ved hjælp af lemmatisering. Med disse er vi færdige med databehandlingen.
Produktion:
, 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
Trin 3) Opbygning af neuralt netværk ved hjælp af word2vec
Nu er det tid til at opbygge en model ved hjælp af Gensim-modul word2vec. Vi er nødt til at importere word2vec fra Gensim. Lad os gøre dette, og så bygger vi, og i sidste fase kontrollerer vi modellen på realtidsdata.
from gensim.models import Word2Vec
Nu kan vi med succes bygge modellen ved hjælp af Word2Vec. Se den næste linje kode for at lære, hvordan du opretter modellen ved hjælp af Word2Vec. Teksten leveres til modellen i form af en liste, så vi konverterer teksten fra dataramme til liste ved hjælp af nedenstående kode
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 kode
1. Oprettet den større_liste, hvor den indre liste tilføjes. Dette er det format, der føres til modellen Word2Vec.
2. Loop implementeres, og hver indgang i mønsterkolonnen i datarammen gentages.
3. Hvert element i søjlemønstrene opdeles og gemmes i den indre liste li
4. den indvendige liste er tilføjet med den ydre liste.
5. Denne liste leveres til Word2Vec-modellen. Lad os forstå nogle af de parametre, der er angivet her
Min_tælling: Det ignorerer alle ord med en samlet frekvens lavere end dette.
Størrelse: Det fortæller dimensionaliteten af ordvektorerne.
Arbejdstagere: Dette er trådene til at træne modellen
Der er også andre muligheder, og nogle vigtige forklares nedenfor
Vindue: Maksimal afstand mellem det aktuelle og forudsagte ord inden for en sætning.
Sg: Det er en træningsalgoritme og 1 for skip-gram og 0 for en kontinuerlig pose med ord. Vi har diskuteret disse detaljeret ovenfor.
Hs: Hvis dette er 1, bruger vi hierarkisk softmax til træning, og hvis 0, anvendes negativ prøveudtagning.
Alpha: Indledende læringsrate
Lad os vise den endelige kode 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)
Trin 4) Modelbesparelse
Model kan gemmes i form af skraldespand og modelform. Bin er det binære format. Se nedenstående linjer for at gemme modellen
model.save("word2vec.model")model.save("model.bin")
Forklaring til ovenstående kode
1. Model gemmes i form af en .modelfil.
2. modellen gemmes i form af .bin-fil
Vi vil bruge denne model til at udføre test i realtid som lignende ord, forskellige ord og mest almindelige ord.
Trin 5) Indlæser model og udfører test i realtid
Modellen indlæses ved hjælp af nedenstående kode
model = Word2Vec.load('model.bin')
Hvis du vil udskrive ordforrådet fra det, gøres det ved hjælp af nedenstående kommando
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']
Trin 6) Mest lignende ord kontrol
Lad os implementere tingene praktisk
similar_words = model.most_similar('thanks')print(similar_words)
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)]
Trin 7) Matcher ikke ord fra leverede ord
dissimlar_words = model.doesnt_match('See you later, thanks for visiting'.split())print(dissimlar_words)
Vi har leveret ordene 'Vi ses senere, tak for besøget'. Dette vil udskrive de mest forskellige ord fra disse ord. Lad os køre denne kode og finde resultatet
Resultatet efter udførelse af ovenstående kode.
Thanks
Trin 8) Find ligheden mellem to ord
Dette vil fortælle resultatet i sandsynligheden for lighed mellem to ord. Se nedenstående kode, hvordan du udfører dette afsnit.
similarity_two_words = model.similarity('please','see')print("Please provide the similarity between these two words:")print(similarity_two_words)
Resultatet af ovenstående kode er som nedenfor
0,13706
Du kan yderligere finde lignende ord ved at udføre nedenstående kode
similar = model.similar_by_word('kind')print(similar)
Output af ovenstående 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)]
Konklusion
- Ordindlejring er en type ordrepræsentation, der gør det muligt at forstå ord med lignende betydning af maskinlæringsalgoritmer
- Ordindlejring bruges til at beregne lignende ord, Opret en gruppe relaterede ord, Funktion til tekstklassificering, Dokumentklyngning, Behandling af naturligt sprog
- Word2vec er en lav to-lags neuralt netværksmodel til at producere ordindlejring for bedre ordrepræsentation
- Word2vec repræsenterer ord i vektorrumsrepræsentation. Ord er repræsenteret i form af vektorer, og placeringen sker på en sådan måde, at ensbetydende ord vises sammen og forskellige ord er placeret langt væk
- Word2vec brugte 2 arkitekturer Kontinuerlig pose med ord (CBOW) og spring gram
- CBOW er flere gange hurtigere end skip gram og giver en bedre frekvens for hyppige ord, mens skip gram har brug for en lille mængde træningsdata og repræsenterer endda sjældne ord eller sætninger.
- NLTK og word2vec kan bruges sammen til at skabe kraftige applikationer
- Aktiveringsfunktionen af neuronen definerer output fra den neuron givet et sæt input. I word2vec. Softmax Layer (normaliseret eksponentiel funktion) er outputlagsfunktionen, der aktiverer eller affyrer hver node. Word2vec har også negativ prøvetagning til rådighed
- Gensim er et værktøjssæt til modellering af emner, der er implementeret i python