如何在pyLDAvis中提取指定lambda相关性指标下各主题的词汇列表
问题根源
- 调用
prepare方法时传入的lambda_step=0.1是可视化时lambda滑块的滑动步长,不会直接让返回的topic_info默认应用lambda=0.1的过滤逻辑。 - 直接取
LDAvis_prepared.topic_info默认展示的是Category=Default的全局词频排序结果,既没有按主题拆分,也没有计算对应lambda下的相关性得分,所以和可视化界面看到的内容不符。
解决方法
pyLDAvis的相关性计算公式为 relevance = λ * logprob + (1-λ) * loglift,你可以基于topic_info里已有的logprob(词在主题下的对数概率)和loglift(词的主题区分度对数提升值)自己计算指定lambda下的相关性,再按主题分组排序得到对应词表,示例代码如下:
import pandas as pd # 过滤掉全局默认分类的条目,只保留各主题对应的词数据 topic_term_df = LDAvis_prepared.topic_info[LDAvis_prepared.topic_info.Category != 'Default'].copy() # 指定lambda取值 lambda_val = 0.1 # 计算每个词对对应主题的相关性得分 topic_term_df['relevance'] = lambda_val * topic_term_df['logprob'] + (1 - lambda_val) * topic_term_df['loglift'] # 按主题分组,每个主题内按相关性降序排序,取前N个关键词 topic_keywords = ( topic_term_df.groupby('Category', group_keys=False) .apply(lambda x: x.sort_values('relevance', ascending=False).head(10)) # 可修改head内数值调整每个主题输出关键词数量 .reset_index(drop=True) ) # 查看输出结果 print(topic_keywords[['Category', 'Term', 'relevance']])
结果说明
输出结果里Category列对应主题编号,pyLDAvis默认主题编号从1开始,和gensim的LDA模型从0开始的主题编号相差1,需要对齐的话自行给主题编号减1即可。
内容的提问来源于stack exchange,提问作者Sam G.
相关产品推荐
相关产品推荐

