如何从大量文章中训练短语模型(维基百科)?

2024-05-19 08:58:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为法语创建一个大的gensim字典,尝试在主题检测、文本间的相似性以及其他类似的方面获得更好的结果。 因此,我计划使用维基百科转储,并按以下方式进行处理:

  1. 从frwiki YYYYMMDD页面中提取每一篇文章-文章.xml.bz2(完成)
  2. 标记每个文章(基本上将文本转换为小写,删除停止字和非单词字符)(完成)
  3. 在文章上训练一个短语模型来检测搭配。在
  4. 在每一篇文章中使用结果标记。在
  5. 每个词干与新词集并置的语料库行

由于语料库非常大,我不在内存中存储任何内容,并通过smart_open访问语料库,但gensim短语模型似乎消耗了太多的内存来完成第三步。在

下面是我的示例代码:

corpus = smart_open(corpusFile, "r")
phrases = gensim.models.Phrases()
with smart_open(phrasesFile, "wb") as phrases_file:
    chunks_size = 10000
    texts, i = [], 0
    for text in corpus:
        texts.append(text.split())
        i += 1
        if i % chunks_size == 0:
            phrases.add_vocab(texts)
            texts = []
    phrases.save(phrases_file)
corpus.close()

有没有一种方法可以在不冻结我的计算机的情况下完成这个操作呢?还是只能在语料库的一个子集上训练短语模型?在


Tags: 内存标记模型文本sizesmart文章corpus
1条回答
网友
1楼 · 发布于 2024-05-19 08:58:05

我自己回答是因为我意识到我忘了处理短语类中一些与内存相关的参数。在

所以,首先我把max_vocab_size除以2,这样它应该会消耗更少的内存,而且我决定每隔10万篇文章保存一次Phrases对象,然后从保存的文件中重新加载它,因为这些技巧已经显示了它们对gensim库中的其他类有帮助。。。在

以下是新代码,可能稍慢,但它已成功完成任务:

corpus = smart_open(corpusFile, "r")
max_vocab_size=20000000
phrases = Phrases(max_vocab_size=max_vocab_size)
chunks_size = 10000
save_every = 100000
texts, i = [], 0
for text in corpus:
    texts.append(text.split())
    i += 1
    if i % chunks_size == 0:
        phrases.add_vocab(texts)
        texts = []
    if i % save_every == 0:
        phrases.save(phrasesFile)
        phrases = Phrases.load(phrasesFile)
corpus.close()
phrases.save(phrasesFile)

在我的例子中,在把所有这些放在一个Phraser对象中之后,我得到了412816个短语。在

相关问题 更多 >

    热门问题