2014-05-19 8 views
14

Sto cercando di formare il modello word2vec dal gensim utilizzando la wikipedia italiana "http://dumps.wikimedia.org/itwiki/latest/itwiki-latest-pages-articles.xml.bz2"Gensim treno word2vec su wikipedia - pre-elaborazione e parametri

Tuttavia, io non sono sicuro di quello che è il miglior pre-elaborazione per questo corpus.

Il modello Gensim accetta un elenco di frasi tokenizzate. Il mio primo tentativo è quello di utilizzare semplicemente il preprocessore standard di WikipediaCorpus di Gensim. Questo estrae ogni articolo, rimuove la punteggiatura e divide le parole negli spazi. Con questo strumento ogni frase corrisponderebbe a un intero modello e non sono sicuro dell'impatto di questo fatto sul modello.

Dopo questo treno il modello con i parametri predefiniti. Sfortunatamente, dopo l'allenamento, sembra che non mostro di ottenere somiglianze molto significative.

Qual è la preelaborazione più appropriata sul corpus di Wikipedia per questa attività? (Se questa domanda è troppo ampia per favore mi aiuti puntando a un rilevante tutorial/articolo)

Questo il codice della mia prima prova:

from gensim.corpora import WikiCorpus 
import logging 
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO) 
corpus = WikiCorpus('itwiki-latest-pages-articles.xml.bz2',dictionary=False) 
max_sentence = -1 

def generate_lines(): 
    for index, text in enumerate(corpus.get_texts()): 
     if index < max_sentence or max_sentence==-1: 
      yield text 
     else: 
      break 

from gensim.models.word2vec import BrownCorpus, Word2Vec 
model = Word2Vec() 
model.build_vocab(generate_lines()) #This strangely builds a vocab of "only" 747904 words which is << than those reported in the literature 10M words 
model.train(generate_lines(),chunksize=500) 

risposta

7

Il tuo approccio è bene.

model.build_vocab(generate_lines()) #This strangely builds a vocab of "only" 747904 words which is << than those reported in the literature 10M words 

Ciò potrebbe essere causa di potatura parole infrequenti (il default è min_count=5).

Per velocizzare il calcolo, si può considerare "caching" gli articoli pretrattati come un normale file .txt.gz, una frase (documento) per linea, e poi semplicemente utilizzando word2vec.LineSentence corpus. Questo salva l'analisi dell'XML wiki bzippato ad ogni iterazione.

Perché word2vec non produce "somiglianze significative" per il wiki italiano, non lo so. Il wiki inglese sembra funzionare bene. Vedi anche here.

+0

Grazie, ho avuto qualche buona esperienza iniziale utilizzando word2vec e Gensim finora. Tuttavia, per la mia applicazione una limitazione attuale è che il vocabolario non sembra essere appreso online durante l'allenamento. Non l'ho ancora guardato nei dettagli, ma mi chiedo se sarebbe possibile modificare il codice dando la possibilità di espandere il vocabolario online ... ci pensi? Grazie! –

3

Ho lavorato a un progetto per massaggiare il corpus di Wikipedia e ricavarne i vettori. potrei generare i vettori italiani presto, ma nel caso in cui si vuole fare da soli dare un'occhiata a: https://github.com/idio/wiki2vec

Problemi correlati