You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
6.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 066 | 高级推荐模型之三:优化复杂目标函数
周三我们讨论了协同矩阵分解,其主要思想就是解决多个两两关系的矩阵分解,并且希望能够建立隐变量之间的共享。
今天,我们来看一个稍微不一样的话题,那就是**如何优化更加复杂的目标函数**。
## 为什么需要复杂的目标函数
在介绍更复杂的目标函数之前,我们首先来回想一下,在之前的分享中,都接触到了哪些目标函数。
对于基于流行度或者相似度的推荐系统来说,其实并没有真正的目标函数的概念。这些推荐模型都是某种直观的“翻译”,这也导致了这些推荐系统很难直接使用在真实的应用中,往往是被当作特性用在其他模型中。
基于信息的推荐系统,本质上就是监督学习在推荐系统中的应用。因为是监督学习,那自然就需要目标函数。这里,经常是对点击率或者购买率进行建模,也就是说,经常使用**二分分类的目标函数**。
当我们使用矩阵分解的架构来对用户和物品的关系进行建模时,绝大多数情况下我们是在讨论**评分**。对于评分信息,常用的其实是**线性回归**Linear Regression也有学者使用**泊松回归**,因为泊松回归对于整数变量的建模要好于线性回归。当然了,矩阵分解也可以扩展到对点击率或者购买率的建模。
当年Netflix竞赛之后Netflix公司把获奖的矩阵分解拿来进行实现放入线上系统中结果发现并没有本质性地提高推荐效果这其实就和目标函数有关。虽然Netflix竞赛造就了矩阵分解等类似模型的流行但是逐渐地研究人员和工业界从业人员也意识到**用户对物品的评分,并不是推荐系统需要优化的目标,也就是说目标函数“选错了”**。
那么,我们需要什么样的目标函数呢?
## 高级目标函数
直接对评分进行建模的最大问题,就是这和真实的推荐场景并不相符。不管是电商平台,还是新闻系统,我们并不是只在意用户对于某一些物品的评分。
真实的应用场景往往是这样的,用户打开应用,然后浏览一系列物品,由上往下进行翻阅,然后从中找到喜欢的物品。
这是不是很像我们在讨论搜索的时候,用户对于搜索结果的浏览?回忆一下,在搜索的场景中,我们首先输入关键字,然后搜索算法会返回一系列的结果。大多数情况下,我们会对返回的结果逐一检查。
在推荐场景下,我们虽然没有搜索关键词,但是整个从上往下的场景是类似的。
于是,我们就可以从搜索排序中得到启发,尝试对推荐结果进行排序。换句话说,我们并不在意用户的真实评分,或者我们是否能对用户和物品的喜好度进行完美估计,我们在意的是,**能否把用户可能喜欢的物品排到前面去**。
**把搜索系统中的排序思想利用到推荐系统中,是推荐系统的一个重大进步,这也让推荐系统和真实场景逐渐挂钩。**
那么,很直观的,要想更改推荐系统的行为,从评分的预测到排序学习,我们需要更改目标函数。
参考文献\[1\]中提出了一种叫**BPR**的方法,是把**配对法**引入到推荐系统中的一个重要工作。我们快速回忆一下已经在搜索系统中介绍过的“配对排序学习”。简单说来,配对法就是希望,对于某一个查询关键词来说,学习到每一对文档之间的关系,然后通过把所有的两两关系都预测正确,从而建立一个完整的排序结果。
很明显,在推荐系统的场景下,没有查询关键词,但是我们依然可以通过构造“**会话**”Session来学习排序。
简单来说,我们针对用户来到应用后产生的会话,对用户交互过的物品进行建模训练。我们期望能把有“正交互信息”的物品排到“负交互信息”的物品之前。
值得注意的是,和搜索不一样,推荐系统往往没有明确的反馈信息。意思就是,在搜索系统中,我们有已知的标签信息,也就是哪一个文档是“相关”的,哪一个是“不相关”的。然而,在推荐系统中我们并没有这样的信息。
因此,所有用户和物品的交互都是“**隐回馈**”Implicit Feedback。我们必须**依靠假设来找到相关的物品**。在这里我们假定有正交互信息的物品是比其他物品更加相关。于是正交互的物品的预测值要高。这里的“正交互”可以是点击、购买或者其他信息。这就是BPR的基本思路。
需要强调的一点是BPR仅仅是一种思路框架我们可以应用到矩阵分解中以及基于信息的推荐系统等不同的模型中。我们可以把矩阵分解中的对于评分的目标函数换成基于BPR的目标函数也就是进行配对法训练得到的推荐系统能够更好地对物品进行排序。
有了这个思路我们就可以打开一系列的想法了。比如我们在前面的搜索模块中讲过其实还可以直接优化类似NDCG、MAP这样的指标。那能不能把这些想法也搬运到推荐系统中去呢
简单的回答是,能。但是这个流程也不是那么显然易见的,毕竟我们没有直接的标签信息,而且一般来说,这些目标函数本身就已经很难优化了,我们还要嫁接到矩阵分解或者是分解机等模型上,这就会让优化的难度继续攀升。今天我们就不展开讨论这部分内容了。
## 小结
今天我为你讲了推荐系统的另外一个问题,那就是目标函数。
一起来回顾下要点第一我们分析了为什么要关注目标函数以评分为基础的目标函数的问题第二我们详细介绍了BPR这种非常经典的配对法的目标函数。
最后给你留一个思考题如果我们能够对所有物品的喜好度进行精准预测是不是就不需要BPR了呢学习排序和对物品喜好度的预测是完全不同的两件事还是相互之间有联系呢
欢迎你给我留言,和我一起讨论。
**参考文献**
1\. Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. BPR: Bayesian personalized ranking from implicit feedback. Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence (UAI '09). AUAI Press, Arlington, Virginia, United States, 452-461, 2009.