合并两个gensim Phrases模型

时间:2016-12-01 12:22:29

标签: python gensim

我正在尝试在一个大型语料库上建立一个短语模型,但我一直在绊倒内存错误。 首先,我试图将整个语料库放入一个大型发电机中。 然后,我尝试在每个文档之间保存模型:

import codecs
import gensim
import os
import random
import string
import sys

def gencorp(file_path):
    with codecs.open(file_path, 'rb',encoding="utf8") as doc :
        for sentence in doc:
            yield sentence.split()

out_corpus_dir = "C:/Users/Administrator/Desktop/word2vec/1billionwords_corpus_preprocessed/"
file_nb = 0
bi_detector = gensim.models.Phrases()
for file in os.listdir(out_corpus_dir):
    file_nb += 1
    file_path = out_corpus_dir+file
    bi_detector.add_vocab(gencorp(file_path))
    bi_detector.save("generic_EN_bigrams_v%i"%(file_nb/10))
    bi_detector = gensim.models.Phrases.load("generic_EN_bigrams_v%i"%(file_nb/10))
bi_detector.save("generic_EN_bigrams")

但这些解决方案都不起作用。但是,生成并保存generic_EN_bigrams_v0。 所以我想知道我是否可以为每个文档训练一个短语模型,然后找到一种合并它们的方法。

感谢您的任何见解:)

1 个答案:

答案 0 :(得分:0)

根据gensim的文档,添加句子应该可以正常工作,并且您不应该有内存问题,因为它只更新统计信息。因此,对代码进行这种小修改应该可以使其正常工作,即您不需要重新创建bi_detector对象。

import codecs
import gensim
import os
import random
import string
import sys

def gencorp(file_path):
    with codecs.open(file_path, 'rb',encoding="utf8") as doc :
        for sentence in doc:
            yield sentence.split()

out_corpus_dir = "C:/Users/Administrator/Desktop/word2vec/1billionwords_corpus_preprocessed/"
file_nb = 0
bi_detector = gensim.models.Phrases()
for file in os.listdir(out_corpus_dir):
    file_nb += 1
    file_path = out_corpus_dir+file
    bi_detector.add_vocab(gencorp(file_path))
    # The following two lines are not required.
    # bi_detector.save("generic_EN_bigrams_v%i"%(file_nb/10))
    # bi_detector = gensim.models.Phrases.load("generic_EN_bigrams_v%i"%(file_nb/10))
bi_detector.save("generic_EN_bigrams")