前言
最近文艺复兴了在搞LDA主题模型,然而做可视化的时候发现一堆问题,说的就是pyLDAvis这个包。要做lda肯定绕不过的,这玩意可视化是真好看,六七年前的设计现在依然能打。
然而由于lda热度不在,pyLDAvis的新版接口几乎没人说明怎么用…我参照之前的教程搞一堆报错出来,找遍网上也没最新的资料…好在最后终于摸索出来了,因此就在这总结一下,希望大家少走弯路。
我使用的环境是
- Python 3.9.17
- pyLDAvis=3.4.0
- Pycharm 2024.1.2 (这个应该没啥关系)
报错1:AttributeError: module 'pyLDAvis' has no attribute 'lda_model’
这个是调用方式有问题,我看了一眼源码中的示例文件搞明白了:
看如下代码:
import pyLDAvis
# from pyLDAvis import lda_model
# 中间省略调模型的步骤
data = pyLDAvis.lda_model.prepare(lda, tf_idf, tf_idf_vectorizer)
出现报错:
AttributeError: module 'pyLDAvis' has no attribute 'lda_model'
但是如果这样
import pyLDAvis
from pyLDAvis import lda_model
# 中间省略调模型的步骤
data = pyLDAvis.lda_model.prepare(lda, tf_idf, tf_idf_vectorizer)
就会完全没问题。
真要追根溯源的话,可以发现新版的pyLDAvis的__init__文件并没有导入lda_model:
# 来自pyLDAvis的__init__
__all__ = ["__version__",
"prepare", "js_PCoA",
"PreparedData", "prepared_data_to_html",
"display", "show", "save_html", "save_json",
"enable_notebook", "disable_notebook"]
__version__ = "3.4.0"
from pyLDAvis._display import *
from pyLDAvis._prepare import prepare, js_PCoA, PreparedData
这个lda_model是在它的主目录下,成了个单独的模块。害…我也不知道为啥这么干,反正给我带来了很多麻烦…
报错2:ModuleNotFoundError: No module named 'pyLDAvis.sklearn’
pyLDAvis在后续的更新中将sklearn改名成为lda_model,因此直接将sklearn换用成lda_model即可,其他均不变。
原贴来自:
方案1:直接降级
讲真,如果真闲麻烦,想要用老教程中的方法函数,直接降级就完事,这里贴一下别人的方法:
https://blog.csdn.net/zhangb98/article/details/135655929
这里顺便说一下,conda和pip都支持不卸载原包的情况下直接变更包的版本,使用下面的命令行即可回到旧版。
conda install pyLDAvis==3.2.2
pip install pyLDAvis==3.2.2
当然我看到还有人回滚到2.0版本的,这个就看环境问题了。
其他零碎的问题
AttributeError: 'CountVectorizer' object has no attribute 'get_feature_names’
新版本之后该函数换了个名字
修改为:return vectorizer.get_feature_names_out()
文章评论