För att få datorn att förstå en skriven text kan vi representera orden som numeriska vektorer. Ett sätt att göra det är genom att använda Word-inbäddningar, de är ett sätt att representera ord som numeriska vektorer. Dessa vektorer fångar ordens betydelse och deras relationer till andra ord i språket. Ordinbäddningar kan genereras med hjälp av oövervakade inlärningsalgoritmer som t.ex Word2vec, Handske , eller Snabbtext .
Word2vec är en neural nätverksbaserad metod för att generera ordinbäddningar, som är täta vektorrepresentationer av ord som fångar deras semantiska betydelse och relationer. Det finns två huvudsakliga metoder för att implementera Word2vec:
- Kontinuerlig påse med ord (CBOW)
- Hoppa över gram
Vad är en kontinuerlig påse med ord (CBOW)?
Continuous Bag of Words (CBOW) är en populär teknik för naturlig språkbehandling som används för att skapa ordinbäddningar. Ordinbäddningar är viktiga för många NLP-uppgifter eftersom de fångar semantiska och syntaktiska relationer mellan ord i ett språk. CBOW är en neural nätverksbaserad algoritm som förutsäger ett målord givet dess omgivande kontextord. Det är en typ av oövervakad inlärning, vilket betyder att den kan lära sig av omärkta data, och den används ofta för att förträna ordinbäddningar som kan användas för olika NLP-uppgifter såsom sentimentanalys, maskinöversättning.

Exempel på en CBOW-modell
Finns det någon skillnad mellan Bag-of-Words (BoW)-modellen och Continuous Bag-of-Words (CBOW)?
- Bag-of-Words-modellen och Continuous Bag-of-Words-modellen är båda tekniker som används i naturlig språkbehandling för att representera text i ett datorläsbart format, men de skiljer sig i hur de fångar sammanhang.
- BoW-modellen representerar text som en samling ord och deras frekvens i ett givet dokument eller korpus. Den tar inte hänsyn till den ordning eller kontext som orden förekommer i, och därför kanske den inte fångar textens fulla betydelse. BoW-modellen är enkel och lätt att implementera, men den har begränsningar när det gäller att fånga språkets betydelse.
- Däremot är CBOW-modellen ett neuralt nätverksbaserat tillvägagångssätt som fångar ordens sammanhang. Den lär sig att förutsäga målordet baserat på orden som förekommer före och efter det i ett givet sammanhangsfönster. Genom att beakta de omgivande orden kan CBOW-modellen bättre fånga betydelsen av ett ord i ett givet sammanhang.
Arkitektur av CBOW-modellen
CBOW-modellen använder målordet runt kontextordet för att förutsäga det. Betrakta exemplet ovan Hon är en fantastisk dansare. CBOW-modellen omvandlar denna fras till par av sammanhangsord och målord. Ordparningarna skulle se ut så här ([hon, en], är), ([är, bra], a) ([en, dansare], bra) med fönsterstorlek=2.

CBOW arkitektur
Modellen tar hänsyn till kontextorden och försöker förutsäga måltermen. De fyra 1∗W ingångsvektorerna kommer att skickas till ingångsskiktet om de har fyra ord eftersom kontextord används för att förutsäga ett målord. Det dolda lagret kommer att ta emot indatavektorerna och sedan multiplicera dem med en W∗N-matris. 1∗N-utmatningen från det dolda lagret går slutligen in i summalagret, där vektorerna elementvis summeras innan en slutlig aktivering utförs och utdata erhålls från utdatalagret.
Kodimplementering av CBOW
Låt oss implementera en ordinbäddning för att visa likheten mellan ord med hjälp av CBOW-modellen. I den här artikeln har jag definierat min egen korpus av ord, du använder vilken datauppsättning som helst. Först kommer vi att importera alla nödvändiga bibliotek och ladda datamängden. Därefter kommer vi att tokenisera varje ord och konvertera det till en vektor med heltal.
ställ in avgränsare java
Python3
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)> |
>
>
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 kommer vi att bygga CBOW-modellen med fönsterstorlek = 2.
Python3
# 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'>)> |
>
instans av
>
git status -s
Därefter kommer vi att använda modellen för att visualisera inbäddningarna.
Python3
# 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:

Vektoriserad representation av orden med hjälp av CBOW-modellen
Denna visualisering tillåter oss att observera likheten mellan orden baserat på deras inbäddningar. Ord som liknar betydelse eller sammanhang förväntas ligga nära varandra i handlingen.