文章目录
  1. 1. 问题背景
  2. 2. Topic Model
    1. 2.1. 两种Topic Model模型
    2. 2.2. 文本建模
    3. 2.3. pLSA
  3. 3. 基于Topic Model的商品排序
  4. 4. 电商场景的语料库构建
  5. 5. 总结
  6. 6. 参考资料

问题背景

基于朴素贝叶斯分类器的商品排序 中讨论了通过朴素贝叶斯分类器对商品排序,同样的问题背景,本文讨论基于无监督的Topic Model对商品排序,即如何对 200 多个商品排序,使得用户感兴趣的商品排在前面,提高99模块的点击率?

Topic Model

两种Topic Model模型

当我们看到一篇文章后,有时会推测这篇文章是如何生成的。我们可能会认为作者先确定这篇文章的几个主题,然后围绕这几个主题遣词造句,表达成文。一篇文档可以包含多个主题,文档中每一个词都由其中的一个主题生成。

那么,能不能分析各篇文章分别都写了哪些主题,且文章中各个主题出现的概率大小(主题分布)是多少?

要解决上述问题,可以使用Topic Model模型。Topic Model 模型主要有pLSALDA

  • pLSA,即 Probabilistic Latent Semantic Analysis,1999年由 Hoffmn提出。pLSA 假设文章中有多个主题,并且给出每个主题的概率,以及每个主题下出现的词的概率,pLSA 假设文章中的各个主题概率是一定的,每个主题下出现的词的概率也是一定的;
  • LDA,即 Latent Dirichlet Allocation,2003年由 Blei David M.、Ng, Andrew Y.、Jordan 提出。LDA 假设文章中有多个主题,并且给出每个主题的概率,以及每个主题下出现的词的概率,和 pLSA 不同的是,LDA 认为文章中每个主题的概率不是一定的,每个主题的概率满足一定的概率分布,并且每个主题下出现的词的概率也不是一定的,每个词在当前主题下出现的概率满足一定的概率分布。

本文主要讲述 $pLSA$,为说清楚 $pLSA$,先简要介绍下 文本建模

文本建模

我们日常生活中总会产生大量的文本,如果每一个文本存储为一篇文档,那每篇文档从人的观察来说就是有序的词序列。为了方便描述,首先定义一些变量

  • $w$ 表示词,$V$ 表示词典中单词的个数;
  • $z$ 表示主题,$K$ 是主题的个数;
  • $d=(w_{1}, w_{2}, \cdots, w_{N})$ 表示文档,其中 $N$ 表示一个文档中的词个数;
  • $s=(d_{1}, d_{2}, \cdots, d_{M})$ 表示语料库,其中 $M$ 表示语料库中的文档个数。

那么,包含 $m$ 篇文档的语料库可以表示如下

在 Unigram Model 中,我们假设文档之间是独立可交换的,而文档中的词也是独立可交换的,所以一篇文档相当于一个袋子,里面装了一些词,而词的顺序信息就无关紧要了,这样的模型也称为 词袋模型(Bag-of-words)

基于词袋模型,含有 $N$ 个词的文档的生成概率课表示为

$$\begin{eqnarray}
p(d) & = & p(w_{1}, w_{2}, \cdots, w_{N}) \\
{} & = & p(w_{1}) \cdot p(w_{1}) \cdot p(w_{2}), \cdots, p(w_{N}) \\
{} & = & \prod_{i=1}^{N}P(w_{i})
\end{eqnarray}$$

其中,$p(d)$ 表示生成文档 $d$ 的概率,而 $P(w_{i})$ 表示从词典中生成词 $w_{i}$ 的概率。用图模型表示为

其中,被涂色的 $w$ 为观察量,$N$ 表示一篇文档中的单词数量,$M$ 表示语料库中的文档数。

pLSA

我们在构思文章时,往往是先确定要写哪几个主题,比如构思一篇NLP相关的文章,可能40%篇幅谈语言学,30%篇幅谈概率论,30%篇幅谈计算机:

  1. 语言学,容易想到的词汇:语法、句子、语法分析…
  2. 概率论,容易想到的词汇:概率、模型、均值…
  3. 计算机,容易想到的词汇:CPU、内存、二进制…

一篇文章通常由多个主题构成,而每个主题大概可以用与该主题相关的频率最高的词来描述。

按照 pLSA 模型的文档生成过程,我们并未关注词与词之间的顺序,形式化过程

  1. $P(d_{i})$,海量文档中某篇文档被选中的概率;
  2. $P(w_{j}|d_{i})$,词 $w_{j}$ 在给定的文档 $d_{i}$ 中出现的概率;
  3. $P(z_{k}|d_{i})$,具体某个主题 $z_{k}$ 在给定文档 $d_{i}$ 下出现的概率;
  4. $P(w_{j}|z_{k})$,具体某个词 $w_{j}$ 在给定主题 $z_{k}$ 下出现的概率;

根据上述1、3 和 4 的概率,可按照如下步骤得到 “文档-词项” 的生成模型:

  1. 按照概率 $P(d_{i})$ 选择一篇文档 $d_{i}$;
  2. 选定文档 $d_{i}$ 之后,从主题分布中按照概率 $P(z_{k}|d_{i})$ 选择一个隐含的主题类别 $z_{k}$;
  3. 选定 $z_{k}$ 之后,从词分布中按照概率 $P(w_{j}|z_{k})$ 选择一个词 $w_{j}$.

根据以上过程,文档 $d_{i}$ 中词 $w_{j}$ 的生成概率

$$P(w_{j}|d_{i})=\sum_{k=1}^{K}P(w_{j}|z_{k})\cdot P(z_{k}|d_{i}).$$

文档中每个词的生成概率

$$\begin{eqnarray}
P(d_{i}, w_{j}) & = & P(d_{i})\cdot P(w_{j}|d_{i}) \\
{} & = & P(d_{i})\cdot \sum_{k=1}^{K}[P(w_{j}|z_{k})\cdot P(z_{k}|d_{i})]
\end{eqnarray}$$

pLSA 的图模型如下

由于 $P(w_{j}|d_{i})$ 可观测到,$P(d_{i})$ 可事先计算求出,因此,$P(w_{j}|z_{k})$ 和 $P(z_{k}|d_{i})$ 是需要估计的参数,通过 $EM算法$ 估计。

基于Topic Model的商品排序

用户在逛APP时,每个用户都有自己的兴趣,并会对自己感兴趣的商品,进行点击(CLICK)、收藏(FAV)、加购(CART)或者下单(ORDER)。这里做如下假设

  • 每一个商品是都是一个词 $w$,$V$ 表示商品的个数;
  • $z$ 表示用户的兴趣,$K$ 是用户兴趣的个数;
  • $d=(w_{1}, w_{2}, \cdots, w_{N})$ 表示用户有过行为的商品,其中 $N$ 表示用户有过行为的商品的个数;
  • $s=(d_{1}, d_{2}, \cdots, d_{M})$ 表示访问过APP的用户集合,其中 $M$ 表示集合中用户的个数。

按上述假设,每个商品类比为词,每个用户有过上述4种行为的商品集合作为文档,所有用户有过行为商品集合作为语料库。借鉴 pLSA 的思想,可以应用到电商场景中。

已知每个用户有过行为的商品集合,需要估计用户有哪些兴趣,并且每个兴趣下代表性的商品和商品的概率分布。即已知用户 $d_{i}$,和用户有过行为的商品集合 $d=(w_{1}, w_{2}, \cdots, w_{N})$,需要估计用户的兴趣分布 $P(z_{k}|d_{i})$ 和每个兴趣下的商品概率分布 $P(w_{j}|z_{k})$。

本文开始的问题背景中,在9块9模块中,如何对 200 多个商品排序,使得用户感兴趣的商品排在前面,提高99模块的点击率?

即对于一个用户 $d_{i}$ 和一个商品 $w_{j}$,需要知道用户 $d_{i}$ 对这个商品 $w_{j}$ 感兴趣概率是多少。如果知道用户的兴趣分布 $P(z_{k}|d_{i})$,以及每个兴趣下的商品概率分布 $P(w_{j}|z_{k})$,就可以知道用户对这个商品感兴趣的概率,即

$$\begin{eqnarray}
P(d_{i}, w_{j}|z_{k}) = \sum_{k=1}^{K}[P(w_{j}|z_{k})\cdot P(z_{k}|d_{i})]
\end{eqnarray}$$

电商场景的语料库构建

考虑到用户不同行为,对商品感兴趣程度强弱不同,从点击(CLICK)、收藏(FAV)、加购(CART)到下单(ORDER),用户的兴趣越来越强,因此,如果4种行为的权重为

$$W = (w_{click}, w_{fav}, w_{cart}, w_{order}).$$

并且4种行为对同一个商品的行为次数分别为

$$cnt = (cnt_{click}, cnt_{fav}, cnt_{cart}, cnt_{order})$$

则最终用户对商品的最终行为次数可以表示为

$$cnt_{d_{i}, w_{j}}=\sum_{b \in \{click, fav, cart, order\}}(w_{b}\cdot cnt_{b}).$$

考虑到不同行为表达用户对商品不同的感兴趣程度差异,则电商场景的语料库构建如下

$$
\left(
\begin{matrix}
(d_{1}, w_{11}, cnt_{1, 11}) & (d_{1}, w_{12}, cnt_{1, 12}) & \cdots & (d_{1}, w_{1n_{1}}, cnt_{1, 1n_{1}})\\
(d_{2}, w_{21}, cnt_{2, 21}) & (d_{2}, w_{22}, cnt_{1, 22}) & \cdots & (d_{2}, w_{2n_{2}}, cnt_{2, 2n_{2}})\\
\cdots & \cdots & \cdots & \cdots \\
(d_{m}, w_{m1}, cnt_{m, m1}) & (d_{m}, w_{m2}, cnt_{1, m2}) & \cdots & (d_{m}, w_{mn_{m}}, cnt_{m, mn_{m}})
\end{matrix}
\right)
$$

上面矩阵中,每一行表示用户有过行为的商品,及行为次数统计,类比于一篇文档;共 $m$ 个用户即代表语料库有 $m$ 篇文档。

基于以上语料库,可通过 EM算法 得到用户的兴趣分布 $P(z_{k}|d_{i})$,以及每个兴趣下的商品概率分布 $P(w_{j}|z_{k})$,再根据公式(6)就可以得到用户对任意商品的感兴趣概率。

总结

本文讲述了基于Topic Model中 pLSA 算法进行商品排序,解决在APP的9块9模块中,对 200 多个商品排序,使得用户感兴趣的商品排在前面,提高99模块的点击率的问题。借鉴 pLSA 的思想,通过将商品类比为词,用户有过行为的商品集合作为文档,所有用户有过行为商品集合作为语料库,分析用户的兴趣分布,以及每个兴趣下商品的概率分布,得到用户对任意商品的感兴趣概率。

参考资料

  1. Rickjin(靳志辉), 《LDA数学八卦》
  2. v_JULY_v, 通俗理解LDA主题模型
文章目录
  1. 1. 问题背景
  2. 2. Topic Model
    1. 2.1. 两种Topic Model模型
    2. 2.2. 文本建模
    3. 2.3. pLSA
  3. 3. 基于Topic Model的商品排序
  4. 4. 电商场景的语料库构建
  5. 5. 总结
  6. 6. 参考资料