在解析维基语料库时禁用Gensim删除标点符号等

mar*_*nfl 5 python nlp gensim word2vec spacy

我想使用pyns和gensim在英语维基百科上训练word2vec模型.我密切关注https://groups.google.com/forum/#!topic/gensim/MJWrDw_IvXw.

它适用于我,但我不喜欢生成的word2vec模型是命名实体被拆分,这使得该模型不能用于我的特定应用程序.我需要的模型必须将命名实体表示为单个向量.

这就是为什么我打算用spacy解析维基百科文章并将"北卡罗来纳"等实体合并到"north_carolina"中,以便word2vec将它们表示为单个向量.到现在为止还挺好.

spacy解析必须是预处理的一部分,我最初按照链接讨论中的建议使用:

...
wiki = WikiCorpus(wiki_bz2_file, dictionary={})
for text in wiki.get_texts():
    article = " ".join(text) + "\n"
    output.write(article)
...
Run Code Online (Sandbox Code Playgroud)

这将删除标点符号,停用单词,数字和大小写,并将每篇文章保存在生成​​的输出文件中的单独行中.问题是spacy的NER并不能真正处理这个预处理文本,因为我猜它依赖于NER(?)的标点符号和大小写.

有谁知道我是否可以"禁用"gensim的预处理,以便它不会删除标点符号等但仍然直接从压缩的维基百科转储解析维基百科文章到文本?或者有人知道更好的方法来实现这一目标吗?提前致谢!

sop*_*ros 1

如果 spacy 在句子层面上运行,我不会感到惊讶。为此,很可能使用句子边界(点、问号等)。这就是为什么 spacy NER(或者甚至可能是管道中早期的 POS Tagger)可能对您来说失败的原因。

至于 gensim 的 LSI 的命名实体的表示方式 - 我建议添加一个人工标识符(一个不存在的单词)。从模型的角度来看,它没有任何区别,并且可以减轻您重新设计 gensim 预处理的负担。

您可能需要参考 where ,model.wv.vocab因为model = gensim.models.Word2Vec(...)您必须训练模型两次。或者,尝试从原始文本创建词汇集,并随机选择词汇表中尚不存在的字母集。