Pentru a face computerul să înțeleagă un text scris, putem reprezenta cuvintele ca vectori numerici. O modalitate de a face acest lucru este prin utilizarea înglobărilor de cuvinte, acestea sunt o modalitate de a reprezenta cuvintele ca vectori numerici. Acești vectori captează sensul cuvintelor și relațiile lor cu alte cuvinte din limbă. Înglobarile de cuvinte pot fi generate folosind algoritmi de învățare nesupravegheat, cum ar fi Word2vec, Mănușă , sau FastText .
Word2vec este o metodă bazată pe rețea neuronală pentru generarea de înglobări de cuvinte, care sunt reprezentări vectoriale dense ale cuvintelor care surprind semnificația și relațiile lor semantice. Există două abordări principale pentru implementarea Word2vec:
- Pungă continuă de cuvinte (CBOW)
- Sari peste gram
Ce este un sac continuu de cuvinte (CBOW)?
Continuous Bag of Words (CBOW) este o tehnică populară de procesare a limbajului natural, folosită pentru a genera încorporarea cuvintelor. Înglobarile de cuvinte sunt importante pentru multe sarcini NLP, deoarece captează relațiile semantice și sintactice dintre cuvintele dintr-o limbă. CBOW este un algoritm bazat pe rețea neuronală care prezice un cuvânt țintă având în vedere cuvintele din contextul înconjurător. Este un tip de nesupravegheat învățare, ceea ce înseamnă că poate învăța din date neetichetate și este adesea folosit pentru a pre-antrenează înglobările de cuvinte care pot fi utilizate pentru diferite sarcini NLP, cum ar fi analiza sentimentelor, traducerea automată.

Exemplu de model CBOW
Există vreo diferență între modelul Bag-of-Words (BoW) și Continuous Bag-of-Words (CBOW)?
- Modelul Bag-of-Words și modelul Continuous Bag-of-Words sunt ambele tehnici utilizate în procesarea limbajului natural pentru a reprezenta textul într-un format care poate fi citit de computer, dar diferă în modul în care captează contextul.
- Modelul BoW reprezintă textul ca o colecție de cuvinte și frecvența acestora într-un document sau corpus dat. Nu ia în considerare ordinea sau contextul în care apar cuvintele și, prin urmare, este posibil să nu capteze sensul complet al textului. Modelul BoW este simplu și ușor de implementat, dar are limitări în capturarea sensului limbajului.
- În schimb, modelul CBOW este o abordare bazată pe rețele neuronale care surprinde contextul cuvintelor. Învață să prezică cuvântul țintă pe baza cuvintelor care apar înainte și după el într-o fereastră de context dată. Luând în considerare cuvintele din jur, modelul CBOW poate surprinde mai bine sensul unui cuvânt într-un context dat.
Arhitectura modelului CBOW
Modelul CBOW folosește cuvântul țintă în jurul cuvântului context pentru a-l prezice. Luați în considerare exemplul de mai sus Este o mare dansatoare. Modelul CBOW convertește această frază în perechi de cuvinte context și cuvinte țintă. Împerecherile de cuvinte ar apărea astfel ([ea, a], este), ([este, grozav], a) ([a, dansatoare], grozav) având dimensiunea ferestrei=2.

Arhitectura CBOW
Modelul ia în considerare cuvintele de context și încearcă să prezică termenul țintă. Cei patru vectori de intrare de 1∗W vor fi trecuți la stratul de intrare dacă au patru cuvinte ca cuvinte de context sunt folosite pentru a prezice un cuvânt țintă. Stratul ascuns va primi vectorii de intrare și apoi îi va înmulți cu o matrice W∗N. Ieșirea de 1∗N din stratul ascuns intră în cele din urmă în stratul sumă, unde vectorii sunt însumați în funcție de elemente înainte ca o activare finală să fie efectuată și rezultatul este obținut din stratul de ieșire.
Implementarea codului CBOW
Să implementăm o încorporare a cuvintelor pentru a arăta asemănarea cuvintelor folosind modelul CBOW. În acest articol mi-am definit propriul corpus de cuvinte, utilizați orice set de date. Mai întâi, vom importa toate bibliotecile necesare și vom încărca setul de date. În continuare, vom tokeniza fiecare cuvânt și îl vom converti într-un vector de numere întregi.
Python3
întinde copaci
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)> |
>
>
Ieșire:
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]]>
Acum, vom construi modelul CBOW având dimensiunea ferestrei = 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'>)> |
>
>
În continuare, vom folosi modelul pentru a vizualiza înglobările.
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()> |
alfabetul numerelor
>
>
Ieșire:

Reprezentarea vectorizată a cuvintelor folosind modelul CBOW
Această vizualizare ne permite să observăm asemănarea cuvintelor pe baza înglobărilor lor. Se așteaptă ca cuvintele care au sens sau context similare să fie aproape unele de altele în complot.