Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implementazione di Word2Vec | Word Embeddings
Introduzione alla NLP

bookImplementazione di Word2Vec

Dopo aver compreso il funzionamento di Word2Vec, si procede con la sua implementazione utilizzando Python. La libreria Gensim, uno strumento open-source avanzato per l'elaborazione del linguaggio naturale, offre un'implementazione diretta tramite la classe Word2Vec in gensim.models.

Preparazione dei dati

Word2Vec richiede che i dati testuali siano tokenizzati, ovvero suddivisi in una lista di liste in cui ogni lista interna contiene le parole di una specifica frase. In questo esempio, si utilizza il romanzo Emma dell'autrice inglese Jane Austen come corpus. Si carica un file CSV contenente frasi pre-processate e si suddivide ogni frase in parole:

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

emma_df['Sentence'].str.split() applica il metodo .split() a ciascuna frase nella colonna 'Sentence', producendo una lista di parole per ogni frase. Poiché le frasi sono già state preprocessate, con parole separate da spazi bianchi, il metodo .split() è sufficiente per questa tokenizzazione.

Addestramento del modello Word2Vec

Ora, concentriamoci sull'addestramento del modello Word2Vec utilizzando i dati tokenizzati. La classe Word2Vec offre una varietà di parametri per la personalizzazione. Tuttavia, i parametri con cui si interagisce più frequentemente sono i seguenti:

  • vector_size (100 di default): la dimensionalità o dimensione degli embedding delle parole;
  • window (5 di default): la dimensione della finestra di contesto;
  • min_count (5 di default): le parole che compaiono meno di questo numero verranno ignorate;
  • sg (0 di default): l'architettura del modello da utilizzare (1 per Skip-gram, 0 per CBoW).
  • cbow_mean (1 di default): specifica se il contesto di input CBoW viene sommato (0) o mediato (1)

Parlando delle architetture del modello, CBoW è adatto per dataset di grandi dimensioni e scenari in cui l'efficienza computazionale è fondamentale. Skip-gram, invece, è preferibile per compiti che richiedono una comprensione dettagliata dei contesti delle parole, particolarmente efficace in dataset più piccoli o quando si trattano parole rare.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Qui impostiamo la dimensione dell'embedding a 200, la dimensione della finestra di contesto a 5 e includiamo tutte le parole impostando min_count=1. Impostando sg=0, abbiamo scelto di utilizzare il modello CBoW.

Note
Approfondisci

La scelta della giusta dimensione dell'embedding e della finestra di contesto comporta dei compromessi. Embedding più grandi catturano più significato ma aumentano il costo computazionale e il rischio di overfitting. Finestre di contesto più piccole sono migliori nel catturare la sintassi, mentre quelle più grandi sono migliori nel catturare la semantica.

Trovare parole simili

Una volta che le parole sono rappresentate come vettori, possiamo confrontarle per misurare la similarità. Sebbene sia possibile utilizzare la distanza, la direzione di un vettore spesso trasmette più significato semantico rispetto alla sua magnitudine, specialmente negli embedding di parole.

Tuttavia, utilizzare direttamente l'angolo come metrica di similarità non è molto pratico. Invece, possiamo usare il coseno dell'angolo tra due vettori, noto anche come similarità coseno. Essa varia da -1 a 1, con valori più alti che indicano una maggiore similarità. Questo approccio si concentra su quanto i vettori siano allineati, indipendentemente dalla loro lunghezza, rendendolo ideale per confrontare i significati delle parole. Ecco un'illustrazione:

Angles

Maggiore è la similarità coseno, più simili sono i due vettori, e viceversa. Ad esempio, se due vettori di parole hanno una similarità coseno prossima a 1 (l'angolo vicino a 0 gradi), ciò indica che sono strettamente correlati o simili nel contesto all'interno dello spazio vettoriale.

Ora individuiamo le 5 parole più simili alla parola "man" utilizzando la similarità coseno:

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv accede ai vettori di parole del modello addestrato, mentre il metodo .most_similar() trova le parole i cui embedding sono più vicini all'embedding della parola specificata, in base alla similarità coseno. Il parametro topn determina il numero di prime-N parole simili da restituire.

question mark

Quale modello è più adatto per gestire parole rare all'interno di un corpus?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

Can you explain how to interpret the output of the most_similar() method?

What other parameters can I adjust in the Word2Vec model for different results?

How can I use the trained model to find similarities between other words?

Awesome!

Completion rate improved to 3.45

bookImplementazione di Word2Vec

Scorri per mostrare il menu

Dopo aver compreso il funzionamento di Word2Vec, si procede con la sua implementazione utilizzando Python. La libreria Gensim, uno strumento open-source avanzato per l'elaborazione del linguaggio naturale, offre un'implementazione diretta tramite la classe Word2Vec in gensim.models.

Preparazione dei dati

Word2Vec richiede che i dati testuali siano tokenizzati, ovvero suddivisi in una lista di liste in cui ogni lista interna contiene le parole di una specifica frase. In questo esempio, si utilizza il romanzo Emma dell'autrice inglese Jane Austen come corpus. Si carica un file CSV contenente frasi pre-processate e si suddivide ogni frase in parole:

12345678
import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') # Split each sentence into words sentences = emma_df['Sentence'].str.split() # Print the fourth sentence (list of words) print(sentences[3])
copy

emma_df['Sentence'].str.split() applica il metodo .split() a ciascuna frase nella colonna 'Sentence', producendo una lista di parole per ogni frase. Poiché le frasi sono già state preprocessate, con parole separate da spazi bianchi, il metodo .split() è sufficiente per questa tokenizzazione.

Addestramento del modello Word2Vec

Ora, concentriamoci sull'addestramento del modello Word2Vec utilizzando i dati tokenizzati. La classe Word2Vec offre una varietà di parametri per la personalizzazione. Tuttavia, i parametri con cui si interagisce più frequentemente sono i seguenti:

  • vector_size (100 di default): la dimensionalità o dimensione degli embedding delle parole;
  • window (5 di default): la dimensione della finestra di contesto;
  • min_count (5 di default): le parole che compaiono meno di questo numero verranno ignorate;
  • sg (0 di default): l'architettura del modello da utilizzare (1 per Skip-gram, 0 per CBoW).
  • cbow_mean (1 di default): specifica se il contesto di input CBoW viene sommato (0) o mediato (1)

Parlando delle architetture del modello, CBoW è adatto per dataset di grandi dimensioni e scenari in cui l'efficienza computazionale è fondamentale. Skip-gram, invece, è preferibile per compiti che richiedono una comprensione dettagliata dei contesti delle parole, particolarmente efficace in dataset più piccoli o quando si trattano parole rare.

12345678
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() # Initialize the model model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0)
copy

Qui impostiamo la dimensione dell'embedding a 200, la dimensione della finestra di contesto a 5 e includiamo tutte le parole impostando min_count=1. Impostando sg=0, abbiamo scelto di utilizzare il modello CBoW.

Note
Approfondisci

La scelta della giusta dimensione dell'embedding e della finestra di contesto comporta dei compromessi. Embedding più grandi catturano più significato ma aumentano il costo computazionale e il rischio di overfitting. Finestre di contesto più piccole sono migliori nel catturare la sintassi, mentre quelle più grandi sono migliori nel catturare la semantica.

Trovare parole simili

Una volta che le parole sono rappresentate come vettori, possiamo confrontarle per misurare la similarità. Sebbene sia possibile utilizzare la distanza, la direzione di un vettore spesso trasmette più significato semantico rispetto alla sua magnitudine, specialmente negli embedding di parole.

Tuttavia, utilizzare direttamente l'angolo come metrica di similarità non è molto pratico. Invece, possiamo usare il coseno dell'angolo tra due vettori, noto anche come similarità coseno. Essa varia da -1 a 1, con valori più alti che indicano una maggiore similarità. Questo approccio si concentra su quanto i vettori siano allineati, indipendentemente dalla loro lunghezza, rendendolo ideale per confrontare i significati delle parole. Ecco un'illustrazione:

Angles

Maggiore è la similarità coseno, più simili sono i due vettori, e viceversa. Ad esempio, se due vettori di parole hanno una similarità coseno prossima a 1 (l'angolo vicino a 0 gradi), ciò indica che sono strettamente correlati o simili nel contesto all'interno dello spazio vettoriale.

Ora individuiamo le 5 parole più simili alla parola "man" utilizzando la similarità coseno:

12345678910
from gensim.models import Word2Vec import pandas as pd emma_df = pd.read_csv( 'https://staging-content-media-cdn.codefinity.com/courses/c68c1f2e-2c90-4d5d-8db9-1e97ca89d15e/section_4/chapter_3/emma.csv') sentences = emma_df['Sentence'].str.split() model = Word2Vec(sentences, vector_size=200, window=5, min_count=1, sg=0) # Retrieve the top-5 most similar words to 'man' similar_words = model.wv.most_similar('man', topn=5) print(similar_words)
copy

model.wv accede ai vettori di parole del modello addestrato, mentre il metodo .most_similar() trova le parole i cui embedding sono più vicini all'embedding della parola specificata, in base alla similarità coseno. Il parametro topn determina il numero di prime-N parole simili da restituire.

question mark

Quale modello è più adatto per gestire parole rare all'interno di un corpus?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 3
some-alt