A Multi-View Deep Learning Approach for Cross Domain User Modeling in Recommendation Systems(2015)

Abstract

在这项工作中,本文提出了一个基于内容的推荐系统,以解决推荐质量和系统可扩展性.根据用户的浏览历史记录和搜索查询,文章提出了一些能够完美刻画用户的特征表示.本文使用深度学习方法将用户和项目映射到潜在空间,在该潜在空间中用户与其首选项目之间的相似性最大化.引入基于多视图的深度学习模型来学习跨领域和用户特征的项目特征. 该用户的特征表示能够使得模型在没有产生购买交易的情况下,通过它们足够的搜索和历史行为来为用户产生推荐.将不同领域的数据组合成一个单个模型有助于提高所有领域数据下的推荐质量,以及具有更丰富的用户潜在向量表示.

Introduction

本文在开始部分指出了协同过滤算法不足之处:在提供高质量推荐之前需要相当多的历史记录.这个问题被称为冷启动问题.因此,传统的CF方法通常无法为新用户提供高质量的推荐.另一方面,基于内容的推荐方法从每个用户和/或项目中提取特征,并使用这些特征来进行推荐.如果两个用户U_iU_j他们在某些方面相似,那么系统就可以向用户U_j推荐用户U_i之前喜欢的商品项目. 在实践中,基于内容的方法可以较好的处理新产品的冷启动问题,但是对于解决新用户的冷启动问题,其有效性收到质疑,因为新用户的用户特征较难获取这可能导致无法捕捉到用户的真正的兴趣.
为了解决这些问题,为了构建用户特征,和其他基于用户的推荐方法不同, 本文从用户的浏览和搜索历史中提取用户特征对用户偏好进行建模.文章的先验逻辑是:用户的历史在线活动反映了很多用户的背景和偏好,因此可以准确地了解用户可能感兴趣的项目和主题。例如,具有许多与婴儿相关的查询和网站访问的用户(例如,toysrus.com)推断这个人可能是一个新生婴儿的妈妈.
在本文的工作中,提出了全新的深度学习方法,对深层结构化语意模型(DSSM)进行拓展,DSSM能够把用户和商品映射到一个语义空间,使被推荐的商品和用户在映射空间中有极大的相似性, 为了实现DSSM,我们把用户和商品(通过非线性转换层)映射到一个低维稠密的语义空间, 在映射的过程中我们令用户和其喜欢的商品之间的映射向量之间的相似性最大化. 这种建模方式能够使得模型学习到有趣的映射:例如访问过fifa.com的人同时可能也会喜欢阅读关于世界杯的新闻,也可能喜欢玩PC或XBOX上面的fifa游戏.对用户行为建模可以克服传统推荐算法的诸多限制,我们可以利用用户的查询获取用户的兴趣并推荐相关商品,及时他们没有任何音乐服务的历史记录.本文的代价函数使用的是排序学习.
此外, 本文将既有的DSSM称之为单视图DNN模型(single-view DNN), 这个模型的作用是从单一域中学习用户和商品的特征, 本文提出的新模型被命名为多视图(multi-view DNN),因为其能够从多个域中的抽取商品特征和用户特征关系一起学习,这有助于解决冷启动问题.(PS:我们说传统的方法是在每个域各自训练一组embedding, 然后基于寻找各个域间embedding关系,这篇文章是把所有域的数据都放到一起训练寻找最佳embedding,这有助于解决冷启动问题.)实验表明,这种结构能够同时提高所有域的推荐质量(PS:= =真的可以吗,说好的没有免费的午餐呢?)
使用深度学习来对用户偏好进行建模的一个挑战是特征的高维度,这会影响学习的效率同时也会影响模型的泛化能力.本文提出了几种有效且可扩展的降维技术,可以将尺寸减小到合理的尺寸,而不会丢失太多信息.

Description of the dataset

本文的数据集来自于四组:1. bing的搜索引擎日志 2. 从Bing News中浏览的历史新闻文章 3.从Windows AppStore下载记录 4. 来自Xbox的电影/电视日志. 数据源于2013.12-2014.6的美国 加拿大和英国市场.
* 用户特征: 我们搜集了用户的查询关键字和其点击的网址来形成用户特征, 用户查询词被规范化处理, 然后将其处理成unigram特征, 我们把用户点击的网址缩减短为域级(如www.goesbest.cn/wp-admin/admin.php经过处理后就变为www.goesbest.cn),我们之后使用tf-idf只要热门与重要的特征.最后我们选择具有300万个unigram特征以及5000k个域名特征, 总计350w的用户特征
* 新闻特征: 我们收集了用户从bing点击的新闻,每一条新闻由三部分特征来表示.第一部分我们使用tri-gram来编码标题特征.其次我们使用onehot编码来标记新闻的顶级类别(经济,娱乐,政治,体育...), 最后使用内部专用的NLP解析器提取每篇文章的内容,并用tri-gram进行编码, 这一部分产生了100k用户特征.
* App特征: 用户的应用程序下载记录是从Windows App Store日志中收集的. 每个APP的名称使用tri-gram进行编码,与此同时结合App类别(游戏)来刻画App特征, 由于应用程序描述本身的多变性, 我们不把它作为特征空间的一部分,最后App的特征数目为50K.
* 电影/电视特征:我们把每个电影/电视的标题及其描述合成一个文本特征,然后使用tri-gram进行编码,之后把类型进行onehot编码,产生了50K的特征.

本文的模型框架中,用户特征被映射到user view, 其他特征被映射到对应的view中. 为了训练模型, 每一个user-view中的记录都与item view(新闻 App 电影/电视)相匹配,为了实现这一点,我们对登录的用户进行下采样,然后根据登录的用户行为记录产生实验的数据.这也导致了每一个user-item view对中的用户数不同(PS:这里简单理解就是,一个用户A可能有新闻记录,但是却没有App记录,这导致了不同的连接方式下的用户数不一致,尽管item view中的用户数不同,但是他们都是User View中的子集)

DSSM for User Modeling In Recommendation Systems

这一部分就是两个没有交集的神经网络构成:

简单地说,我们把Query(Q)和Document(D)的特征作为神经网络的输入,我们会得到Query特征的embedding(y_Q)和Document的embedding(y_D). 之后我们把两个embedding计算cos相似度,得到R(Q,D)即:
R(Q,D) = \cos(y_Q,y_D) = \frac{y_Q^T y_D}{||y_Q|| \cdot ||y_D||}
在拿到了Query和Document之间的余弦相似性R(Q,D)之后, 需要进一步做softmax输出.其中我们引入一个平滑因子\gamma来平滑结果.
P(D|Q) = \frac{\exp(\gamma R(Q,D))}{\sum_{D'\in D} \exp(\gamma R(Q,D'))}
理想状况下来说,D应该是包含了全部文档集合,但是在实际中我们只能选取后补集合(召回-排序,很显然这个模型是用于排序阶段的算法),我们令(Q,D^{+})为用户输入查询词Q后点击了D^+网页, 除此之外,我们还引入了一些没有点击的网页来作为负样本,表示为{D_j^-;j=1,...,N}
对于代价函数的选择, 模型选取极大似然估计来使得用户查询词对应点击的文档概率最大化:
L(\Lambda) = - \log \prod_{Q,D^+} P(D^+|Q)
其中\Lambda是神经网络的所有参数,(为什么这里不关心负样本产生的误差呢??)
Query(Q)和Document(D) 是应该做Onehot编码的,但是在实际中,onehot编码维度太高,所以需要对Query和Document做tri-grams处理,例如Web经过tri-gram处理之后,变为"#-w-e, w-e-b, e-b-#"虽然这样处理之后,看起来onehot编码后的维度更高了,但是从概率论的角度讲(英文是如此),编码之后的维度却大大降低, 同时也可以推广到训练数据中看不到的新词.

Multi-view Deep Neural Network


在介绍Multi-view DNN之前,我们先给出一些定义:
设我们有v+1个视图,其中由用户视图X_u和其他v个辅助视图X_1,...,X_v,每一个X_i有各自的空间X_i \in R^{d_i}.
设用户视图下的第j个样本为X_{u,j}. X_{a,j}为在辅助域a下第j个样本, 当X_{u,j}X_{a,j}为输入的样本时,其他的视图X_{i:i\neq a}的输入样本为0.
代价函数的目标是为每个视图找到一个非线性映射,使得用户映射Y_u和其他视图Y_1,...,Y_v之间的相似性之和最大化.
p = \arg \max_{W_u, W_1,...,W_v} \sum_{j=1}^N \frac{e^{\alpha_{\alpha}\cos(Y_u,Y_{a,j})}}{\sum_{X' \in R^{d_a}} e^{\alpha \cos(Y_u,f_a(X',W_a))}}

这种目标函数的直觉十九尝试为用户特征找到映射,这个映射(embedding)可以适配于不同的item空间, 这种参数共享的方式可以保证在没有足够信息下的域,能够通过其他有更多数据的域来学习映射.(= =所谓intutition就是无法用数学推导来证明的结论)这种直觉通过实验被证明是正确的.

Training NV-DNN

尽管每一个训练示例只包含一对输入,其中一个用于用户视图,一个用于item视图.但是实际上,我们的用户视图可以有多个,只需要在更新权重的时候使用基于规则的方法指定更新用户的权重.比如美团和点评有两个User空间,我们可以根据用户的数据来源不同,使用规则根据样本来更新对应的user视图权重.对于某一个训练示例来说,我们只有\frac{\partial p}{\partial W_u}\frac{\partial p}{\partial a}的梯度是非0的,对于其他item的视图梯度均为0,无法更新.

Advantage of MV-DNN

MV-DNN的有点主要有以下几点:
1. 最初的DSSM模型只适用于查询关键字和文档,但是改进的MV-DNN能够处理多种类型的数据比如离散属性等(这个优点...个人觉得传统的DSSM模型也能做到)
2. MV-DNN能够利用多个不用域的能力, 利用多个域的信息协同工作.从理论上讲,不同的用户应该有不同的用户空间,但是本文在所有的item空间下均使用同一个用户空间.(这里给了我比较大的启发,我认为这个这篇文章第二大创新之处233)

Dimension And Data Reduction

个人认为和算法相比,这一部分的内容同等重要,这是微软在工程实践中的精华,需要好好学习.

Top Features

这里微软的做法是把用户上存在概率大于0.001的特征提取出来,0.001本身不是一个大数.这样做的微软给出的解释是,使用相对较少的频繁特征可以能够更好的描述用户的在线行为.记得这里已经用户原始的特征做预处理(删除停顿词,用TF-IDF等), 使用了这个方案后,用户特征从350k降维到了83k

K-means

这里微软使用对特征进行聚类, 基本思想是把相似特征聚合新特征Y,新特征Y的个数等于聚类的超参k, 我们把簇i中特征出现的次数作为新特征Y下对应的值.用公式的表达方式:设f_i(j)为用户i拥有特征j的个数.关于kmeans距离的度量有多种方式,在这里,微软选择了余弦相似性来度量.降维后的特征Y_i,我们令1 \leq Cls(a) \leq K表示分配给a的簇, 之后我们计算Y_i:
Y_i(j) = \sum_{a:X_i(a) > 0 \& Cls(a)=j} f_i(a)
簇的个数K需要大一些,否则将会难以从特征中学习到有用的信息.为了缓解这个问题,微软把类的个数设成为10k,也就是说每个簇包含350个特征.这个计算的开销也是很大的, 在微软的实验中使用了基于云的Map-Reduce实现的K-means,使用该方案后,用户特征从83k降到10k

Local sensitive Hashing(局部敏感哈希)

讲真这里的局部敏感哈希和我所了解的局部敏感哈希不太一样,这里设投影矩阵A\in R^{d\times k},其中d
是原特征空间的特征个数,k是哈希后的矩阵维度数, 也就是说A包含k个不同的投影,用下标A_i来表示获得Y_i,最终获得Y \in R^k,Y_i的计算可以采取如下公式:
Y_i = \begin{cases}
1&if A_iX \geq 0 \
0 &
\end{cases}

经过计算之后,Y_i就变为了(1,0,1,0,1,1,1,0,0,1,1)的形式.因而两个向量X_1,X_2 \in R^d之间的距离可以经由\cos(\frac{H(Y_1,Y_2)}{k} \pi)计算,其中H(Y_1,Y_2)是海明距离.在实验中,k的设计是10k.投影矩阵A的产生策略是从正态分布\mathcal{N}(0,1)中产生, 产生了300GB的空间.为此微软采取了一种名为Pool rick, 首先产生正态分布\mathcal{N}(0,1)中产生m个元素的集合B,其中m \leq size(a),之后我们设计一个关于i,j的哈希映射,把B中的元素映射到A_{ij}中.本实验设置m=1,000,000,和不使用Pool trick相比,内存占用从300G降低到10M.(关于更多LSH的trick:有一篇论文Benjamin Van Durme and Ashwin Lall. Online generation of locality sensitive hash signatures. In ACL’10 Short Papers, pages 231–235.有时间我需要读一下)

Reduce the Number of Training Examples

由于训练集数量过于庞大,在实验中保证了每名用户每个view都只包含一条数据, 对于都与某一用户而言,如果存在多余的数据,那么就对多余的view数据取均值.文章中提到了这样去均值方法实际上等价于优化了平均喜欢的商品. 在评估的时候,由于用户只能给一个商品,所以结果应该给出最优略而不是平均策略(在这种情况下loss和metric不相同),但是这种近似在实验上表现良好,实际上是可以用的(在这里暗暗惊了一下,作者对于loss和metric的理解尤为深刻..学习了)

实验设置

数据集划分:90%用于训练集,10%用于测试集.
对于测试集中的10%数据,我们进一步区分老用户和新用户,老用户和现用户的比例为0.8:0.2
* 对于标签为老用户的客户,其50%的商品集合用于训练集,其余的用于测试集.
* 对于标签为新用户的客户, 其全部的商品集合都用于测试集,保证每一个user-item对不会出现在训练过程中.

对于模型性能的评估,对于训练数据中每一个(user_i,item_j)对,随机选择9个其他项item_{r1},...,item_{r9}(其中r_1为到r_9是随机下标)创建9个用于测试的(user_i,item_j)对(要加入到测试集中),评估标准是测试正确的(user_i,item_j)对于9个测试对的排名.,因而提出两种metric方法:
1. MBR:计算正确项目在其他项目中的排名的倒数,并在整个测试数据中取均值获得MBR值.
2. P@1:计算系统将正确项目排名为最高的百分比

接下来巨硬介绍了两种Baseline方法:
1. SVD矩阵分解:构造U-I矩阵使用SVD进行分解,在实践中,该baseline只能在相对较小的数据集(巨硬的例子中是Apps数据)中是计算可行的。此外,由于它们新用户不出现在用户项矩阵中,因而无法对新用户进行推荐.
2. 频繁项集:该方法可以用户为新用户提供推荐,它的工作原理是计算训练数据中每个item的频率,然后针对测试样本,根据训练集的频率对其他随机item进行排序,该方法是SVD矩阵分解的补充.
3. 典型相关分析(CCA):典型相关分析是一种传统的多视图学习方法,多试图的目标是找到两个线性变换,使得每一个变换后的数据之间的相关性最大.CCA和DSSM之前的区别有:
* CCA是线性变换,尽管有非线性的核函数版本,但是不适用于大规模实验.
* CCA是在某些固定方差约束下最大化相关性,而DSSM最大化正确对的排名,排名目标表明了更好的客观推荐系统。 在我们的CCA实验中,我们只使用top-k用户特征,使用其他二维降维技术K-means和LSH,生成非稀疏特征向量,使相关矩阵过于密集,无法高效计算.

发表回复

您的电子邮箱地址不会被公开。