Word2vec

Da Wikipedia, l'enciclopedia libera.

Word2vec è un algoritmo di apprendimento approfondito, il cui pacchetto fu originariamente creato in C da Tomas Mikolov[1], poi implementato anche in Python[2] e Java[3]. Word2vec è una semplice rete neurale artificiale a due strati progettata per elaborare il linguaggio naturale, l'algoritmo richiede in ingresso un corpus e restituisce un insieme di vettori che rappresentano la distribuzione semantica delle parole nel testo. Per ogni parola contenuta nel corpus, in modo univoco, viene costruito un vettore in modo da rappresentarla come un punto nello spazio multidimensionale creato. In questo spazio le parole saranno più vicine se riconosciute come semanticamente più simili.

Parametri[modifica | modifica wikitesto]

Shell, C[modifica | modifica wikitesto]

Il pacchetto originale di Word2vec permette di lanciare da bash l'algoritmo scritto in C. Il file demo-word.sh infatti riporta questo comando:

$BIN_DIR/word2vec -train $TEXT_DATA -output $VECTOR_DATA -cbow 0 -size 200 -window 5 -negative 0 -hs 1 -sample 1e-3 -threads 12 -binary 1

Dove $BIN_DIR/word2vec è il percorso delle cartelle per arrivare al file word2vec nella cartella bin; $TEXT_DATA va sostituito invece con il corpus formato testo con cui si vuole fare l'addestramento e $VECTOR_DATA sarà il nome del file che l'algoritmo andrà a creare.

Successivamente possiamo vedere dei parametri modificabili:

  • size per definire la dimensione dei vettori da creare.
  • window per decidere la massima distanza tra la parola corrente e quella predetta all'interno di una frase.
  • threads per decidere quanti thread del processore usare per addestrare il modello.
  • binary determina in che codifica sarà salvato il file (se il parametro è inizializzato a 1 il file creato sarà binario, altrimenti sarà leggibile dall'uomo, cioè in formato testo).

Gensim, Python[modifica | modifica wikitesto]

Vi sono vari parametri che si possono modificare per personalizzare il processamento dell'algoritmo, alcuni sono scritti di seguito:

  • sentence=var, è il primo parametro da inserire per inizializzare il modello a partire da una variabile var iterabile e sotto forma di lista di parole (stringhe unicode) che verranno usate per l'addestramento.
  • size=n, permette di decidere la dimensione dei vettori che l'algoritmo andrà a creare.
  • window=n, permette di decidere la massima distanza tra la parola corrente e quella predetta all'interno di una frase.
  • min_count=n, permette di ignorare le parole con una frequenza minima minori di n.
  • workers=n, permette di decidere quanti thread del processore usare per addestrare il modello.
  • seed=n, per il generatore di numeri casuali.

Il tutorial di gensim[2] inizializza i parametri (n) in questo modo:

class gensim.models.word2vec.Word2Vec(sentences=None, size=100, alpha=0.025, window=5, min_count=5, max_vocab_size=None, sample=0.001, seed=1, workers=3, min_alpha=0.0001, sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=<built-in function hash>, iter=5, null_word=0, trim_rule=None, sorted_vocab=1, batch_words=10000)

DL4J, Java[modifica | modifica wikitesto]

I parametri spiegati sulla documentazione di DL4J[3] sono:

  • batchSize è la quantità di parole da elaborare contemporaneamente.
  • minWordFrequency è la frequenza minima che devono avere le parole per essere prese in considerazione dall'algoritmo.
  • layerSize è il numero di dimensioni che vogliamo dare ai vettori che l'algoritmo andrà a creare.

La documentazione di DL4J[3] inizializza i parametri in questo modo:

Word2Vec vec = new Word2Vec.Builder() 
    .minWordFrequency(5) 
    .iterations(1) 
    .layerSize(100) 
    .seed(42) 
    .windowSize(5) 
    .iterate(iter) 
    .tokenizerFactory(t) 
    .build();

Bibliografia[modifica | modifica wikitesto]

Deep Learning: Natural Language Processing in Python with Word2Vec: Word2Vec and Word Embeddings in Python and Theano (Deep Learning and Natural Language Processing Book 1)

Note[modifica | modifica wikitesto]