python - Python gensim 主题模型中的访问字典
问题描述
我想看看如何从 gensim lda 主题模型访问字典。这在您训练 lda 模型、保存并稍后加载时尤其重要。换句话说,假设 lda_model 是在文档集合上训练的模型。要获得文档主题矩阵,可以执行以下操作或类似https://www.kdnuggets.com/2019/09/overview-topics-extraction-python-latent-dirichlet-allocation.html中解释的操作:
def regTokenize(text):
# tokenize the text into words
import re
WORD = re.compile(r'\w+')
words = WORD.findall(text)
return words
from gensim.corpora.dictionary import Dictionary
ttext = [regTokenize(d) for d in text]
dic = Dictionary(ttext)
ttext = [dic.doc2bow(text) for text in ttext]
ttext = lda_model.get_document_topics(ttext)
但是,训练中的字典lda_model
可能与新数据不同,并在最后一行给出错误,例如:
"IndexError: index 41021 is out of bounds for axis 1 with size 41021"
有没有办法(或参数)从受过训练的字典中获取字典lda_model
,而不是使用它dic = Dictionary(ttext)
?非常感谢您的帮助和回答!
解决方案
一般的方法应该是使用Dictionary.save
方法将训练模型时创建的字典存储到文件中,并使用Dictionary.load
.
只有这样才能Dictionary.token2id
保持不变,并且可以用于将 id 映射到单词,反之亦然,用于预训练模型。
推荐阅读
- actions-on-google - 谷歌助手的隐私政策错误显示在谷歌助手测验中
- node.js - 如何在猫鼬中动态地将值推入对象的属性?
- visual-studio-code - 如何在 vscode 中查看所有 default setting.json
- mysql - MySQL:具有两个多对多关系和重复项的查询,以及来自子查询的完整数据
- c++ - 对象指针在 C++ 中是如何工作的?
- html - 如何在 flexbox 中获取具有外部高度和内部宽度的 div
- javascript - 在柏树的while循环中比较动态文本
- javascript - 折线图上的两个不同 x 轴标签,chart.js 反应
- c# - 我尝试用 c# (winforms) 在 oracle 数据库中写一些东西,我只能让 SELECT 语句工作,而不是 INSERT 语句
- flutter - 当我在 Flutter Web 中的 TextField 中按空格键时,如何防止 PopupMenu 消失?