5.1.2 基于物品的协同过滤 看上面的公式可能不太好理解,我们举一个简单的基于物品的协同过滤例子:
第一步:在评分矩阵中,1表示用户交互过的评分,0表示算法需要填充的评分。用余弦相似度公式计算物品之间的相似度。然后,得到一个物品相似度矩阵。
第二步:根据 公式,算出用户对缺失物品的评分。把所有的评分算好后,可以填充评分矩阵中缺失的值。
通过上面的计算,假如我们要对用户3进行推荐,得到用户3未操作的物品B的评分为0.58,未操作的物品C的评分为0.82,按照评分大小进行排序,生成有序的推荐集,那么用户3的推荐集为(物品C>物品B)。
5.1.3 花椒直播如何用? 花椒直播用的是item(主播)based model,即基于主播的协同过滤算法。
主要基于以下原因:
主播数量远小于用户数量,相似度矩阵维度小,计算少、易存储( ); 根据用户的历史行为推荐,可以让用户比较信服(可解释性强); 新用户只要看过一个主播,就可以很快得到其他相似主播的推荐; 5.1.4 基于邻域方法的小结 这是一种基于统计的方法,不是优化学习的方法。(没有学习过程和设立指标进行优化得到最优模型的过程) 只用了局部数据计算相似度、进行推荐,更像是一种策略。没有用到全局数据。 基于这些原因,后面出现了基于隐向量的协同过滤方法进行推荐。
5.2 基于隐向量的协同过滤 5.2.1 传统的矩阵分解 (1) 传统矩阵分解建模的目的 和基于邻域的方法一样,基于矩阵分解方法建模的目的也是补全缺失值,只是补全的方法和基于邻域的方法不太一样。
(2) 显示反馈VS隐式反馈
(3) 显示反馈常用方法 显示反馈常用方法就是把高维稀疏评分矩阵 分解成两个小矩阵 , 乘积的形式,用两个小矩阵乘积来拟合原始的大评分矩阵。目标函数就是均方误差,公式形式很像LR,小矩阵拟合的越好, 差值越小,最后损失函数也就越小。 是一个正则化项。
(4) 隐示反馈常用方法 对于花椒直播推荐系统来说,隐式反馈是更常见的。因为我们不会让用户每看一个主播就打一个分数,一般采用用户和主播的交互程度来作为用户对主播的偏好,交互程度一般选择为观看时长、点击次数和观看次数等。所以,隐式反馈做法和显示反馈做法不太一样。
隐式反馈首先根据交互程度 来得到一个 。比如,我们定义观看时长大于10秒时 ,观看时长小于10秒时 。 代表用户的评分矩阵,取值范围为 。 表示用两个小矩阵来拟合全是0和1的大矩阵 。这里比显示反馈多了一项 ,表示用户对物品的置信度,它正比于反馈次数 ,反馈越强烈,这一项值越大。可以把 理解为加权训练,交互程度越高,样本的权重也就越高,占的损失也就越大,这样训练出来的模型效果会更好一点。
相关论文: 【1】Hu Y, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets[C]//2008 Eighth IEEE International Conference on Data Mining. Ieee, 2008: 263-272.
(5) 如何求解X,Y矩阵? 不管是显示反馈还是隐式反馈,只要定义好损失函数或者目标函数,就可以通过最小二乘法(ALS)交替求解、 矩阵。
(6) 线上怎么用? 中每行为一个用户的隐向量, 中每列为一个物品的隐向量。离线训练好后将、 两个矩阵存起来,线上用时用户来了取出用户的隐向量,然后取出在线的主播的隐向量,算一下用户向量和主播向量的内积,内积也就是得分,最后根据得分的高低进行排序。
(7) 传统矩阵分解方法小结 优点:
存储少(高维稀疏的评分矩阵变为两个低维稠密的隐向量矩阵); 缺点:
未用到其他特征,不够综合、全面(和ranking系列模型比); (8) 基于矩阵分解和基于邻域协同过滤方法的比较
5.2.2 基于深度学习的矩阵分解 (1) 深度学习+矩阵分解 有些示例表明,学到用户/物品的隐向量后,直接用内积描述用户-物品交互关系(matching function) 有一定的局限性,即内积函数(inner product function)限制了MF的表现力 。
随着深度学习的兴起,有学者提出了新的模型:即借鉴深度学习中的方法,使用深度神经网络 (DNN) 从数据中自动学习用户/物品隐向量的交互函数(即内积函数),在增强表现力的同时也可以引入一定的泛化能力。示例:NCF框架 。(Neural Collaborative Filtering)
(2) Neural Collaborative Filtering(NCF) 下图中,左边是用户的隐向量,右边是物品的隐向量,如果直接做内积的话,就是传统的矩阵分解。NCF直接把内积计算换成了DNN,并且变成了传统机器学习的模式,用神经网络训练的方式学习交互关系。
NCF论文: 【1】He X, Liao L, Zhang H, et al. Neural collaborative filtering[C]//Proceedings of the 26th international conference on world wide web. 2017: 173-182.
(3) NeuMF 集大成者的一个模型就是NeuMF(神经矩阵分解)。如下图所示,它提出了一个GMF Layer(广义矩阵分解层)和一个DNN层。可以看到拿到用户和物品的隐向量之后,一方面在GMF层做元素级别的乘积,其实内积就是对应位置相乘再相加,NeuMF稍微改进了一下,对应位置相乘完之后,不是直接相加,而是再学一次权重,这就是在接一个Dense层来学习一下权重,相当于传统的矩阵分解权重不在都为1,而是用网络学习。另一方面,加入了一个DNN层。把用户隐向量和物品隐向量直接Concatenate起来以后,直接接入一个DNN层。最后将两方面的结果Concatenate起来接到输出层。
这样做的好处是,GMF Layer保留了内积的方式NeuMF又引入了DNN的方式,结论表明这样做既可以增强传统矩阵分解的表现力又可以引入DNN自己的一些高阶特征交叉的特点进而引入了一定的泛化性。
NeuMF论文: 【1】He X, Liao L, Zhang H, et al. Neural collaborative filtering[C]//Proceedings of the 26th international conference on world wide web. 2017: 173-182.
最后,关于深度协同过滤的内容到这里就结束了,大家感兴趣的话,可以参考“花椒技术公众号”里文章:深度学习在花椒直播中的应用—神经网络与协同过滤篇,地址:https://mp.weixin.qq.com/s/ERfIcCJ7ne4OjfRStdR_vw 。这篇文章专门讲一些神经网络和协同过滤的内容,也含有一些代码和实例,也是曾经在花椒直播平台用作召回的模型。
5.3 其它模型 随着时代发展,基于邻域的协同过滤和基于隐向量的协同过滤是比较常见的,现在也有其他模型的出现,比如说Youtube的召回模型。
5.3.1 Youtube召回模型 Youtube的召回模型是比较复杂的,上面提到的召回模型都是用到了用户和物品的id类特征,而Youtube模型用到了性别、地理信息、样本的时间和一些embedded特征等。这个模型的特点就是:模型最后一层的输出当作用户的隐向量,是在线上实时计算的,就是每次用户来经过嵌入层变成向量再到ReLU这样的网络得到一个输出作为用户的隐向量;最后一层的权重当作物品的隐向量,这一部分是离线训练好后直接存储起来,线上不用直接更新,直接拿出来用就行;这些线上拿到用户的隐向量以及存储的物品隐向量以后,做一个基于类似最近邻查找的方法基于内积进行最近邻查找,其实就是把用户隐向量和所有物品隐向量做内积,然后根据内积进行排序。
Youtube的召回模型总的来说就是提出了下图所示的框架,物品隐向量离线训练完存好,用户线上实时拿,并且可以用到很多个特征,而不是局限于上面提到的模型只用到用户和物品的id类特征。这个模型还是挺火的,但是复杂度、延时要高一些。
Youtube召回模型论文: 【1】Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. 2016: 191-198.
5.3.2 其他召回模型 其他比较火的召回模型,比如说双塔模型,基于DNN或FM的双塔模型,这种模型的特点就是用户和物品各一个塔,从这两个塔中得到用户和物品的隐向量,在线上也是用两个隐向量进行内积得到用户对物品的得分,然后对得分进行排序。除此之外,其他召回模型还有基于用户多兴趣的模型、知识图谱模型和图神经网络等。这些模型都是比较新、比较潮流的,感兴趣的话可以根据自己的场景进行试验。
6. 精排(Ranking)
把特征输入到模型中,用模型来做二分类,大于等于0.5是喜欢,小于0.5是不喜欢。如果是喜欢的话,怎么分喜欢和更喜欢呢?对物品做排序,分高的是更喜欢,其次是喜欢。
比如上图中的例子,我们希望模型学到这样的效果:北京35岁的年轻男性用户王先生喜欢看“正在跳舞互动多的年轻女主播”,不喜欢“男性游戏主播”。这里面“北京”、“35岁”、“男性”、“王先生”(id类特征)是用户特征,“正在跳舞”、“互动多”、“年轻”、“女主播”是主播特征。我们希望通过许多样本,让模型学出不同用户的喜好。
6.1 特征工程 6.1.1 特征工程
6.1.2 训练集的生成 根据用户和主播前N天的数据来组成用户画像。
比如说,标签的产生:以今天为例,看某个主播30秒,我们就认为是正样本。看某个主播2秒,我们就认为是负样本。训练数据的产生:今天前N天的数据提取成用户和主播的特征。比如,提取出用户前N天看过哪些主播的行为序列数据或者用户前N天累计送礼是多少的数据。由这些天的数据组成用户和主播的画像。最后,把用户画像、主播画像和标签对应起来就会形成一条样本。我们就可以把今天的数据提取出来,组成训练样本。
当然,只用一天的数据作为训练样本肯定不够。因为用户不能保证每天都来,主播也不能保证每天都在。所以,我们要以上述的方式选出M天数据,把M天训练数据组成整体训练集。这样一方面可以保证数据量的要求,另一方面也能保证用户和主播覆盖度的要求。
特别需要注意,不能有数据穿透! 就是说,今天的数据我们当做标签的话,生产画像的时候,就一定不能包含今天的数据,而是用不包含今天的前N天数据来生产画像。
6.2 排序模型 6.2.1 早期的排序模型 (1) 逻辑回归(LR)
可解释性比较强:LR一个特征对应一个权重,很容易知道哪个特征比较重要,很容易解释出什么样的用户喜欢什么样的主播。
缺点:LR是一个线性模型,如果要引入非线性,就需要人工进行特征交叉,这样成本就会很高。因为要保证特征交叉有效果,就要有相关业务的经验,要熟悉具体的业务场景。比如说做直播,工程师要熟悉直播的场景,才能知道什么样的特征交叉在一起才是有效果。只有训练集中出现过的特征组合才能学习到,没有出现过的特征组合就学习不到,因此LR是偏重记忆泛化性差。
基于LR的上述缺点,有人就会想能不能进行自动的特征交叉?
(2) 因式分解机(FM)
FM缺点:FM只能进行二阶特征交叉,如果想学高阶特征交叉,FM公式后边又要加入很多项,这样组合起来的维度是爆炸的,所以就引入了GBDT+LR模型。
(3) GBDT+LR 树模型是基于特征进行结点分裂的,树模型从根结点到叶子结点这条路径本身就是一种特征组合。比如说,根结点根据年龄大于等于20为左子树、小于20为右子树,下一层根据性别为男是左叶子结点、性别女为右叶子结点,那么从根节点依次下来就是年龄大于等于20且性别为男。有了特征交叉以后,把树叶子结点进行编号。把编号作为LR模型的输入进行训练。
GBDT+LR的优点是提出了一种用模型自动学习特征交叉的思想,这个是很重要的改进。因为人工特征交叉成本太高,用模型自动学习特征交叉的思想很重要。后来深度学习兴起以后,各种Embedding特征交叉也算是这种思想的延伸。GBDT+LR模型还提出分步更新的级联结构,因为模型分为两部分,不是联合训练的,是分步训练的,先训练树模型,然后叶子节点编好号,再训练LR模型。
树模型的缺点是不能并行且速度慢,尤其是GBDT树,它的下一棵树的输入是前一棵树的残差,只能串行训练,速度很慢。工业界的解决办法就是分两步,树模型可以以天级别或周级别进行更新,LR模型可以在线上进行实时更新,就类似于利用FTRL这种实时框架来进行实时更新。树模型容易过拟合高维稀疏数据。LR模型记忆性好,但是泛化性差。
GBDT+LR论文: 【1】He X, Pan J, Jin O, et al. Practical lessons from predicting clicks on ads at facebook[C]//Proceedings of the Eighth International Workshop on Data Mining for Online Advertising. 2014: 1-9.
6.2.2 深度排序模型 以上讲的三个模型是早期的排序模型,随着深度学习的兴起,又出现了一大堆深度排序类的模型,为了方便我们把模型分为两大类:
Wide&Deep类模型,如(x)DeepFM、DCN、DIN; 以多任务学习为基础的联合训练模型,如ESMM、MMOE; 6.2.2.1 Wide&Deep类模型 (1) 深度神经网络(DNN)
DNN的优点是学习特征间潜在关系,因为DNN是全连接层,所有元素级特征连接在一起,这样尽管训练集中没有出现过的特征组合,DNN也可以学习到,有一定的泛化能力。
(2) Wide&Deep
有LR模型还有DNN模型,自然有研究者就把这两者结合在一起。因为LR的好处就是记忆性,缺点就是人工特征交叉、特征工程复杂;DNN的好处就是泛化能力强、可以自动学习特征之间潜在关系、是一种端到端的模型。所以把它们两个结合在一起后,即兼顾了记忆性、泛化性,还能端到端的训练,serving起来也是比较简单的。
从上图的Wide&Deep模型中可以看出,左边是一个LR,右边是一个DNN。这种深浅双塔结构的提出极大的促进了后续模型的发展,后续很多模型都是基于这个模型的改动。
Wide & Deep论文: 【1】Cheng H T, Koc L, Harmsen J, et al. Wide & deep learning for recommender systems[C]//Proceedings of the 1st workshop on deep learning for recommender systems. 2016: 7-10.
(3) FM + DNN = DeepFM 既然LR能和DNN结合,自然又有研究者想到FM也能和DNN结合,这就是DeepFM模型。与Wide&Deep模型的区别在于把左边的LR换成了FM,这样即能保证有LR部分的特点,还能多一个二阶自动交叉的FM特点。
DeepFM论文: 【1】Guo H, Tang R, Ye Y, et al. DeepFM: a factorization-machine based neural network for CTR prediction[J]. arXiv preprint arXiv:1703.04247, 2017.
(4) DIN 还有一个比较有代表性的工作是阿里的DIN模型(深度兴趣网络)。这个模型的特点就是,把NLP领域中的Attention Network引入进模型中。把当前要预测的物品与用户交互过的物品放到一个Attention层里,经过Attention层会对用户交互过的每一个物品学到不同的权重,然后进行加权平均拿到一个总的Embedding。Attention有效是基于这样一种现象:观察到用户兴趣的“多峰分布”以及“部分激活”的数据特点,举个例子,假如当前我们要预测的物品是一件衣服,用户的历史行为里面有各种各样的物品(衣服、吃的、玩的),我们预测衣服的时候,用户过去吃的和玩的物品对当前的衣服预测是没有参考价值的,只有过去交互过的衣服对于当前预测衣服是有价值的,Attention的作用就是对过去交互过的衣服赋予较大的权重,对吃的玩的物品赋予较小的权重,这样就可以减少其它类物品的干扰。DIN模型也反映了模型是服务于场景的这一理念。
DIN论文: 【1】Zhou G, Zhu X, Song C, et al. Deep interest network for click-through rate prediction[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1059-1068.
(5) Wide&Deep类模型总结
我们对Wide&Deep类模型进行总结,近年来的许多深度模型都可以归类为Wide&Deep类模型,这些模型有以下特点:
首先输入离散特征转化为Embedding,所有的Embedding经过stacking layer级联在一起。stacking layer有很多级联方式,比如说最简单的concatenate,像前面讲的DNN那样,把所有embedding横向拼接在一起,然后接全连接层。还可以加权平均,比如某用户浏览过十个物品,十个物品对应十个embedding,我们可以直接加起来求平均值,当成一个特征。还有也可以做内积或者外积,这里也有对应的网络。还有复杂点的,可以做Attention,像DIN一样,把当前物品和用户交互过的物品一起放到Attention网络里面。根据这一层的不同可以划分出好多网络模型。
还有一个特点在特征交互层。特征交互层的wide部分可以用LR,也可以用FM,还可以用Deep & Cross Network中的交叉网络。特征交互层的Deep部分,根据交互方法可以分为隐式/显示、元素级/向量级、二阶/高阶。隐式的比如DNN这种,直接是全连接。显示的比如说FM这种,每个特征都带一个Embedding,可以把不同特征的Embedding以向量级的形式显示的两两交叉。全连接就是元素级,FM就是向量级,向量级不会把特征的Embedding每一位拆开,向量级是直接把两个特征的Embedding以向量的形式做内积。二阶交叉就像FM这种的,典型的只有二阶交叉。高阶交叉就像XDeepFM,它可以调节CIN网络的个数来达到你想要的任意阶的交叉。
所以,Wide&Deep类模型区别就在两部分:一是特征交叉的方式是隐式/显示、元素级/向量级、二阶/高阶中的哪一个;二是所有Embedding的级联方式是concatenate/weighted sum/product/attention中的哪一种。
相关文章: 【1】深度学习在花椒直播中的应用——排序算法篇,地址:https://mp.weixin.qq.com/s/e6Spp7smIEUUExJxHzUOFA 。这篇文章主要是分析Wide&Deep类模型,这里面只简单的介绍了五种排序模型,但是还有好多模型都可以归为Wide&Deep类,都是在Wide部分或者Deep部分有一些改动,总体框架都是差不多的。
6.2.2.2 多任务类模型 推荐系统的多目标优化,是目前业界的主流之一,也是很多公司的研发现状。以花椒直播为例,可以优化的目标有点击、观看、送礼、评论、关注、转发 等等。
多任务模型旨在平衡不同目标的相互影响,尽量能够做到所有指标同步上涨,即使不能,也要尽量做到在某个优化目标上涨的情况下,不拉低或者将尽量少拉低其它指标,力求达到全局最优 的效果。
(1) ESMM模型
ESMM模型首次把样本空间分成了三大部分,从曝光到点击再到转化的三步行为链,并引入了浏览转化率(pCTCVR)的概念。我们正常做CVR任务的时候,默认只在点击的空间上来做,认为曝光、点击并转化了就是正样本,认为曝光、点击并未转化为负样本。如果这样想的话,样本全空间只有点击的样本,而没有考虑没有点击的样本。ESMM论文就提出曝光点击、曝光不点击以及点击之后是否转化所有的这些样本都考虑进来,因此提出三步的行为链,提出如下公式:
因此提出了浏览转化率公式,进而提出了上图所示的网络模型,一个双塔模型,它们是共享底层Embedding层的,只是上面的不一样,一个用来预测CTR,这个可以在全样本空间上进行训练。另一个是用来预测CVR,CVR是一个辅助任务。最后的CTCVR可以在全样本空间中训练。ESMM模型是一个双塔、双任务的模式在全样本空间上进行训练。这样训练的好处可以解决两个问题:一是,样本选择的问题,CVR是在点击的基础上进行训练,训练集只有点击的,实际数据可能有曝光点击和曝光未点击的数据,我们往往把曝光未点击的数据给忽略了,这样就造成了样本选择偏差,训练集和实际数据分布不一致的情况。二是,解决数据稀疏的问题。因为我们现在在全样本空间上进行训练,不是只在点击的样本上进行训练,所以样本就多了很多,所有样本可以进行辅助更新CVR网络中的Embedding,这样Embedding向量就会训练的更加充分。ESMM还提出子网络MLP可以替换,为我们提供了一种可扩展的多任务模型架构。
ESMM模型有一个缺点:共享底层。共享底层在多任务上可能有问题,所有就有了MMOE的文章。
ESMM论文: 【1】Ma X, Zhao L, Huang G, et al. Entire space multi-task model: An effective approach for estimating post-click conversion rate[C]//The 41st International ACM SIGIR Conference on Research & Development in Information Retrieval. 2018: 1137-1140.
(2) MMOE模型
很多多任务模型是上图(a)这种模式,共享一个底层的Embedding之后,然后两个塔得到两个任务。但是它的使用表明如果多任务的相关性比较低的话,模型的效果就比较差。基于这种现象就提出了上图所示的(b)(c)专家网络,希望不同的任务可以从输入得到不同的东西,这就有点类似于Attention的部分了。用门来决定塔可以从输入拿到什么东西,这样的好处就是每一个Tower可以拿到不同的输入,这样就可以减少任务之间相互拖后腿的情况。这种架构也是目前比较常见的。
上面分享了花椒直播推荐系统从0到1的搭建过程,包括召回和排序过程,但可以发现这些其实是很通用的,完全可以应用于商品推荐、小视频推荐等其他场景。下面会分享些直播场景和其他场景不一样的地方。
MMOE论文: 【1】Ma J, Zhao Z, Yi X, et al. Modeling task relationships in multi-task learning with multi-gate mixture-of-experts[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2018: 1930-1939.
7. 智能推荐遇上花椒直播 7.1 直播内容的理解和识别 直播中的推荐和商品推荐等场景有所不同,是“活的 ”而不是“死的 ”,因为直播是长时间连续性的 ,并且内容是实时在变的,比如用户喜欢看跳舞直播,那么当主播不跳的时候用户可能也不想看了。因此我们需要把直播最核心、最精彩的部分挖掘出来推荐给用户。这就需要对多模态内容进行理解、融合,包括但不限于:
音频(如可以识别主播是否在唱歌,在唱什么类型的歌等); 7.2 直播实时性特征 除了上面所说需要对直播的多模态内容进行理解, 一些实时的数据 也是非常重要的,它们一定程度上可以反映当前直播的火热程度和受欢迎程度,放到模型中作为特征可以加强推荐系统的准确性和实时性 。包括但不限于:
7.3 花椒直播推荐中的排序模型结构
原始输入层:用户特征、上下文特征、过去交互过的物品特征和当前要预测的物品的特征。 特征交互层:特征交互层就像上文总结的Wide&Deep类模型一样,可以有很多部分。比如,FM可以来提取特征之间的二阶交叉,举例,拿用户性别的Embedding和候选主播的Embedding来做二阶交叉,FM可能会学到男用户喜欢看女主播。CIN是多阶交叉,可以拿多个特征放到CIN中进行高阶特征组合。Attention就像DIN那种方式,可以把过去交互过的主播和当前要预测的主播放到Attention中。这样当前预测主播是跳舞,可以把用户过去看过的游戏主播权值训练的小一些,过去看过的跳舞主播权值大一些,这样就达到了筛选优化的作用。还有简单的方式,就是把这些Embedding全都连接起来,接一个全连接层。 特征拼接层:特征拼接层就是把特征交互层得到的Embedding向量拼接在一起,然后接个全连接。这个全连接可以起到降维的作用,把Embedding的维度降小一点。因为,多目标输出层中还有多个tower。 多目标输出层:类似MMOE的结构,可以设计一个专家网络,这样每个任务从特征拼接层的输出中学到不同的东西,避免造成各任务之间相互干扰的情况。常见的任务有:点击,用户是否点击了这个主播。观看,可以定义观看多少秒以下是无意义的观看,多少秒以上是有意义的观看,并且可以把观看时长作为一个权重进行加权训练。送礼,送的是正样本,没送的是负样本,送了多少可以当成权重进行加权训练。多任务训练的好处就是可以用全样本数据,且原始输入层中的Embedding也会训练的更加充分。 7.4 模型训练和更新的逻辑
训练原始数据有用户数据、物品数据、实时数据和上下文数据。用这些数据解析成用户/主播画像作为训练数据,用户主播交互标签作为训练数据的label。离线训练的部分,就是上文所讲的训练集生成的过程。每天生成一天的训练样本,把多天的训练样本组合起来形成全量样本,满足覆盖度和数据量的要求。全量样本直接存储在HDFS上,以天或周的级别进行更新,这样可以保证模型的准确性。另一部分是增量样本,比如flink流,可以线上对模型进行流式更新,这样可以满足模型实时性的要求。模型验证模块,验证模型指标有没有达到我们期望的阈值,防止一些不好的特征把模型训练坏了,还推上线的情况。模型验证好之后,需要上线服务就可以用Tensorflow Serving这种框架来进行线上服务。推荐引擎用的是golang来处理用户的请求,以及将请求转化为特征,并把特征喂给Tensorflow Serving的一个流程。golang的性能比较高。
8. 总结 本文分享总结了花椒直播沿着业内的发展路线从0到1搭建个性化推荐系统的过程,先后尝试了许多模型,每个模型除了其典型的结构外,还有许多非常珍贵的细节,比如公式推导、参数的选择、工程上的trick等等,这些大家可以查阅相关模型论文。
要注意的是,没有“最好的模型”,只有“最适合的模型 ”,并不是说模型越fancy越复杂,线上效果就会越好。比如阿里提出了DIN模型,是因为工程师们首先发现了数据中“多峰分布”、“部分激活”的现象,而在直播场景中这个特点就不是很明显,因此上线了DIN模型后的提升也不是很大。
但直播场景也有其自身的特点,如多模态、实时性和热点效应 等。只有深入理解了场景,并基于用户行为和数据提取出能表现这个场景的特征,再对应的开发适用于这个场景的模型,才能取得最佳的效果。
9. Reference 本文是Microstrong在观看花椒直播推荐系统高级算法工程师王洋在B站上讲解的《智能推荐算法在直播场景中的应用》视频的笔记。
【1】花椒直播推荐系统高级算法工程师王洋:智能推荐系统在直播场景中的应用,视频,地址:https://www.bilibili.com/video/av90507035?t=1453 【2】回顾 | 花椒直播推荐系统高级算法架构师王洋:智能推荐算法在直播场景中的应用,地址:https://mp.weixin.qq.com/s/1Hrl25TjDKiEvPa35RDyNQ 【3】深度学习在花椒直播中的应用——排序算法篇,地址:https://mp.weixin.qq.com/s/e6Spp7smIEUUExJxHzUOFA 【4】深度学习在花椒直播中的应用—神经网络与协同过滤篇,地址:https://mp.weixin.qq.com/s/ERfIcCJ7ne4OjfRStdR_vw 【5】深度学习在花椒直播的应用——Tensorflow 原理篇,地址:深度学习在花椒直播的应用——Tensorflow 原理篇
投稿或 交流学习,备注:昵称-学校(公司)-方向 ,进入DL&NLP交流群。 方向有很多: 机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等 。