Gensim在维基百科上训练word2vec - 预处理和参数

时间:2014-05-19 10:37:22

标签: nlp gensim word2vec

我正在尝试使用意大利维基百科从gensim训练word2vec模型 " http://dumps.wikimedia.org/itwiki/latest/itwiki-latest-pages-articles.xml.bz2"

但是,我不确定这个语料库的最佳预处理是什么。

Gensim模型接受一个标记化句子列表。 我的第一个尝试是使用Gensim的标准WikipediaCorpus预处理器。这提取每篇文章,删除标点符号并拆分空格。使用这个工具,每个句子都对应一个完整的模型,我不确定这个事实对模型的影响。

在此之后,我使用默认参数训练模型。不幸的是,在训练之后,似乎我没有想要获得非常有意义的相似之处。

对于此任务,维基百科语料库中最合适的预处理是什么? (如果这个问题太宽泛,请指点相关教程/文章帮助我)

这是我第一次试用的代码:

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)

2 个答案:

答案 0 :(得分:8)

你的方法很好。

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

这可能是因为修剪了不常用的单词(默认为min_count=5)。

为了加快计算速度,您可以考虑&#34;缓存&#34;将预处理的文章作为普通.txt.gz文件,每行一个句子(文档),然后简单地使用word2vec.LineSentence语料库。这样可以节省每次迭代时解压缩的wiki XML。

为什么word2vec没有产生&#34;有意义的相似性&#34;对于意大利维基,我不知道。英语维基似乎工作正常。另请参阅here

答案 1 :(得分:3)

我一直致力于按摩维基百科语词库并从中获取向量的项目。 我可能会尽快生成意大利语向量,但如果你想自己做,请看看: https://github.com/idio/wiki2vec