Ordindlejring og Word2Vec med eksempel
โก Smart opsummering
Word Embedding og Word2Vec konverterer tekst til tรฆtte numeriske vektorer, sรฅ maskinlรฆringsmodeller genkender ord med lignende betydning. Denne ressource forklarer teknikken, dens CBOW- og Skip-Gram-arkitekturer, aktiveringsfunktioner og en komplet Gensim-implementering til virkelige applikationer.

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 funktionslรฆringsteknik til at kortlรฆgge ord i vektorer af reelle tal ved hjรฆlp af neurale netvรฆrk, probabilistiske modeller eller dimensionsreduktion pรฅ ord-samforekomstmatricen. Nogle ordindlejringsmodeller er Word2vec (Google), GloVe (Stanford) og fastText (Facebook).
Ordindlejring kaldes ogsรฅ en distribueret semantisk model, distribueret reprรฆsenteret model, semantisk vektorrum eller vektorrumsmodel. Nรฅr du lรฆser disse navne, stรธder du pรฅ ordet semantiske, hvilket betyder at kategorisere lignende ord sammen. For eksempel bรธr frugter som รฆble, mango og banan placeres tรฆt sammen, hvorimod bรธger placeres langt vรฆk fra disse ord. I en bredere forstand vil ordindlejring skabe en vektor af frugter, der er placeret langt vรฆk fra vektorreprรฆsentationen af โโbรธger.
Hvor bruges Word Embedding?
Ordindlejring hjรฆlper med funktionsgenerering, dokumentklyngering, tekstklassificering og opgaver med behandling af naturligt sprog. Lad os liste disse anvendelser og diskutere hver enkelt.
- Beregn lignende ord: Ordindlejring bruges til at foreslรฅ lignende ord som det ord, der er underlagt forudsigelsesmodellen. Derudover foreslรฅs ogsรฅ forskellige ord, sรฅvel som de mest almindelige ord.
- Opret en gruppe af relaterede ord: Det bruges til semantiske grupperping, som grupperer ting med lignende karakteristika sammen og skubber forskellige genstande langt vรฆk.
- Funktion til tekstklassificering: Tekst kortlรฆgges i arrays af vektorer, der fรธres til modellen til bรฅde trรฆning og forudsigelse. Tekstbaserede klassificeringsmodeller kan ikke trรฆnes pรฅ strenge, sรฅ dette konverterer teksten til en maskintrรฆnbar form. Dens semantisk opbyggende funktioner hjรฆlper yderligere med tekstbaseret klassificering.
- Dokumentklynger: Dette er en anden applikation, hvor Word Embedding og Word2vec er meget udbredt.
- Naturlig sprogbehandling: Der er mange applikationer, hvor ordindlejring er nyttigt og vinder over funktioner som f.eks.tractionsfaser, sรฅsom ordklassetagging, sentimentanalyse og syntaktisk analyse.
Nu hvor du forstรฅr, hvor ordindlejring anvendes, lad os se pรฅ den mest populรฆre model, der bruges til at oprette disse indlejringer.
Hvad er Word2vec?
Word2vec er en teknik eller model, der producerer ordindlejringer for bedre ordreprรฆsentation. Det er en naturlig sprogbehandlingsmetode, der indfanger et stort antal prรฆcise syntaktiske og semantiske ordforhold. Det er et overfladisk tolags neuralt netvรฆrk, der kan registrere synonyme ord og foreslรฅ yderligere ord til delvise sรฆtninger, nรฅr det er trรฆnet.
Fรธr du gรฅr videre, se venligst forskellen mellem et overfladisk og et dybt neuralt netvรฆrk, som vist i nedenstรฅende eksempeldiagram for Word-indlejring:
Det overfladiske neurale netvรฆrk bestรฅr kun af รฉt skjult lag mellem input og output, hvorimod et dybt neuralt netvรฆrk indeholder flere skjulte lag mellem input og output. Input er underlagt noder, hvorimod det skjulte lag, sรฅvel som outputlaget, indeholder neuroner.

Word2vec er et tolagsnetvรฆrk, hvor der er et input, et skjult lag og et output.
Word2vec blev udviklet af en gruppe forskere ledet af Tomas Mikolov hos GoogleWord2vec er bedre og mere effektiv end den latente semantiske analysemodel.
Hvorfor Word2vec?
Word2vec reprรฆsenterer ord i en vektorrumsreprรฆsentation. Ord reprรฆsenteres i form af vektorer, og placeringen sker pรฅ en sรฅdan mรฅde, at ord med lignende betydning vises sammen, og ord med forskellige betydninger er placeret langt vรฆk. Dette kaldes ogsรฅ en semantisk relation. Neurale netvรฆrk forstรฅr ikke tekst; i stedet forstรฅr de kun tal. Ordindlejring giver en mรฅde at konvertere tekst til en numerisk vektor.
Word2vec rekonstruerer den sproglige kontekst af ord. Fรธr vi gรฅr videre, lad os forstรฅ, hvad sproglig kontekst er. I et generelt scenarie, nรฅr vi taler eller skriver for at kommunikere, forsรธger andre mennesker at finde ud af sรฆtningens formรฅl. For eksempel: "Hvad er temperaturen i Indien?" Her er konteksten, at brugeren รธnsker at kende "temperaturen i Indien". Kort sagt er hovedformรฅlet med en sรฆtning kontekst. Ordene eller sรฆtningerne omkring talt eller skrevet sprog hjรฆlper med at bestemme betydningen af โโkonteksten. Word2vec lรฆrer vektorreprรฆsentationen af โโord gennem disse kontekster.
Hvad gรธr Word2vec?
Fรธr Word Embedding
Det er vigtigt at vide, hvilken tilgang der blev brugt fรธr ordindlejring, og hvad dens ulemper er, og derefter vil vi se pรฅ, hvordan disse ulemper overvindes ved ordindlejring ved hjรฆlp af Word2vec-tilgangen. Til sidst vil vi gรฅ videre til, hvordan Word2vec fungerer, fordi det er vigtigt at forstรฅ, hvordan det fungerer.
Tilgang til latent semantisk analyse
Dette er den fremgangsmรฅde, der blev brugt fรธr ordindlejringer. Den brugte konceptet med en ordpose, hvor ord reprรฆsenteres i form af kodede vektorer. Det er en sparsom vektorreprรฆsentation, hvor dimensionen er lig med ordforrรฅdets stรธrrelse. Hvis ordet forekommer i ordbogen, tรฆlles det; ellers tรฆlles det ikke. For at forstรฅ mere, se venligst 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())
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']
Code Forklaring
- CountVectorizer er modulet, der bruges til at gemme ordforrรฅdet baseret pรฅ at tilpasse ordene i det. Dette importeres fra sklearn.
- Lav objektet ved hjรฆlp af klassen CountVectorizer.
- Skriv de data i listen, der skal tilpasses i CountVectorizer.
- Data passer ind i objektet oprettet fra klassen CountVectorizer.
- Anvend en "bag-of-words"-metode til at tรฆlle ord i dataene ved hjรฆlp af ordforrรฅdet. Hvis et ord eller en token ikke er tilgรฆngelig i ordforrรฅdet, sรฆttes en sรฅdan indeksposition til nul.
- Variablen i linje 5, som er x, konverteres til et array (en metode tilgรฆngelig for x). Dette giver antallet af hvert token i sรฆtningen eller listen angivet i linje 3.
- Dette viser de funktioner, der er en del af ordforrรฅdet, nรฅr det tilpasses ved hjรฆlp af dataene i linje 4.
I den latente semantiske tilgang reprรฆsenterer rรฆkken unikke ord, mens kolonnen reprรฆsenterer antallet af gange, ordet forekommer i dokumentet. Det er en reprรฆsentation af ord i form af en dokumentmatrix. Term Frequency-Inverse Document Frequency (TF-IDF) bruges til at tรฆlle hyppigheden af โโord i dokumentet, hvilket er hyppigheden af โโtermen i dokumentet divideret med hyppigheden af โโtermen i hele korpuset.
Manglende Bag of Words metode
- Den ignorerer ordenes rรฆkkefรธlge; for eksempel, det her er dรฅrligt = er det her dรฅrligt.
- Den ignorerer ordenes kontekst. Antag, at vi skriver sรฆtningen "Han elskede bรธger. Uddannelse findes bedst i bรธger." Det ville oprette to vektorer: en for "Han elskede bรธger" og en anden for "Uddannelse findes bedst i bรธger." Den ville behandle dem begge som 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 รฉn tilgang, der bruges til at implementere det.
Hvordan fungerer Word2vec?
Word2vec lรฆrer et 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.
Ordet elsker bevรฆger sig hen over hvert ord i korpuset. Syntaktiske sรฅvel som semantiske forhold mellem ord er kodet. Dette hjรฆlper med at finde lignende og analoge ord.
Alle tilfรฆldige trรฆk ved ordet elsker beregnes. Disse funktioner รฆndres eller opdateres i forhold til naboord eller kontekstord ved hjรฆlp af en Rygformering fremgangsmรฅde.
En anden mรฅde at lรฆre pรฅ er, at hvis konteksterne af to ord er ens, eller to ord har lignende trรฆk, sรฅ er sรฅdanne ord beslรฆgtede.
Word2vec Architecture
Der er to arkitekturer, der bruges af Word2vec:
- Kontinuerlig ordpose (CBOW)
- Skip-gram
Fรธr vi gรฅr videre, lad os diskutere, hvorfor disse arkitekturer eller modeller er vigtige fra et ordreprรฆsentationssynspunkt. Indlรฆring af ordreprรฆsentation er i bund og grund uovervรฅget, men der er behov for mรฅl/etiketter for at trรฆne modellen. Skip-gram og CBOW konverterer den uovervรฅgede reprรฆsentation til en 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, ogI-2, ogi + 1, ogi + 2 fรฅr ord eller kontekst, vil denne model give wi.
Skip-Gram udfรธrer det modsatte af CBOW, hvilket antyder, at den forudsiger den givne sekvens eller kontekst ud fra ordet. Du kan vende eksemplet om for at forstรฅ det. Hvis wi er givet, vil dette forudsige konteksten, eller wI-1, ogI-2, ogi + 1, ogi + 2.
Word2vec giver mulighed for at vรฆlge mellem CBOW (Continuous Bag of Words) og skip-gram. Sรฅdanne parametre leveres under trรฆningen af โโmodellen. Man kan vรฆlge at bruge negativ sampling eller et hierarkisk softmax-lag.
Kontinuerlig pose med ord
Lad os tegne et simpelt Word2vec-eksempeldiagram for at forstรฅ den kontinuerlige "bag-of-words"-arkitektur.
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 hjรฆlp af fรธlgende ligning.
h = xitW
hvor xit og W er henholdsvis inputvektoren og vรฆgtmatricen.
For at beregne overensstemmelsen mellem kontekst og det nรฆste ord, henvises til nedenstรฅende ligning.
u = forudsagt reprรฆsentation * h
hvor den forudsagte reprรฆsentation opnรฅs fra modellen i ovenstรฅende ligning.
Skip-Gram model
Skip-Gram-metoden bruges til at forudsige en sรฆtning givet et inputord. For bedre at forstรฅ det, lad os tegne diagrammet vist i Word2vec-eksemplet nedenfor.
Man kan behandle det som det modsatte af modellen med den kontinuerlige pose af ord, hvor inputtet er ordet, og modellen leverer konteksten eller sekvensen. Vi kan ogsรฅ konkludere, at mรฅlet fรธres til inputtet, og outputlaget replikeres flere gange for at imรธdekomme det valgte antal kontekstord. Fejlvektoren fra alle outputlag summeres for at justere vรฆgte via en backpropagation-metode.
Hvilken model skal man vรฆlge?
CBOW er flere gange hurtigere end skip-gram og giver en bedre frekvens for hyppige ord, hvorimod skip-gram krรฆver en lille mรฆngde trรฆningsdata og reprรฆsenterer selv sjรฆldne ord eller sรฆtninger. Tabellen nedenfor sammenligner begge arkitekturer med et hurtigt blik.
| Aspect | CBOW | Skip-Gram |
|---|---|---|
| Forudsigelse | Forudsiger mรฅlordet ud fra konteksten | Forudsiger kontekst ud fra mรฅlordet |
| Trรฆningshastighed | Hurtigere | Langsommere |
| Hyppige ord | Hรธjere nรธjagtighed | Lavere nรธjagtighed |
| Sjรฆldne ord | Svagere reprรฆsentation | Stรฆrkere reprรฆsentation |
| Trรฆningsdata | Behรธver flere data | Fungerer med mindre data |
Forholdet mellem Word2vec og NLTK
NLTK er det naturlige Language Toolkit. Det bruges til forbehandling af tekst. Man kan udfรธre forskellige operationer sรฅsom ordklasse-tagging, lemmatisering, stemming, fjernelse af stopord og fjernelse af sjรฆldne eller mindst brugte ord. Det hjรฆlper med at rense teksten samt forberede funktioner fra de effektive ord. Pรฅ den anden side bruges Word2vec til semantisk (nรฆrt beslรฆgtede elementer sammen) og syntaktisk (sekvens) matchning. Ved hjรฆlp af Word2vec kan man finde lignende ord, forskellige ord, dimensionsreduktion og mange andre. En anden vigtig funktion i Word2vec er at konvertere den hรธjere dimensionelle reprรฆsentation af tekst 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 bruge NLTK, hvorimod man skal bruge Word2vec til at forudsige ord i henhold til en kontekst, emnemodellering eller dokumentlighed.
Relation mellem NLTK og Word2vec ved hjรฆlp af kode
NLTK og Word2vec kan bruges sammen til at finde lignende ordreprรฆsentationer eller syntaktisk matchning. NLTK-vรฆrktรธjssรฆttet kan bruges til at indlรฆse mange pakker, der fรธlger med NLTK, og en model kan oprettes ved hjรฆlp af Word2vec. Den kan derefter testes pรฅ ord i realtid. Lad os se kombinationen af โโbegge i fรธlgende kode. Fรธr du gรฅr videre med processen, bedes du se pรฅ de korpusa, som NLTK leverer. Du kan downloade det ved hjรฆlp af kommandoen:
nltk(nltk.download('all'))
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)
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 Code
- Nltk-biblioteket importeres, hvorfra du kan downloade abc-korpuset, som vi vil bruge i nรฆste trin.
- Gensim er importeret. Hvis Gensim Word2vec ikke er installeret, skal du installere det ved hjรฆlp af kommandoen "pip3 install gensim". Se venligst skรฆrmbilledet nedenfor.
- Importer abc-korpuset, som er blevet downloadet ved hjรฆlp af nltk.download('abc').
- Send filerne til Word2vec-modellen, som importeres ved hjรฆlp af Gensim, som sรฆtninger.
- Ordforrรฅdet gemmes i form af en variabel.
- Modellen testes pรฅ eksempelordet videnskab, da disse filer er relateret til videnskab.
- Her forudsiges det lignende ord "videnskab" af modellen.
Aktivatorer og Word2Vec
En neurons aktiveringsfunktion definerer neuronens output givet et sรฆt input. Den er biologisk inspireret af aktivitet i vores hjerner, hvor forskellige neuroner aktiveres ved hjรฆlp af forskellige stimuli. Lad os forstรฅ aktiveringsfunktionen gennem fรธlgende diagram.
Her er x1, x2, โฆ x4 noderne i det neurale netvรฆrk.
w1, w2, w3 er vรฆgtene af noderne.
Summen (ฮฃ) af alle vรฆgte og nodevรฆrdier fungerer som aktiveringsfunktionen.
Hvorfor aktiveringsfunktion?
Hvis der ikke anvendes nogen aktiveringsfunktion, ville outputtet vรฆre lineรฆrt, men funktionaliteten af โโen lineรฆr funktion er begrรฆnset. For at opnรฅ kompleks funktionalitet sรฅsom objektdetektion, billedklassificering osv.ping tekst ved hjรฆlp af stemme og mange andre ikke-lineรฆre output, er en aktiveringsfunktion nรธdvendig.
Hvordan aktiveringslaget beregnes i ordet indlejring (Word2vec)
Softmax-laget (normaliseret eksponentiel funktion) er output-lagets funktion, der aktiverer eller udlรธser hver node. En anden anvendt tilgang er hierarkisk softmax, hvor kompleksiteten beregnes ved O(log2V), hvorimod det i softmax er O(V), hvor V er ordforrรฅdets stรธrrelse. Forskellen mellem disse er reduktionen af โโkompleksiteten i det hierarkiske softmax-lag. For at forstรฅ dets funktionalitet, se venligst nedenstรฅende eksempel pรฅ Word-indlejring:
Antag, at vi vil beregne sandsynligheden for at observere ordet kรฆrlighed givet en bestemt kontekst. Flytningen fra roden til bladnoden vil fรธrst bevรฆge sig til node 2 og derefter til node 5. Sรฅ hvis vi har en ordforrรฅdsstรธrrelse pรฅ 8, er der kun behov for tre beregninger. Dette muliggรธr dekomponering af beregningen af โโsandsynligheden for รฉt ord (kรฆrlighed).
Hvilke andre muligheder er tilgรฆngelige end Hierarchical Softmax?
Generelt er de tilgรฆngelige indlejringsmuligheder Differentieret Softmax, CNN-Softmax, vigtighedssampling, adaptiv vigtighedssampling, stรธjkontrastiv estimering, negativ sampling, selvnormalisering og hyppig normalisering.
Nรฅr vi taler specifikt om Word2vec, har vi negativ sampling tilgรฆngelig.
Negativ sampling er en mรฅde at sample trรฆningsdata pรฅ. Det minder lidt om stokastisk gradient descent, men med en vis forskel. Negativ sampling sรธger kun efter negative trรฆningseksempler. Det er baseret pรฅ stรธjkontraststiv estimering og sampler tilfรฆldigt ord, der ikke er i konteksten. Det er en hurtig trรฆningsmetode, der vรฆlger konteksten tilfรฆldigt. Hvis det forudsagte ord vises i den tilfรฆldigt valgte kontekst, er begge vektorer tรฆt pรฅ hinanden.
Hvilken konklusion kan man drage?
Aktivatorer aktiverer neuronerne, ligesom vores neuroner aktiveres af eksterne stimuli. Softmax-laget er en af โโoutputlagsfunktionerne, der aktiverer neuronerne i tilfรฆlde af ordindlejringer. I Word2vec har vi muligheder som hierarkisk softmax og negativ sampling. Ved hjรฆlp af aktivatorer kan man konvertere en lineรฆr funktion til en ikke-lineรฆr funktion, og en kompleks maskinlรฆringsalgoritme kan implementeres ved hjรฆlp af sรฅdanne funktioner.
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รฆttet giver brugerne mulighed for at importere Word2vec til emnemodellering for at opdage skjult struktur i tekstens brรธdtekst. Gensim tilbyder ikke kun en implementering af Word2vec, men ogsรฅ Doc2vec og FastText.
Dette afsnit fokuserer pรฅ 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 ordsรฆk til Word2vec, forholdet mellem Word2vec og NLTK med livekode, 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 implementering af 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 intentionen (hvad er emnet for diskussionen).
- Dataene er i JSON-format.
- Et mรธnster er et spรธrgsmรฅl, som brugerne stiller botten.
- Svar er de svar, som chatbotten giver 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, stemming, unรธdvendige ord osv. Fรธr du gรฅr videre, er det vigtigt at indlรฆse data og konvertere dem til en dataframe. Se venligst nedenstรฅende kode for dette.
import json json_file = 'intents.json' with open('intents.json', 'r') as f: data = json.load(f)
Forklaring af Code:
- Da dataene er i JSON-format, importeres json.
- Filen gemmes i variablen.
- Filen รฅbnes og indlรฆses i datavariablen.
Nu er dataene importeret, og det er tid til at konvertere dataene til en dataframe. Se nedenstรฅende kode for det nรฆste trin.
import pandas as pd df = pd.DataFrame(data) df['patterns'] = df['patterns'].apply(', '.join)
Forklaring af Code:
1. Data konverteres til en dataramme ved hjรฆlp af pandas, som blev importeret ovenfor.
2. Den konverterer listen i kolonnemรธnstrene til en 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'] = 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 x not in stop)) df['patterns'] = df['patterns'].apply(lambda x: " ".join([Word(word).lemmatize() for word in x.split()]))
Code Forklaring:
1. Engelske stopord importeres ved hjรฆlp af stopordmodulet fra nltk-vรฆrktรธjssรฆttet.
2. Alle ord i teksten konverteres til smรฅ bogstaver ved hjรฆlp af en for-betingelse og en lambda-funktion. Lambda funktion er en anonym funktion.
3. Alle tekstrรฆkker i datarammen kontrolleres for strengtegnsรฆtning, og disse filtreres.
4. Tegn som tal eller prikker 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 af 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 dont 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รฅ vil vi bygge den, og i den sidste fase vil vi kontrollere modellen pรฅ realtidsdata.
from gensim.models import Word2Vec
Nu kan vi 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 konverterer teksten fra datarammen til en 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 Code:
1. Oprettede bigger_list, hvor den indre liste tilfรธjes. Dette er det format, der fรธres til modellen Word2Vec.
2. En lรธkke implementeres, og hver indtastning i mรธnsterkolonnen i datarammen itereres.
3. Hvert element i kolonnemรธnstrene opdeles og gemmes i den indre liste li.
4. Den indre liste tilfรธjes til den ydre liste.
5. Denne liste er angivet for Word2Vec-modellen. Lad os forstรฅ nogle af de parametre, der er angivet her.
Min_antal: Den ignorerer alle ord med en samlet frekvens lavere end dette.
Stรธrrelse: Det fortรฆller dimensionaliteten af โโordet vektorer.
Arbejdere: Dette er trรฅdene til at trรฆne modellen.
Der er ogsรฅ andre muligheder tilgรฆngelige, og nogle vigtige af dem er forklaret nedenfor.
Vindue: Maksimal afstand mellem det aktuelle og det forudsagte ord i en sรฆtning.
Sg: Det er en trรฆningsalgoritme: 1 for skip-gram og 0 for en kontinuerlig ordseddel. Vi har diskuteret disse i detaljer ovenfor.
Hs: Hvis dette er 1, bruger vi hierarkisk softmax til trรฆning, og hvis 0, bruges 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) # 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 x not 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)
Trin 4) Modelbesparelse
Modellen kan gemmes i form af en bin-fil og en modelfil. 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. Modellen gemmes i form af en .model-fil.
2. Modellen gemmes i form af en .bin-fil.
Vi vil bruge denne model til at udfรธre test i realtid, sรฅsom lignende ord, forskellige 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 hjรฆlp af kommandoen nedenfor:
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 udskriver det 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 fortรฆller resultatet i form af sandsynligheden for lighed mellem to ord. Se venligst nedenstรฅende kode for, 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 fรธlger:
0.13706
Du kan 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)]


