共计 5623 个字符,预计需要花费 15 分钟才能阅读完成。
作者 / 韩虹莹
编辑 / Ein
从人和信息的博弈谈举荐零碎缘起
首先谈谈我了解的举荐零碎。
如果说举荐零碎的定义是什么,每本书每篇文章说的都不太一样,协同过滤 1992 年就曾经有了,三十年里有数大佬剖析了个性化举荐的缘起和意义,世界曾经不须要多一个人的见解。然而,当所有人都说一件事件是正确的时候,咱们也要想分明 它为什么是正确的。
如果你问我举荐零碎是什么,我会通知你,是信息到人的精准散发。那么为什么在这个时代举荐零碎才应运而生?今人不会须要信息精准散发,车马信息都很慢,今人学富五车不过当初一个书包的信息量;唯有当初人才须要信息精准散发,信息太多工夫太少,乱花渐欲迷人眼,所以咱们须要一个智能的零碎,帮忙你过去过滤信息,所以举荐零碎是人和信息的桥梁。
当然,正如罗马不是一天建成的一样,在互联网上搭个桥也是要演进的,最开始是个小木桥——门户网站,用分类导航散发了信息;起初演变到了石板桥——搜索引擎,人能够更精准的找信息;逐渐的信息太多了,要变成信息找人,在这个过程中,无论是信息的消费者,还是信息的生产者,都遇到了未曾预感的艰难,信息消费者找不到信息了,信息生产者无奈让本人的信息展示在消费者眼前,有痛点就有需要,有需要就有产品,于是举荐零碎作为一个产品,恰到好处又必然的到来。凯文凯利在《必然》里,把这个趋势称为“过滤”:
进行过滤是必然的,因为咱们在不停地制作新货色。而在咱们将要制作的新货色中,首要的一点就是发明新的形式来过滤信息和个性化定制,以突显咱们之间的差别。
人如何和信息相处,举荐零碎既不是终点,恐怕也不会是终局,但它曾经是以后人们对于解决信息所能做的最好的实际了。
举荐零碎要如何满足需要
举荐零碎应该独自作为一个产品来看,他是一个什么产品呢?作为一个加工信息的产品,它肯定要满足信息供需两端的需要,才有价值。
所以作为一个举荐零碎,要把本人定义在一个 中间方的地位,能够说 C 端用户和产品经理都是你的用户,两端的需要都须要被满足,所以既须要你想技术计划,还须要你去想,你怎么更好的满足两端的需要,用户只须要你精准的帮他找到信息。而对于产品方,须要开掘想通过举荐零碎取得什么。
对于用户端(信息需要端),最迫切的需要是如何帮我精准的找到我须要的信息。
对于公司端(信息供给端),是为了满足一些商业化的需要,比方吸引用户,加强用户黏性,进步用户转化率,比方资讯平台,短视频平台,信息流平台心愿晋升用户活跃度,缩短用户停留时间,电商平台心愿进步用户购买转化率。
举荐零碎惯例架构
从上图来看,一个残缺的举荐零碎包含数据局部和模型局部,数据局部次要依赖大数据离线或在线解决平台,次要实现的工作包含数据的收集和 ETL 解决,生成举荐模型所须要的特色数据。
举荐零碎模型局部是主体,这部分要在提供举荐模型服务之前,实现模型的训练,而后对输出数据进行解决,通过不同的召回或排序策略,生成最初的输入后果。一个惯例的工业级举荐零碎,在模型局部次要包含召回层,过滤层,排序层,也可依据业务须要判断是否须要补充策略与算法层。
1. “ 召回层 ”
个别利用高效的召回规定、算法或简略的模型,疾速从海量的候选集中召回用户可能感兴趣的物品。
2. “ 过滤层 ”
个别依据特定场景业务需要,对召回的数据进行过滤。
3. “ 排序层 ”
利用排序模型对初筛的候选集进行精排序。
4. “ 补充策略与算法层 ”
也被称为 ” 再排序层 ”,能够在将举荐列表返回用户之前,为兼顾后果的 ” 多样性 ” “ 风行度 ” “ 新鲜度 ” 等指标,联合一些补充的策 略和算法对举荐列表进行肯定的调整,最终造成用户可见的举荐列表。
举荐零碎常见模型概述与比拟
先来一个举荐算法倒退的工夫线
能够从图中看出,2016 年是举荐零碎从传统机器学习模型到深度学习模型的转折点,这一年微软的 Deep Crossing,谷歌的 Wide&Deep,以及 FNN、PNN 等一大批 优良的深度学习举荐模型相继推出,继而逐步成为举荐零碎的支流。但传统举荐模型依然要被器重,第一它们是深度学习的根底,很多货色都是一脉相承的,矩阵合成的隐向量思维在 Embedding 中持续倒退,FM 中的核心思想——特色穿插也在深度学习中持续应用,逻辑回归能够看做神经元的另一种表现形式。第二这些算法的硬件要求低,后果可解释性强,训练容易,仍是大量场景所实用的。
机器学习举荐模型演化过程
能够从图中看出,2016 年是举荐零碎从传统机器学习模型到深度学习模型的转折点,这一年微软的 Deep Crossing,谷歌的 Wide&Deep,以及 FNN、PNN 等一大批 优良的深度学习举荐模型相继推出,继而逐步成为举荐零碎的支流。但传统举荐模型依然要被器重,第一它们是深度学习的根底,很多货色都是一脉相承的,矩阵合成的隐向量思维在 Embedding 中持续倒退,FM 中的核心思想——特色穿插也在深度学习中持续应用,逻辑回归能够看做神经元的另一种表现形式。第二这些算法的硬件要求低,后果可解释性强,训练容易,仍是大量场景所实用的。
协同过滤
协同过滤是举荐零碎畛域利用最宽泛的模型了,而且大家一说到举荐零碎,就会间接关联到协同过滤,而且是基于用户的协同过滤 or 基于物品的协同过滤,其实从某种程度上了解,矩阵合成也是协同过滤的一种,基于用户,商品的协同过滤属于基于近邻的协同过滤,从更大一点的范畴来说,大多数机器学习和分类算法能够了解为协同过滤的一个分支,协同过滤能够看做是分类问题的泛化,正是因为这个起因,实用于分类的许多模型也能够通过泛化利用于协同过滤。
本节次要针对的,还是宽泛意义上了解的,基于近邻的协同过滤,这类协同过滤,其实就是 基于用户 - 用户,物品 - 物品的类似度计算。
基于用户协同过滤
当用户须要个性化举荐时,能够先找到与他类似其余用户(通过趣味、喜好或行为习惯等,而后把那些用户喜爱的并且本人不晓得的物品举荐给用户。
步骤:
- 筹备用户向量,在该矩阵中,实践上每个用户失去一个向量
- 向量维度是物品个数,向量是稠密的,向量取值能够是简略的 0 或 1
- 用每个用户向量,两两计算用户之间类似度,设定一个类似度阈值,为每个用户保留与其最类似的用户
- 为每个用户产生举荐后果
基于物品协同过滤
基于物品的协同过滤算法简称,其简略利用情景是:当一个用户须要个性化举荐时,例如因为他之前购买过金庸的《射雕英雄传》这本书,所以会给他举荐《神雕侠侶》,因为其余用户很多都同时购买了这两本书。
步骤:
- 构建用户物品的关系矩阵,能够是购买行为,或购买后的评估,购买次数等
- 两两计算物品类似度,失去物品类似度矩阵
- 产生举荐后果,典型的两种模式:①为某个物品举荐相干物品;②集体首页的“猜你喜爱”
计算类似度的形式有如下几种:
①余弦类似度,余弦类似度 (Cosine Similarity) 掂量了用户向量 t 和用户向量 j 之间的向量夹角大小。显然,夹角越小,证实余弦类似 度越大,两个用户越类似。
②皮尔逊相关系数,相比余弦类似度,皮尔逊相关系数通过应用用户平均分对各独立评分进行修改,减小了用户评分偏置的影响。
矩阵合成
对于矩阵合成,一种讲法把它划归为协同过滤,认为他是基于模型的协同过滤,另一种则认为他是协同过滤的进化,其实这个到影响不大,矩阵合成是在协同过滤的根底上,减少了隐向量的概念。
矩阵合成能够解决一些邻域模型无奈解决的问题:①物品之间存在关联性,信息量不随向量维度线性减少;②矩阵元素稠密,计算结果不稳固,增减一个向量,后果差别很大。
矩阵合成把 User 矩阵和 Item 矩阵作为未知量,用它们示意出每个用户对每个 item 的预测评分,而后通过最小化预测评分跟理论评分的差别,学习出 User 矩阵和 Item 矩阵。也就是说,图 2 中只有等号右边的矩阵是已知的,等号左边的 User 矩阵和 Item 矩阵都是未知量,由矩阵合成通过最小化预测评分跟理论评分的差别学进去的。
矩阵合成用到的用户行为数据分为显式数据和隐式数据两种。显式数据是指用户对 item 的显式打分,比方用户对电影、商品的评分,通常有 5 分制和 10 分制。隐式数据是指用户对 item 的浏览、点击、购买、珍藏、点赞、评论、分享等数据,其特点是用户没有显式地给 item 打分,用户对 item 的感兴趣水平都体现在他对 item 的浏览、点击、购买、珍藏、点赞、评论、分享等行为的强度上。咱们以后次要是隐式数据。
指标函数通过最小化预测评分和理论评分 ruirui 之间的残差平方和,来学习所有用户向量和物品向量
显示矩阵指标函数
隐式矩阵指标函数
求解办法:矩阵合成的办法也不止一种,有奇怪值合成,梯度降落,交替最小二乘,这里简略列举一个交替最小二乘的例子。
ALS(交替最小二乘法):先固定 X 优化 Y,而后固定 Y 优化 X,这个过程一直反复,直到 X 和 Y 收敛为止。
这里举一个,显式矩阵中固定 Y 优化 X 的例子,另外固定 X 优化 Y:
- 指标函数被拆解为多个独立指标函数,每个用户对应一个指标函数,用户 u 的指标函数为:
- 该指标函数转换为矩阵模式。
- 对指标函数 J 对于 Xu 求梯度,并令梯度为零。
逻辑回归→POLY2→FM→FFM
首先逻辑回归的想法很奇妙,把举荐零碎的举荐问题看做了一个分类问题,为什么能够这样说呢?
逻辑回归能够通过 sigmoid 函数,将输出特征向量 x =(x1,x2……xn)x=(x1,x2……xn),映射到(0,1)区间,如下图所示:
逻辑回归有着很多劣势:
- 数学含意上的撑持,逻辑回归的假如是因变量 y 遵从 Bernoulli 散布,十分合乎咱们对于 CTR 模型的意识,相比之下线性回归模型假如 y 遵从高斯分布,这与咱们所了解的 CTR 预估模型(二分类问题)并不统一。
- 可解释性强,逻辑回归的简略数学模式也十分合乎人类对 预估过程的直觉认知
- 工程化简略,具备易于并行化,训练简略,训练开销小的特点
但也有一些毛病:
- 表达能力不强,无奈进行特色穿插、特色筛选等操作,所以会造成一些信息的损失
正是因为这个起因,前面呈现了 POLY2 模型,FM 模型,FFM 模型,接下来我一起阐明:
POLY2 模型——特色的“暴力”组合
该模型对所有特色进行了两两穿插(特色 Xj1 和 Xjz),并对所有的 特色组合赋予权重 Wh(j1,j2),实质上还是一个线性模型:
FM——隐向量的特色穿插
FM 与 POLY2 的次要区别是用两个向量的内积(Wj1,Wj2) 取代了繁多的权重系数 Wh(j1,j2)。
- FM 为每个特色学习了一个隐权重向量,特色穿插时,应用两个特色隐向量的内积作为穿插特色的权重。
- 引入隐向量的做法,与矩阵合成的思维殊途同归,是从单纯用户 - 物品扩大到了所有特色上。
- 把 POLY2 模型 n^2 的权重参数缩小到了 nk。
FM 这样做的劣势在于,隐向量的引人使 FM 能更好地解决数据稠密性的问题,泛化能力大大提高。在工程方面,FM 同样能够用梯度降落法进行学习,使其不失实时性和灵活性。
FFM——特色域
FFM 与 FM 的区别在于隐向量由原来的 Wj1 变成了 Wj1,f2,这意味着每个特色对应的不是惟一一个隐向量,而是一组隐向量,当特色 xj1 与特色 xj2 进行穿插时,xj1 会从 xj1 这一组隐向量中挑出与特色 xj2 的域 f2 对应的隐向量 Wj1,f2 进行穿插,同理,xj2 也会用与 xj1 的域 f1 对应的隐向量进行穿插。
模型演变的形象化示意
POLY2 模型
FM 模型
FFM 模型
传统机器学习算法比拟
大厂如何玩转举荐零碎
大厂实际比拟
这里选取了几个比拟典型的举荐零碎实现,他们别离属于几种举荐零碎的典型场景
深度学习算法比拟
针对几个大厂局部采纳了一些深度学习的模型,这里也调研比照了深度学习模型的特点和优劣势
云课堂的个性化举荐
特色工程
次要选用了用户行为数据,用户行为数据在举荐零碎中有显性反馈行为和隐性反馈行为两种,在云课堂场景下,用户的评分属于显性行为,用户的购课,学习,做笔记等都属于隐性行为。对于这些行为,咱们依据业务重要水平,都给出了初始分数,生成了用户 - 课程的初始评分矩阵
评分矩阵简略示意如下:
算法选型
在个性化举荐零碎搭建初期,因为咱们是从 0 到 1 开始构建,所以并没有抉择在初期抉择简单的深度学习算法,以及构建丰盛的用户画像,心愿在初期疾速构建一个 MVP 版本上线,后续逐渐反思优化迭代
所以在算法选型上,咱们从上面三种计划中进行评估抉择
- 基于标签匹配
- 基于用户 / 行为的协同过滤
- 基于矩阵合成的协同过滤
那么咱们是如何进行取舍的?
对于计划一,如果心愿计划一获得较好的成果,关键点在于依赖标签体系的建设,只有标签体系足够欠缺,也就是说,举荐后果的好坏,是可预计的,强依赖于标签体系的建设的。
对于计划二,它的毛病在于解决稠密矩阵的能力较弱,而云课堂中用户的学习行为并不能算是高频行为,同时头部效应显著,而咱们心愿的是通过个性化举荐零碎,开掘更多隐含的可能性,保留更多平台上更多平时没机会裸露的课程,显然基于近邻形式的协同过滤,不是一个很适合的抉择。而基于矩阵合成的办法能够肯定水平上加强稠密矩阵的解决能力,同时引入隐向量,能够从用户行为中开掘更多的可能性。
咱们选用了基于 ALS(交替最小二乘法)的矩阵合成模型作为第一个实际的算法,采纳的是 Spark MLlib 提供的 API。
在 ALS 模型的构建过程中,须要调整如下几个参数以获得最好的成果
对于下面几个参数,别离调整了几次参数,以 MSE 和 RMSE 作为评估指标
均方误差(Mean Square Error , MSE)和均方根误差(Root Mean Square Error , RMSE) 常常被用来掂量回归模型的好坏。个别状况下,RMSE 可能很好地反映回归模型预测值与实在值的偏离水平。但在理论利用时,如果存在个别偏离水平十分大的离群点,那么即便离群点数量 非常少,也会让这两个指标变得很差。
工程落地
一个能够落地的举荐零碎,数据收集模块,ETL 模块,特色工程模块,举荐算法模块,Web 服务模块模块是必不可少的,首先来一个整体架构图:
接下来简略对几个模块的实现进行阐明:
参考文献
1.《深度学习举荐零碎》王喆
2.《举荐零碎 原理与实际》Charu C. Aggarwal
-END-