推荐系统遇上深度学习(三十七)--基于多任务学习的可解释性推荐系统

论文名称:《Why I like it: Multi-task Learning for Recommendation and Explanation》
论文地址:https://dl.acm.org/citation.cfm?id=3240365

本文提出了一种通过结合概率矩阵分解PMF和对抗式Seq2Seq模型的多任务学习框架,可以通过矩阵分解模型得到用户对物品的评分,通过Seq2Seq模型可以生成用户对于物品的评论,在提升推荐预测准确性的同时,能够在一定程度上解决推荐系统中难以提供可解释性推荐结果的难题。我们来一探究竟。

1、整体框架

该模型的整体框架如下图所示:

可以看到,该模型架构可以分为两个部分:

对抗式Seq2Seq模型(Adversarial Sequence-to-Sequence Learning):这一部分学习生成用户对于物品的评论,并作为推荐结果的可解释性依据。

上下文感知的PMF模型(Context-aware Matrix Factorization):这一部分主要得到用户对于目标物品的评分。

接下来,我们分别介绍上面两部分的结构。

2、对抗式Seq2Seq模型

关于该部分的模型,文章首先介绍了单独生成用户u的评论和单独生成物品j评论的过程,最后简单介绍了生成用户u对物品j个性化评论的过程。注意在上面的框架图中,对抗式Seq2Seq模型包含了单独生成用户评论和单独生成物品评论两个部分的结构。

这里我们以单独生成用户的评论为例,介绍模型的结构。单独生成物品的评论,是同样的原理。

首先定义用户文档du,i代表用户i的所有历史评论的集合,而物品文档dv,j代表物品j的所有历史评论集合。

经典的Seq2Seq模型,Decoder阶段输入的是已知的正确数据,但是这种方式会导致exposure bias,即一步错,步步错。所以,文章首创一种对抗式 Seq2Seq 模型,与常见的 GAN 方式一样包括判别网络和生成网络。

2.1 Recurrent Review Generator

生成器G的目的是尽可能生成像用户i所写的评论。包含两个主要的部分:用户文档encoder和用户评论生成decoder。

用户文档encoder

该部分的详细流程如下:
1、对于用户文档du,i中的每一条评论,将其进行分词,得到(w1,w2,...,wT)单词序列。
2、单词序列通过embedding 表得到对应的k维embedding,这里的embedding通过首先通过word2vec预训练得到,随后经由反向传播的过程不断更新。
3、将单词序列对应的embedding输入到双向的GRU循环神经网络中,得到两部分的输出:

两部分的输出分别代表正向输入和反向输入的最后时刻的输出,然后将两部分的输出进行拼接,得到每个评论的对应向量hT
4、将每个评论的的对应向量hT进行求平均操作,得到用户的文本特征向量,用U~i表示。

用户评论生成decoder
在得到用户的文本特征向量之后,decoder生成用户评论的过程可以用如下的条件概率表示:

这里的decoder的初始隐状态是全0的向量,而非encoder最后时刻的隐藏层状态。encoder和decoder通过用户文本特征向量相联系。decoder在t-1时刻得到选择的单词yi,t-1时,得到该单词对应的向量xi,t-1,并与用户文本特征向量进行拼接,作为decoder的t时刻的输入:

decoder的初始输入是开始标记SOS,在得到结束标记EOS时终止。在训练初期,使用用户真正的评论进行参数预训练,随后通过蒙特卡洛搜索的方式生成评论。

2.2 Convolutional Review Discriminator

对于判别模型,其目的不仅仅是区分评论是否是人写的,还要区分生成的评论是否是用户i所写的,所以需要在结构中加入用户特征向量,该特征向量不是上文所说的用户文本特征向量,应该是对用户ID所对应的Embedding。该部分借鉴经典的textCNN结构进行判别,将评论词汇向量与用户特征向量进行 Concat 处理后作为输入,模型结构如下所示:

2.3 Adversarial Training for Review Generation with REINFORCE

对判别器来说,其目标是尽可能将人写的和生成器生成的区分开来,其目标是最大化下面的式子:

而对生成器来说,采用强化学习中策略梯度的方式进行训练,其梯度为:

而最终生成网络的损失函数定义如下:

其中,U是经由矩阵分解模型得到的用户向量矩阵,如何得到我们将在后面介绍。这还不同于textCNN中输入的用户特征向量。所以我们缕一缕,现在每个用户有三组不同的向量:用户文本特征向量、经由矩阵分解得到的用户向量、textCNN中输入的用户向量。

在生成器加入后面的正则项的原因是为了使用户文本特征向量不仅仅经由用户的评论生成,同时还考虑用户在评分矩阵中所体现出的偏好。

2.4 扩展

上面介绍了用户评论生成器,物品评论生成器和用户-物品评论生成器都是同样的过程,只是将输入做了一定的替换。这里我们就不再做过多的解释了。

3、上下文感知的PMF模型

这里评分预测问题所选用的模型是概率矩阵分解PMF模型(Probabilistic Matrix Factorization)。

我们这里简单介绍一下该模型的原理。该模型基于如下两个假设:
使用如下两个假设:观测噪声(观测评分矩阵R和近似评分矩阵之差)为高斯分布,同时用户属性向量和物品属性向量矩阵均为多元高斯分布(即向量中的每一维服从不同的高斯分布),即:

上面第一个式子可以改写成:

我们的目标是基于目前的评分矩阵,找到最有可能的用户向量和物品向量,即最大化下面的后验概率:

这里所有的方差都是超参数,所以可以认为是常量,所以可以对上面的式子进行化简(这里用户和物品向量是独立的):

两边取对数得到:

将多元高斯分布的公式带入最终化简可得到:

上面第二行的数都是常数,所以我们只需要关心第一行的式子,最大化上面的式子,最终可化简为最小化下面的式子:

有关详细的推导过程,可以参考文章:https://blog.csdn.net/df19900725/article/details/78222076?locationNum=4&fps=1

本文对上面的过程进行了一定的改进,主要是用户属性向量和物品属性向量所服从的分布变为:

而最终经由化简得到的损失函数为:

通过求导数为0,可以计算得到最终的结果为:

感兴趣的同学可以自己推导一下上面的过程。

4、模型训练流程

一种常见的训练方式是将两部分的损失函数加起来得到一个全局的损失函数进行联合训练。但是,无论是生成模型还是评分预测模型,两部分都同时依赖用户向量U和用户文本特征向量U~,以及物品向量V和物品文本特征向量V~。如果想要生成好的评论,模型会期望所得到的用户向量U和物品向量V是准确的,如果想要得到较为精确的评分,模型会期望用户文本特征向量U~和物品文本特征向量V~是准确的,但是在训练初期,二者都不是特别精确,因此会导致两个任务之间相互误导。
所以实际中采用类似于EM方法的训练方式,即当训练其中一个任务时,固定另一个任务的参数,反复交叉训练,其流程如下图:

5、实验结论

论文使用均方误差(MSE)作为对预测评分的评价指标。对 Yelp 2013、Yelp 2014 等 5 个国际通用数据集进行试验,结果如下所示。

MT 为本论文所提出的的多任务学习的推荐算法模型,由实验结果所示,该算法模型的 MSE 的结果最多个数据集的结果中都表现最优。

对于推荐系统的算法解释效果如何,最佳的评价方式就是线上与用户进行互动调研。但目前论文还没有这样做,论文采用了一种妥协的方式评价生成的评论质量如何。

利用 Perplexity的评价指标对比其他生成模型的生成效果以及 tf-idf 的相似性计算方式评价生成的评论与真实评论的近似性,结果如下所示,本论文模型生成的评论效果最佳。

6、总结

论文尝试用生成评论的方式解决推荐算法的解释合理性难题,并将预测评分率的效果达到了 state-of-the-art。评论生成的方式作为推荐解释的方式虽然存在争议,但不失为一条路径。

论文中涵盖了多种前沿领域的研究热点,包括对抗式网络、AutoEncoder、强化学习、多任务学习等等,是值得一看的优质应用论文。

参考文献

1、原文:https://dl.acm.org/citation.cfm?id=3240365
2、http://www.mingriqingbao.com/web/detail/forword/P/36267
3、https://blog.csdn.net/df19900725/article/details/78222076?locationNum=4&fps=1

推荐阅读更多精彩内容