本人于2019年12月份在知乎平台上提出了《在推荐系统领域有什么巧妙的idea》的问题,截止目前已经有近1k关注,近40k的浏览,可见大家对于推荐系统领域的广泛关注。
问题详细描述
在推荐系统领域中,无论是工业界或者学术界,有什么巧妙的想法或者技术让人感觉眼前一亮呢,之前的经典方法或者前沿的理论都可以,或者与其他学科进行交叉研究带来的有趣结论等。以下为牛人的经典回答,特此整理供大家学习。
- 因子分解机模型
FM(factorization machine)是最妙的模型,因为他做到了多快好省。
FM的核心思想是对特征间做两两矩阵分解,相比线性模型能够挖掘二阶组合特征对label的影响。
通过对FM做一些调整,将用户和物品都向量化,使得向量的内积就是推理结果,简单的按位乘背后是用户和物品的特征之间两两矩阵分解的结果。
这样的FM可以做排序,可以做向量召回,可以做多路召回的粗排。
用来做排序,使用logloss,例如进行CTR(点击率)预估,这个不够神奇。
粗排的loss和排序一样,但是一般在多路召回之后,上万的物品的得分不可比,要过粗排统一打分,这个真的把训练时的模型直接线上推理性能是扛不住的。
向量召回呢,加上负采样,配合sampled softmax这样的loss,要把用户和物品进行向量化表示,对物品向量使用如faiss的库进行knn索引,然后高效检索。但是乍看起来FM并没有将用户和物品向量化。
对FM做个变形
对FM的二阶项稍作调整,把二阶项分成user侧和item侧,仅仅做user和item侧的交叉。
如上面公式描述的。内积乘法是满足分配率的,那么用户侧和物品侧特征两两矩阵分解后向量的内积和,可以变成用户侧向量和与物品侧向量和的内积。
再对一阶项和bias做处理,用户侧的一阶项权重拼成一个向量,在物品侧补同样个数的1,相应的物品侧也做同样的事情。其中全局bias当成物品侧的一阶项来处理
假如二阶项64维度,一阶项20维,加上bias。用户和物品都被表示成了85维的特征向量。
如果是粗排,以点击率预估为例,那么在多路召回后,我可以从内存数据库里取出一万个物品对应的向量,然后和用户向量做内积计算,套上sigmoid函数就得到了预估点击率。
如果是向量召回,物品向量拿去用faiss做索引,把索引带到线上用faiss加载到内存里,这时候传入用户向量,就能在内积空间里取得topk相近的物品,完成了召回任务。
为什么要大费周章的做这些操作呢?因为FM在这样处理后做到了多快好省。
- 多:做粗排时,面对上万物品,从容不迫;做召回时,配合如faiss的向量knn索引,面对百万级别的候选池,毫无压力。
- 快:内积运算简单,在线服务RT(响应时间)短。
- 好:FM的效果不俗,不信DeepFM去掉FM看一看。
- 省:不用搭建一个复杂的在线服务,只需要一个KeyValue的数据存储,引入一个faiss库。
如果让我从零到一搭建一个推荐系统,但只能选择一个算法,我只用FM就可以了,做向量召回,做CTR预估,召回和排序都有了,打完收工。
作者:九老师 链接:https://www.zhihu.com/question/362190044/answer/945591801
- 深度树匹配模型
利用数据结构中的最大堆模型,借鉴数据库中的检索树结构,完全跳脱出传统推荐算法的协同过滤、隐因子分解和深广度模型框架,就是深度树匹配模型。
去年有幸听过阿里妈妈算法团队探微老师的一次分享,他们开发的Tree-based Deep Match(TDM)模型以最大堆为基础,衍生出一套完整的基于树的深度学习推荐算法框架。以前的算法归根结底都是线性代数 微积分的巧妙结合,但TDM不同,这是个少有的结合了数据结构和机器学习算法的模型。这套框架就像一个地基,不但可以单独拿来用,还可以在上面搭建各种fancy的深度模型。
TDM的基本思想是通过建立用户兴趣层次树结构,实现高效的全库检索(类似于数据库),并以此为基础,结合深度模型 Attention等更先进的计算结构,达到了在召回速度、召回精度以及新颖性等指标上相对于传统推荐方法的显著效果提升。
作者:图灵的猫 链接:https://www.zhihu.com/question/362190044/answer/970781462
- 深度兴趣网络模型
推荐系统中常见的问题就是,用户既往行为中的多样性是很难在推荐系统中捕捉和表示的。比方说,用户过去的 10 个购买行为中,9 个是买化妆品,1 个是买家用电器,那么大面上推荐系统常常认为用户对化妆品的需求数倍于对家用电器的需求,推荐结果会出来一堆化妆品,「家用电器」的推荐结果,则因为打分比较低而排在列表的很后面,在每一次请求出一页(8 个或者 10 个)的情况下,很难刷出来。如果要解决这种问题,常见的一种做法是用各种人工规则做推荐结果的打散,但由于人工规则基本都是拍脑袋来定的,实现相当 hack,而且没有在一个比较大的空间上搜索最优解,效果很难保证。
Deep Interest Network 巧妙地利用了 Attention 机制,来捕捉用户的 local activation,改善这种状况,让推荐结果的 diversity 更好一些。在知乎上有人爆料过,阿里的盖坤在做这个机制设计的时候,还没有接触到 Attention 机制,在做的过程中吸收了 Attention 机制的框架设计,才有了这个模型。
当时我们刚做完知乎首页 CTR 预估模型从 GBDT 到 Deep Network 的切换,在考虑下一步优化方向的时候就想到了利用 Attention 机制来改善推荐效果。当时还没有了解过 DIN,考虑的是自己设计推荐 CTR 预估中的 Attention 机制,正巧调研的时候发现了 DIN 的这篇论文,前人珠玉在前的情况下,就直接搬过来用了。在我们的实践中,DIN 的确能够显著提高 CTR 预估的离线 AUC 评估和线上效果。
作者:starays 链接:https://www.zhihu.com/question/362190044/answer/965025700
- 随机游走思想
Word2vec算法属于NLP领域的,被广泛应用在推荐场景。将用户的行为序列作为句子,item作为单词,通过Word2vec训练得到每个item的向量,基于向量计算item之间相似度进行推荐,巧妙。
作者:jifei 链接:https://www.zhihu.com/question/362190044/answer/946728696
- 注意力机制
利用深度学习做推荐,一般的做法是将用户的历史序列表示为embedding,和待推荐商品的embedding,加入各种context embedding 送入MLP 求sigmoid。因为用户兴趣一般都是多变的,有多个潜在的语义,这时在用户序列中,和待推荐商品语义相似的商品肯定要起关键作用(权重大),这就是一个典型的Attention的机制,序列商品和推荐商品求注意力权重。这方面论文很多,比如阿里的DIN,微信的的实时Look-alike,MSRA的TC-SeqRec都有使用。(Youbute的最早的推荐是pool)。
作者:王建周 链接:https://www.zhihu.com/question/362190044/answer/947591512
- 矩阵分解模型
矩阵分解模型(Matrix Factorization,MF),经典的协同过滤模型之一。
MF不仅有较高的推荐精度,其模型的训练效率也比一般的模型要快。
MF的可扩展性好,一方面可以和主流模型做无缝集成(包括最近大火的深度学习技术),另一方面可以和多种信息源做特征融合(社交信息、图像信息等)。
所以无论是从精度,还是从训练效率,还是从模型扩展层面,抑或是数据融合方面考虑,矩阵分解模型可谓是经典中的经典。
作者:张小磊 链接:https://www.zhihu.com/question/362190044/answer/1009984352
- 推荐流程设计
其实整个推荐算法流程都可以从排序的角度去分析,单路召回是单特征排序,多来几个特征在一起得到多路召回结果,而通常所说的排序则是把用全部特征进行排序。再细分一些,分为四个阶段:召回——粗排——精排——重排。粗排存在的意义是进一步从召回的结果中用一个小模型再筛选一下,降低精排模型的压力,最终的重排是对整个推荐结果的整体汇总整理,从item的数量来看这四个步骤就是:全部物品——万级别召回候选集——千级别粗排候选集——百级别精排候选集——topN重排结果,当然要根据对应业务数据量来看,有些没有比较大规模的数据,可能就不需要粗排等等。所以召回部分只要懂相应的策略适用的数据业务场景基本上都可以做的差不多,精排的模型太多了,需要对各种模型有深入的了解,具体深入需要结合对应的业务场景做许多思考。有不正确的,望指正,互相学习。
作者:于无声处听惊雷 链接:https://www.zhihu.com/question/362190044/answer/967120101