如何从大量文章(维基百科)中训练短语模型?
How to train a Phrases model from a huge corpus of articles (wikipedia)?
我想为法语创建一个大的 gensim 词典,以尝试在主题检测、文本之间的相似性和其他类似方面获得更好的结果。
所以我计划使用维基百科转储并按以下方式处理它:
- 从 frwiki-YYYYMMDD-pages-articles.xml.bz2 中提取每篇文章(完成)
- 标记每篇文章(基本上将文本转换为小写,删除停用词和非词字符)(完成)
- 在文章上训练短语模型以检测搭配。
- 在每篇文章中提取生成的标记。
- 用新的语料库填充字典(每行一篇词干并置标记的文章)
由于语料库非常大,我没有在内存中存储任何内容并通过 smart_open 访问语料库,但似乎 gensim 短语模型消耗过多 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()
有没有一种方法可以在不冻结我的计算机的情况下完成操作,或者我是否只需要在我的语料库的一个子集上训练短语模型?
我正在回答自己,因为我意识到我忘记处理短语中的一些内存相关参数 class。
所以,首先我将 max_vocab_size 除以 2,这样它应该消耗更少的内存,而且我决定每 100 000 篇文章保存一次 Phrases 对象,然后从保存的文件中重新加载它作为这些技巧表明它们对 gensim 库中的其他 classes 很有帮助...
这是新的代码,可能有点慢,但它已经成功完成了任务:
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 个短语。
我想为法语创建一个大的 gensim 词典,以尝试在主题检测、文本之间的相似性和其他类似方面获得更好的结果。 所以我计划使用维基百科转储并按以下方式处理它:
- 从 frwiki-YYYYMMDD-pages-articles.xml.bz2 中提取每篇文章(完成)
- 标记每篇文章(基本上将文本转换为小写,删除停用词和非词字符)(完成)
- 在文章上训练短语模型以检测搭配。
- 在每篇文章中提取生成的标记。
- 用新的语料库填充字典(每行一篇词干并置标记的文章)
由于语料库非常大,我没有在内存中存储任何内容并通过 smart_open 访问语料库,但似乎 gensim 短语模型消耗过多 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()
有没有一种方法可以在不冻结我的计算机的情况下完成操作,或者我是否只需要在我的语料库的一个子集上训练短语模型?
我正在回答自己,因为我意识到我忘记处理短语中的一些内存相关参数 class。
所以,首先我将 max_vocab_size 除以 2,这样它应该消耗更少的内存,而且我决定每 100 000 篇文章保存一次 Phrases 对象,然后从保存的文件中重新加载它作为这些技巧表明它们对 gensim 库中的其他 classes 很有帮助...
这是新的代码,可能有点慢,但它已经成功完成了任务:
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 个短语。