Per tal que l'ordinador entengui un text escrit, podem representar les paraules com a vectors numèrics. Una manera de fer-ho és utilitzant les incrustacions de Word, són una manera de representar paraules com a vectors numèrics. Aquests vectors capturen el significat de les paraules i les seves relacions amb altres paraules de la llengua. Les incrustacions de paraules es poden generar mitjançant algorismes d'aprenentatge no supervisat com ara Word2vec, Guant , o FastText .
Word2vec és un mètode basat en xarxes neuronals per generar incrustacions de paraules, que són representacions vectorials denses de paraules que capturen el seu significat semàntic i les seves relacions. Hi ha dos enfocaments principals per implementar Word2vec:
- Bossa contínua de paraules (CBOW)
- Omet el gram
Què és una bossa contínua de paraules (CBOW)?
Continuous Bag of Words (CBOW) és una tècnica popular de processament del llenguatge natural que s'utilitza per generar incrustacions de paraules. Les incrustacions de paraules són importants per a moltes tasques de PNL perquè capturen relacions semàntiques i sintàctiques entre paraules en un idioma. CBOW és un algorisme basat en xarxes neuronals que prediu una paraula objectiu donades les paraules del context que l'envolten. És un tipus de sense supervisió aprenentatge, és a dir, pot aprendre de dades sense etiquetar, i sovint s'utilitza per entrenar prèviament les incrustacions de paraules que es poden utilitzar per a diverses tasques de PNL, com ara l'anàlisi de sentiments, la traducció automàtica.

Exemple de model CBOW
Hi ha alguna diferència entre el model Bag-of-Words (BoW) i el Continuous Bag-of-Words (CBOW)?
- El model Bag-of-Words i el model Continuous Bag-of-Words són ambdues tècniques utilitzades en el processament del llenguatge natural per representar text en un format llegible per ordinador, però es diferencien en com capturen el context.
- El model BoW representa el text com una col·lecció de paraules i la seva freqüència en un document o corpus determinat. No té en compte l'ordre ni el context en què apareixen les paraules i, per tant, pot no captar el significat complet del text. El model BoW és senzill i fàcil d'implementar, però té limitacions a l'hora de captar el significat del llenguatge.
- En canvi, el model CBOW és un enfocament basat en xarxes neuronals que captura el context de les paraules. Aprèn a predir la paraula objectiu en funció de les paraules que apareixen abans i després d'ella en una finestra de context determinada. Tenint en compte les paraules que l'envolten, el model CBOW pot captar millor el significat d'una paraula en un context determinat.
Arquitectura del model CBOW
El model CBOW utilitza la paraula objectiu al voltant de la paraula context per predir-la. Considereu l'exemple anterior És una gran ballarina. El model CBOW converteix aquesta frase en parells de paraules de context i paraules objectiu. Els aparellaments de paraules apareixeria així ([ella, a], és), ([és, genial], a) ([a, ballarina], genial) amb mida de finestra = 2.

Arquitectura CBOW
El model considera les paraules del context i intenta predir el terme objectiu. Els quatre vectors d'entrada d'1∗W es passaran a la capa d'entrada si tenen quatre paraules com a paraules de context s'utilitzen per predir una paraula objectiu. La capa oculta rebrà els vectors d'entrada i després els multiplicarà per una matriu W∗N. La sortida d'1∗N de la capa oculta finalment entra a la capa de suma, on els vectors es sumen per elements abans de dur a terme una activació final i la sortida s'obté de la capa de sortida.
Implementació del codi de CBOW
Implementem una incrustació de paraules per mostrar la semblança de paraules utilitzant el model CBOW. En aquest article he definit el meu propi corpus de paraules, feu servir qualsevol conjunt de dades. Primer, importarem totes les biblioteques necessàries i carregarem el conjunt de dades. A continuació, tokenitzarem cada paraula i la convertirem en un vector de nombres enters.
localdatetime java
Python 3
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)> |
>
matemàtiques.java aleatòria
>
Sortida:
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]]>
Ara, construirem el model CBOW amb una mida de finestra = 2.
Python 3
mysql llista tots els usuaris
# 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'>)> |
char a int java
>
>
A continuació, utilitzarem el model per visualitzar les incrustacions.
Python 3
patró de disseny del mètode de fàbrica
# 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()> |
>
>
Sortida:

Representació vectoritzada de les paraules mitjançant el model CBOW
Aquesta visualització ens permet observar la semblança de les paraules en funció de les seves incrustacions. S'espera que les paraules que tinguin un significat o un context similars estiguin a prop les unes de les altres a la trama.