使用KL散度计算LDA主题模型的主题方差

一、需求分析

我们知道LDA主题模型的最优主题数可以使用困惑度来衡量,但使用困惑度确定最优主题已经被论文证明其实是不适用的。那有没有一种可行的方法计算出最优主题数呢?答案是肯定的,很多论文都会使用主题方差确定最优主题数,本文就是基于主题方差得出最优的主题数。

二、主题方差

1、KL散度

相对熵(relative entropy),又被称为Kullback-Leibler散度(Kullback-Leibler divergence),是一种度量两个概率分布(probability distribution)间差异的优化算法。KL散度可以计算两个LDA主题方差之间相似度,所以本文基于KL散度实现主题方差。

2、主题方差

主题方差即主题词概率分布之间的离差程度,常用的主题方差计算公式为:
在这里插入图片描述
其中, T i T_i Ti表示抽取的主题,K 表示抽取的主题数,Ω代表“主题-词”概率分布归一化后的均值,KL( T i T_i Ti||Ω) 表示主体间相似度。主题方差越大,表明主题间的区分度就越高,从而可以确定最优主题数。

三、主题方差确定最优主题数

本文使用gensim包构建LDA主题主题模型,并使用matplotlib画出不同主题数的主题方差。

1、完整代码

import numpy as np
import scipy
import matplotlib.pyplot as plt
from gensim.corpora import Dictionary
from gensim import corpora
from gensim.models import LdaModel

def var_show(wordcom=None, wordname=None, toprange=20):
    dictionary = Dictionary(wordcom)                               # 生成词典
    bow = [dictionary.doc2bow(comment) for comment in wordcom]    # 将文档转成数值型语料库
    vars = []
    for k in range(2, toprange+1):
        var = d = 0
        model = LdaModel(corpus=bow, id2word=dictionary, num_topics=k)    # 构建LDA主题模型
        topics_terms= model.state.get_lambda()
        topics_terms_proba = np.apply_along_axis(lambda x: x/x.sum(),1,topics_terms)
        # 计算主题方差
        for t in range(k):
            for c in range(t, k):
                var += scipy.stats.entropy(topics_terms_proba[t], topics_terms_proba[c])
                d += 1
        var_std = round(var / (k*d), 2)
        vars.append(var_std)
    # 绘制不同主题数的主题方差图
    plt.figure(figsize=(10, 6))
    plt.plot(list(range(2, toprange+1)), vars, color='green')
    plt.scatter(list(range(2, toprange+1)), vars, color='red')
    plt.xticks(list(range(2, toprange+1)))
    plt.xlabel('主题数')
    plt.ylabel('主题方差')
    plt.savefig(f'{wordname}不同主题的主题方差.jpg')
    plt.show()

var_show(cut_pos, '正向评论')

其中cut_pos表示分词数组,例如:
[[“真实”, “世界”], [“Python”, “yyds”], [“自然语言处理”, “很有趣”]]

2、结果

在这里插入图片描述

从图中可以发现,选择6个主题和7个主题作为最优主题数都是可行的,当然这种情况比较少见。得出主题方差后,就可以计算困惑度-主题方差标准化了。笔者通过阅读文献后认为使用困惑度-主题方差标准化衡量最优主题可能更有效,这个可以自己实现,比较简单。

参考文献:

[1]关鹏, 王曰芬. 科技情报分析中LDA主题模型最优主题数确定方法研究[J]. 现代图书情报技术, 2016(9):9.
[2]赵凯,王鸿源. LDA最优主题数选取方法研究:以CNKI文献为例[J]. 统计与决策, 2020(16):5.

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

饕餮&化骨龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值