gpt4 book ai didi

python-3.x - 尝试更新 gensim 的 LdaModel 时出现 IndexError

转载 作者:行者123 更新时间:2023-12-04 16:01:59 25 4
gpt4 key购买 nike

我在尝试更新我的 gensim 的 LdaModel 时遇到以下错误:

IndexError: index 6614 is out of bounds for axis 1 with size 6614

我检查了为什么其他人在 this thread 上有这个问题, 但我从头到尾都使用同一个字典,这是他们的错误。

因为我有一个大数据集,我正在逐 block 加载它(使用 pickle.load)。由于这段代码,我正在以这种方式迭代地构建字典:

 fr_documents_lda = open("documents_lda_40_rails_30_ruby_full.dat", 'rb')
 dictionary = Dictionary()
 chunk_no = 0
 while 1:
     try:
         t0 = time()
         documents_lda = pickle.load(fr_documents_lda)
         chunk_no += 1
         dictionary.add_documents(documents_lda)
         t1 = time()
         print("Chunk number {0} took {1:.2f}s".format(chunk_no, t1-t0))
     except EOFError:
         print("Finished going through pickle")
         break

为整个数据集构建后,我将以相同的方式迭代地训练模型:

fr_documents_lda = open("documents_lda_40_rails_30_ruby_full.dat", 'rb')
first_iter = True
chunk_no = 0
lda_gensim = None
while 1:
    try:
        t0 = time()
        documents_lda = pickle.load(fr_documents_lda)
        chunk_no += 1
        corpus = [dictionary.doc2bow(text) for text in documents_lda]
        if first_iter:
            first_iter = False
            lda_gensim = LdaModel(corpus, num_topics=no_topics, iterations=100, offset=50., random_state=0, alpha='auto')
        else:
            lda_gensim.update(corpus)
        t1 = time()
        print("Chunk number {0} took {1:.2f}s".format(chunk_no, t1-t0))
    except EOFError:
        print("Finished going through pickle")
        break

我还尝试在每个 block 上更新字典,即

dictionary.add_documents(documents_lda)

就在之前

corpus = [dictionary.doc2bow(text) for text in documents_lda]

在最后一段代码中。最后,我尝试将 doc2bow 的 allow_update 参数设置为 True。什么都没用。

仅供引用,我最终字典的大小是 85k。仅从第一个 block 构建的字典大小为 10k。错误发生在第二次迭代时,当它在调用更新方法时传入 else 条件时。

错误由行 expElogbetad = self.expElogbeta[:, ids] 引发,由 gamma, sstats = self.inference(chunk, collect_sstats=True) 调用,它本身由 gammat = self.do_estep(chunk, other) 调用,它本身由 lda_gensim.update(语料库).

有没有人知道如何解决这个问题,或者发生了什么事?

提前谢谢你。

最佳答案

解决方案是使用参数 id2word = dictionary 简单地初始化 LdaModel。

如果您不这样做,它会假设您的词汇量是您对其进行训练的第一组文档的词汇量,并且无法更新它。事实上,它将其 num_terms 值设置为一次 id2word 的长度 there , 并且之后永远不会更新它(您可以在 update 函数中验证)。

关于python-3.x - 尝试更新 gensim 的 LdaModel 时出现 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50214899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com