我想为法语创建一个大型的gensim词典,以尝试在主题检测,文本之间的相似性以及其他类似方面获得更好的结果。 因此,我计划使用Wikipedia转储并按以下方式进行处理:
由于语料库非常大,因此我没有在内存中存储任何内容,也无法通过smart_open访问语料库,但是gensim Phrases模型似乎消耗了过多的RAM,无法完成第三步。
这是我的示例代码:
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()
有没有一种方法可以在不冻结计算机的情况下完成操作,还是只需要在我的语料库的一部分上训练短语模型?
答案 0 :(得分:0)
我之所以回答自己,是因为我意识到我忘了在Phrases类中处理一些与内存相关的参数。
因此,首先我将max_vocab_size除以2,这样它应该消耗更少的内存,而且我决定每隔10万篇文章保存一次短语对象,然后从已保存的文件中重新加载,如这些技巧所示。它们对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对象之后,在我的情况下最终得到412 816个词组。