本文作者:合肥工业大学 电子商务研究所 钱洋 email:1563178220@qq.com 。
内容可能有不到之处,欢迎交流。
未经本人允许禁止转载。
论文来源
Lin T, Tian W, Mei Q, et al. The dual-sparse topic model: mining focused topics and focused terms in short text[C]//Proceedings of the 23rd international conference on World wide web. ACM, 2014: 539-550.
论文来自于机器学习顶会WWW。该篇文章于14年发表。
相关介绍
单稀疏模型
在2009年,Chong Wang和David M. Blei在NIPS发表一篇论文,将变量选择引入主题模型中。如下为其论文:
Wang C, Blei D M. Decoupling sparsity and smoothness in the discrete hierarchical dirichlet process[C]//Advances in neural information processing systems. 2009: 1982-1989.
即传统的概率主题模型或者非参模型(如HDP)等的基本假设都是:每个主题包含的单词数即为语料的所有单词数(维度相等)。但在实际中,能够描述每个话题的单词数量往往是有限的。
例如,描述篮球的可能有NBA、运动员、球星、训练、总冠军等词汇。而与篮球无关的一些词汇如音乐等可能无法表述该话题。
为此,需要对主题词分布进行约束。为达到此目的,作者引入稀疏性先验,即“spike and slab” prior。该先验相当于在Dirichlet上上加入二项分布,来控制主题是否包含该词。
双稀疏模型
Chong Wang主要是在主题词上面加入了稀疏性。但考虑到短文本,其也存在稀疏性问题,即短文本关注的话题往往是有限的,仅仅几个话题。为此,Lin等人再次使用Spike and Slab先验对文档主题进行建模,提出了双稀疏主题模型。
模型推理
针对双稀疏主题模型,作者使用的是Collapsed Variational Bayes Inference。相当于标准变分推断来说,该算法相当于对更多的变量进行的积分。
如下为作者模型的推理公式:
Java编程实现的细节
在编程实现时,无非就是更新参数 α \alpha α,参数 β \beta β,参数 z z z。
但在更新 α \alpha α,参数 β \beta β,必须进行对数处理,原因是Gamma函数(数值连乘),可能导致数值过大。
对于Beta函数而言,转化成对数形式,可使用下面的函数:
public static double log2betaf(double a,double b){
double beta = logOn2Gamma(a) + logOn2Gamma(b) - logOn2Gamma(a+b);
return beta;
}
//调用Java数值分析计算包lingpipe-4.1.0.jar
public static double logOn2Gamma(double value) {
return com.aliasi.util.Math.log2Gamma(value);
}
另外,需要格外注意的是:通过指数变化将数值由对数再次转化成真实值时,需要注意double类型的最大范围(2的1024次方)。所以,一旦超过这个值,我们就取Double.MAX_VALUE进行计算。
如下为其Java处理方式:
if (FuncUtils.exponential2(log_a1) > 1024) {
a_mk[d][k] = Double.MAX_VALUE/(Double.MAX_VALUE + FuncUtils.exponential2(log_a0));
}else {
a_mk[d][k] = FuncUtils.exponential2(log_a1)/(FuncUtils.exponential2(log_a1) + FuncUtils.exponential2(log_a0));
}
完整代码请关注:https://github.com/soberqian/TopicModel4J