logo

Sacchetto continuo di parole (CBOW) nella PNL

Per far comprendere al computer un testo scritto possiamo rappresentare le parole come vettori numerici. Un modo per farlo è utilizzare gli incorporamenti di parole, che sono un modo di rappresentare le parole come vettori numerici. Questi vettori catturano il significato delle parole e le loro relazioni con altre parole nella lingua. Gli incorporamenti di parole possono essere generati utilizzando algoritmi di apprendimento non supervisionato come Word2vec, Guanto , O Testo veloce .

uguaglianza delle stringhe in Java

Word2vec è un metodo basato su rete neurale per generare incorporamenti di parole, ovvero rappresentazioni vettoriali dense di parole che ne catturano il significato semantico e le relazioni. Esistono due approcci principali per implementare Word2vec:

    Borsa di parole continua (CBOW)
  • Salta il grammo

Cos'è un sacco di parole continuo (CBOW)?

Continuous Bag of Words (CBOW) è una popolare tecnica di elaborazione del linguaggio naturale utilizzata per generare incorporamenti di parole. Gli incorporamenti di parole sono importanti per molte attività di PNL perché catturano le relazioni semantiche e sintattiche tra le parole in una lingua. CBOW è un algoritmo basato su rete neurale che prevede una parola target in base alle parole del contesto circostante. È un tipo di senza supervisione apprendimento, il che significa che può apprendere da dati senza etichetta e viene spesso utilizzato per pre-addestrare gli incorporamenti di parole che possono essere utilizzati per varie attività di PNL come l'analisi del sentiment e la traduzione automatica.



Esempio di modello CBOW

Esempio di modello CBOW

C'è qualche differenza tra il modello Bag-of-Words (BoW) e il modello Continuous Bag-of-Words (CBOW)?

  • Il modello Bag-of-Words e il modello Continuous Bag-of-Words sono entrambe tecniche utilizzate nell'elaborazione del linguaggio naturale per rappresentare il testo in un formato leggibile dal computer, ma differiscono nel modo in cui catturano il contesto.
  • Il modello BoW rappresenta il testo come una raccolta di parole e la loro frequenza in un dato documento o corpus. Non considera l'ordine o il contesto in cui appaiono le parole e, pertanto, potrebbe non cogliere il pieno significato del testo. Il modello BoW è semplice e facile da implementare, ma presenta dei limiti nel catturare il significato del linguaggio.
  • Al contrario, il modello CBOW è un approccio basato sulla rete neurale che cattura il contesto delle parole. Impara a prevedere la parola target in base alle parole che compaiono prima e dopo in una determinata finestra di contesto. Considerando le parole circostanti, il modello CBOW può catturare meglio il significato di una parola in un dato contesto.

Architettura del modello CBOW

Il modello CBOW utilizza la parola target attorno alla parola contestuale per prevederla. Considera l'esempio sopra Lei è una grande ballerina. Il modello CBOW converte questa frase in coppie di parole di contesto e parole di destinazione. Le parole abbinamenti apparirebbero così ([lei, una], è), ([è, fantastica], a) ([una, ballerina], fantastica) con dimensione della finestra=2.

Architettura CBOW

Architettura CBOW

Il modello considera le parole del contesto e cerca di prevedere il termine target. I quattro vettori di input da 1∗W verranno passati al livello di input se hanno quattro parole poiché le parole di contesto vengono utilizzate per prevedere una parola di destinazione. Lo strato nascosto riceverà i vettori di input e quindi li moltiplicherà per una matrice W∗N. L'output 1∗N dallo strato nascosto entra infine nello strato somma, dove i vettori vengono sommati per elemento prima che venga eseguita un'attivazione finale e l'output venga ottenuto dallo strato di output.

Codice di implementazione del CBOW

Implementiamo un incorporamento di parole per mostrare la somiglianza delle parole utilizzando il modello CBOW. In questo articolo ho definito il mio corpus di parole, utilizza qualsiasi set di dati. Per prima cosa importeremo tutte le librerie necessarie e caricheremo il set di dati. Successivamente, tokenizzeremo ogni parola e la convertiremo in un vettore di numeri interi.

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)>

>

annotazioni sugli stivali primaverili

>

Produzione:

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]]>

Ora costruiremo il modello CBOW con dimensione della finestra = 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'>)>

pagine del server Java
>

>

Successivamente, utilizzeremo il modello per visualizzare gli incorporamenti.

Python3

Edith Mack Hirsch




# 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()>

>

>

Produzione:

Rappresentazione vettorizzata delle parole utilizzando il modello CBOW

Rappresentazione vettorizzata delle parole utilizzando il modello CBOW

Questa visualizzazione ci consente di osservare la somiglianza delle parole in base ai loro incorporamenti. Ci si aspetta che le parole simili nel significato o nel contesto siano vicine tra loro nella trama.