Word Embedding og Word2Vec Model med Eksempel

Hvad er Word Embedding?

Indlejring af ord er en ordrepræsentationstype, der gør det muligt for maskinlæringsalgoritmer at forstå ord med lignende betydninger. Det er en sprogmodellerings- og funktionsindlæringsteknik til at kortlægge ord i vektorer af reelle tal ved hjælp af neurale netværk, sandsynlighedsmodeller eller dimensionsreduktion på ordsammenkomstmatricen. Nogle ordindlejringsmodeller er Word2vec (Google), Glove (Stanford) og hurtigste (Facebook).

Word Embedding kaldes også som distribueret semantisk model eller distribueret repræsenteret eller semantisk vektorrum eller vektorrumsmodel. Når du læser disse navne, støder du på ordet semantisk, hvilket betyder at kategorisere lignende ord sammen. For eksempel bør frugter som æble, mango, banan placeres tæt på, mens bøger vil være langt væk fra disse ord. I en bredere forstand vil ordindlejring skabe vektoren af ​​frugter, som vil blive placeret langt væk fra vektorrepræsentation af bøger.

Hvor bruges Word Embedding?

Ordindlejring hjælper med generering af funktioner, dokumentklynger, tekstklassificering og naturligt sprogbehandlingsopgaver. Lad os liste dem op og have nogle diskussioner om hver af disse applikationer.

  • Beregn lignende ord: Ordindlejring bruges til at foreslå ord, der ligner det ord, der udsættes for forudsigelsesmodellen. Sammen med det foreslår det også uens ord, såvel som de mest almindelige ord.
  • Opret en gruppe af relaterede ord: Det bruges til semantisk gruppering, som vil gruppere ting med lignende karakteristika sammen og uens langt væk.
  • Funktion til tekstklassificering: Tekst er kortlagt i arrays af vektorer, som føres til modellen til træning såvel som forudsigelse. Tekstbaserede klassificeringsmodeller kan ikke trænes på strengen, så dette vil konvertere teksten til maskintræningsbar form. Yderligere dens funktioner i at bygge semantisk hjælp til tekstbaseret klassificering.
  • Dokumentklynger: er et andet program, hvor Word Embedding Word2vec er meget udbredt
  • Naturlig sprogbehandling: Der er mange applikationer, hvor ordindlejring er nyttigt og vinder over funktionsudtrækningsfaser såsom dele af talemærkning, sentimental analyse og syntaktisk analyse. Nu har vi fået lidt viden om ordindlejring. Der kastes også lidt lys over forskellige modeller for at implementere ordindlejring. Hele denne Word Embedding tutorial er fokuseret på en af ​​modellerne (Word2vec).

Hvad er Word2vec?

Word2vec er en teknik/model til at producere ordindlejring for bedre ordrepræsentation. Det er en naturlig sprogbehandlingsmetode, der fanger et stort antal præcise syntaktiske og semantiske ordrelationer. Det er et lavvandet to-lags neuralt netværk, der kan registrere synonyme ord og foreslå yderligere ord til delsætninger, når det først er trænet.

Før du går videre i denne Word2vec-vejledning, skal du se forskellen mellem lavvandet og dybt neuralt netværk som vist i nedenstående Word-indlejringseksempeldiagram:

Det overfladiske neurale netværk består af det eneste skjulte lag mellem input og output, mens dybe neurale netværk indeholder flere skjulte lag mellem input og output. Input udsættes for noder, mens det skjulte lag, såvel som outputlaget, indeholder neuroner.

Overfladisk vs. dyb læring
Overfladisk vs. dyb læring

Word2vec er et to-lags netværk, hvor der er input ét skjult lag og output.

Word2vec er udviklet af en gruppe forskere ledet af Tomas Mikolov hos Google. Word2vec er bedre og mere effektiv den latente semantiske analysemodel.

Hvorfor Word2vec?

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 lignende betydningsord optræder sammen, og uens ord er placeret langt væk. Dette betegnes også som et semantisk forhold. Neurale netværk forstår ikke tekst i stedet forstår de kun tal. Word Embedding giver en måde at konvertere tekst til en numerisk vektor.

Word2vec rekonstruerer ords sproglige kontekst. Inden vi går videre, lad os forstå, hvad er sproglig kontekst? I et generelt livsscenarie, når vi taler eller skriver for at kommunikere, forsøger andre mennesker at finde ud af, hvad der er formålet med sætningen. For eksempel, "Hvad er temperaturen i Indien", her er konteksten, at brugeren ønsker at vide "temperaturen i Indien", som er kontekst. Kort sagt er hovedformålet med en sætning kontekst. Ord eller sætning omkring talt eller skrevet sprog (afsløring) hjælper med at bestemme betydningen af ​​kontekst. Word2vec lærer vektorrepræsentation af ord gennem sammenhængene.

Hvad gør Word2vec?

Før Word Embedding

Det er vigtigt at vide, hvilken tilgang der bruges før indlejring af ord, og hvad er dens ulemper, og så vil vi gå over til emnet om, hvordan ulemper overvindes af Word-indlejring ved hjælp af Word2vec-tilgangen. Til sidst vil vi flytte, hvordan Word2vec fungerer, fordi det er vigtigt at forstå, at det virker.

Tilgang til latent semantisk analyse

Dette er den tilgang, der blev brugt før ordindlejring. Det brugte konceptet 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 af ​​ordforråd. Hvis ordet forekommer i ordbogen, tælles det, ellers ikke. For at forstå mere, se venligst nedenstående program.

Word2vec eksempel

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

Output:

[[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 modulet, som bruges til at gemme ordforrådet baseret på at passe ordene i det. Dette er importeret fra sklearn.
  2. Lav objektet ved hjælp af klassen CountVectorizer.
  3. Skriv dataene i listen, som skal monteres i CountVectorizer.
  4. Data passer ind i objektet oprettet fra klassen CountVectorizer.
  5. Anvend en pose med ord tilgang til at tælle ord i dataene ved hjælp af ordforråd. Hvis ord eller token ikke er tilgængeligt i ordforrådet, sættes en sådan indeksposition til nul.
  6. Variabel i linje 5, som er x, konverteres til et array (metode tilgængelig for x). Dette vil angive antallet af hver token i sætningen eller listen i linje 3.
  7. Dette vil vise de funktioner, der er en del af ordforrådet, når det er tilpasset ved hjælp af dataene i linje 4.

I latent semantisk tilgang repræsenterer rækken unikke ord, mens kolonnen repræsenterer antallet af gange, det ord vises i dokumentet. Det er en repræsentation af ord i form af dokumentmatricen. Term-Frequency inverse document frequency (TFIDF) bruges til at tælle frekvensen af ​​ord i dokumentet, som er frekvensen af ​​termen i dokumentet/hyppigheden af ​​termen i hele korpuset.

Manglende Bag of Words metode

  • Det ignorerer rækkefølgen af ​​ordet, for eksempel, dette er dårligt = dårligt er dette.
  • Den ignorerer ordenes kontekst. Antag, at hvis jeg skriver sætningen "Han elskede bøger. Uddannelse findes bedst i bøger”. Det ville skabe to vektorer, en for "Han elskede bøger" og en anden for "Uddannelse findes bedst i bøger." Det ville behandle dem begge ortogonale, hvilket gør dem uafhængige, men i virkeligheden er de relateret til hinanden

For at overvinde disse begrænsninger blev ordindlejring udviklet, og Word2vec er en tilgang til at implementere en sådan.

Hvordan fungerer Word2vec?

Word2vec lærer ord ved at forudsige dets omgivende kontekst. Lad os for eksempel tage ordet "Han elsker Fodbold."

Vi ønsker at beregne Word2vec for ordet: elsker.

Formode

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 bevæger sig over hvert ord i korpuset. 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 er beregnet. Disse funktioner ændres eller opdateres vedrørende nabo- eller kontekstord ved hjælp af en Rygformering fremgangsmåde.

En anden måde at lære på er, at hvis konteksten af ​​to ord er ens eller to ord har lignende funktioner, så er sådanne ord beslægtede.

Word2vec Architecture

Der er to arkitekturer, der bruges af Word2vec:

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

Inden vi går videre i denne Word2vec-tutorial, lad os diskutere, hvorfor disse arkitekturer eller modeller er vigtige fra ordrepræsentationssynspunkt. At lære 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 uovervåget repræsentation til overvåget form til modeltræning.

I CBOW forudsiges det aktuelle ord ved hjælp af vinduet i omgivende kontekstvinduer. For eksempel, hvis wI-1,wI-2,wi + 1,wi + 2får ord eller kontekst, vil denne model give wi

Skip-Gram udfører det modsatte af CBOW, hvilket indebærer, at det forudsiger den givne sekvens eller kontekst fra ordet. Du kan vende eksemplet om for at forstå det. Hvis wi er givet, vil dette forudsige konteksten eller wI-1,wI-2,wi + 1,wi+2.

Word2vec giver mulighed for at vælge mellem CBOW (continuous Bag of words) og skim-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 Word2vec-eksempeldiagram for at forstå den kontinuerlige pose med ordarkitektur.

Kontinuerlig pose med ord Architecture

Kontinuerlig pose med ord Architecture

Lad os beregne ligningerne matematisk. Antag, at V er ordforrådets størrelse, og N er størrelsen på det skjulte lag. Input er defineret som { xI-1, xi-2, xi+1, xi + 2}. Vi får vægtmatricen ved at gange V * N. En anden matrix fås ved at gange inputvektoren med vægtmatricen. Dette kan også forstås ved den følgende ligning.

h=xitW

hvor xit? W er henholdsvis inputvektoren og vægtmatrixen,

For at beregne overensstemmelsen mellem kontekst og det næste ord, se venligst nedenstående ligning

u=forudsagt fremstilling*h

hvor forudsagt fremstilling 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 som vist i Word2vec-eksemplet nedenfor.

Skip-Gram model

Skip-Gram model

Man kan behandle det som det omvendte af Continuous bag of word-modellen, hvor input er ordet, og modellen giver konteksten eller sekvensen. Vi kan også konkludere, at målet føres til input- og outputlaget replikeres flere gange for at rumme det valgte antal kontekstord. Fejlvektor fra hele outputlaget summeres for at justere vægte via en tilbagepropageringsmetode.

Hvilken model skal man vælge?

CBOW er flere gange hurtigere end spring gram og giver en bedre frekvens for hyppige ord, hvorimod spring 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 naturligt sprogværktøj. Det bruges til forbehandling af teksten. Man kan udføre forskellige operationer såsom dele af talemærkning, lemmatisering, stemming, stop fjernelse af ord, fjernelse af sjældne ord eller mindst brugte ord. Det hjælper med at rense teksten samt hjælper med at forberede funktionerne fra de effektive ord. På den anden måde bruges Word2vec til semantisk (nært beslægtede elementer sammen) og syntaktisk (sekvens) matchning. Ved at bruge Word2vec kan man finde lignende ord, uens ord, dimensionsreduktion og mange andre. Et andet vigtigt træk ved Word2vec er at konvertere den højere dimensionelle repræsentation af teksten til lavere dimensionelle vektorer.

Hvor skal man bruge NLTK og Word2vec?

Hvis man skal udføre nogle generelle opgaver som nævnt ovenfor, såsom tokenisering, POS-tagging og parsing, skal man gå efter at bruge NLTK, mens man for at forudsige ord i henhold til en kontekst, emnemodellering eller dokumentlighed skal bruge Word2vec.

Relation mellem NLTK og Word2vec ved hjælp af kode

NLTK og Word2vec kan bruges sammen til at finde lignende ordrepræsentation eller syntaktisk matchning. NLTK-værktøjssættet 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å realtidsord. Lad os se kombinationen af ​​begge i den følgende kode. Før du behandler videre, bedes du tage et kig på de korpus, som NLTK leverer. Du kan downloade ved hjælp af kommandoen

nltk(nltk.download('all'))

Relation mellem NLTK og Word2vec

Corpora downloadet ved hjælp af NLTK

Se venligst skærmbilledet 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)

Relation mellem NLTK og Word2vec ved hjælp af kode

Output:

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

  1. nltk-biblioteket importeres, hvorfra du kan downloade abc-korpuset, som vi vil bruge i næste trin.
  2. Gensim er importeret. Hvis Gensim Word2vec ikke er installeret, skal du installere det ved at bruge kommandoen "pip3 install gensim". Se venligst nedenstående skærmbillede.
Installation af Gensim ved hjælp af PIP

Installation af Gensim ved hjælp af PIP
  1. importer corpus abc, som er blevet downloadet ved hjælp af nltk.download('abc').
  2. Send filerne til modellen Word2vec, som importeres med Gensim som sætninger.
  3. Ordforråd gemmes i form af variablen.
  4. Modellen er testet på eksempler på ordvidenskab, da disse filer er relateret til videnskab.
  5. Her er det lignende ord "videnskab" forudsagt af modellen.

Aktivatorer og Word2Vec

Neuronens aktiveringsfunktion definerer outputtet af 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.

Aktiveringsfunktion i Word2vec

Forståelse af aktiveringsfunktionen

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 nodeværdi, der fungerer som aktiveringsfunktion.

Hvorfor aktiveringsfunktion?

Hvis der ikke bruges nogen aktiveringsfunktion, vil output være lineært, men funktionaliteten af ​​lineær funktion er begrænset. For at opnå kompleks funktionalitet, såsom objektgenkendelse, kræves billedklassificering, indtastning af tekst ved hjælp af stemme og mange andre ikke-lineære output, hvilket opnås ved hjælp af aktiveringsfunktion.

Hvordan aktiveringslaget beregnes i ordet indlejring (Word2vec)

Softmax Layer (normaliseret eksponentiel funktion) er outputlagfunktionen, som aktiverer eller affyrer hver node. En anden anvendt metode er Hierarchical softmax, hvor kompleksiteten beregnes af O(log2V) hvori 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 på nedenstående Word-indlejringseksempel:

Hierarkisk Softmax-trælignende struktur

Hierarkisk softmax trælignende struktur

Antag, at vi vil beregne sandsynligheden for at observere ordet kærlighed givet en bestemt kontekst. Strømmen fra roden til bladknuden vil være det første træk til knude 2 og derefter til knudepunkt 5. Så hvis vi har haft ordforrådsstørrelsen 8, er der kun brug for tre beregninger. Så det tillader nedbrydning, beregning af sandsynligheden for et ord (kærlighed).

Hvilke andre muligheder er tilgængelige end Hierarchical Softmax?

Hvis man taler i en generel betydning for ordindlejring, er de tilgængelige muligheder Differentiated Softmax, CNN-Softmax, Importance Sampling, Adaptive Importance Sampling, Noise Contrasive Estimations, Negative Sampling, Self-Normalization og sjælden normalisering.

Når vi taler specifikt om Word2vec, har vi negative stikprøver til rådighed.

Negativ sampling er en måde at sample træningsdata på. Det er lidt ligesom stokastisk gradientnedstigning, men med en vis forskel. Negativ stikprøve søger kun efter negative træningseksempler. Den er baseret på støjkontrast-estimation og prøver tilfældigt ord, ikke i konteksten. Det er en hurtig træningsmetode og vælger konteksten tilfældigt. Hvis det forudsagte ord optræder i den tilfældigt valgte kontekst, er begge vektorer tæt på hinanden.

Hvilken konklusion kan man drage?

Aktivatorer affyrer neuronerne ligesom vores neuroner affyres ved hjælp af eksterne stimuli. Softmax-laget er en af ​​outputlagets funktioner, som affyrer neuronerne i tilfælde af ordindlejringer. I Word2vec har vi muligheder så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 open source-emnemodellering og naturligt sprogbehandlingsværktøj, der er implementeret i Python og Cython. Gensim værktøjssæt giver brugerne mulighed for at importere Word2vec til emnemodellering for at opdage skjult struktur i tekstens brødtekst. Gensim leverer ikke kun en implementering af Word2vec, men også til Doc2vec og FastText.

Denne tutorial handler om Word2vec, så vi holder os til det aktuelle emne.

Sådan implementeres Word2vec ved hjælp af Gensim

Indtil nu har vi diskuteret, hvad Word2vec er, dets forskellige arkitekturer, hvorfor der er et skift fra en pose ord til Word2vec, forholdet mellem Word2vec og NLTK med live kode og aktiveringsfunktioner.

Nedenfor er den trinvise metode til at implementere Word2vec ved hjælp af Gensim:

Trin 1) Dataindsamling

Det første skridt til at implementere enhver maskinlæringsmodel eller implementere naturlig sprogbehandling er dataindsamling

Bemærk venligst dataene for at bygge en intelligent chatbot som vist i nedenstående Gensim Word2vec-eksempel.

[{"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 brugere vil stille til botten
  • Svar er det svar, som chatbot vil give på det tilsvarende spørgsmål/mønster.

Trin 2) Dataforbehandling

Det er meget vigtigt at behandle rådataene. Hvis rensede data føres til maskinen, vil modellen reagere mere præcist og lære dataene mere effektivt.

Dette trin involverer fjernelse af stopord, ordstamming, unødvendige ord osv. Før du går videre, er det vigtigt at indlæse data og konvertere dem til en dataramme. Se venligst nedenstående kode for sådan

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

Forklaring af kode:

  1. Da data er i form af json-format, importeres json derfor
  2. Filen er gemt i variablen
  3. Filen er åben og indlæst i datavariabel

Nu importeres data, og det er tid til at konvertere data til dataramme. Se venligst nedenstående kode for at se det næste trin

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

Forklaring af kode:

1. Data konverteres til dataramme ved hjælp af pandaer, som blev importeret 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 stopord importeres ved hjælp af stopordmodulet fra nltk toolkit

2. Alle tekstens ord konverteres til små bogstaver ved hjælp af tilstand og lambda-funktion. Lambda funktion er en anonym funktion.

3. Alle tekstrækkerne i datarammen kontrolleres for strengtegnsætninger, og disse filtreres.

4. Tegn som tal eller prik fjernes ved hjælp af et regulært udtryk.

5. Digits fjernes fra teksten.

6. Stopord fjernes på dette trin.

7. Ord filtreres nu, og forskellige former for det samme ord fjernes ved hjælp af lemmatisering. Med disse har vi afsluttet dataforbehandlingen.

Output:

, 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

Trin 3) Opbygning af neuralt netværk ved hjælp af Word2vec

Nu er det tid til at bygge en model ved hjælp af Gensim Word2vec-modulet. Vi skal importere Word2vec fra Gensim. Lad os gøre dette, og så bygger vi og i sidste fase vil vi tjekke modellen på realtidsdata.

from gensim.models import Word2Vec

Nu i denne Gensim Word2vec-tutorial kan vi med succes bygge modellen ved hjælp af Word2Vec. Se venligst den næste kodelinje for at lære, hvordan du opretter modellen ved hjælp af Word2Vec. Tekst leveres til modellen i form af en liste, så vi vil konvertere 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)

Forklaring af kode:

1. Oprettet bigger_list, hvor den indre liste er tilføjet. Dette er formatet, som tilføres modellen Word2Vec.

2. Loop implementeres, og hver indtastning af mønsterkolonnen i datarammen gentages.

3. Hvert element i kolonnemønstrene opdeles og lagres i den indre liste li

4. den indre liste er tilføjet den ydre liste.

5. Denne liste leveres til Word2Vec-modellen. Lad os forstå nogle af de parametre, der er angivet her

Min_antal: Det vil ignorere alle ord med en samlet frekvens lavere end dette.

Størrelse: Det fortæller dimensionaliteten af ​​ordet vektorer.

Arbejdere: Disse er trådene til at træne modellen

Der er også andre muligheder tilgængelige, og nogle vigtige er forklaret nedenfor

Vindue: Maksimal afstand mellem det aktuelle og det forudsagte ord i en sætning.

Sg: Det er en træningsalgoritme og 1 for spring-gram og 0 for en kontinuerlig pose ord. Vi har diskuteret disse i detaljer ovenfor.

Hs: Hvis dette er 1, bruger vi hierarkisk softmax til træning, og hvis 0 anvendes negativ sampling.

Alpha: Indledende læringshastighed

Lad os vise den endelige kode 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)

Trin 4) Modelbesparelse

Model kan gemmes i form af bin og modelform. Bin er det binære format. Se venligst nedenstående linjer for at gemme modellen

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

Forklaring af ovenstående kode

1. Model gemmes i form af en .model-fil.

2. modellen gemmes i form af .bin-fil

Vi vil bruge denne model til at udføre realtidstest såsom Lignende ord, uens ord og mest almindelige ord.

Trin 5) Indlæsning af model og udførelse af 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 at bruge nedenstående kommando:

vocab = list(model.wv.vocab)

Se venligst 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) De fleste lignende ord kontrol

Lad os implementere tingene praktisk:

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

Se venligst 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 de 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 udskriv 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 resultere i sandsynlighed for lighed mellem to ord. Se venligst 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 tillader ord med lignende betydning at blive forstået af maskinlæringsalgoritmer
  • Ordindlejring bruges til at beregne lignende ord, oprette en gruppe af relaterede ord, funktion til tekstklassificering, dokumentklynger, naturlig sprogbehandling
  • Word2vec forklaret: Word2vec er en lavvandet to-lags neural netværksmodel til at producere ordindlejringer 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 lignende betydningsord vises sammen, og uens ord er placeret langt væk
  • Word2vec-algoritmen bruger 2 arkitekturer Continuous Bag of words (CBOW) og spring gram over
  • CBOW er flere gange hurtigere end spring gram og giver en bedre frekvens for hyppige ord, hvorimod spring 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 og skaber kraftfulde applikationer
  • Neuronens aktiveringsfunktion definerer outputtet af den neuron givet et sæt input. I Word2vec. Softmax Layer (normaliseret eksponentiel funktion) er outputlagfunktionen, som aktiverer eller affyrer hver node. Word2vec har også negativ sampling tilgængelig
  • Gensim er et emnemodelleringsværktøj, som er implementeret i python