咨询Mallet中Coherence Score的计算逻辑及分数范围转换方法
Mallet中Coherence Score的计算与分数转换
一、Coherence Score的计算逻辑
Mallet默认用PMI(点互信息) 计算主题一致性分数,流程如下:
- 对每个主题,提取其Top N个高频关键词(默认取前10个)
- 对这些关键词的所有两两组合,计算它们的PMI值:
PMI(w1, w2) = log(P(w1,w2)/(P(w1)*P(w2)))
这里的P(w1)是词w1在语料库中的出现概率,P(w1,w2)是w1和w2同时出现的概率,均基于语料库的频次统计得出 - 将所有两两组合的PMI值取平均,得到该主题的一致性分数
二、分数范围转换方法
你拿到的-150至-600是Mallet原生输出的未归一化分数,而0.0-1.0是经过归一化处理后的结果。Mallet没有直接的命令实现这个转换,但可以手动处理:
- 第一步:统计所有主题一致性分数的最大值(比如你的数据里的-150)和最小值(比如-600)
- 第二步:用线性归一化公式转换每个分数:
归一化分数 = (当前分数 - 最小值) / (最大值 - 最小值)
举个例子:某主题分数为-300,代入后就是(-300 - (-600)) / (-150 - (-600)) = 300/450 ≈ 0.67 - 如果你想和其他工具的0-1分数对齐,也可以尝试余弦归一化,但线性归一化是最直接的方案
另外,有编程基础的话可以修改Mallet源代码,找到TopicCoherence.java类,在输出分数的部分加入归一化逻辑,这样就能直接输出0-1范围的分数。
内容的提问来源于stack exchange,提问作者Glorifier
相关产品推荐
相关产品推荐

