<audio id="audio" title="015 | WSDM 2018论文精读：深度学习模型中如何使用上下文信息？" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/25/36/2517763117a3f7087e1377899de76d36.mp3"></audio>

今天，我们继续来精读WSDM 2018的一篇论文《隐含交叉：在循环推荐系统中利用上下文信息》（Latent Cross: Making Use of Context in Recurrent Recommender Systems）。这篇文章同样出自谷歌团队，其核心思想是希望通过深度模型来模拟并实现在推荐系统中广泛使用的“交叉特征”（Cross Feature）的效果。

## 作者群信息介绍

这篇论文的所有作者都来自谷歌，我们这里对其中的主要作者做一个简单介绍。

文章的第一作者亚力克斯·布伦特（Alex Beutel）是谷歌的资深科学家，于2016年加入谷歌。布伦特毕业于卡内基梅隆大学，获得计算机科学博士学位，师从机器学习的权威亚力克斯·斯莫拉（Alex Smola）。

最后一位作者艾德·池（Ed H. Chi）是谷歌的主任科学家，他拥有39项专利，已经发表了110多篇论文。在加入谷歌之前，池是帕罗奥图（Palo Alto）研究中心的主任研究员。池毕业于明尼苏达大学，获得计算机科学博士学位。

## 论文的主要贡献

我们首先来看这篇文章的主要贡献，梳理文章主要解决了一个什么场景下的问题。

推荐系统经常需要对当下的场景进行建模，有时候，这些场景被称作“**上下文**”（Context）。在过去比较传统的方法中，已经有不少方法是探讨如何利用上下文信息进行推荐的，比如使用“张量”（Tensor）的形式进行建模；还有一些方法是利用对时间特性的把握，从而对上下文信息进行处理。

近些年，随着深度学习的发展，越来越多的深度学习模型被应用到推荐系统领域中，但还没有直接探究如何在深度学习模型中使用上下文。这篇文章就想在这一方面做一个尝试。

这里面有一个比较棘手的问题。过去，这样的上下文常常使用“**交叉特性**”，也就是两个特征的乘积成为一个新的特征。这样的方法在矩阵分解或者张量分解的模型中得到了非常广泛的使用。然而在深度学习中，过去的经验是不直接使用这样的特性。但是，在上下文非常重要的推荐系统中，不使用交叉特性的的结果，往往就是效果不尽如人意。

这篇文章提出了一个叫“隐含交叉”（**Latent Cross**）的概念，直接作用在嵌入（Embedding）这一层，从而能够在深度模型的架构上模拟出“交叉特性”的效果。

## 论文的核心方法

作者们首先探讨了推荐系统中一个常见的特性，那就是利用交叉特性来达到一个“**低维**”（Low-Rank）的表达方式，这是矩阵分解的一个基本假设。比如每一个评分（Rating）都可以表达成一个用户向量和物品向量的点积。

那么，作者们就提出了这样一个问题：作为深度学习的基石，**前馈神经网络**（Feedforward Neural Network）是否能够很好地模拟这个结构呢？

通过模拟和小规模实验，作者们从经验上验证了深度学习的模型其实并不能很好地抓住这样的交叉特性所带来的“低维”表达。实际上，深度学习模型必须依赖更多的层数和更宽的层数，才能得到相同的交叉特性所达到的效果。对于这一点我们或多或少会感到一些意外。同时，作者们在传统的RNN上也作了相应的比较，这里就不复述了。

得到了这样的结果之后，作者们提出了一个叫作“隐含交叉”的功能。这个功能其实非常直观。传统的深度学习建模，是把多种不同的信息输入直接拼接在一起。“隐含交叉”是**让当前的普通输入特性和上下文信息进行乘积，从而直接对“交叉特性”进行建模**。

这样做的好处是不言而喻的。之前，我们寄希望于深度学习模型自身能够学习到这样的交叉关系。而现在，作者们直接让上下文信息作用于输入信息和其他的中间特征，使得上下文信息的作用得到了提升。

这篇文章提出的办法可以说是第一个尝试解决传统推荐系统的一些想法，使之移植到深度学习的语境中。

## 方法的实验效果

这篇文章使用了谷歌的Youtube数据来做实验。作者们比较了一系列的方法，得出的结论是RNN配合“隐含交叉”比仅仅使用RNN的效果要好2%~3%，这个提升已经是一个非常可观的数字了。

## 小结

今天我为你讲了WSDM 2018的一篇来自谷歌团队的文章，这篇文章介绍了在传统推荐系统的模型中（比如矩阵分解等）都有的交叉特性如何应用在深度学习中。

一起来回顾下要点：第一，我们简要介绍了这篇文章的作者群信息；第二，我们详细介绍了这篇文章要解决的问题以及贡献 ；第三，我们分析了文章提出方法的核心内容以及实验结果。

最后，给你留一个思考题，深度学习模型在默认状态下并不能很好地抓住交叉特性，这是深度模型的问题吗？

欢迎你给我留言，和我一起讨论。


