logo

Kontinuerlig pose med ord (CBOW) i NLP

For å få datamaskinen til å forstå en skrevet tekst, kan vi representere ordene som numeriske vektorer. En måte å gjøre det på er ved å bruke Word-innbygging, de er en måte å representere ord som numeriske vektorer. Disse vektorene fanger opp betydningen av ordene og deres forhold til andre ord i språket. Ordinnbygginger kan genereres ved hjelp av uovervåket læringsalgoritmer som f.eks Word2vec, Hanske , eller Hurtigtekst .

Word2vec er en nevrale nettverksbasert metode for å generere ordinnbygginger, som er tette vektorrepresentasjoner av ord som fanger deres semantiske betydning og relasjoner. Det er to hovedmetoder for å implementere Word2vec:



    Kontinuerlig pose med ord (CBOW)
  • Hopp over gram

Hva er en kontinuerlig pose med ord (CBOW)?

Continuous Bag of Words (CBOW) er en populær naturlig språkbehandlingsteknikk som brukes til å generere ordinnbygging. Ordinnbygging er viktig for mange NLP-oppgaver fordi de fanger opp semantiske og syntaktiske forhold mellom ord i et språk. CBOW er en nevrale nettverksbasert algoritme som forutsier et målord gitt dets omgivende kontekstord. Det er en type uten tilsyn læring, noe som betyr at den kan lære av umerkede data, og den brukes ofte til å forhåndstrene ordinnbygginger som kan brukes til forskjellige NLP-oppgaver som sentimentanalyse, maskinoversettelse.

Eksempel på en CBOW-modell

Eksempel på en CBOW-modell

Er det noen forskjell mellom Bag-of-Words (BoW)-modellen og Continuous Bag-of-Words (CBOW)?

  • Bag-of-Words-modellen og Continuous Bag-of-Words-modellen er begge teknikker som brukes i naturlig språkbehandling for å representere tekst i et datamaskinlesbart format, men de er forskjellige i hvordan de fanger kontekst.
  • BoW-modellen representerer tekst som en samling av ord og deres frekvens i et gitt dokument eller korpus. Den tar ikke hensyn til rekkefølgen eller konteksten ordene vises i, og derfor kan det hende at den ikke fanger hele betydningen av teksten. BoW-modellen er enkel og lett å implementere, men den har begrensninger i å fange opp betydningen av språk.
  • I motsetning til dette er CBOW-modellen en nevrale nettverksbasert tilnærming som fanger konteksten til ord. Den lærer å forutsi målordet basert på ordene som vises før og etter det i et gitt kontekstvindu. Ved å vurdere de omkringliggende ordene kan CBOW-modellen bedre fange betydningen av et ord i en gitt kontekst.

Arkitektur av CBOW-modellen

CBOW-modellen bruker målordet rundt kontekstordet for å forutsi det. Tenk på eksemplet ovenfor Hun er en flott danser. CBOW-modellen konverterer denne frasen til par med kontekstord og målord. Ordparene vil se slik ut ([hun, en], er), ([er, flott], a) ([en, danser], flott) ha vindusstørrelse=2.



CBOW arkitektur

CBOW arkitektur

Modellen vurderer kontekstordene og prøver å forutsi målleddet. De fire 1∗W inngangsvektorene vil bli sendt til inngangslaget hvis de har fire ord da kontekstord brukes til å forutsi ett målord. Det skjulte laget vil motta inngangsvektorene og deretter multiplisere dem med en W∗N-matrise. 1∗N-utgangen fra det skjulte laget går til slutt inn i sumlaget, hvor vektorene blir elementvis summert før en endelig aktivering utføres og utgangen hentes fra utgangslaget.

Kodeimplementering av CBOW

La oss implementere en ordinnbygging for å vise likheten mellom ord ved å bruke CBOW-modellen. I denne artikkelen har jeg definert mitt eget korpus av ord, du bruker hvilket som helst datasett. Først vil vi importere alle nødvendige biblioteker og laste inn datasettet. Deretter vil vi tokenisere hvert ord og konvertere det til en vektor av heltall.



Python3


hva er autowired i java



import> tensorflow as tf> from> tensorflow.keras.models>import> Sequential> from> tensorflow.keras.layers>import> Dense,> >Embedding, Lambda> from> tensorflow.keras.preprocessing.text>import> Tokenizer> import> numpy as np> import> matplotlib.pyplot as plt> from> sklearn.decomposition>import> PCA> # Define the corpus> corpus>=> [>'The cat sat on the mat'>,> >'The dog ran in the park'>,> >'The bird sang in the tree'>]> # Convert the corpus to a sequence of integers> tokenizer>=> Tokenizer()> tokenizer.fit_on_texts(corpus)> sequences>=> tokenizer.texts_to_sequences(corpus)> print>('After converting our words>in> the corpus> into vector of integers:')> print>(sequences)>

>

javascript global variabel

>

Produksjon:

After converting our words in the corpus into vector of integers: [[1, 3, 4, 5, 1, 6], [1, 7, 8, 2, 1, 9], [1, 10, 11, 2, 1, 12]]>

Nå skal vi bygge CBOW-modellen med vindusstørrelse = 2.

Python3

midtbilde i css




# Define the parameters> vocab_size>=> len>(tokenizer.word_index)>+> 1> embedding_size>=> 10> window_size>=> 2> # Generate the context-target pairs> contexts>=> []> targets>=> []> for> sequence>in> sequences:> >for> i>in> range>(window_size,>len>(sequence)>-> window_size):> >context>=> sequence[i>-> window_size:i]>+>> >sequence[i>+> 1>:i>+> window_size>+> 1>]> >target>=> sequence[i]> >contexts.append(context)> >targets.append(target)> # Convert the contexts and targets to numpy arrays> X>=> np.array(contexts)> # Define the CBOW model> model>=> Sequential()> model.add(Embedding(input_dim>=>vocab_size,> >output_dim>=>embedding_size,> >input_length>=>2>*>window_size))> model.add(Lambda(>lambda> x: tf.reduce_mean(x, axis>=>1>)))> model.add(Dense(units>=>vocab_size, activation>=>'softmax'>))> model.save_weights(>'cbow_weights.h5'>)> # Load the pre-trained weights> model.load_weights(>'cbow_weights.h5'>)>

>

>

Deretter skal vi bruke modellen til å visualisere innbyggingene.

Python3




typer nettverk
# Get the word embeddings> embeddings>=> model.get_weights()[>0>]> # Perform PCA to reduce the dimensionality> # of the embeddings> pca>=> PCA(n_components>=>2>)> reduced_embeddings>=> pca.fit_transform(embeddings)> # Visualize the embeddings> plt.figure(figsize>=>(>5>,>5>))> for> i, word>in> enumerate>(tokenizer.word_index.keys()):> >x, y>=> reduced_embeddings[i]> >plt.scatter(x, y)> >plt.annotate(word, xy>=>(x, y), xytext>=>(>5>,>2>),> >textcoords>=>'offset points'>,> >ha>=>'right'>, va>=>'bottom'>)> plt.show()>

>

>

Produksjon:

Vektorisert representasjon av ordene ved hjelp av CBOW-modellen

Vektorisert representasjon av ordene ved hjelp av CBOW-modellen

Denne visualiseringen lar oss observere likheten til ordene basert på deres innebygging. Ord som er like i betydning eller kontekst forventes å være nær hverandre i handlingen.