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.

  • ๐Ÿ”ข Kernedefinition: Ordindlejring kortlรฆgger et ordforrรฅd i reelle vektorer, hvor semantisk ens ord placeres tรฆt pรฅ hinanden i vektorrummet.
  • ๐Ÿง  Word2Vec-modeller: Continuous Bag of Words forudsiger et ord ud fra dets kontekst, mens Skip-Gram forudsiger den omgivende kontekst ud fra et enkelt ord.
  • ๐Ÿ‡ง๐Ÿ‡ท Trรฆningsmekanik: Softmax, hierarkisk softmax og negativ sampling aktiverer neuroner og optimerer effektivt lรฆring pรฅ tvรฆrs af store ordforrรฅd.
  • ๐Ÿ”— NLTK-integration: NLTK udfรธrer forbehandling sรฅsom tokenisering og lemmatisering, mens Word2Vec indfanger semantiske og syntaktiske relationer.
  • ๐Ÿ› ๏ธ Gensim-implementering: Gensim-biblioteket opbygger, gemmer og genindlรฆser en Word2Vec-model for at beregne ordlighed pรฅ reelle data.

Ordindlejring og Word2Vec-model

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.

Overfladisk vs. dyb lรฆring
Overfladisk vs. dyb lรฆring

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

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

  1. CountVectorizer er modulet, der bruges til at gemme ordforrรฅdet baseret pรฅ at tilpasse ordene i det. Dette importeres fra sklearn.
  2. Lav objektet ved hjรฆlp af klassen CountVectorizer.
  3. Skriv de data i listen, der skal tilpasses i CountVectorizer.
  4. Data passer ind i objektet oprettet fra klassen CountVectorizer.
  5. 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.
  6. 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.
  7. 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:

  1. Kontinuerlig ordpose (CBOW)
  2. 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.

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 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.

Skip-Gram model

Skip-Gram model

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

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)

Forholdet mellem NLTK og Word2vec ved hjรฆlp af Code

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

  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 hjรฆlp af kommandoen "pip3 install gensim". Se venligst skรฆrmbilledet nedenfor.
Installation af Gensim ved hjรฆlp af PIP

Installation af Gensim ved hjรฆlp af PIP
  1. Importer abc-korpuset, som er blevet downloadet ved hjรฆlp af nltk.download('abc').
  2. Send filerne til Word2vec-modellen, som importeres ved hjรฆlp af Gensim, som sรฆtninger.
  3. Ordforrรฅdet gemmes i form af en variabel.
  4. Modellen testes pรฅ eksempelordet videnskab, da disse filer er relateret til videnskab.
  5. 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.

Aktiveringsfunktion i Word2vec

Forstรฅelse af aktiveringsfunktionen

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:

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. 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:

  1. Da dataene er i JSON-format, importeres json.
  2. Filen gemmes i variablen.
  3. 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)]

Ofte Stillede Spรธrgsmรฅl

Word2Vec producerer รฉn fast vektor pr. ord. Moderne AI-modeller som BERT og GPT genererer kontekstuelle indlejringer, hvilket betyder, at det samme ord modtager forskellige vektorer afhรฆngigt af den omgivende sรฆtning, hvilket indfanger betydningen mere prรฆcist.

Ja. Ordindlejringer er fortsat nyttige til lette opgaver, sรธgning, anbefalinger og klyngedannelse, hvor hastighed og lav beregningsevne er vigtige. De fungerer ogsรฅ som det grundlรฆggende koncept bag de indlejringslag, der bruges i store sprogmodeller.

Nej. Word2Vec er et overfladisk neuralt netvรฆrk med et enkelt skjult lag. Selvom det er inspireret af neurale netvรฆrk, betragtes det ikke som deep learning, som krรฆver flere skjulte lag mellem input og output.

Almindelige vektorstรธrrelser varierer fra 100 til 300 dimensioner. Mindre stรธrrelser trรฆnes hurtigere og passer til smรฅ datasรฆt, mens stรธrre stรธrrelser indfanger mere omfattende relationer, men krรฆver flere data og beregninger for at undgรฅ overtilpasning.

Nej. Word2Vec kan ikke hรฅndtere ord uden for ordforrรฅdet, fordi det lรฆrer รฉn vektor pr. kendt ord. Modeller som FastText lรธser dette ved at bygge ordvektorer ud fra tegn-n-grammer, hvilket muliggรธr reprรฆsentation af usete ord.

Opsummer dette indlรฆg med: