Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Implementering av Word2Vec | Ordinnbygginger
Introduksjon til NLP

bookImplementering av Word2Vec

Etter å ha forstått hvordan Word2Vec fungerer, går vi videre til å implementere det ved hjelp av Python. Gensim-biblioteket, et robust åpen kildekode-verktøy for behandling av naturlig språk, tilbyr en enkel implementasjon gjennom Word2Vec-klassen i gensim.models.

Forberedelse av data

Word2Vec krever at tekstdataene er tokenisert, det vil si delt opp i en liste av lister hvor hver indre liste inneholder ordene fra en bestemt setning. I dette eksemplet bruker vi romanen Emma av den engelske forfatteren Jane Austen som vårt korpus. Vi laster inn en CSV-fil som inneholder forhåndsprosesserte setninger og deler deretter hver setning opp i ord:

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

emma_df['Sentence'].str.split() bruker .split()-metoden på hver setning i 'Sentence'-kolonnen, noe som resulterer i en liste med ord for hver setning. Siden setningene allerede er forhåndsbehandlet, med ord adskilt med mellomrom, er .split()-metoden tilstrekkelig for denne tokeniseringen.

Trening av Word2Vec-modellen

Nå skal vi fokusere på å trene Word2Vec-modellen ved å bruke de tokeniserte dataene. Word2Vec-klassen tilbyr en rekke parametere for tilpasning. De mest brukte parameterne er:

  • vector_size (standardverdi 100): dimensjonalitet eller størrelse på ordembeddingene;
  • window (standardverdi 5): størrelsen på kontekstvinduet;
  • min_count (standardverdi 5): ord som forekommer sjeldnere enn dette antallet blir ignorert;
  • sg (standardverdi 0): modellarkitekturen som skal brukes (1 for Skip-gram, 0 for CBoW).
  • cbow_mean (standardverdi 1): angir om CBoW-inngangskonteksten summeres (0) eller gjennomsnittberegnes (1)

Når det gjelder modellarkitekturer, er CBoW egnet for større datasett og situasjoner der beregningseffektivitet er avgjørende. Skip-gram er derimot å foretrekke for oppgaver som krever detaljert forståelse av ordkontekster, spesielt effektivt i mindre datasett eller når man arbeider med sjeldne ord.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Her setter vi embedding-størrelsen til 200, kontekstvinduet til 5, og inkluderer alle ord ved å sette min_count=1. Ved å sette sg=0, valgte vi å bruke CBoW-modellen.

Note
Les mer

Valg av riktig embedding-størrelse og kontekstvindu innebærer avveininger. Større embeddinger fanger opp mer mening, men øker beregningskostnaden og risikoen for overtilpasning. Mindre kontekstvinduer er bedre til å fange opp syntaks, mens større er bedre til å fange opp semantikk.

Finne lignende ord

Når ord er representert som vektorer, kan vi sammenligne dem for å måle likhet. Selv om det er mulig å bruke avstand, bærer retningen til en vektor ofte mer semantisk betydning enn størrelsen, spesielt i ord-embedding.

Å bruke vinkelen som et likhetsmål er imidlertid ikke så praktisk. I stedet kan vi bruke cosinus til vinkelen mellom to vektorer, også kjent som cosinuslikhet. Den varierer fra -1 til 1, hvor høyere verdier indikerer sterkere likhet. Denne tilnærmingen fokuserer på hvor godt vektorene er justert, uavhengig av lengde, noe som gjør den ideell for å sammenligne ords betydning. Her er en illustrasjon:

Angles

Jo høyere cosinuslikhet, desto mer like er de to vektorene, og omvendt. For eksempel, hvis to ordvektorer har en cosinuslikhet nær 1 (vinkelen nær 0 grader), indikerer det at de er nært beslektet eller like i kontekst innenfor vektorrommet.

La oss nå finne de fem mest like ordene til ordet "man" ved hjelp av cosinuslikhet:

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv gir tilgang til ordvektorene i den trente modellen, mens metoden .most_similar() finner ordene hvis embeddinger er nærmest embeddingen til det angitte ordet, basert på cosinuslikhet. Parameteren topn bestemmer hvor mange av de N mest like ordene som skal returneres.

question mark

Hvilken modell er bedre for å håndtere sjeldne ord i et korpus?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain how to interpret the output of the most_similar() method?

What other parameters can I adjust in the Word2Vec model for different results?

How can I use the trained model to find similarities between other words?

Awesome!

Completion rate improved to 3.45

bookImplementering av Word2Vec

Sveip for å vise menyen

Etter å ha forstått hvordan Word2Vec fungerer, går vi videre til å implementere det ved hjelp av Python. Gensim-biblioteket, et robust åpen kildekode-verktøy for behandling av naturlig språk, tilbyr en enkel implementasjon gjennom Word2Vec-klassen i gensim.models.

Forberedelse av data

Word2Vec krever at tekstdataene er tokenisert, det vil si delt opp i en liste av lister hvor hver indre liste inneholder ordene fra en bestemt setning. I dette eksemplet bruker vi romanen Emma av den engelske forfatteren Jane Austen som vårt korpus. Vi laster inn en CSV-fil som inneholder forhåndsprosesserte setninger og deler deretter hver setning opp i ord:

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

emma_df['Sentence'].str.split() bruker .split()-metoden på hver setning i 'Sentence'-kolonnen, noe som resulterer i en liste med ord for hver setning. Siden setningene allerede er forhåndsbehandlet, med ord adskilt med mellomrom, er .split()-metoden tilstrekkelig for denne tokeniseringen.

Trening av Word2Vec-modellen

Nå skal vi fokusere på å trene Word2Vec-modellen ved å bruke de tokeniserte dataene. Word2Vec-klassen tilbyr en rekke parametere for tilpasning. De mest brukte parameterne er:

  • vector_size (standardverdi 100): dimensjonalitet eller størrelse på ordembeddingene;
  • window (standardverdi 5): størrelsen på kontekstvinduet;
  • min_count (standardverdi 5): ord som forekommer sjeldnere enn dette antallet blir ignorert;
  • sg (standardverdi 0): modellarkitekturen som skal brukes (1 for Skip-gram, 0 for CBoW).
  • cbow_mean (standardverdi 1): angir om CBoW-inngangskonteksten summeres (0) eller gjennomsnittberegnes (1)

Når det gjelder modellarkitekturer, er CBoW egnet for større datasett og situasjoner der beregningseffektivitet er avgjørende. Skip-gram er derimot å foretrekke for oppgaver som krever detaljert forståelse av ordkontekster, spesielt effektivt i mindre datasett eller når man arbeider med sjeldne ord.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Her setter vi embedding-størrelsen til 200, kontekstvinduet til 5, og inkluderer alle ord ved å sette min_count=1. Ved å sette sg=0, valgte vi å bruke CBoW-modellen.

Note
Les mer

Valg av riktig embedding-størrelse og kontekstvindu innebærer avveininger. Større embeddinger fanger opp mer mening, men øker beregningskostnaden og risikoen for overtilpasning. Mindre kontekstvinduer er bedre til å fange opp syntaks, mens større er bedre til å fange opp semantikk.

Finne lignende ord

Når ord er representert som vektorer, kan vi sammenligne dem for å måle likhet. Selv om det er mulig å bruke avstand, bærer retningen til en vektor ofte mer semantisk betydning enn størrelsen, spesielt i ord-embedding.

Å bruke vinkelen som et likhetsmål er imidlertid ikke så praktisk. I stedet kan vi bruke cosinus til vinkelen mellom to vektorer, også kjent som cosinuslikhet. Den varierer fra -1 til 1, hvor høyere verdier indikerer sterkere likhet. Denne tilnærmingen fokuserer på hvor godt vektorene er justert, uavhengig av lengde, noe som gjør den ideell for å sammenligne ords betydning. Her er en illustrasjon:

Angles

Jo høyere cosinuslikhet, desto mer like er de to vektorene, og omvendt. For eksempel, hvis to ordvektorer har en cosinuslikhet nær 1 (vinkelen nær 0 grader), indikerer det at de er nært beslektet eller like i kontekst innenfor vektorrommet.

La oss nå finne de fem mest like ordene til ordet "man" ved hjelp av cosinuslikhet:

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv gir tilgang til ordvektorene i den trente modellen, mens metoden .most_similar() finner ordene hvis embeddinger er nærmest embeddingen til det angitte ordet, basert på cosinuslikhet. Parameteren topn bestemmer hvor mange av de N mest like ordene som skal returneres.

question mark

Hvilken modell er bedre for å håndtere sjeldne ord i et korpus?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 3
some-alt