python - 在解析 wiki 语料库时禁用 Gensim 删除标点符号等

标签 python nlp gensim word2vec spacy

我想在英语维基百科上使用 python 和 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)
...

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

有谁知道我是否可以“禁用”gensim 的预处理,这样它就不会删除标点符号等,但仍会将维基百科文章直接从压缩的维基百科转储中解析为文本?或者有人知道更好的方法来完成这个吗?提前致谢!

最佳答案

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

至于为 gensim 的 LSI 表示命名实体的方式——我建议添加一个人工标识符(一个不存在的词)。从模型的角度来看,它没有任何区别,它可以节省您返工 gensim 预处理的负担。

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

关于python - 在解析 wiki 语料库时禁用 Gensim 删除标点符号等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43500996/

相关文章:

python - modelformset __iter__ 重载问题

python - 从 python ctypes 调用 CPP 函数

python - 为什么我的 tensorflow 模型输出在 x 个时期后变成 NaN?

java - 使用 NLP 进行句子检测

java - 斯坦福 Java NLP 选区标签缩写

python - Hierarchical Dirichlet Process Gensim 主题数与语料库大小无关

nlp - 如何将 gensim Word2Vec 模型转换为 FastText 模型?

python - 仅当在文本框中时,如何将 Enterkey <Return> 绑定(bind)到按钮?

python word2vec 使用周围单词的上下文相似度

python : no module named selenium