For at få computeren til at forstå en skrevet tekst, kan vi repræsentere ordene som numeriske vektorer. En måde at gøre det på er ved at bruge Word-indlejringer, de er en måde at repræsentere ord som numeriske vektorer. Disse vektorer fanger ordenes betydning og deres relationer til andre ord i sproget. Ordindlejringer kan genereres ved hjælp af uovervågede indlæringsalgoritmer som f.eks Word2vec, Handske , eller Hurtigtekst .
Word2vec er en neural netværksbaseret metode til at generere ordindlejringer, som er tætte vektorrepræsentationer af ord, der fanger deres semantiske betydning og relationer. Der er to hovedtilgange til implementering af Word2vec:
- Kontinuerlig pose med ord (CBOW)
- Spring gram over
Hvad er en kontinuerlig pose med ord (CBOW)?
Continuous Bag of Words (CBOW) er en populær naturlig sprogbehandlingsteknik, der bruges til at generere ordindlejringer. Ordindlejringer er vigtige for mange NLP-opgaver, fordi de fanger semantiske og syntaktiske relationer mellem ord i et sprog. CBOW er en neural netværksbaseret algoritme, der forudsiger et målord givet dets omgivende kontekstord. Det er en type uden opsyn læring, hvilket betyder, at det kan lære af umærkede data, og det bruges ofte til at fortræne ordindlejringer, der kan bruges til forskellige NLP-opgaver såsom sentimentanalyse, maskinoversættelse.

Eksempel på en CBOW-model
Er der nogen forskel mellem Bag-of-Words (BoW)-modellen og Continuous Bag-of-Words (CBOW)?
- Bag-of-Words-modellen og Continuous Bag-of-Words-modellen er begge teknikker, der bruges i naturlig sprogbehandling til at repræsentere tekst i et computerlæsbart format, men de adskiller sig i, hvordan de fanger kontekst.
- BoW-modellen repræsenterer tekst som en samling af ord og deres frekvens i et givet dokument eller korpus. Den tager ikke hensyn til den rækkefølge eller kontekst, som ordene optræder i, og derfor kan den ikke indfange den fulde betydning af teksten. BoW-modellen er enkel og nem at implementere, men den har begrænsninger i at fange sprogets betydning.
- I modsætning hertil er CBOW-modellen en neural netværksbaseret tilgang, der fanger ordenes kontekst. Den lærer at forudsige målordet baseret på de ord, der vises før og efter det i et givet kontekstvindue. Ved at overveje de omgivende ord, kan CBOW-modellen bedre fange betydningen af et ord i en given kontekst.
Arkitektur af CBOW-modellen
CBOW-modellen bruger målordet omkring kontekstordet for at forudsige det. Overvej ovenstående eksempel Hun er en fantastisk danser. CBOW-modellen konverterer denne sætning til par af kontekstord og målord. Ordparringerne ville se sådan ud ([hun, en], er), ([er, fantastisk], a) ([en, danser], fantastisk) have vinduesstørrelse=2.

CBOW arkitektur
Modellen overvejer kontekstordene og forsøger at forudsige målleddet. De fire 1∗W inputvektorer vil blive sendt til inputlaget, hvis de har fire ord, da kontekstord bruges til at forudsige ét målord. Det skjulte lag vil modtage inputvektorerne og derefter gange dem med en W∗N-matrix. 1∗N-outputtet fra det skjulte lag kommer til sidst ind i sumlaget, hvor vektorerne opsummeres elementmæssigt, inden en endelig aktivering udføres, og outputtet opnås fra outputlaget.
Kodeimplementering af CBOW
Lad os implementere en ordindlejring for at vise ligheden mellem ord ved hjælp af CBOW-modellen. I denne artikel har jeg defineret mit eget korpus af ord, du bruger et hvilket som helst datasæt. Først vil vi importere alle de nødvendige biblioteker og indlæse datasættet. Dernæst vil vi tokenisere hvert ord og konvertere det til en vektor af heltal.
Python3
apache
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)> |
>
if else statement java
>
Produktion:
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]]>
Nu vil vi bygge CBOW-modellen med vinduesstørrelse = 2.
Python3
centerbillede 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'>)> |
>
>
Dernæst vil vi bruge modellen til at visualisere indlejringerne.
Python3
char til streng java
# 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()> |
>
>
Produktion:

Vektoriseret repræsentation af ordene ved hjælp af CBOW-modellen
Denne visualisering giver os mulighed for at observere ligheden mellem ordene baseret på deres indlejringer. Ord, der ligner hinanden i betydning eller sammenhæng, forventes at være tæt på hinanden i plottet.