You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gensim LDA主题一致性u_mass指标负值是否正常?求原理公式

关于Gensim中CoherenceModel的u_mass指标负值问题及原理解析

首先给你吃个定心丸:u_mass指标输出负值是完全正常的,甚至这才是它的常态表现,完全不需要担心你的代码或者模型出了问题。我来给你详细拆解下这个指标的来龙去脉:

一、u_mass指标的核心逻辑

u_mass是一种基于语料库内部共现统计的主题连贯性指标,它不需要依赖外部词典(不像c_v这类指标需要外部资源支撑),直接通过你输入的corpus来计算主题内词之间的关联紧密程度。简单来说,它衡量的是:主题里的词是不是经常在同一篇文档里一起出现——如果一起出现的概率越高,连贯性得分就越接近正值;如果词之间关联很弱,得分就会偏向负值。

二、u_mass的具体计算公式

u_mass的计算步骤可以拆解为:

  1. 先统计语料库中所有词的边缘概率(单个词出现的概率)和共现概率(两个词同时出现在一篇文档的概率)
  2. 对主题中的每一对词(w_i, w_j),计算它们的共现关联度:
    score_pair = log( (P(w_i, w_j) + ε) / P(w_j) )
    
    这里的ε是一个极小的平滑项,用来避免当P(w_i,w_j)为0时出现对数无意义的情况。
  3. 最后对主题内所有词对的score_pair取平均值,得到该主题的u_mass连贯性得分;如果是多个主题,会取所有主题得分的平均值作为整体得分。

用公式总结就是:

Coherence(U_mass) = (1/M) * Σ_{i<j} log( (P(w_i,w_j) + ε) / P(w_j) )

其中M是主题内词对的总数量。

三、为什么得分会是负值?

这和对数函数的特性直接相关:

  • 当P(w_i,w_j) > P(w_j)时,(P(w_i,w_j)/P(w_j)) > 1,log值为正;但这种情况其实非常少见,因为P(w_j)是词w_j在整个语料库的出现概率,而P(w_i,w_j)是它和w_i一起出现的概率,必然小于等于P(w_j)。
  • 大部分情况下,P(w_i,w_j) ≤ P(w_j),这时候对数的结果就是负数或者0,所以最终的平均得分自然会是负值。

一般来说,u_mass的得分范围大概在**-14到1之间**,负值是绝对的主流,你完全不用纠结这个结果。

关于你的代码

看了你的代码,写法是完全正确的:

from gensim.models.coherencemodel import CoherenceModel
cm_u_mass = CoherenceModel(model = model1, corpus = corpus1, coherence = 'u_mass')
coherence_u_mass = cm_u_mass.get_coherence()
print('Coherence Score: ', coherence_u_mass)

只要你的model1和corpus1是正常训练/预处理得到的,这个负值结果就是合理的。如果想要更直观对比不同模型的好坏,你可以用u_mass得分的相对值——比如训练不同主题数的LDA模型,得分越高(越接近0或者正值)的模型,主题连贯性越好。

内容的提问来源于stack exchange,提问作者Nils_Denter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:16:39