欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~html
本文由 jj发表于 云+社区专栏
推荐系统目前几乎无处不在,主流的app都基本应用到了推荐系统。例如,旅游出行,携程、去哪儿等都会给你推荐机票、酒店等等;点外卖,饿了么、美团等会给你推荐饭店;购物的时候,京东、淘宝、亚马逊等会给你推荐“可能喜欢”的物品;看新闻,今日头条、腾讯新闻等都会给你推送你感兴趣的新闻....几乎全部的app应用或网站都存在推荐系统。python
究其根本的缘由,推荐系统的流行是由于要去解决一个问题:物品愈来愈多,信息愈来愈多,而人的精力和时间是有限的,须要一个方式去更有效率地获取信息,连接人与信息。web
推荐系统就是为了解决这一问题而诞生的,在海量的物品和人之间,架起来一条桥梁。它就像一个私人的专属导购,根据你的历史行为、我的信息等等,为每一个人diy进行推荐,千人前面,帮助人们更好、更快地选择本身感兴趣的、本身须要的东西。今日头条系的feed流在推荐算法的加持下,短短几年的用户增加速度和使用时长数据使人咂舌,受到了市场的追捧和高估值。一晚上之间,几乎全部的app都开始上feed流、上各类推荐,重要性可见一斑。算法
咱们先把推荐系统简单来看,那么它能够简化为以下的架构。shell
图1 推荐系统通常流程数据库
无论是复杂仍是简单的推荐系统,基本都包含流程:编程
完整的推荐系统还会包括不少辅助模块,例如线下训练模块,让算法研究人员利用真实的历史数据,测试各种不一样算法,初步验证算法优劣。线下测试效果不错的算法就会被放到线上测试,即经常使用的A/B test系统。它利用流量分发系统筛选特定的用户展现待测试算法生成的推荐列表,而后收集这批特定用户行为数据进行线上评测。服务器
图2 蘑菇街推荐系统架构网络
推荐系统每一个部分可大可小,从图2可知,各部分涉及的技术栈也较多。终端app每时每刻都在不断上报各种日志,点击、展现、时间、地理位置等等信息,这些海量信息须要依赖大数据相关软件栈支持,例如Kafka、spark、HDFS、Hive等,其中Kafka常被用于处理海量日志上报的消费问题。将数据进行ETL后存入Hive数据仓库,就可进行各种线上、线下测试使用。线下的算法会上线到线上环境进行ABtest,ABtest涉及完整的测试回路打通,否则拿不到结果,也没法快速开发迭代算法。线上推荐系统还要关注实时特征、离线特征,在性能和各种指标、商业目标间取均衡。架构
一个东西作得好仍是很差,能不能优化,首要前提是肯定评测指标。只有肯定了评测指标,才能有优化的方向。评测推荐系统的指标能够考虑如下几个方面:
1.3.1 用户满意度
用户做为推动系统的主要参与者,其满意度是评测系统的最重要指标。满意度能够经过作用户调查或线上实验得到。在在线系统中,通常经过对用户行为的统计获得,例如点击率、用户停留时间和转化率等指标度量用户的满意度。
1.3.2 预测精确度precision
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的离线评测指标。因为离线数据可计算,绝大部分科研人员都在讨论这个指标。
评分预测问题通常使用RMSE、MAE等,TopN预测问题通常使用Recall、Precision等。
图3 常见的指标准确率(Precision)、召回率(Recall)、误检率
其实目前国内不少地方和资料混淆了两个指标的叫法,把准确度对应英文precision指标。不过尽可能仍是用英文比较好。
准确度Accuracy = (TP + TN) / (TP + FP + TN + FN)
精确度Precision=TP/(TP+FP)
1.3.3 覆盖率coverage
覆盖率描述一个推荐系统对物品长尾的发掘能力。覆盖率有不少定义方法,最简单的计算就是推荐列表中的物品数量,除以全部的物品数量。
在信息论和经济学中有两个著名的指标用来定义覆盖率,一个是信息熵,一个是基尼系数。具体公式和介绍能够google。
ps:长尾在推荐系统中是个常见的名词。举个例子帮助你们理解,在商店里,因为货架和场地有限,摆在最显眼的地方的物品一般是出名的、热门的,从而销量也是最好的。不少不出名或者小知名度的商品因为在货架角落或者根本上不了货架,这些商品销量不好。在互联网时代,这一现象会被打破。电子商城拥有几乎无限长的“货架”,它能够为用户展示不少知足他小众需求的商品,这样总的销量加起来将远远超过以前的模式。
Google是一个最典型的“长尾”公司,其成长历程就是把广告商和出版商的“长尾”商业化的过程。数以百万计的小企业和我的,此前他们从未打过广告,或从没大规模地打过广告。他们小得让广告商不屑一顾,甚至连他们本身都未曾想过能够打广告。但Google的AdSense把广告这一门槛降下来了:广告再也不遥不可及,它是自助的,价廉的,谁均可以作的;另外一方面,对成千上万的Blog站点和小规模的商业网站来讲,在本身的站点放上广告已成举手之劳。Google目前有一半的生意来自这些小网站而不是搜索结果中放置的广告。数以百万计的中小企业表明了一个巨大的长尾广告市场。这条长尾能有多长,恐怕谁也没法预知。无数的小数积累在一块儿就是一个不可估量的大数,无数的小生意集合在一块儿就是一个不可限量的大市场。
图4 长尾曲线
1.3.4多样性
用户的兴趣是多样的,推荐系统须要能覆盖用户各类方面的喜爱。这里有个假设,若是推荐列表比较多样,覆盖了用户各类各样的兴趣,那么真实命中用户的兴趣几率也会越大,那么就会增长用户找到本身感兴趣的物品的几率。
1.3.5 新颖性
新颖的推荐是指给用户推荐那些他们之前没有据说过的物品。要准确地统计新颖性须要作用户调查。
1.3.6 惊喜度
若是推荐结果和用户的历史兴趣不类似,但却让用户以为满意,那么就能够说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否据说过这个推荐结果。
1.3.7 信任度
用户对推荐系统的信任程度。若是用户信任推荐系统,那就会增长用户和推荐系统的交互。特别是在电子商务推荐系统中,让用户对推荐结果产生信任是很是重要的。一样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而以相似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。提升推荐系统的信任度主要有两种方法。首先须要增长推荐系统的透明度(transparency),而增长推荐系统透明度的主要办法是提供推荐解释。其次是考虑用户的社交网络信息,利用用户的好友信息给用户作推荐,而且用好友进行推荐解释。
1.3.8 实时性
在不少网站中,由于物品(新闻、微博等)具备很强的时效性,因此须要在物品还具备时效性时就将它们推荐给用户。所以,在这些网站中,推荐系统的实时性就显得相当重要。
推荐系统的实时性包括两个方面。首先,推荐系统须要实时地更新推荐列表来知足用户新的行为变化。实时性的第二个方面是推荐系统须要可以将新加入系统的物品推荐给用户。这主要考验了推荐系统处理物品冷启动的能力。
1.3.9 健壮性
衡量了一个推荐系统抗击做弊的能力。算法健壮性的评测主要利用模拟攻击。首先,给定一个数据集和一个算法,能够用这个算法给这个数据集中的用户生成推荐列表。而后,用经常使用的攻击方法向数据集中注入噪声数据,而后利用算法在注入噪声后的数据集上再次给用户生成推荐列表。最后,经过比较攻击先后推荐列表的类似度评测算法的健壮性。若是攻击后的推荐列表相对于攻击前没有发生大的变化,就说明算法比较健壮。
1.3.10 商业目标
不少时候,评测推荐系统更加注重商业目标是否达成,而商业目标和盈利模式是息息相关的。通常来讲,最本质的商业目标就是平均一个用户给公司带来的盈利。不过这种指标不是很难计算,只是计算一次须要比较大的代价。所以,不少公司会根据本身的盈利模式设计不一样的商业目标。
1.3.11 参考资料
推荐系统的评测问题有不少的相关研究和资料,预详细研究可阅读参考:
推荐算法的演化能够简单分为3个阶段,也是推荐系统由简单到复杂的迭代。
2.1.1 人工运营
这个阶段是随机的,人工根据运营目的,手工给特定类别的用户推送特定的内容。
优势是:
缺点是:
2.1.2 基于统计的推荐
会基于一些简单的统计学知识作推荐,例如某个内别卖得最好的热门榜;再细致一些,将用户按我的特质划分,再求各类热度榜等。
优势是:
缺点是:
2.1.3 个性化推荐
当前阶段的推荐,会基于协同过滤算法、基于模型的算法、基于社交关系等,机器学习、深度学习逐渐引入,提升了推荐效果。
优势是:
缺点是:
内部一个分享这样分类经常使用的推荐算法:
图5 推荐算法分类
这里提到的Memory-based算法和Model-based算法的差异是什么?这也是我以前关注的问题,找到个资料,讲解得比较透彻。
Memory-based techniques use the data (likes, votes, clicks, etc) that you have to establish correlations (similarities?) between either users (Collaborative Filtering) or items (Content-Based Recommendation) to recommend an item i to a user u who’s never seen it before. In the case of collaborative filtering, we get the recommendations from items seen by the user’s who are closest to u, hence the term collaborative. In contrast, content-based recommendation tries to compare items using their characteristics (movie genre, actors, book’s publisher or author… etc) to recommend similar new items.
In a nutshell, memory-based techniques rely heavily on simple similarity measures (Cosine similarity, Pearson correlation, Jaccard coefficient… etc) to match similar people or items together. If we have a huge matrix with users on one dimension and items on the other, with the cells containing votes or likes, then memory-based techniques use similarity measures on two vectors (rows or columns) of such a matrix to generate a number representing similarity.
Model-based techniques on the other hand try to further fill out this matrix. They tackle the task of “guessing” how much a user will like an item that they did not encounter before. For that they utilize several machine learning algorithms to train on the vector of items for a specific user, then they can build a model that can predict the user’s rating for a new item that has just been added to the system.
Since I’ll be working on news recommendations, the latter technique sounds much more interesting. Particularly since news items emerge very quickly (and disappear also very quickly), it makes sense that the system develops some smart way of detecting when a new piece of news will be interesting to the user even before other users see/rate it.
Popular model-based techniques are Bayesian Networks, Singular Value Decomposition, and Probabilistic Latent Semantic Analysis (or Probabilistic Latent Semantic Indexing). For some reason, all model-based techniques do not enjoy particularly happy-sounding names.
《携程个性化推荐算法实践》一文中梳理了工业界应用的排序模型,大体经历三个阶段:
图6 排序模型演进
本文不对上面的这些算法进行详细的原理探讨,会比较复杂,有兴趣能够再自行学习。
为了学习这块的技术知识,跟着参加了下内部举办的srtc推荐比赛。重在参与,主要是学习整个基本流程,体会下推荐场景,了解腾讯内部作得好的团队和产品是什么样子。
2.3.1(内部敏感资料,删除)
2.3.2 CF算法
在web平台上点一点,可能失去了学习的意义。因此本着学习的态度,我在线下本身的机器上实现了一些经常使用的算法,例如CF等。
推荐算法里CF算是比较常见的,核心仍是很简单的。
A.找到和目标用户兴趣类似的的用户集合; B.找到这个集合中的用户喜欢的,且目标用户没听过的物品推荐给目标用户。
A.计算物品之间的类似度; B.根据物品的类似度和用户的历史行为给用户生成推荐列表。
结合前面总结的,cf属于memory-base的算法,很大一个特征就是会用到类似度的函数。这个user-cf须要计算用户兴趣的类似度,item-cf须要计算物品间的类似度。基于类似度函数的选择、编程语言的选择、实现方式的选择、优化的不一样,结果和整个运行时间会很大不一样。当时就简单用python实现的,8个process跑满cpu同时处理,须要近10个小时跑完。后面了解到有底层进行过优化的pandas、numpy等,基于这些工具来实现速度会快不少。
2.3.3 收获
哈哈,第一次参加这种比赛,虽然成绩不好,但本身以为非常学到不少东西,基本达到了参赛的目的。在真实的场景和数据下去思考各类影响因素,体会各类算法从设计、实现、训练、评价等各阶段,不少东西确实比看资料和书来得更深刻。果真实践才是学习的最好手段。若是想更深刻去搞推荐算法这块,感受须要继续学习目前各类热门算法的原理、潜规则,kaggle上多练手,以及锻炼相关的平台及工程化能力。
收集、研究了下网上一些推荐系统落地总结的文章,能够开拓视野,加深总体理解。
如下只是一些重要内容,有兴趣能够阅读原文:
今日头条算法架构师曹欢欢博士,作过一次 《今日头条算法原理》的报告。主要涉及4部分:系统概览、内容分析、用户标签、评估分析。
第一类是相关性特征,就是评估内容的属性和与用户是否匹配。 第二类是环境特征,包括地理位置、时间。这些既是bias特征,也能以此构建一些匹配特征。 第三类是热度特征。包括全局热度、分类热度,主题热度,以及关键词热度等。 第四类是协同特征,它能够在部分程度上帮助解决所谓算法越推越窄的问题。
模型的训练上,头条系大部分推荐产品采用实时训练。实时训练省资源而且反馈快,这对信息流产品很是重要。用户须要行为信息能够被模型快速捕捉并反馈至下一刷的推荐效果。咱们线上目前基于storm集群实时处理样本数据,包括点击、展示、收藏、分享等动做类型。模型参数服务器是内部开发的一套高性能的系统,由于头条数据规模增加太快,相似的开源系统稳定性和性能没法知足,而咱们自研的系统底层作了不少针对性的优化,提供了完善运维工具,更适配现有的业务场景。
目前,头条的推荐算法模型在世界范围内也是比较大的,包含几百亿原始特征和数十亿向量特征。总体的训练过程是线上服务器记录实时特征,导入到Kafka文件队列中,而后进一步导入Storm集群消费Kafka数据,客户端回传推荐的label构造训练样本,随后根据最新样本进行在线训练更新模型参数,最终线上模型获得更新。这个过程当中主要的延迟在用户的动做反馈延时,由于文章推荐后用户不必定立刻看,不考虑这部分时间,整个系统是几乎实时的。
但由于头条目前的内容量很是大,加上小视频内容有千万级别,推荐系统不可能全部内容所有由模型预估。因此须要设计一些召回策略,每次推荐时从海量内容中筛选出千级别的内容库。召回策略最重要的要求是性能要极致,通常超时不能超过50毫秒。
内容分析和用户标签是推荐系统的两大基石。内容分析涉及到机器学习的内容多一些,相比而言,用户标签工程挑战更大。 今日头条经常使用的用户标签包括用户感兴趣的类别和主题、关键词、来源、基于兴趣的用户聚类以及各类垂直兴趣特征(车型,体育球队,股票等)。还有性别、年龄、地点等信息。性别信息经过用户第三方社交帐号登陆获得。年龄信息一般由模型预测,经过机型、阅读时间分布等预估。常驻地点来自用户受权访问位置信息,在位置信息的基础上经过传统聚类的方法拿到常驻点。常驻点结合其余信息,能够推测用户的工做地点、出差地点、旅游地点。这些用户标签很是有助于推荐。
固然最简单的用户标签是浏览过的内容标签。但这里涉及到一些数据处理策略。主要包括:1、过滤噪声。经过停留时间短的点击,过滤标题党。2、热点惩罚。对用户在一些热门文章(如前段时间PG One的新闻)上的动做作降权处理。理论上,传播范围较大的内容,置信度会降低。3、时间衰减。用户兴趣会发生偏移,所以策略更偏向新的用户行为。所以,随着用户动做的增长,老的特征权重会随时间衰减,新动做贡献的特征权重会更大。4、惩罚展示。若是一篇推荐给用户的文章没有被点击,相关特征(类别,关键词,来源)权重会被惩罚。固然同时,也要考虑全局背景,是否是相关内容推送比较多,以及相关的关闭和dislike信号等。
面对这些挑战。2014年末今日头条上线了用户标签Storm集群流式计算系统。改为流式以后,只要有用户动做更新就更新标签,CPU代价比较小,能够节省80%的CPU时间,大大下降了计算资源开销。同时,只需几十台机器就能够支撑天天数千万用户的兴趣模型更新,而且特征更新速度很是快,基本能够作到准实时。这套系统从上线一直使用至今。
A/B test系统原理
这是头条A/B Test实验系统的基本原理。首先咱们会作在离线状态下作好用户分桶,而后线上分配实验流量,将桶里用户打上标签,分给实验组。举个例子,开一个10%流量的实验,两个实验组各5%,一个5%是基线,策略和线上大盘同样,另一个是新的策略。
实验过程当中用户动做会被搜集,基本上是准实时,每小时均可以看到。但由于小时数据有波动,一般是以天为时间节点来看。动做搜集后会有日志处理、分布式统计、写入数据库,很是便捷。
商品个性化推荐算法主要包含Match和Rank两个阶段:Match阶段也称为商品召回阶段,在推荐系统中用户对商品的行为称为用户Trigger,经过长期收集用户做用在商品上的行为,创建用户行为和商品的矩阵称为X2I,最后经过用户的Trigger和关系矩阵X2I进行商品召回。Rank阶段利用不一样指标的目标函数对商品进行打分,根据推荐系统的规则对商品的多个维度进行综合排序。下面以闲鱼的首页feeds为例,简单介绍闲鱼的个性化推荐流程。
所示步骤1.1,利用用户的信息获取用户Trigger,用户信息包括用户的惟一标识userId,用户的设备信息惟一标识uttid。
所示步骤1.2,返回用户Trigger其中包括用户的点击、购买过的商品、喜欢的类目、用户的标签、常逛的店铺、购物车中的商品、喜欢的品牌等。
所示步骤1.3,进行商品召回,利用Trigger和X2I矩阵进行join完成对商品的召回。
所示步骤1.4,返回召回的商品列表,在商品召回中通常以I2I关系矩阵召回的商品为主,其余X2I关系矩阵召回为辅助。
步骤2.1,进行商品过滤,对召回商品进行去重,过滤购买过的商品,剔除过分曝光的商品。
所示步骤2.2,进行商品打分,打分阶段利用itemInfo和不一样算法指标对商品多个维度打分。
步骤2.3,进行商品排序,根据规则对商品多个维度的分数进行综合排序。
步骤2.4,进行返回列表截断,截断TopN商品返回给用户。
闲鱼经过以上Match和Rank两个阶段八个步骤完成商品的推荐,同时从图中能够看出为了支持商品的个性化推荐,须要对X2I、itemInfo、userTrigger数据回流到搜索引擎,这些数据包含天级别回流数据和小时级别回流数据。
小商品池存在如下几个特色。
实时性:在闲鱼搭建的小商品池中要求商品能够实时的流入到该规则下的商品池,为用户提供最新的优质商品。
周期性:在小商品池中,不少商品拥有周期属性,例如免费送的拍卖场景,拍卖周期为6小时,超过6小时后将被下架。
目前频道导购页面大多仍是利用搜索引擎把商品呈现给用户,为了保证商品的曝光,通常利用搜索的时间窗口在商品池中对商品进一步筛选,可是仍存在商品曝光的问题,若是时间窗口过大,那么将会形成商品过分曝光,若是商品窗口太小那么就会形成商品曝光不足,同时还存在一个搜索没法解决的问题,同一时刻每一个用户看到的商品都是相同的,没法针对用户进行个性化推荐,为了进一步提高对用户的服务,小商品池亟需引入个性化推荐。
在上文中利用全站X2I数据对小商品池的商品进行推荐过程当中,发如今Match阶段,当小商品池太小时会形成商品召回不足的问题,为了提高小商品池推荐过程当中有效召回数量,提出了以下三种解决方案。
提早过滤法:数据回流到搜索引擎前,小商品池对数据进行过滤,产生小商品池的回流数据,在商品进行召回阶段,利用小商品池的X2I进行商品召回,以此提高商品的召回率。
商品向量化法: 在Match阶段利用向量类似性进行商品召回,商品向量化是利用向量搜索的能力,把商品的特性和规则经过函数映射成商品向量,同时把用户的Trigger和规则映射成用户向量,文本转换向量经常使用词袋模型和机器学习方法,词袋模型在文本长度较短时能够很好的把文本用词向量标识,可是文本长度过长时受限于词袋大小,若是词袋太小效果将会不好,机器学习的方法是利用Word2Vector把文本训练成向量,根据经验值向量维度通常为200维时效果较好。而后利用向量搜索引擎,根据用户向量搜索出类似商品向量,以此做为召回的商品。如图5所示商品的向量分两部分,前20位表明该商品的规则,后200位表明商品的基本特征信息。
商品搜索引擎法: 在Match阶段利用商品搜索引擎对商品进行召回,如图6所示在商品进入搜索引擎时,对商品结构进行理解,在商品引擎中加入Tag和规则,而后根据用户的Trigger和规则做为搜索条件,利用搜索引擎完成商品的召回。搜索引擎的自然实时性解决了小商品池推荐强实时性的问题。
对于任何一个外部请求, 系统都会构建一个QueryInfo(查询请求), 同时从各类数据源提取UserInfo(用户信息)、ShopInfo(商户信息)、FoodInfo(食物信息)以及ABTest配置信息等, 而后调用Ranker排序。如下是排序的基本流程(以下图所示):
#调取RankerManager, 初始化排序器Ranker:
#调取InstanceBuilder, 汇总全部打分器Scorer的特征, 计算对应排序项EntityInfo(餐厅/食物)排序所需特征Features;
#对EntityInfo进行打分, 并按需对Records进行排序。
这里须要说明的是:任何一个模型Model都必须以打分器Scorer形式展现或者被调用。主要是基于如下几点考虑:
咱们的推荐系统主要分为两个阶段,召回阶段和排序阶段。
召回阶段根据用户的兴趣和历史行为,同千万级的视频库中挑选出一个小的候选集(几百到几千个视频)。这些候选都是用户感兴趣的内容,排序阶段在此基础上进行更精准的计算,可以给每个视频进行精确打分,进而从成千上万的候选中选出用户最感兴趣的少许高质量内容(十几个视频)。
推荐系统的总体结构如图所示,各个模块的做用以下:
用户画像:包含用户的人群属性、历史行为、兴趣内容和偏好倾向等多维度的分析,是个性化的基石
特征工程:包含了了视频的类别属性,内容分析,人群偏好和统计特征等全方位的描绘和度量,是视频内容和质量分析的基础
召回算法:包含了多个通道的召回模型,好比协同过滤,主题模型,内容召回和SNS等通道,可以从视频库中选出多样性的偏好内容
排序模型:对多个召回通道的内容进行同一个打分排序,选出最优的少许结果。
除了这些以外推荐系统还兼顾了推荐结果的多样性,新鲜度,逼格和惊喜度等多个维度,更可以知足用户多样性的需求。
而后,介绍了推荐排序系统架构、推荐机器学习排序算法演进。
推荐流程大致上能够分为3个部分,召回、排序、推荐结果生成,总体的架构以下图所示。
召回阶段,主要是利用数据工程和算法的方式,从千万级的产品中锁定特定的候选集合,完成对产品的初步筛选,其在必定程度上决定了排序阶段的效率和推荐结果的优劣。
业内比较传统的算法,主要是CF一、基于统计的Contextual推荐和LBS,但近期来深度学习被普遍引入,算法性取得较大的提高,如:2015年Netflix和Gravity R&D Inc提出的利用RNN的Session-based推荐[5],2016年Recsys上提出的结合CNN和PMF应用于Context-aware推荐[10],2016年Google提出的将DNN做为MF的推广,能够很容易地将任意连续和分类特征添加到模型中[9],2017年IJCAI会议中提出的利用LSTM进行序列推荐[6]。2017年携程个性化团队在AAAI会议上提出的深度模型aSDAE,经过将附加的side information集成到输入中,能够改善数据稀疏和冷启动问题[4]。
对于召回阶段获得的候选集,会对其进行更加复杂和精确的打分与重排序,进而获得一个更小的用户可能感兴趣的产品列表。携程的推荐排序并不单纯追求点击率或者转化率,还须要考虑距离控制,产品质量控制等因素。相比适用于搜索排序,文本相关性检索等领域的pairwise和listwise方法,pointwise方法能够经过叠加其余控制项进行干预,适用于多目标优化问题。
工业界的推荐方法经历从线性模型+大量人工特征工程[11] -> 复杂非线性模型-> 深度学习的发展。Microsoft首先于2007年提出采用Logistic Regression来预估搜索广告的点击率[12],并于同年提出OWLQN优化算法用于求解带L1正则的LR问题[13],以后于2010年提出基于L2正则的在线学习版本Ad Predictor[14]。
Google在2013年提出基于L1正则化的LR优化算法FTRL-Proximal[15]。2010年提出的Factorization Machine算法[17]和进一步2014年提出的Filed-aware Factorization Machine[18]旨在解决稀疏数据下的特征组合问题,从而避免采用LR时须要的大量人工特征组合工做。
阿里于2011年提出Mixture of Logistic Regression直接在原始空间学习特征之间的非线性关系[19]。Facebook于2014年提出采用GBDT作自动特征组合,同时融合Logistic Regression[20]。
近年来,深度学习也被成功应用于推荐排序领域。Google在2016年提出wide and deep learning方法[21],综合模型的记忆和泛化能力。进一步华为提出DeepFM[15]模型用于替换wdl中的人工特征组合部分。阿里在2017年将attention机制引入,提出Deep Interest Network[23]。
携程在实践相应的模型中积累了必定的经验,不管是最经常使用的逻辑回归模型(Logistic Regression),树模型(GBDT,Random Forest)[16],因子分解机(FactorizationMachine),以及近期提出的wdl模型。同时,咱们认为即便在深度学习大行其道的今下,精细化的特征工程仍然是不可或缺的。
基于排序后的列表,在综合考虑多样性、新颖性、Exploit & Explore等因素后,生成最终的推荐结果。
以前没有接触过推荐系统,如今因为工做须要开始接触这块内容。不少概念和技术不懂,须要补不少东西。近期也去参加了内部推荐大赛真实地操做了一轮,同时开始学习推荐系统的基础知识,相关架构等,为下一步工做打下必要的基础。
推荐系统是能在几乎全部产品中存在的载体,它几乎能够无延时地以用户需求为导向,来知足用户。其表明的意义和效率,远远超过传统模式。毋庸置疑,牛逼的推荐系统就是将来。但这里有个难点就在于,推荐系统是否作得足够的好。而从目前来看,推荐算法和推荐系统并无达到人们的预期。由于人的需求是极难猜想的。
又想到以前知乎看到一篇文章,说的是国内不少互联网公司都有的运营岗位,在国外是没有专设这个岗位的。还记得做者分析的较突出缘由就是:外国人比较规矩,生活和饮食较单调,例如高兴了都点披萨。而中国不同,从千千万万的菜品就能管中窥豹,国人的爱好极其普遍,众口难调。加上国外人工时很贵,那么利用算法去拟合用户的爱好和需求,自动地去挖掘用户需求,进行下一步的深耕和推荐就是一个替代方案。这也是国外很推崇推荐系统的侧面缘由。而在中国,人相对来讲是便宜的,加上国人的口味更多更刁钻,算法表现很差,因此会设不少专门的运营岗位。但慢慢也开始意识到这将是一个趋势,加上最近ai大热,各家大厂都在这块不断深耕。
回到推荐系统上,从现实中客观的缘由就能够看到,真正能拟合出用户的需求和爱好确实是很困难的事情。甚至有时候用户都不知道本身想要的是啥,做为中国人,没有主见和想法是正常的,太有主见是违背标准答案的。但推荐系统背后表明的意义是:你的产品知道用户的兴趣,能知足用户的兴趣,那么一定用户就会离不开你。用户离不开的产品,确定会占领市场,确定就有极高的估值和想象空间。这也就是你们都在作推荐系统,虽然用起来傻傻的,效果也差强人意,依然愿意大力投入的根本缘由。
几句胡诌,前期学习事后的简单总结,本身还有不少东西和细节须要继续学习和研究。能力有限,文中不妥之处还请指正~
(ps:文中一些截图和文字的版权归属原做者,且均已标注引用资料来源地址,本文只是学习总结之用,若有侵权,联系我删除)
问答
推荐系统如何实现精准推荐?
相关阅读
推荐系统基础知识储备
量化评估推荐系统效果
基于用户画像的实时异步化视频推荐系统
【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识
此文已由做者受权腾讯云+社区发布,更多原文请点击
搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!
海量技术实践经验,尽在云加社区!