Tutorial för inbäddning av ord: word2vec med Gensim (EXEMPEL)

Innehållsförteckning:

Anonim

Vad är ordbäddning?

Word Embedding är en typ av ordrepresentation som gör det möjligt att förstå ord med liknande betydelse av maskininlärningsalgoritmer. Tekniskt sett är det en kartläggning av ord till vektorer med verkliga tal med hjälp av det neurala nätverket, den probabilistiska modellen eller dimensionreduceringen i ordets sam-förekomstmatris. Det är språkmodellering och teknik för inlärning av funktioner. Ordinbäddning är ett sätt att utföra kartläggning med hjälp av ett neuralt nätverk. Det finns olika ordinbäddningsmodeller tillgängliga som word2vec (Google), Glove (Stanford) och snabbaste (Facebook).

Ordinbäddning kallas också för distribuerad semantisk modell eller distribuerad representerad eller semantisk vektorrymd eller vektorrymdsmodell. När du läser dessa namn stöter du på ordet semantisk vilket betyder att kategorisera liknande ord tillsammans. Till exempel bör frukter som äpple, mango, banan placeras nära medan böckerna kommer att vara långt ifrån dessa ord. I bredare bemärkelse kommer ordinbäddning att skapa fruktvektorn som kommer att placeras långt ifrån vektorrepresentation av böcker.

I den här handledningen lär du dig

  • Vad är ordbäddning?
  • Var används Wordbäddning?
  • Vad är word2vec?
  • Vad gör word2vec?
  • Varför Word2vec?
  • Word2vec-arkitektur
  • Kontinuerlig påse med ord.
  • Skip-Gram-modell
  • Förhållandet mellan Word2vec och NLTK
  • Aktivatorer och Word2Vec
  • Vad är Gensim?
  • Kodimplementering av word2vec med Gensim

Var används Wordbäddning?

Word-inbäddning hjälper till att skapa funktioner, dokumentkluster, textklassificering och naturliga språkuppgifter. Låt oss lista dem och diskutera var och en av dessa applikationer.

  • Beräkna liknande ord: Ordbäddning används för att föreslå liknande ord som ordet som förutsätts för förutsägelsemodellen. Tillsammans med det antyder det också olika ord, liksom de vanligaste orden.
  • Skapa en grupp relaterade ord: Den används för semantisk gruppering som grupperar saker av liknande karaktäristika och skiljer sig långt borta.
  • Funktion för textklassificering: Text mappas i matriser av vektorer som matas till modellen för träning såväl som förutsägelse. Textbaserade klassificeringsmodeller kan inte utbildas på strängen, så detta konverterar texten till maskinutbildningsbar form. Vidare dess funktioner för att bygga semantisk hjälp i textbaserad klassificering.
  • Dokumentkluster är ett annat program där ordinbäddning används i stor utsträckning
  • Behandling av naturligt språk: Det finns många applikationer där inbäddning av ord är användbart och vinner över funktionsextraktionsfaser som delar av talmärkning, sentimental analys och syntaktisk analys.

    Nu har vi fått lite kunskap om ordinbäddning. Något ljus kastas också på olika modeller för att implementera ordinbäddning. Hela denna handledning fokuserar på en av modellerna (word2vec).

Vad är word2vec?

Word2vec är tekniken / modellen för att producera ordinbäddning för bättre ordrepresentation. Det fångar ett stort antal exakta syntaktiska och semantiska ordförhållanden. Det är ett grunt tvåskiktigt neuralt nätverk. Innan du går vidare, se skillnaden mellan grunt och djupt neurala nätverk:

Det grunda neurala nätverket består av det enda dolda lagret mellan inmatning och utgång medan djupt neurala nätverk innehåller flera dolda lager mellan inmatning och utgång. Ingångar utsätts för noder medan det dolda lagret, såväl som det utgående lagret, innehåller nervceller.

Figur: Grunt kontra djupt lärande

word2vec är ett tvåskiktsnätverk där det finns ett dolt lager och utdata.

Word2vec utvecklades av en grupp forskare som leds av Tomas Mikolov på Google. Word2vec är bättre och effektivare än den latenta semantiska analysmodellen.

Vad gör word2vec?

Word2vec representerar ord i vektorrymdrepresentation. Ord representeras i form av vektorer och placering görs på ett sådant sätt att ord som liknar betydelse visas tillsammans och olika ord ligger långt borta. Detta kallas också som en semantisk relation. Neurala nätverk förstår inte text istället de förstår bara siffror. Word-inbäddning ger ett sätt att konvertera text till en numerisk vektor.

Word2vec rekonstruerar ordens språkliga sammanhang. Innan vi går vidare, låt oss förstå, vad är språkligt sammanhang? I det allmänna livsscenariot när vi pratar eller skriver för att kommunicera, försöker andra människor ta reda på vad som är meningen med meningen. Till exempel "Vad är temperaturen i Indien", här är sammanhanget användaren vill veta "temperatur i Indien" som är sammanhang. Kort sagt, huvudmeningen med en mening är sammanhang. Ord eller mening kring talat eller skrivet språk (avslöjande) hjälper till att bestämma innebörden av sammanhanget. Word2vec lär sig vektorrepresentation av ord genom sammanhanget.

Varför Word2vec?

Innan ordinbäddning

Det är viktigt att veta vilket tillvägagångssätt som används före inbäddning av ord och vad som är dess nackdelar och sedan kommer vi att gå till ämnet om hur nackdelar övervinns genom inbäddning av ord med hjälp av word2vec-metoden. Slutligen kommer vi att flytta hur word2vec fungerar eftersom det är viktigt att förstå att det fungerar.

Tillvägagångssätt för latent semantisk analys

Detta är tillvägagångssättet som användes före ordinbäddning. Det använde begreppet påse med ord där ord representeras i form av kodade vektorer. Det är en gles vektorrepresentation där dimensionen är lika stor som ordförrådet. Om ordet förekommer i ordboken räknas det, annars inte. För att förstå mer, se nedanstå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']

Kodförklaring

  1. CountVectorizer är den modul som används för att lagra ordförrådet baserat på att passa orden i det. Detta importeras från sklearn
  2. Gör objektet med klassen CountVectorizer.
  3. Skriv data i listan som ska monteras i CountVectorizer.
  4. Data passar in i objektet som skapats från klassen CountVectorizer.
  5. Använd en påse med ordmetod för att räkna ord i data med hjälp av ordförråd. Om ord eller token inte är tillgängligt i ordförrådet, ställs sådan indexposition till noll.
  6. Variabel i rad 5 som är x konverteras till en matris (metod tillgänglig för x). Detta ger räkningen för varje token i meningen eller listan i rad 3.
  7. Detta visar de funktioner som ingår i ordförrådet när det monteras med hjälp av data i rad 4.

I latent semantisk strategi representerar raden unika ord medan kolumnen representerar hur många gånger ordet visas i dokumentet. Det är en representation av ord i form av dokumentmatrisen. Term-frekvens invers dokumentfrekvens (TFIDF) används för att räkna frekvensen av ord i dokumentet som är frekvensen för termen i dokumentet / frekvensen för termen i hela corpus.

Brist på Bag of Words-metoden

  • Det ignorerar ordets ordning, till exempel, detta är dåligt = dåligt är det här.
  • Det ignorerar sammanhanget med ord. Antag att om jag skriver meningen "Han älskade böcker. Utbildning finns bäst i böcker". Det skulle skapa två vektorer, en för "Han älskade böcker" och en för "Utbildning finns bäst i böcker." Det skulle behandla dem båda ortogonala vilket gör dem oberoende, men i verkligheten är de släkt med varandra

För att övervinna dessa begränsningar utvecklades ordinbäddning och word2vec är ett sätt att implementera sådana.

Hur fungerar Word2vec?

Word2vec lär sig ord genom att förutsäga det omgivande sammanhanget. Låt oss till exempel ta ordet "Han älskar fotboll."

Vi vill beräkna word2vec för ordet: älskar.

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 älskar rör sig över varje ord i corpus. Såväl syntaktisk som semantisk relation mellan ord kodas. Detta hjälper till att hitta liknande ord och analogier.

Alla slumpmässiga funktioner i ordet älskar beräknas. Dessa funktioner ändras eller uppdateras när det gäller granne- eller sammanhangsord med hjälp av en förökningsmetod för ryggen.

Ett annat sätt att lära sig är att om sammanhanget med två ord liknar eller två ord har liknande funktioner, så är sådana ord relaterade.

Word2vec-arkitektur

Det finns två arkitekturer som används av word2vec

  1. Kontinuerlig påse med ord (CBOW)
  2. hoppa över gram

Innan vi går vidare, låt oss diskutera varför dessa arkitekturer eller modeller är viktiga ur ordrepresentationssynpunkt. Att lära sig ordrepresentation är i huvudsak utan tillsyn, men mål / etiketter behövs för att träna modellen. Skip-gram och CBOW konverterar oövervakad representation till övervakad form för modellutbildning.

I CBOW förutses det aktuella ordet med hjälp av fönstret i omgivande sammanhangsfönster. Till exempel, om w i-1 , w i-2 , w i + 1 , w i + 2 ges ord eller sammanhang, kommer denna modell att ge w i

Skip-Gram utför motsatsen till CBOW vilket innebär att den förutsäger den givna sekvensen eller kontexten från ordet. Du kan vända exemplet för att förstå det. Om w i ges kommer detta att förutsäga sammanhanget eller w i-1 , w i-2 , w i + 1 , w i + 2.

Word2vec erbjuder ett alternativ att välja mellan CBOW (kontinuerlig påse med ord) och skum-gram. Sådana parametrar tillhandahålls under träning av modellen. Man kan ha möjlighet att använda negativt sampling eller hierarkiskt softmax-lager.

Kontinuerlig påse med ord.

Låt oss rita ett enkelt diagram för att förstå den kontinuerliga påsen med ordarkitektur.

Figur kontinuerlig påse med Word Architecture

Låt oss beräkna ekvationerna matematiskt. Antag att V är vokabulärstorleken och N är den dolda lagerstorleken. Ingång definieras som {x i-1 , x i-2, x i + 1, x i + 2 }. Vi får viktmatrisen genom att multiplicera V * N. En annan matris erhålls genom att multiplicera inmatningsvektorn med viktmatrisen. Detta kan också förstås av följande ekvation.

h = xi t W

där xi t ∧ W är inmatningsvektorn respektive viktmatrisen,

För att beräkna matchningen mellan sammanhang och nästa ord, se nedanstående ekvation

u = förutsagt representation * h

där förutsagd framställning erhålls modell∧h i ovanstående ekvation.

Skip-Gram-modell

Skip-Gram-metoden används för att förutsäga en mening med ett inmatningsord. För att förstå det bättre, låt oss rita diagrammet.

Figur Skip-Gram-modell

Man kan behandla det som baksidan av den kontinuerliga påsen med ordmodell där ingången är ordet och modellen ger sammanhanget eller sekvensen. Vi kan också dra slutsatsen att målet matas till ingångs- och utmatningsskiktet replikeras flera gånger för att rymma det valda antalet sammanhangsord. Felvektor från hela utlagret summeras för att justera vikter via en backpropagationsmetod.

Vilken modell ska man välja?

CBOW är flera gånger snabbare än skip gram och ger bättre frekvens för frekventa ord medan skip gram behöver en liten mängd träningsdata och representerar till och med sällsynta ord eller fraser.

Förhållandet mellan Word2vec och NLTK

NLTK är ett naturligt språkverktygssats. Den används för förbehandling av texten. Man kan göra olika operationer som delar av talmärkning, lemmatisering, stemming, stoppa borttagning av ord, ta bort sällsynta ord eller minst använda ord. Det hjälper till att rengöra texten och hjälper till att förbereda funktionerna från de effektiva orden. På det andra sättet används word2vec för semantisk (nära besläktade objekt tillsammans) och syntaktisk (sekvens) matchning. Med hjälp av word2vec kan man hitta liknande ord, olika ord, dimensionell reduktion och många andra. En annan viktig egenskap hos word2vec är att konvertera den högre dimensionella representationen av texten till en lägre dimension av vektorer.

Var ska man använda NLTK och Word2vec?

Om man måste utföra några allmänna uppgifter som nämnts ovan som tokenisering, POS-taggning och tolkning måste man gå för att använda NLTK medan man förutsäger ord enligt något sammanhang, ämnesmodellering eller dokumentlikhet måste man använda Word2vec.

Relationen mellan NLTK och Word2vec med hjälp av kod

NLTK och Word2vec kan användas tillsammans för att hitta liknande ordrepresentation eller syntaktisk matchning. NLTK-verktygslåda kan användas för att ladda många paket som kommer med NLTK och modell kan skapas med word2vec. Det kan sedan testas på ord i realtid. Låt oss se kombinationen av båda i följande kod. Innan du bearbetar vidare, ta en titt på korporna som NLTK tillhandahåller. Du kan ladda ner med kommandot

nltk(nltk.download('all'))

Figur Corpora hämtades med NLTK

Se skärmdumpen för 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)]

Förklaring av kod

  1. nltk-biblioteket importeras, varifrån du kan ladda ner abc corpus som vi kommer att använda i nästa steg.
  2. Gensim importeras. Om Gensim inte är installerat, vänligen installera det med kommandot "pip3 install gensim". Se nedanstående skärmdump.

Figur Installera Gensim med PIP

  1. importera corpus abc som har laddats ner med nltk.download ('abc').
  2. Skicka filerna till modellen word2vec som importeras med Gensim som meningar.
  3. Ordförråd lagras i form av variabeln.
  4. Modellen testas på exempelordsvetenskap eftersom dessa filer är relaterade till vetenskap.
  5. Här förutses det liknande ordet "vetenskap" av modellen.

Aktivatorer och Word2Vec

Aktiveringsfunktionen för neuron definierar utgången från det neuronet givet en uppsättning ingångar. Biologiskt inspirerad av en aktivitet i hjärnan där olika nervceller aktiveras med olika stimuli. Låt oss förstå aktiveringsfunktionen genom följande diagram.

Figur Förstå aktiveringsfunktionen

Här x1, x2, ... x4 är det neurala nätverkets nod.

w1, w2, w3 är nodens vikt,

∑ är summeringen av alla vikt- och nodvärden som fungerar som aktiveringsfunktionen.

Varför aktiveringsfunktion?

Om ingen aktiveringsfunktion används skulle utdata vara linjära men funktionaliteten för linjär funktion är begränsad. För att uppnå komplex funktionalitet som objektdetektering, bildklassificering, skrivning av text med röst och många andra icke-linjära utgångar behövs vilket uppnås med aktiveringsfunktion.

Hur beräknas aktiveringslagret i ordet inbäddning (word2vec)

Softmax Layer (normaliserad exponentiell funktion) är utgångslagerfunktionen som aktiverar eller avfyrar varje nod. Ett annat tillvägagångssätt som används är hierarkisk softmax där komplexiteten beräknas av O (log 2 V) där softmax det är O (V) där V är vokabulärstorleken. Skillnaden mellan dessa är minskningen av komplexiteten i hierarkiskt softmax-lager. För att förstå dess (hierarkiska softmax) funktionalitet, se nedanstående exempel:

Figur Hierarkisk softmax trädliknande struktur

Antag att vi vill beräkna sannolikheten för att observera ordet kärlek med tanke på ett visst sammanhang. Flödet från roten till bladnoden blir det första steget till nod 2 och sedan till nod 5. Så om vi har haft ordförrådsstorleken 8 behövs bara tre beräkningar. Så det tillåter sönderdelning, beräkning av sannolikheten för ett ord ( kärlek ).

Vilka andra alternativ finns tillgängliga än Hierarchical Softmax?

Om man talar i allmän bemärkelse för tillgängliga alternativ för ordinbäddning är Differentierade Softmax, CNN-Softmax, Viktprovtagning, Adaptiv viktprovtagning, Buller kontrastiva uppskattningar, Negativ provtagning, Självnormalisering och sällsynt normalisering.

När vi talar specifikt om Word2vec har vi negativa provtagningar tillgängliga.

Negativ provtagning är ett sätt att prova träningsdata. Det är ungefär som stokastisk lutning, men med viss skillnad. Negativ provtagning ser bara efter negativa träningsexempel. Den är baserad på bullerkontrastuppskattning och slumpmässigt samplar ord, inte i sammanhanget. Det är en snabb träningsmetod och väljer sammanhanget slumpmässigt. Om det förutsagda ordet visas i det slumpmässigt valda sammanhanget är båda vektorerna nära varandra.

Vilken slutsats kan man dra?

Aktivatorer avfyrar nervcellerna precis som våra nervceller avfyras med hjälp av yttre stimuli. Softmax-skiktet är en av funktionerna för utgående lager som avfyrar nervcellerna vid ordinbäddning. I word2vec har vi alternativ som hierarkisk softmax och negativ sampling. Med hjälp av aktivatorer kan man konvertera den linjära funktionen till den icke-linjära funktionen, och en komplex maskininlärningsalgoritm kan implementeras med en sådan.

Vad är Gensim?

Gensim är ett verktygsmodell för ämnesmodellering som implementeras i python. Ämnesmodellering upptäcker dold struktur i textens kropp. Word2vec importeras från Gensim verktygslåda. Observera att Gensim inte bara tillhandahåller en implementering av word2vec utan också Doc2vec och FastText, men denna handledning handlar om word2vec så vi kommer att hålla fast vid det aktuella ämnet.

Implementering av word2vec med hjälp av Gensim

Hittills har vi diskuterat vad word2vec är, dess olika arkitekturer, varför det finns en övergång från en påse med ord till word2vec, förhållandet mellan word2vec och NLTK med live-kod och aktiveringsfunktioner. I det här avsnittet implementeras word2vec med Gensim

Steg 1) Datainsamling

Det första steget för att implementera någon maskininlärningsmodell eller implementera naturlig språkbehandling är datainsamling

Observera informationen för att skapa 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"]}]

Här är vad vi förstår av data

  • Dessa uppgifter innehåller tre saker, tagg, mönster och svar. Taggen är avsikten (vad är diskussionsämnet).
  • Uppgifterna är i JSON-format.
  • Ett mönster är en fråga som användarna kommer att ställa till botten
  • Svar är svaret som chatbot kommer att ge till motsvarande fråga / mönster.

Steg 2) Förbehandling av data.

Det är mycket viktigt att bearbeta rådata. Om rengjorda data matas till maskinen svarar modellen mer exakt och lär sig informationen mer effektivt.

Detta steg innebär att ta bort stoppord, stemming, onödiga ord etc. Innan du går vidare är det viktigt att ladda in data och konvertera det till en dataram. Se nedanstående kod för sådana

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

Förklaring av KOD.

  1. Eftersom data är i form av json-format importeras därför json
  2. Filen lagras i variabeln
  3. Filen är öppen och laddad i datavariabel

Nu importeras data och det är dags att konvertera data till dataram. Se koden nedan för att se nästa steg

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

Förklaring av KOD

1. Data konverteras till dataram med pandor som importerades ovan.

2. Det kommer att konvertera listan i kolumnmönster till sträng.

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

Kodförklaring

1. Engelska stoppord importeras med hjälp av stoppordmodulen från nltk toolkit

2. Alla ord i texten konverteras till gemener med hjälp av för villkor och lambda-funktion. Lambda-funktionen är en anonym funktion.

3. Alla rader i texten i dataramen kontrolleras med avseende på strängpunktioner och dessa filtreras.

4. Tecken som siffror eller punkter tas bort med ett vanligt uttryck.

5. Siffror tas bort från texten.

6. Stoppord tas bort i detta skede.

7. Ord filtreras nu och olika former av samma ord tas bort med hjälp av lemmatisering. Med dessa har vi slutfört databearbetningen.

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

Steg 3) Neurala nätverksbyggande med word2vec

Nu är det dags att bygga en modell med Gensim-modulen word2vec. Vi måste importera word2vec från Gensim. Låt oss göra detta, och sedan kommer vi att bygga och i slutskedet kommer vi att kontrollera modellen på realtidsdata.

from gensim.models import Word2Vec

Nu kan vi framgångsrikt bygga modellen med Word2Vec. Se nästa kodrad för att lära dig hur du skapar modellen med Word2Vec. Text tillhandahålls till modellen i form av en lista så vi konverterar texten från dataram till lista med hjälp av nedanstående kod

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)

Förklaringar till koden

1. Skapade den större_listan där den inre listan läggs till. Detta är formatet som matas till modellen Word2Vec.

2. Loop implementeras och varje post i mönsterkolumnen i dataramen upprepas.

3. Varje element i kolumnmönstren delas upp och lagras i den inre listan li

4. den inre listan läggs till med den yttre listan.

5. Denna lista tillhandahålls till Word2Vec-modellen. Låt oss förstå några av de parametrar som tillhandahålls här

Min_count: Det kommer att ignorera alla ord med en total frekvens lägre än detta.

Storlek: Det berättar dimensionerna för ordvektorerna.

Arbetare: Det här är trådarna för att träna modellen

Det finns också andra alternativ tillgängliga, och några viktiga förklaras nedan

Fönster: Maximalt avstånd mellan det aktuella och det förutspådda ordet i en mening.

Sg: Det är en träningsalgoritm och 1 för skip-gram och 0 för en kontinuerlig påse med ord. Vi har diskuterat dessa i detaljer ovan.

Hs: Om detta är 1 använder vi hierarkisk softmax för träning och om 0 används negativt provtagning.

Alpha: Initial inlärningshastighet

Låt oss visa den slutliga koden nedan

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

Steg 4) Spara modell

Modellen kan sparas i form av papperskorg och modellform. Bin är det binära formatet. Se nedanstående rader för att spara modellen

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

Förklaring till ovanstående kod

1. Modellen sparas i form av en .modellfil.

2. modellen sparas i form av .bin-fil

Vi kommer att använda den här modellen för att testa i realtid, till exempel liknande ord, olika ord och vanligaste ord.

Steg 5) Ladda modell och testa i realtid

Modellen laddas med nedanstående kod

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

Om du vill skriva ut ordförrådet från det görs med kommandot nedan

vocab = lista (modell.wv.vocab)

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

Steg 6) Mest liknande ord kontroll

Låt oss implementera sakerna praktiskt

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

Steg 7) Matchar inte ord från angivna ord

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

Vi har levererat orden " Vi ses senare, tack för besöket". Detta kommer att skriva ut de mest olika orden från dessa ord. Låt oss köra den här koden och hitta resultatet

Resultatet efter körning av ovanstående kod.

Thanks

Steg 8) Hitta likheten mellan två ord

Detta kommer att ge resultat i sannolikhet för likhet mellan två ord. Se nedanstående kod för hur du kör detta avsnitt.

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

Resultatet av ovanstående kod är som nedan

0,13706

Du kan hitta liknande ord genom att köra nedanstående kod

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

Utmatning av ovanstående kod

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

Slutsats

  • Word Embedding är en typ av ordrepresentation som gör det möjligt att förstå ord med liknande betydelse av maskininlärningsalgoritmer
  • Wordbäddning används för att beräkna liknande ord, skapa en grupp relaterade ord, funktion för textklassificering, dokumentkluster, bearbetning av naturligt språk
  • Word2vec är en ytlig tvåskikts neural nätverksmodell för att producera ordinbäddning för bättre ordrepresentation
  • Word2vec representerar ord i vektorrymdrepresentation. Ord representeras i form av vektorer och placering görs på ett sådant sätt att ord som liknar betydelse visas tillsammans och olika ord ligger långt borta
  • Word2vec använde två arkitekturer Kontinuerlig påse med ord (CBOW) och hoppa över gram
  • CBOW är flera gånger snabbare än skip gram och ger bättre frekvens för frekventa ord medan skip gram behöver en liten mängd träningsdata och representerar till och med sällsynta ord eller fraser.
  • NLTK och word2vec kan användas tillsammans för att skapa kraftfulla applikationer
  • Aktiveringsfunktionen för neuron definierar utgången från det neuronet givet en uppsättning ingångar. I word2vec. Softmax Layer (normaliserad exponentiell funktion) är utgångslagerfunktionen som aktiverar eller avfyrar varje nod. Word2vec har också ett negativt prov
  • Gensim är ett verktygsmodell för ämnesmodellering som implementeras i python