美团网有大量的商户数据和团购单数据,Topic Model能不能在这方面找到一点应用呢?本文主要介绍用LDA在这方面的应用.
1 语料
选取商户的描述信息、品牌名等内容,以及这个商户下所有的团购单的描述、菜单等信息.把这些信息聚合在一作为商户的Document.最终有1.75M个商户,每个商户的Document平均70个word,词表大小36K.
词表示例:
2 训练
用Spark 1.3 里的LDA做训练,设置K=300个Topic,迭代N=300次,超参数选取 $\alpha=50/K, \beta=0.01$.
3 结果
$\phi$,即$p(w|z)$,topic的词分布,结果如下(只显示了top 30个word):
$\beta$,即$p(z|d)$, 商户的topic分布,结果如下所示:
4 Inference
把用户最近一段时间购买过的团购单的描述信息、菜单等信息抽取出来当作用户的Document,用上面的训练结果来做Inference.由于Spark 1.3里还没有LDA的Inference,自己实现了一个,代码如下:
用户的Inference结果示例如下:
5 应用
有了商户的topic分布和用户的topic分布,就可以算商户-用户之间的相似度了,这个相似度特征很容易用在搜索、推荐、广告的排序中.相似度的计算可以采用Jensen-Shannon distance,计算公式如下:
其中 $ M=\frac {1}{2} (X+Y) $,$X$ 表示商户的topic分布,$Y$表示用户的topic分布, $D_{KL}$表示KL散度.