问题描述:
在使用gensim的HDP进行主题聚类并尝试通过PyLDAVIS进行可视化时报错
代码:
from gensim.models import HdpModel
en_hdp = HdpModel(en_corpus, en_dictionary, chunksize=5000)
import pyLDAvis
import pyLDAvis.gensim
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(en_hdp, en_corpus, en_dictionary)
pyLDAvis.save_html(vis,'pic/en_HDP_topic_vis.html')
报错信息:
* Not all rows (distributions) in doc_topic_dists sum to 1.
报错原因:
很大概率出现这种错误都是你对dictionary的过滤导致的。
由于对dictionary过滤,你的corpus中有长度为0的文档,这导致了这些文档没可能出现在你的任何一个类别中。
核查:
[IN]
x=0
for i in corpus:
if len(i)==0:
x+=1
print(x)
[OUT]
1127
说明确实存在长度为0的文档
解决方案:
删除corpus中所有长度为0的列表,更新corpus
[IN]
HDP_en_corpus = [x for x in en_corpus if len(x)>0]
[IN]
import pyLDAvis
import pyLDAvis.gensim
pyLDAvis.enable_notebook()
vis = pyLDAvis.gensim.prepare(en_hdp, HDP_en_corpus, en_dictionary)
pyLDAvis.save_html(vis,'pic/en_HDP_topic_vis.html')
问题解决!