Ordinnbygging og Word2Vec med eksempel

โšก Smart oppsummering

Word Embedding og Word2Vec konverterer tekst til tette numeriske vektorer slik at maskinlรฆringsmodeller gjenkjenner ord med lignende betydning. Denne ressursen forklarer teknikken, dens CBOW- og Skip-Gram-arkitekturer, aktiveringsfunksjoner og en komplett Gensim-implementering for virkelige applikasjoner.

  • ๐Ÿ”ข Kjernedefinisjon: Ordinnbygging kartlegger et vokabular i vektorer med reell verdi, og plasserer semantisk like ord tett sammen i vektorrommet.
  • ๐Ÿง  Word2Vec-modeller: Kontinuerlig ordpose forutsier et ord fra konteksten, mens Skip-Gram forutsier den omkringliggende konteksten fra et enkelt ord.
  • โš™๏ธ Treningsmekanikk: Softmax, hierarkisk softmax og negativ sampling fyrer av nevroner og optimaliserer lรฆring pรฅ tvers av store vokabularer effektivt.
  • ๐Ÿ”— NLTK-integrasjon: NLTK utfรธrer forbehandling som tokenisering og lemmatisering, mens Word2Vec fanger opp semantiske og syntaktiske forhold.
  • ๐Ÿ› ๏ธ Gensim-implementering: Gensim-biblioteket bygger, lagrer og laster inn en Word2Vec-modell pรฅ nytt for รฅ beregne ordlikhet pรฅ reelle data.

Ordinnbygging og Word2Vec-modell

Hva er Word Embedding?

Innbygging av ord er en ordrepresentasjonstype som lar maskinlรฆringsalgoritmer forstรฅ ord med lignende betydninger. Det er en sprรฅkmodellerings- og funksjonslรฆringsteknikk for รฅ kartlegge ord i vektorer av reelle tall ved hjelp av nevrale nettverk, sannsynlighetsmodeller eller dimensjonsreduksjon pรฅ ord-samforekomstmatrisen. Noen ordinnbyggingsmodeller er Word2vec (Google), GloVe (Stanford) og fastText (Facebook).

Ordinnbygging kalles ogsรฅ en distribuert semantisk modell, distribuert representert modell, semantisk vektorrom eller vektorrommodell. Nรฅr du leser disse navnene, kommer du over ordet semantisk, som betyr รฅ kategorisere lignende ord sammen. For eksempel bรธr frukt som eple, mango og banan plasseres tett sammen, mens bรธker vil plasseres langt unna disse ordene. I en bredere forstand vil ordinnbygging skape en vektor av frukt som er plassert langt unna vektorrepresentasjonen av bรธker.

Hvor brukes Word Embedding?

Ordinnbygging hjelper med funksjonsgenerering, dokumentklynging, tekstklassifisering og oppgaver med naturlig sprรฅkbehandling. La oss liste opp disse bruksomrรฅdene og diskutere hver enkelt.

  • Regn ut lignende ord: Ordinnbygging brukes til รฅ foreslรฅ lignende ord som ordet som blir utsatt for prediksjonsmodellen. I tillegg til det foreslรฅs ogsรฅ ulike ord, samt de vanligste ordene.
  • Lag en gruppe beslektede ord: Den brukes for semantiske grupperping, som grupperer ting med lignende egenskaper sammen og skyver ulike gjenstander langt bort.
  • Funksjon for tekstklassifisering: Tekst kartlegges i vektormatriser som mates til modellen for trening sรฅ vel som prediksjon. Tekstbaserte klassifiseringsmodeller kan ikke trenes pรฅ strenger, sรฅ dette konverterer teksten til en maskinopplรฆrbar form. De semantiske byggingsfunksjonene hjelper ytterligere med tekstbasert klassifisering.
  • Dokumentgruppering: Dette er et annet program der Word Embedding og Word2vec er mye brukt.
  • Naturlig sprรฅkbehandling: Det finnes mange applikasjoner der ordinnbygging er nyttig og vinner over funksjoner som f.eks.tracsjonsfaser, som ordklassetagging, sentimentanalyse og syntaktisk analyse.

Nรฅ som du forstรฅr hvor ordinnebygging brukes, la oss se pรฅ den mest populรฆre modellen som brukes til รฅ lage disse innebyggingene.

Hva er Word2vec?

Word2vec er en teknikk eller modell som produserer ordinnleggelser for bedre ordrepresentasjon. Det er en naturlig sprรฅkbehandlingsmetode som fanger opp et stort antall presise syntaktiske og semantiske ordforhold. Det er et overfladisk tolags nevralt nettverk som kan oppdage synonyme ord og foreslรฅ tilleggsord for delvise setninger nรฅr det er trent.

Fรธr du gรฅr videre, se forskjellen mellom et grunt og et dypt nevralt nettverk som vist i eksempeldiagrammet for Word-innebygging nedenfor:

Det grunne nevrale nettverket bestรฅr av bare ett skjult lag mellom input og output, mens et dypt nevralt nettverk inneholder flere skjulte lag mellom input og output. Input er underlagt noder, mens det skjulte laget, sรฅ vel som outputlaget, inneholder nevroner.

Grunn vs. dyp lรฆring
Grunn vs. dyp lรฆring

Word2vec er et tolagsnettverk der det er en inngang, ett skjult lag og en utgang.

Word2vec ble utviklet av en gruppe forskere ledet av Tomas Mikolov ved GoogleWord2vec er bedre og mer effektiv enn den latente semantiske analysemodellen.

Hvorfor Word2vec?

Word2vec representerer ord i en vektorromrepresentasjon. Ord er representert i form av vektorer, og plasseringen gjรธres pรฅ en slik mรฅte at ord med lignende betydning vises sammen, og ulike ord er plassert langt unna. Dette kalles ogsรฅ en semantisk relasjon. Nevrale nettverk forstรฅr ikke tekst; i stedet forstรฅr de bare tall. Ordinnbygging gir en mรฅte รฅ konvertere tekst til en numerisk vektor.

Word2vec rekonstruerer den sprรฅklige konteksten til ord. Fรธr vi gรฅr videre, la oss forstรฅ hva sprรฅklig kontekst er. I et generelt scenario, nรฅr vi snakker eller skriver for รฅ kommunisere, prรธver andre รฅ finne ut hva setningen handler om. For eksempel: ยซHva er temperaturen i India?ยป Her er konteksten at brukeren รธnsker รฅ vite ยซtemperaturen i Indiaยป. Kort sagt, hovedmรฅlet med en setning er kontekst. Ordene eller setningene som omgir muntlig eller skriftlig sprรฅk bidrar til รฅ bestemme betydningen av konteksten. Word2vec lรฆrer vektorrepresentasjonen av ord gjennom disse kontekstene.

Hva gjรธr Word2vec?

Fรธr Word-innbygging

Det er viktig รฅ vite hvilken tilnรฆrming som ble brukt fรธr ordinnbygging og hva dens ulemper er, og deretter skal vi se hvordan disse ulempene overvinnes ved ordinnbygging ved hjelp av Word2vec-tilnรฆrmingen. Til slutt skal vi gรฅ videre til hvordan Word2vec fungerer, fordi det er viktig รฅ forstรฅ hvordan det fungerer.

Tilnรฆrming for latent semantisk analyse

Dette er tilnรฆrmingen som ble brukt fรธr ordinnbygging. Den brukte konseptet med en ordpose, der ord er representert i form av kodede vektorer. Det er en sparsom vektorrepresentasjon der dimensjonen er lik stรธrrelsen pรฅ vokabularet. Hvis ordet forekommer i ordboken, telles det; ellers telles det ikke. For รฅ forstรฅ mer, se 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())

Utgang:

[[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 modulen som brukes til รฅ lagre vokabularet basert pรฅ tilpasning av ordene i det. Dette importeres fra sklearn.
  2. Lag objektet ved รฅ bruke klassen CountVectorizer.
  3. Skriv dataene i listen som skal tilpasses i CountVectorizer.
  4. Data passer inn i objektet som er opprettet fra klassen CountVectorizer.
  5. Bruk en ordsekkmetode for รฅ telle ord i dataene ved hjelp av vokabularet. Hvis et ord eller token ikke er tilgjengelig i vokabularet, settes en slik indeksposisjon til null.
  6. Variabelen i linje 5, som er x, konverteres til en matrise (en metode tilgjengelig for x). Dette gir antallet av hvert token i setningen eller listen som er oppgitt i linje 3.
  7. Dette viser funksjonene som er en del av vokabularet nรฅr det tilpasses ved hjelp av dataene i linje 4.

I den latente semantiske tilnรฆrmingen representerer raden unike ord, mens kolonnen representerer antall ganger ordet forekommer i dokumentet. Det er en representasjon av ord i form av en dokumentmatrise. Termfrekvens-invers dokumentfrekvens (TF-IDF) brukes til รฅ telle frekvensen av ord i dokumentet, som er frekvensen av termen i dokumentet delt pรฅ frekvensen av termen i hele korpuset.

Mangel pรฅ Bag of Words-metoden

  • Den ignorerer rekkefรธlgen pรฅ ordene; for eksempel, dette er dรฅrlig = dรฅrlig er dette.
  • Den ignorerer ordenes kontekst. Anta at vi skriver setningen ยซHan elsket bรธker. Utdanning finnes best i bรธkerยป. Det ville opprette to vektorer: รฉn for ยซHan elsket bรธkerยป og en annen for ยซUtdanning finnes best i bรธkerยป. Den ville behandle begge som ortogonale, noe som gjรธr dem uavhengige, men i virkeligheten er de relatert til hverandre.

For รฅ overvinne disse begrensningene ble ordinnebygging utviklet, og Word2vec er รฉn tilnรฆrming som brukes for รฅ implementere det.

Hvordan fungerer Word2vec?

Word2vec lรฆrer et ord ved รฅ forutsi konteksten i det omkringliggende ordet. La oss for eksempel ta ordet ยซHan elsker Fotball."

Vi รธnsker รฅ beregne Word2vec for ordet: elsker.

Anta:

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 beveger seg over hvert ord i korpuset. Syntaktiske sรฅ vel som semantiske forhold mellom ord er kodet. Dette hjelper med รฅ finne lignende og analoge ord.

Alle tilfeldige trekk ved ordet elsker beregnes. Disse funksjonene endres eller oppdateres i forhold til naboord eller kontekstord ved hjelp av en Ryggformering metoden.

En annen mรฅte รฅ lรฆre pรฅ er at hvis konteksten til to ord er like, eller to ord har lignende trekk, sรฅ er slike ord beslektet.

Word2vec Architecture

Det er to arkitekturer som brukes av Word2vec:

  1. Kontinuerlig pose med ord (CBOW)
  2. Skip-gram

Fรธr vi gรฅr videre, la oss diskutere hvorfor disse arkitekturene eller modellene er viktige fra et ordrepresentasjonsperspektiv. Lรฆring av ordrepresentasjon er i hovedsak uovervรฅket, men mรฅl/etiketter er nรธdvendige for รฅ trene modellen. Skip-gram og CBOW konverterer den uovervรฅkede representasjonen til en overvรฅket form for modelltrening.

I CBOW blir det gjeldende ordet forutsagt ved รฅ bruke vinduet til omkringliggende kontekstvinduer. For eksempel, hvis wi-1, Wi-2, Wjeg + 1, Wjeg + 2 gis ord eller kontekst, vil denne modellen gi wi.

Skip-Gram utfรธrer det motsatte av CBOW, som innebรฆrer at den forutsier den gitte sekvensen eller konteksten fra ordet. Du kan reversere eksemplet for รฅ forstรฅ det. Hvis wi er gitt, vil dette forutsi konteksten, eller wi-1, Wi-2, Wjeg + 1, Wjeg + 2.

Word2vec gir et alternativ for รฅ velge mellom CBOW (Continuous Bag of Words) og skip-gram. Slike parametere gis under treningen av modellen. Man kan ha muligheten til รฅ bruke negativ sampling eller et hierarkisk softmax-lag.

Kontinuerlig pose med ord

La oss tegne et enkelt Word2vec-eksempeldiagram for รฅ forstรฅ den kontinuerlige ยซpose-of-wordsยป-arkitekturen.

Kontinuerlig pose med ord Architecture

Kontinuerlig pose med ord Architecture

La oss regne ut ligningene matematisk. Anta at V er vokabularstรธrrelsen og N er stรธrrelsen pรฅ det skjulte laget. Inndata er definert som { xi-1, xi-2, xjeg + 1, xjeg + 2 }. Vi fรฅr vektmatrisen ved รฅ multiplisere V * N. En annen matrise fรฅs ved รฅ multiplisere inngangsvektoren med vektmatrisen. Dette kan ogsรฅ forstรฅs av fรธlgende ligning.

h = xitW

hvor xit og W er henholdsvis inngangsvektoren og vektmatrisen.

For รฅ beregne samsvaret mellom kontekst og det neste ordet, se ligningen nedenfor.

u = predikert representasjon * h

hvor predikert representasjon er hentet fra modellen i ligningen ovenfor.

Skip-Gram-modell

Skip-Gram-metoden brukes til รฅ forutsi en setning gitt et inndataord. For รฅ forstรฅ det bedre, la oss tegne diagrammet som er vist i Word2vec-eksemplet nedenfor.

Skip-Gram-modell

Skip-Gram-modell

Man kan behandle det som det motsatte av modellen med kontinuerlig ordpose, hvor inputen er ordet og modellen gir konteksten eller sekvensen. Vi kan ogsรฅ konkludere med at mรฅlet mates til inputen, og utdatalaget replikeres flere ganger for รฅ fรฅ plass til det valgte antallet kontekstord. Feilvektoren fra alle utdatalagene summeres for รฅ justere vekter via en tilbakepropageringsmetode.

Hvilken modell รฅ velge?

CBOW er flere ganger raskere enn skip-gram og gir en bedre frekvens for hyppige ord, mens skip-gram trenger en liten mengde treningsdata og representerer selv sjeldne ord eller uttrykk. Tabellen nedenfor sammenligner begge arkitekturene med et raskt blikk.

Aspekt CBOW Skip-Gram
Prediksjon Forutsier mรฅlordet ut fra konteksten Forutsier kontekst fra mรฅlordet
Treningshastighet Raskere Langsommere
Hyppige ord Hรธyere nรธyaktighet Lavere nรธyaktighet
Sjeldne ord Svakere representasjon Sterkere representasjon
Treningsdata Trenger mer data Fungerer med mindre data

Forholdet mellom Word2vec og NLTK

NLTK er det naturlige Language Toolkit. Det brukes til forbehandling av tekst. Man kan utfรธre forskjellige operasjoner som ordklassetagging, lemmatisering, stemming, fjerning av stoppord og fjerning av sjeldne eller minst brukte ord. Det hjelper med รฅ rense teksten samt forberede funksjoner fra de effektive ordene. Pรฅ den annen side brukes Word2vec til semantisk (nรฆrt beslektede elementer sammen) og syntaktisk (sekvens) matching. Ved รฅ bruke Word2vec kan man finne lignende ord, ulike ord, dimensjonal reduksjon og mye annet. En annen viktig funksjon i Word2vec er รฅ konvertere den hรธyere dimensjonale representasjonen av tekst til lavere dimensjonale vektorer.

Hvor skal jeg bruke NLTK og Word2vec?

Hvis man mรฅ utfรธre noen generelle oppgaver som nevnt ovenfor, som tokenisering, POS-tagging og parsing, mรฅ man bruke NLTK, mens man mรฅ bruke Word2vec for รฅ forutsi ord i henhold til kontekst, emnemodellering eller dokumentlikhet.

Relasjon mellom NLTK og Word2vec ved hjelp av kode

NLTK og Word2vec kan brukes sammen for รฅ finne lignende ordrepresentasjoner eller syntaktisk matching. NLTK-verktรธysettet kan brukes til รฅ laste inn mange pakker som fรธlger med NLTK, og en modell kan opprettes ved hjelp av Word2vec. Den kan deretter testes pรฅ sanntidsord. La oss se kombinasjonen av begge i fรธlgende kode. Fรธr du gรฅr videre med prosessen, ta en titt pรฅ korpusa som NLTK tilbyr. Du kan laste den ned ved hjelp av kommandoen:

nltk(nltk.download('all'))

Forholdet mellom NLTK og Word2vec

Corpora lastet ned ved hjelp av NLTK

Se skjermbildet 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 mellom NLTK og Word2vec ved hjelp av Code

Utgang:

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

  1. Nltk-biblioteket importeres, hvorfra du kan laste ned abc-korpuset som vi skal bruke i neste trinn.
  2. Gensim er importert. Hvis Gensim Word2vec ikke er installert, installer det ved รฅ bruke kommandoen ยซpip3 install gensimยป. Se skjermbildet nedenfor.
Installere Gensim ved hjelp av PIP

Installere Gensim ved hjelp av PIP
  1. Importer abc-korpuset, som er lastet ned ved hjelp av nltk.download('abc').
  2. Send filene til Word2vec-modellen, som importeres ved hjelp av Gensim, som setninger.
  3. Vokabularet lagres i form av en variabel.
  4. Modellen testes pรฅ eksempelordet vitenskap, ettersom disse filene er relatert til vitenskap.
  5. Her forutsies det lignende ordet ยซvitenskapยป av modellen.

Aktivatorer og Word2Vec

Aktiveringsfunksjonen til et nevron definerer utgangen fra det gitt et sett med input. Den er biologisk inspirert av aktivitet i hjernen vรฅr, der forskjellige nevroner aktiveres ved hjelp av forskjellige stimuli. La oss forstรฅ aktiveringsfunksjonen gjennom fรธlgende diagram.

Aktiveringsfunksjon i Word2vec

Forstรฅ aktiveringsfunksjonen

Her er x1, x2, โ€ฆ x4 nodene i det nevrale nettverket.

w1, w2, w3 er vektene til nodene.

Summen (ฮฃ) av alle vekter og nodeverdier fungerer som aktiveringsfunksjon.

Hvorfor aktiveringsfunksjon?

Hvis ingen aktiveringsfunksjon brukes, vil utgangen vรฆre lineรฆr, men funksjonaliteten til en lineรฆr funksjon er begrenset. For รฅ oppnรฅ kompleks funksjonalitet som objektdeteksjon, bildeklassifisering, osv.ping tekst ved hjelp av stemme, og mange andre ikke-lineรฆre utganger, er det behov for en aktiveringsfunksjon.

Hvordan aktiveringslaget beregnes i ordet innebygging (Word2vec)

Softmax-laget (normalisert eksponensiell funksjon) er utdata-lagsfunksjonen som aktiverer eller utlรธser hver node. En annen tilnรฆrming som brukes er hierarkisk softmax, hvor kompleksiteten beregnes ved O(log2V), mens i softmax er den O(V), hvor V er vokabularstรธrrelsen. Forskjellen mellom disse er reduksjonen av kompleksiteten i det hierarkiske softmax-laget. For รฅ forstรฅ funksjonaliteten, se pรฅ eksemplet pรฅ Word-innebygging nedenfor:

Hierarkisk Softmax-trelignende struktur

Hierarkisk softmax-trelignende struktur

Anta at vi รธnsker รฅ beregne sannsynligheten for รฅ observere ordet elsker gitt en viss kontekst. Flyten fra roten til bladnoden vil fรธrst bevege seg til node 2 og deretter til node 5. Sรฅ hvis vi har en vokabularstรธrrelse pรฅ 8, er det bare behov for tre beregninger. Dette tillater dekomponering av beregningen av sannsynligheten for ett ord (elsker).

Hvilke andre alternativer er tilgjengelige enn Hierarchical Softmax?

Generelt sett er de tilgjengelige innebyggingsalternativene Differensiert Softmax, CNN-Softmax, viktighetssampling, adaptiv viktighetssampling, stรธykontrastiv estimering, negativ sampling, selvnormalisering og sjelden normalisering.

Nรฅr det gjelder Word2vec, har vi negativ sampling tilgjengelig.

Negativ sampling er en mรฅte รฅ sample treningsdata pรฅ. Det ligner litt pรฅ stokastisk gradientnedstigning, men med noen forskjeller. Negativ sampling ser bare etter negative treningseksempler. Den er basert pรฅ stรธykontrastsiv estimering og sampler tilfeldig ord som ikke er i konteksten. Det er en rask treningsmetode og velger konteksten tilfeldig. Hvis det forutsagte ordet vises i den tilfeldig valgte konteksten, er begge vektorene nรฆr hverandre.

Hvilken konklusjon kan man trekke?

Aktivatorer aktiverer nevronene akkurat som nevronene vรฅre aktiveres av eksterne stimuli. Softmax-laget er en av output-lagets funksjoner som aktiverer nevronene ved innebygging av ord. I Word2vec har vi alternativer som hierarkisk softmax og negativ sampling. Ved hjelp av aktivatorer kan man konvertere en lineรฆr funksjon til en ikke-lineรฆr funksjon, og en kompleks maskinlรฆringsalgoritme kan implementeres ved hjelp av slike funksjoner.

Hva er Gensim?

Gensim er en รฅpen kildekode-emnemodellering og verktรธysett for behandling av naturlig sprรฅk som er implementert i Python og Cython. Gensim-verktรธysettet lar brukere importere Word2vec for emnemodellering for รฅ oppdage skjult struktur i teksten. Gensim tilbyr ikke bare en implementering av Word2vec, men ogsรฅ Doc2vec og FastText.

Denne delen fokuserer pรฅ Word2vec, sรฅ vi holder oss til det nรฅvรฆrende emnet.

Hvordan implementere Word2vec ved hjelp av Gensim

Frem til nรฅ har vi diskutert hva Word2vec er, de ulike arkitekturene, hvorfor det er et skifte fra en ordpose til Word2vec, forholdet mellom Word2vec og NLTK med livekode, og aktiveringsfunksjoner.

Nedenfor finner du en trinnvis metode for รฅ implementere Word2vec ved hjelp av Gensim:

Trinn 1) Datainnsamling

Det fรธrste trinnet for รฅ implementere enhver maskinlรฆringsmodell eller implementering av naturlig sprรฅkbehandling er datainnsamling.

Vennligst observer dataene for รฅ bygge en intelligent chatbot som vist i Gensim Word2vec-eksemplet nedenfor.

[{"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 hva vi forstรฅr ut fra dataene:

  • Disse dataene inneholder tre ting: tagg, mรธnster og responser. Taggen er intensjonen (hva som er diskusjonsemnet).
  • Dataene er i JSON-format.
  • Et mรธnster er et spรธrsmรฅl brukere stiller boten.
  • Svar er svarene som chatboten vil gi pรฅ det tilsvarende spรธrsmรฅlet/mรธnsteret.

Trinn 2) Dataforbehandling

Det er svรฆrt viktig รฅ behandle rรฅdataene. Hvis rensede data mates til maskinen, vil modellen reagere mer nรธyaktig og lรฆre dataene mer effektivt.

Dette trinnet innebรฆrer รฅ fjerne stoppord, stemming, unรธdvendige ord osv. Fรธr du gรฅr videre, er det viktig รฅ laste inn data og konvertere dem til en dataramme. Se koden nedenfor for dette.

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

Forklaring til Code:

  1. Siden dataene er i JSON-format, importeres json.
  2. Filen lagres i variabelen.
  3. Filen รฅpnes og lastes inn i datavariabelen.

Nรฅ er dataene importert, og det er pรฅ tide รฅ konvertere dataene til en dataramme. Se koden nedenfor for neste trinn.

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

Forklaring til Code:

1. Data konverteres til en dataramme ved hjelp av pandaer, som ble importert 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 stoppord importeres ved hjelp av stoppordmodulen fra nltk-verktรธysettet.

2. Alle ordene i teksten konverteres til smรฅ bokstaver ved hjelp av en for-betingelse og en lambda-funksjon. Lambda funksjon er en anonym funksjon.

3. Alle tekstradene i datarammen kontrolleres for tegnsetting, og disse filtreres.

4. Tegn som tall eller punktum fjernes ved hjelp av et regulรฆrt uttrykk.

5. Digits fjernes fra teksten.

6. Stoppord fjernes pรฅ dette stadiet.

7. Ord filtreres nรฅ, og forskjellige former av det samme ordet fjernes ved hjelp av lemmatisering. Med dette er vi ferdige med dataforbehandlingen.

Utgang:

, 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

Trinn 3) Bygging av nevrale nettverk ved hjelp av Word2vec

Nรฅ er det pรฅ tide รฅ bygge en modell ved hjelp av Gensim Word2vec-modulen. Vi mรฅ importere Word2vec fra Gensim. La oss gjรธre dette, og sรฅ skal vi bygge den, og i den siste fasen skal vi sjekke modellen pรฅ sanntidsdata.

from gensim.models import Word2Vec

Nรฅ kan vi bygge modellen med Word2Vec. Se neste kodelinje for รฅ lรฆre hvordan du oppretter modellen med Word2Vec. Tekst gis til modellen i form av en liste, sรฅ vi konverterer teksten fra datarammen til en liste ved hjelp av koden nedenfor.

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 til Code:

1. Opprettet bigger_list der den indre listen legges til. Dette er formatet som mates til modellen Word2Vec.

2. En lรธkke implementeres, og hver oppfรธring i mรธnsterkolonnen i datarammen itereres.

3. Hvert element i kolonnemรธnstrene deles og lagres i den indre listen li.

4. Den indre listen legges til den ytre listen.

5. Denne listen er gitt til Word2Vec-modellen. La oss forstรฅ noen av parameterne som er gitt her.

Min_antall: Den ignorerer alle ordene med en total frekvens som er lavere enn dette.

Stรธrrelse: Den forteller dimensjonaliteten til ordet vektorer.

arbeidere: Dette er trรฅdene for รฅ trene modellen.

Det finnes ogsรฅ andre alternativer, og noen viktige av disse er forklart nedenfor.

Vindu: Maksimal avstand mellom gjeldende og predikerte ord i en setning.

Sg: Det er en treningsalgoritme: 1 for skip-gram og 0 for en kontinuerlig pose med ord. Vi har diskutert disse i detalj ovenfor.

Hs: Hvis dette er 1, bruker vi hierarkisk softmax for trening, og hvis 0, brukes negativ sampling.

Alpha: Innledende lรฆringsrate.

La oss vise den endelige koden 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)

Trinn 4) Modelllagring

Modellen kan lagres i form av en bin-fil og en modellfil. Bin er det binรฆre formatet. Se linjene nedenfor for รฅ lagre modellen.

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

Forklaring av koden ovenfor

1. Modellen lagres i form av en .model-fil.

2. Modellen lagres i form av en .bin-fil.

Vi vil bruke denne modellen til รฅ gjรธre sanntidstesting, for eksempel lignende ord, ulike ord og vanligste ord.

Trinn 5) Laster modellen og utfรธrer sanntidstesting

Modellen lastes inn ved hjelp av koden nedenfor:

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

Hvis du vil skrive ut vokabularet fra den, gjรธres det ved รฅ bruke kommandoen nedenfor:

vocab = list(model.wv.vocab)

Vennligst se resultatet:

['see', 'thank', 'back', 'thanks', 'soon', 'open', 'mastercard', 'card', 'time', 'pay', 'talk', 'cash', 'one', 'please', 'goodbye', 'thats', 'helpful', 'hour', 'credit', 'hi', 'later', 'guidance', 'opening', 'timing', 'hello', 'helping', 'bye', 'tell', 'come', 'using', 'kind', 'available']

Trinn 6) De fleste lignende ord sjekker

La oss implementere tingene praktisk:

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

Vennligst se resultatet:

[('kind', 0.16104359924793243), ('using', 0.1352398842573166), ('come', 0.11500970274209976), ('later', 0.09989878535270691), ('helping', 0.04855936020612717), ('credit', 0.04659383371472359), ('pay', 0.0329081267118454), ('thank', 0.02484947443008423), ('hour', 0.0202352125197649), ('opening', 0.018177658319473267)]

Trinn 7) Samsvarer ikke med ord fra ord som er levert

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

Vi har levert ordene ยซVi sees senere, takk for besรธketยปDette skriver ut det mest ulike ordet fra disse ordene. La oss kjรธre denne koden og finne resultatet.

Resultatet etter utfรธrelse av koden ovenfor:

Thanks

Trinn 8) Finne likheten mellom to ord

Dette forteller resultatet i form av sannsynligheten for likhet mellom to ord. Se koden nedenfor for hvordan du utfรธrer denne delen.

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

Resultatet av koden ovenfor er som fรธlger:

0.13706

Du kan finne lignende ord ved รฅ kjรธre koden nedenfor:

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

Utdata fra koden ovenfor:

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

Spรธrsmรฅl og svar

Word2Vec produserer รฉn fast vektor per ord. Moderne AI-modeller som BERT og GPT genererer kontekstuelle innebygginger, som betyr at det samme ordet mottar forskjellige vektorer avhengig av den omkringliggende setningen, noe som fanger opp meningen mer presist.

Ja. Innebygging av ord er fortsatt nyttig for lette oppgaver, sรธk, anbefalinger og klynging der hastighet og lav databehandling er viktig. De fungerer ogsรฅ som det grunnleggende konseptet bak innbyggingslagene som brukes i store sprรฅkmodeller.

Nei. Word2Vec er et overfladisk nevralt nettverk med et enkelt skjult lag. Selv om det er inspirert av nevrale nettverk, regnes det ikke som dyp lรฆring, som krever flere skjulte lag mellom input og output.

Vanlige vektorstรธrrelser varierer fra 100 til 300 dimensjoner. Mindre stรธrrelser trenes raskere og passer til smรฅ datasett, mens stรธrre stรธrrelser fanger opp rikere relasjoner, men trenger mer data og beregning for รฅ unngรฅ overtilpasning.

Nei. Word2Vec kan ikke hรฅndtere ord utenfor vokabularet fordi det lรฆrer รฉn vektor per kjent ord. Modeller som FastText lรธser dette ved รฅ bygge ordvektorer fra tegn-n-grammer, noe som tillater representasjon av usynlige ord.

Oppsummer dette innlegget med: