首页 体育世界正文

作者 | 张俊林

作者简介:我国中文信息学会理事,中科院软件所博士。现在在新浪微博 AI Lab 担任资深算法专家。在此之前,张俊林曾经在阿里巴巴任资深技能专家并担任新技能团队,以及在百度和用友担任技能司理及技能总监等职务。一同他是技能书本《这便是搜索引擎:中心技能详解》(该书荣获全国第十二届优异图书奖)、《大数据日知录:架构与算法》的作者。

已然你点开这篇文章了,我假定你是在某司做举荐体系的算法工程师。这个假定的正确率我估量大约在20%左右,由于依据我的阅历,80%的算法工程师是很博爱的,只需标题里带有“模型/算法/深度学习/震动/美人….”等词汇,他们都会猎奇地址开看三秒,然后绝望地关掉,技能性越强的反而越简略被关掉,很或许撑不过三秒。我说得没错吧?嘿嘿。

为了骗点击,关于本文标题,其实我心里激动里最想写下的震动部风格标题是这样的:“连女神级美人程序媛看了都震动!FM模型竟然可以做这么大规划举荐体系的召回!!!”,然后翻开文章后,文章配上的背景音乐慢慢地传来“路灯下朦胧的剪影,越走越绵长的林径…….”

笑傲大枭雄

嗯,好吧,我供认连我自己也忍不了上面的场景,首要是这首歌我还挺喜爱的,单曲循环快半个月了,标题风格比较毁歌的意境。请拾掇好您此刻看到上述标题后挨近溃散的心境,不开玩笑了。

让我再次活回到梦想中,就牵强假定你是位举荐算法工程师吧,您坚持说您不是?别谦虚,您很快便是了,请当即辞去职务去请求相关作业……假如您真的是举荐工程师,那么首要我想抓住您问个问题:一说起举荐模型或许举荐场景下的排序模型,您脑子里榜首个主意冒出的模型是哪个或哪几个?

假如你榜首主意冒出来的瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际依然是SVD/矩阵分化啥的,那么显着你还停留在啃书本的阶段,实践阅历缺乏;假如你榜首主意是LR模型或许GBDT模型,这阐明你是具有必定实践阅历的算法工程师,可是常识更新缺乏。现在都9102年了,咱们暂时把Wide&Deep/DeepFM这些模型抛开不提,由于在大规划场景下想要把深度举荐模型高性价比地用好发挥作用其实并不简略。

咱们退而求其次,假如现在您依然不能在日常作业中至少测验着用FM模型来搞作业,那只能阐明必定概率下(30%到90%?),您是在技能方面对自我没有太高要求的算法工程师,未来您的技能之路走起来,我猜或许会比较辛苦和崎岖,这儿先向身处2025年的另一位您道声辛苦啦。这是我对您的算法工程师之路的一个猜测,至于这个猜测准禁绝,往后若干年的阅历以及时刻会通知您正确答案,当然我个人觉得支付的这个价值或许有点高。

假定你榜首主意是在排序阶段运用FM模型、GBDT+LR模型、DNN模型,这阐明你算是紧追技能时代开展头绪的技能人员,很好。那么,独自给你预备的更专业的新问题来了,请问:树上七只猴…..嗯,跑偏了,其实我想问的是:咱们日常看到的举荐体系长什么姿态,我信任你脑子里很清楚,可是能否打破惯例?比方下列两个不太契合惯例做法的技能问题,您可以考虑考虑:

榜首个问题:咱们知道在个性化举荐体系里,榜首个环节一般是召回阶段,而召回阶段工业界现在惯例的做法是多路召回,每一路召回或许采纳一个不同的战略。那么打破惯例的考虑之一是:是否咱们可以运用一个一致的模型,将多路召回改构成单模型单路召回战略?假如不能,那是为什么?假如能,怎样做才干够?这样做有什么长处和害处?

第二个问题:咱们相同知道,现在有用化的工业界的举荐系一致般由两个环节构成,召回阶段和排序阶段,那么为什么要这么区分?它们各自的责任是什么?打破惯例的别的一个考虑是:是否存在一个模型,这个模型可以将召回阶段和排序阶段一致起来,便是把两阶段举荐环节改成单模型单环节举荐流程?便是说靠一个模型一个阶段把传统的两阶段举荐体系做的作业一步到位做完?假如不能,为什么不能?假如能,怎样做才干够?什么样的模型才干担当起这种重担呢?而在实践国际里是否存在这个模型?这个思路真的可行吗?

上面列的两个非惯例问题,18年年底我自己也一向在考虑,有些开始的考虑定论,所以计划写四篇文章构成一个专题,主题会集在举荐体系的一致召回模型方面,也便是榜首个问题,一同兼谈下第二个问题,每篇文章会介绍一个或许一类模型,本文介绍的是FM模型。这个系列,我新年期间写完了3篇,等我四篇都写完后,会连续发出来,供感爱好的“点开看三秒”同学参阅。

不过这儿需求着重一点:关于这两个问题,由于非惯例,网上也也没有见到过相似的问题,说法及处理计划,所以没什么依据,文章写的仅仅我个人的考虑成果,是否真能顺畅落地以及落地作用存疑,还请慎重参阅。不过,我觉得从现在算法的开展趋势以及硬件条件的快速开展状况来看,单阶段举荐模型从理论上是可行的。我会连续给出几个计划,主张从事中小型举荐事务的同学可以快速测验一下。

下面进入正题,我会先简略介绍下举荐体系全体架构以及多路召回的底子办法,然后阐明下FM模型,之后评论FM模型是否可以处理上面说到的两个非惯例问题。

工业举荐体系全体架构是怎样的?

一个典型的工业级举荐体系全体架构可以参阅上图,一般分为在线部分,近线部分和离线部分。

关于在线部分来说,一般要阅历几个阶段。首要经过召回环节,将给用户举荐的物品降到千以下规划;假如召回阶段回来的物品仍是太多,可以参加粗排阶段,这个阶段是可选的,粗排可以经过一些简略排序模型进一步削减往后续环节传递的物品;再往后是精排阶段,这儿可以运用杂乱的模型来对少数上海警备区特警团物品精准排序。

对某个用户来说,即便精排举荐成果出来了,一般并不会直接展现给用户,或许还要上一些事务战略,比方去已读,举荐多样化,参加广告等各种事务战略。之后构成终究举荐成果,将成果展现给用户。

关于近线部分来说,首要意图是实时搜集用户行为反应,并挑选练习实例,实时抽取拼接特征,并近乎实时地更新在线举荐模型。这样做的长处是用户的最新爱好可以近乎实时地表现到举荐成果里。

关于离线部分而言,经过对线上用户点击日志的存储和收拾,收拾离线练习数据,并周期性地更新举荐模型。关于超大规划数据和机器学习模型来说,往往需求高效地分布式机器学习途径来对离线练习进行支撑。

由于粗排是可选的,关于大多数举荐体系来说,一般在线部分的主体分为两个阶段就够,榜首个阶段是召回,第二个阶段是排序。由于个性化举荐需求给每个用户展现不同的信息流或许物品流,而关于每个用户来说,可供举荐的物品,在具有必定规划的公司里,是百万到千万等级,乃至上亿瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际。所以关于每一个用户,假如关于千万等级物品都运用先进的模型挨个进行排序打分,显着速度上是算不过来的,资源投入考虑这么做也不划算。从这儿可以看出,召回阶段的首要责任是:从千万量级的候选物品里,采纳简略模型将举荐物品候选调集快速筛减到千等级乃至百等级,这样将候选调集数量降下来,之后在排序阶段就可以上一些杂乱模型,详尽地对候选集进行个性化排序。

从上面在线举荐两阶段使命的区分,咱们可以看出,流光飘动全文阅览梅子召回阶段由于需求核算的候选调集太大,所以要想速度快,就只能上简略模型,运用少数特征,确保泛化才干,尽量让用户感爱好的物品在这个阶段可以找回来;而排序阶段中心方针是要精准,由于它处理的物品数据量小,所以可以选用尽或许多的特征,运用比较杂乱的模型,全部以精准为方针。

多路召回怎样做?

现在工业界举荐体系的召回阶段一般是怎样做的呢?可以用一句江湖气很重的话来总结,请您系好安全带坐稳,怕吓到您,这句话便是:“一只穿云箭,千军万马来相见”。听起来霸气十足是吧?我估量看过古惑仔电影的都了解这句话,黑帮集结打群架的时分喜爱引证这句名言,以添加气势,自己给自己鼓劲。假如和举荐体系对应起来了解,这儿的“穿云箭”便是召回体系,而千军万马便是各路花式召回战略。

现在工业界的举荐体系,在召回阶段,一般都采纳多路召回战略。上图展现了一个简化版别的比方,以微博信息流排序为例,不同事务召回路数不太相同,可是常用的召回战略,底子都会包括,比方爱好标签,爱好Topic,爱好实体,协同过滤,抢手,相同地域等,多者几十路召回,少者也有7/8路召回。

关于每一路召回,会拉回K条相关物料,这个K值是个超参,需求经过线上AB测验来陆琴华确认合理的取值规划。假如你对算法灵敏的话,会发现这儿有个潜在的问题,假如召回路数太多,对应的超参就多,这些超参组合空间很大,怎样设定合理的各路召回数量是个问题。别的,假如是多路召回,这个超参往往不太或许是用户个性化的,而是关于一切用户,每一路拉回的数量都是固定的,这儿显着有优化空间。按理说,不同用户或许关于每一路内容感爱好程度是不相同的,更感爱好的那一路就应该多召回一些,所以假如能把这些超参改为个性化装备是很好的,可是多路召回战略下,虽然也不是不能做,可是即便做,看起来仍是很Trick的。有什么好办法能处理这个问题吗?有,本文后边会讲。

什么是FM模型?

什么是FM模型呢?我模糊意识到这个问题在许多人看起来如同有点过于简略,由于一说起FM,开车的朋友们估量都了解,比方FM1039交通台众所周知,最近应该常常听到交通台这么提示咱们吧:“…新年返程顶峰,北京市第三交通委提示您:路途千万条,安全榜首条……”

一想到有或许许多人这么了解FM,我的眼泪就情不自禁流了下来,一同对他们在心理上有种莫名的亲切感,为什么呢?不是说“缩写不规范,亲人两行泪”么。下面我郑重地给各位介绍下,FM英文全称是“Factorization Machine”,简称FM模型,中文名“因子分化机”。

FM模型其实有些年初了,是2010年由Rendle提出的,可是真实在各大厂大规划在CTR预估和举荐范畴广泛运用,其实也便是最近几年的事。

FM模型比较简略,网上介绍的内容也比较多,细节不打开说它了。不过我给个个人判别:我觉得FM是举荐体系工程师应该熟练掌握和运用的必备算法,即便你看许多DNN版别的排序模型,你应该大多数状况会看到它的影子,原因其实很简略:特征组合关于举荐排序是十分十分重要的,而FM这个思路现已很简练高雅地表现了这个思维了(首要是二阶特征组合)。

DNN模型相同离不开这个特色,而MLP结构是种低功率地捕获特征组合的结构,所以即便是深度模型,现在相同还离不开相似F巫术星空M这个可以直白地直接去组合特征的部分。这是你会重复发现它的原因地址,当然或许是它自己,或许不必定是它自己,可是必定是它的变体。

已然谈到这儿了,那随手再多谈谈举荐排序模型。现在具有有用化价值的DNN版别的CTR模型一般选用MLP结构,看着远远落后CV/NLP的特征抽取器的开展水平,很简略让人发作如下感觉:CTR的DNN模型还处于深度学习原始社会阶段。那这又是为什么呢?由于CNN的特性天然不太适宜举荐排序这个场景(为什么?您可以考虑一下。

为了防备某些具有某种一起个性特征的同学拿单个比方说作业,我先提一句:请不要跟我说某个已有的看上去比较深的CNN CTR模型,你自己试过作用怎样再来说。这算是我的防备性回怼或许是假定性回怼,哈哈)。RNN作为捕捉用户行为序列,运用时刻信息的辅佐结构还行,可是也不太适宜作为CTR预估或许举荐排序的主模型(为什么?您可以考虑一下,关于这点,我的观念今后有机会会提)。

如同剩余的挑选不多了(Transformer是很有期望的,上一年年中左右,我觉得Self attention应该是个能很好地捕捉特征组合(包括二阶/三阶…多阶)的东西,所以,咱们微博也测验过用self attention和transformer作为CTR的主体排序模型,非事务数据测验的,其时测验作用和DeepFM等干流模型作用差不太多。我现在回头看,很或许是哪些细节没做对,其时觉得没有特别的作用优势,所以没再持续测验这个思路。

当然形似18年下半年现已冒出几篇用Transformer做CTR排序模型的论文了,我个人十分看好这个CTR模型进化方向),所以剩余的挑选形似只需MLP了,意思是:关于CTR或许举荐排序范畴来说,不是它不想进入模型共产主义阶段,是大门关得太紧,它进不去,所以只能在MLP这个门槛徜徉。

在深度学习大潮下,从模型视点看,的确跟许多范畴比,形似举荐范畴远远落后,这个是现实。我觉得首要原因是它自身的范畴特色构成的,它或许需求打造适宜自身特色的DNN排序模型。就像图画范畴里有Resnet时刻,NLP里边有Bert时刻,我觉得举荐排序深度模型现在还没有,现在和未来也需求这个相似的高光时刻,而这需求一个针对它特性改造出的新结构,对此我是比较达观的,我预见这个时刻一年之内还无法呈现,可是很或许现已在路上,间隔咱们不远了。

又说远了,原本咱们主题是召回,说到排序模型里去了,我往主车道逛逛。上面原本是要着重好好学好好用FM模型的。下面我从两个视点来简略介绍下FM模型,一个视点是从特征组合模型的进化视点来讲;别的一个视点从协同过滤模型的进化视点来讲。FM模型就处于这两类模型进化的交汇口。

从LR到SVM再到FM模型

LR模型是CTR预估范畴前期最成功的模型,大多工业举荐排序体系采纳LR这种“线性模型+人工特征组合引进非线性”的办法。由于LR模型具有简略便利易解说简略上规划等许多长处,所以现在依然有不少实践体系依然采纳这种模董卫亮式。可是,LR模型最大的缺点便是人工特征工程,耗时吃力费人力资源,那么能否将特征组合的才干表现在模型层面呢?

其实想到达这一点并不难,如上图在核算公式里参加二阶特征组合即可,恣意两个特征进行组合,可以将这个组合出的特征看作一个新特征,融入线性模型中。而组合特征的权重可以用来表明,和一阶特征权重相同,这个组合特征权重在练习阶段学习取得。其实这种二阶特征组合的运用办法,和多项式核SVM是等价的。

虽然这个模型看上去形似处理了二阶特征组合问题了,可是它有个潜在的问题:它对组合特征建模,泛化才干比较弱,特别是在大规划稀少特征存在的场景下,这个缺点特别杰出,比方CTR预估和举荐排序,这些场景的最大特色便是特征的大规划稀少。所以上述模型并未在工业界广泛选用。那么,有什么办法可以处理这个问题吗?

所以,FM模型此刻可以闪亮上台了。如上图所示,FM模型也直接引进恣意两个特征的二阶特征组合,和SVM模型最大的不同,在于特征组合权重的核算办法。FM关于每个特征,学习一个巨细为k的一维向量,所以,两个特征和 的特征组合的权重值,经过特征对应的向量和的内积来表明。

这实质上是在对特征进行embedding化表征,和现在十分常见的各种实体embedding实质思维是一脉相承的,可是很显着在FM这么做的时代(2010年),还没有现在能看到的各种目不暇接的embedding的办法与概念。所以FM作为特征embedding,可以看作当时深度学习里各种embedding办法的老长辈。

当然,FM这种办法有它的长辈模型吗?有,等会谈判。其实,和现在的各种深度DNN排序模型比,它仅仅是少了2层或许3层MLP隐层,用来直接对多阶特征非线性组合建模罢了,其它方面底子相同。

那么为什么说FM的这种特征embedding办法,在大规划稀少特征运用环境下比较好用?为什么说它的泛化才干强呢?参阅上图阐明。即便在练习数据里两个特征并未一同在练习实例里见到过,意味着一同呈现的次数为0,假如换做SVM的办法,是无法学会这个特征组合的权重的。

可是由于FM是学习单个特征的embedding,并不依托某个特定的特征组合是否呈现过,所以只需特征 和其它恣意特征组合呈现过,那么就可以学习自己对应的embedding向量。所以,虽然 这个特征组合没有瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际看到过,可是在猜测的时分,假如看到这个新的特征组合,由于 和 都能学会自己对应的embedding,所以可以经过内积算出这个新特征组合的权重。这是为何说FM模型泛化才干强的底子原因。

其实实质上,这也是现在许多把戏的embedding的最中心特色,便是从0/1这种二值硬核匹配,切换为向量软匹配,使得原先匹配不上的,现在能在必定程度上算亲近程度了,具有很好的泛化功用。

从MF到FM模型

FM咱们大致应该知道是怎样个意思了,这儿又忽然冒出个MF,长得跟FM形似还有点像,那么MF又是什么呢?它跟FM又有什么联络?

请跟我念:“打东边来了个FM,手里拎着一斤挞嘛;打西边来了个MF,腰里别着一个喇叭;拎着一斤挞嘛的FM想要别着喇叭的MF腰里的喇叭……..”你要是能不打磕绊一遍念下来的话………你以为你就了解它们的错综杂乱的联络了是吗?不,你就可以去学说相声了……

MF(Matrix Factorization,矩阵分化)模型是个在举荐体系范畴里资历很深的老长辈协同过滤模型了。中心思维是经过两个低维小矩阵(一个代表用户embedding矩阵,一个代表物品embedding矩阵)的乘积核算,来模仿实在用户点击或评分发作的大的协同信息稀少矩阵,本殷无双君上邪质上是编码了用户和物品协同信息的降维模型。

当练习完结,每个用户和物品得到对应的低维embedding表达后,假如要猜测某个 对 的评分的时分,只需它们做个内积核算 ,这个得分便是猜测得分。看到这儿,让你想起了什么吗?

身为举荐算法工程师,我假定你对它仍是比较了解的,更多的就不打开说了,相关材料许多,咱们要点说MF和FM的联络问题。

MF和FM不仅在姓名简称上看着有点像,其实他们实质思维上也有许多相同点。那么,MF和FM究竟是怎样的联络呢?

实质上,MF模型是FM模型的特例,MF可以被以为是只需User ID 和Item ID这两个特征Fields的FM模型,MF将这两类特征经过矩阵分化,来到达将这两类特征embedding化表达的意图。

而FM则可以看作是MF模型的进一步拓宽,除了User ID和Item ID这两类特征外,许多其它类型的特征,都可以进一步融入FM模型里,它将一切这些特征转化为embedding低维向量表达,并核算恣意两个特征embedding的内积,便是特征组合的权重,假如FM只运用User ID 和Item ID,你套到FM公式里,看看它的猜测进程和MF的猜测进程相同吗?

从谁更早运用特征embedding表达这个视点来看的话,很显着,和FM比起来,MF才是实在的长辈,无非是特征类型比较少罢了。而FM承继了MF的特征embedding化表达这个长处,一同引进了更多Side information作为特征,将更多特征及Side information embedding化融入FM模型中。所以很显着FM模型更灵敏,能习惯更多场合的运用规划。

鉴于MF和FM以上错综杂乱剪不断理还乱的联络,我推论出下面的观念(个人定见):

其一:在你有运用MF做协同过滤的主意的时分,暂时压抑一下这种激动,可以优先考虑引进FM来做的,而非传统的MF,由于可以在完成等价功用的根底上,很便利地融入其它恣意你想参加的特征,把手头的作业做得更五光十色。

其二:从实践大规划数据场景下的运用来讲,在排序阶段,绝大多数只运用ID信息的模型是不有用的,没有引进Side Information,也便是除了User ID/Item ID外的许多其它可用特征的模型,是不具有实战价值的。原因很简略,大多数实在运用场景中,User/Item有许多信息可用,而协同数据仅仅其间的一种,引进更多特征显着关于更精准地进行个性化举荐是十分有协助的。而假如模型不支撑更多特征的快捷引进,显着受限严峻,很难实在有用,这也是为何矩阵分化类的办法很少看到在Ranking阶段运用,一般是作为一路召回办法存在的原因。

简略谈谈算法的功率问题

从FM的原始数学公式看,由于在进行二阶(2-order)特征组合的时分,假定有n个不同的特征,那么二阶特征组合意味着恣意两个特征都要进行穿插组合,所以可以直接推论得出:FM的时刻杂乱度是n的平方。可是假如故事仅仅讲到这儿,FM模型是不太或许如此广泛地被工业界运用的。由于实践日子运用中的n往往是个十分巨大的特征数,假如FM是n平方的时刻杂乱度,那估量底子就没人带它玩了。

关于一个有用化模型来说,作用是否满足好仅仅一个方面,核算功率是否够高也很重要,这两点是一个能被广泛运用算法的一枚硬币的双面,缺其间任何一个或许都不能算是优异的算法。假如在两者之间硬要分出谁更重要的话,怎样选?

这儿刺进个题外话,是关于怎样做挑选的。这个论题假如你深化考虑的话,会发现很或许是个艰深的哲学问题。在说怎样选之前,我先复述两则关于挑选的笑话,有两个版别,男版和女版的。

男版是这样的:“一个兄弟跟我说他最近很困惑,有三个姑娘在追他,一向优柔寡断,究竟应该选哪个当女朋友呢?一个温顺贤惠,一个聪明伶俐,别的一个肤白貌美。太难选…..三天后当我再次遇到他的时分,他说他做出了挑选,选了那个胸最大的!”

女版是这样的:“一个姐妹跟我说她很困惑,最近有三个优异的男人在追她,一向优柔寡断,究竟应该嫁给谁呢?一个尽力进步,一个巨大英俊,别的一个脾气好顾家。实在太难选…..三天后当我再次遇到她的时分,她说她做出了挑选,选了那个最有钱的!”

参阅这个模版,算法挑选版应该是这样的:“一个算法工程师一向优柔寡断该选哪个模型去上线,他有三个优异算法可选,一个算法理论高雅;一个算法作用好;别的一个算法很时尚,实在太难做决议…..三天后当我再遇见他的时分,他说他们算法总监让他上了那个跑得最快的!”

怎样样?日子或许作业中的挑选的确田加童是个很奥妙的哲学问题吧?这个算法版的关于挑选的笑话,应该现已答复了上面那个还没给答案的问题了吧?在数据量特别大的状况下,假如在作用好和速度快之间做挑选,许多时分跑得快的简略模型会胜出,这是为何LR模型在CTR预估范畴一向被广泛运用的原因。

而FFM模型则是反例,咱们在几个数据调集上测验过,FFM模型作为排序模型,作用的确是要优于FM模型的,可是FFM模型对参数存储量要求太多,以及无法能做到FM的运转功率,假如中小数据规划做排序没什么问题,可是数据量一旦大起来,对资源和功率的要求会急剧升高,这是严峻阻止FFM模型大规划数据场景有用化的重要要素。

再随手谈谈DNN排序模型,现在形似看着有许多版别的DNN排序模型,可是考虑到上面讲的运算功率问题,你会发现太多所谓作用好的模型,其实不具有有用价值,算起来太杂乱了,作用好得又很有限,超大规划练习或许在线 Serving速度底子跟不上。除非,你们公司有具有适当强悍实力的工程团队,可以进行超大数据规划下的大规划功用优化,那当我00后小女子上面这句话没说。

我对排序模型,假如你计划推上线真用起来的话,主张是,沿着这个序列测验:FM-->DeepFM。你看着途径有点短是吗?的确比较短。假如DeepFM做不出作用,别再试着去测验更杂乱的模型了,仍是多从其它方面考虑考虑优化计划为好。有些杂乱些的模型,或许作用的确好一些,在单个大公司或许真做上线了,可是很或许作用好不是算法的劳绩,是工程才干强等多个要素一起导致的,人家能做,你未必做的了。

至于被广泛测验的Wide &Deep,我个人对它有成见,所以直接被我越过了。当然,假如你原始线上版别是LR,是可以直接先测验W孙元峰ide&Deep的,可是即便如此,要我做晋级计划,我给的主张会是这个序列:LR—>FM-->DeepFM—>干点其他的。

怎样优化FM的核算功率

再说回来,FM现在被广泛选用并成功代替LR模型的一个关键地址是:它可以经过数学公式改写,把外表形似是 的杂乱度降低到,其间n是特征数量,k是特征的embedding size,这样就将FM模型改成了和LR相似和特征数量n成线性规划的时刻杂乱度了,这点十分好。

那么,怎样改写原始的FM数学公式,让其杂乱度降下来呢?由于原始论文在推导的时分没有给出详细阐明,我信任不少人看完估量有点懵,所以这儿简略解说下推导进程,数学公式帕金森病患者可以直接越过下面内容往后看,这并不影响你了解本文的宗旨。

上图展现了整个推导进程,我信任假如数学根底不太厚实的同学看着会有点头疼,转化包括四个进程,下面分进程解说下。

榜首个改写进程及为何这么改写参阅上图,比较直观,不解说了。

第二步转化更简略,更不必解说了。

第三步转化不是太直观,或许需求简略推导一下,许多人或许会卡在这一步,所以这儿解说解说。

其实吧,假如把k维特征向量内积求和公式抽到最外边后,公式宋宏娜就转成了上图这个公式了(不考虑最外边k维求和进程的状况下)。它有两层循环,内循环其实便是指定某个特征的第f位(这个f是由最外层那个k指定的)后,和其它恣意特征对应向量的第f位值相乘求和;而外循环则是遍历每个的第f位做循环求和。这样就完结了指定某个特征位f后的特征组合核算进程。最外层的k维循环则依此轮循第f位,所以就算完了进程三的特征组合。

对上一页公式图片展现进程用公式办法,再一次改写(参阅上图),其实便是两次提取公共因子罢了,这下应该了解了吧?要是还不了解,那您的确诊成果是数学公式帕金森晚期,跟我一个缺点,咱俩病友同病相怜,我也没辙了。

第四步公式改换,意思参阅上图,这步也很直白,不解说。

所以,经过上述四步的公式改写,可以淄博人体彩绘看出在完成FM模型时,时刻杂乱度就降低了,而虽然看上去n还有点大,可是其实实在的举荐数据的特征值是极为稀少的,便是说许多xi其实取值是0,意味着实在需求核算的特征数n是远远小于总特征数目n的,无疑这会进一步极大加速FM的运算功率。

这儿需求着重下改写之后的FM公式的榜首个平方项,怎样了解这个平方项的含义呢?这儿其实蕴含了后边要讲的运用FM模型一致多路召回的底子思维,所以这儿特别提示一下。

参阅上图,你体会下这个核算进程。它其实等价于什么?

这个平方项,它等价于将FM的一切特征项的embedding向量累加,之后求内积。我再问下之前问过的问题:“咱们怎样运用FM模型做一致的召回?”这个平方项的含义对你有启示吗?你可以细心想想它们之间的相关。

怎样运用FM模型做一致的召回模型?

上文书说到过,现在工业界举荐体系在召回阶段,大多数选用了多路召回战略,比方典型的召回路有:依据用户爱好标签的召回;依据协同过滤的召回;依据抢手的召回;依据地域的召回;依据Topic的召回;依据命名实体的召回等等,除此外还有许多其它类型的召回路。

现在咱们来评论下榜首个问题:在召回阶段,能否用一个一致的模型把多路召回招安?便是说改构成运用单个模型,单路召回的办法?详细到这篇文章,便是说能否运用FM模型来把多路召回一致起来?

在答复上述问题之前,我估量你会提出疑问:现在咱们用多路召回用的好好的,为啥要多此一举,用一个模型把多路召回一致起来呢?这个问题十分好,咱们的确应该先看这么做的必要性。

一致召回和多路召回优缺点比较

咱们先来阐明下一致召回和多路召回各自的优缺点,我觉得运用一致召回办法,相对多路召回有如下长处:

首要,选用多路召回,每一路召回由于采纳的战略或许模型不同,所以各自的召回模型得分不行比较,比方运用协同过滤召回找到的候选Item得分,与依据爱好标签这一路召回找到的候选Item得分,彻底是不行比较的。这也是为何要用第二阶段Ranking来将分数一致的原因。而假如采纳一致的召回模型,比方FM模型,那么不管候选项Item来自于哪里,它们在召回阶段的得分是彻底可比的。

其次,形似在现在“召回+Ranking”一见司徒误毕生两阶段举荐模型下,迟立夏多路召回分数不行比这个问题不是特别大,由于咱们可以依托Ranking阶段来让它们可比即可。可是其实多路召回分数不行比会直接引发一个问题:关于每一路召回,咱们应该回来多少个Item是适宜的呢?假如在多路召回办法下,这个问题就很难处理。已然分数不行比,那么每一路召回多少候选项K就成为了超参,需求不断调整这个参数上线做AB测验,才干找到适宜的数值。

而假如召回路数特别多,所以每一路召回带有一个超参K,便是这一路召回多少条候选项,这样的超参组合空间是十分大的。所以究竟哪一组超参是最优的,就很难定。其实实践状况中,许多时分这个超参都是拍脑袋上线测验,找到最优的超参组合概率是很低的。

而假如假定咱们一致用FM模型来做召回,其实就不存在上面这个问题。这样,咱们可以在召回阶段做到更好的个性化,比方有的用户喜爱看抢手的内容,那么抢手内容在召回阶段回来的份额就高,而其它内容回来份额就低。所以,可以以为各路召回的这组超参数就彻底依托FM模型调整成个性化的了,很显着这是运用单路单模型做召回的一个特别显着的长处。

再次,关于工业界大型的举荐体系来说,有极prounce大的或许做召回的技能人员和做Ranking的技能人员是两拨人。这儿隐含着一个潜在或许会发作的问题,比方召回阶段新增了一路召回,可是做Ranking的哥们不知道这个作业,在Ranking的时分没有把能表现新增召回路特性的特征加到Ranking阶段的特征中。这样表现出来的作用是:新增召回路看上去没什么用,由于即便你找回来了,并且用户真的或许点击,可是在排序阶段死活排不上去。

也便是说,在召回和排序之间或许存在信息距离的问题,由于现在召回和排序两者的表达办法差异很大,排少女之夜序阶段以特征为表达办法,召回则以“路/战略/详细模型”为表达办法,两者之间差异很大,是比较简略发作上述现象的。

可是假如咱们选用FM模型来做召回的话,新增一路召回就转化为新增特征的问题,而这一点和Ranking阶段在表现办法上是相同的,关于召回和排序两个阶段来说,两者都转化成了新增特征问题,所以两个阶段的改善言语系一致致,就不太简略呈现上述现象。

上面三点,是我能想到的选用一致召回模型,相对多路召回的几个长处。可是是不是多路召回必定不如一致召回呢?其实也不是,很显着多路召回这种战略,上线一个新召回办法比较灵敏,对线上的召回体系影响很小,由于不同路召回之间没有耦合联络。可是假如选用一致召回,当想新增一种召回办法的时分,表现为新增一种或许几种特征,或许需求彻底从头练习一个新的FM模型,整个召回体系从头部署上线,灵敏性比多路召回要差。

上面讲的是必要性,瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际讲完了必要性,咱们下面先评论怎样用FM模型做召回,然后再评论怎样把多路召回改构成单路召回,这其实是两个不同的问题。

怎样用FM模型做召回模型

假如要做一个有用化的一致召回模型,要考虑的要素有许多,比方Context上下文特征怎样处理,实时反应特征怎样参加等。为了可以更清楚地阐明,咱们先从极简模型说起,然后逐渐参加有必要应该考虑的元素,终究构成一个有用化的一致召回模型。

不管是简化版别FM召回模型,仍是杂乱版别,首要都需求做如下两件作业:

榜首,离线练习。这个进程跟在排序阶段选用FM模型的离线练习进程是相同的,比方可以运用线上搜集到的用户点击数据来作为练习数据,线下练习一个完好的FM模型。在召回阶段,咱们想要的其实是:每个特征和这个特征对应的练习好的embedding向量。这个可以存好待用。

第二,假如将举荐体系做个很高层级的笼统的话,可以表到达学习如下办法的映射函数:

意思是,咱们运用用户(User)相关的特征,物品(Item)相关的特征,以及上下文特征(Context,比方何时何地用的什么牌子手机登陆等等)学习一个映射函数F。学好这个函数后,当今后新碰到一个Item,咱们把用户特征,物品特征以及用户碰到这个物品时的上下文特征输入F函数,F函数会通知咱们用户是否对这个物品感爱好。假如他感爱好,就可以把这个Item作为举荐成果推送ca1731给用户。

说了这么多,第二个咱们需求做的作业是:把特征区分为三个子调集,用户相关特征调集,物品相关特征调集以及上下文相关的特征调集。而用户前史行为类特征,比方用户曩昔点击物品的特征,可以当作描绘用户爱好的特征,放入用户相关特征调集内。至于为何要这么区分,后边会讲。

做完上述两项根底作业,咱们可以试着用FM模型来做召回了。

极简版FM召回模型

咱们先来构建一个极简的FM召回模型,首要,咱们先不考虑上下文特征,晚点再说。

榜首步,关于某个用户,咱们可以把归于这个用户子调集的特征,查询离线练习好的FM模型对应的特征embedding向量,然后将n个用户子调集的特征embedding向量累加,构成用户爱好向量U,这个向量维度和每个特征的维度是相同的。

相似的,咱们也可以把每个物品,其对应的物品子调集的特征,查询离线练习好的FM模型对应的特征embedding向量,然后将m个物品子调集的特征embedding向量累加,构成物品向量I,这个向量维度和每个特征的维度也是是相同的。

关于极简版FM召回模型来说,用户爱好向量U可以离线算好,然后更新线上的对应内容;物品爱好向量I可以相似离线核算或许近在线核算,问题都不大。

第二步,关于每个用户以及每个物品,咱们可以运用进程一中的办法,将每个用户的爱好向量离线算好,存入在线数据库中比方Redis(用户ID及其对应的embedding),把物品的向量逐个离线算好,存入Faiss(Facebook开源的embedding高效匹配库)数据库中。

当用户登陆或许改写页面时,可以依据用户I瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际D取出其对应的爱好向量embedding,然后和Faiss中存储的物料embedding做内积核算,依照得分由高到低回来得分Top K的物料作为召回成果。提交给第二阶段的排序模型进行进一步的排序。这儿Faiss的查询速度至关重要,至于这点,后边咱们会独自阐明。

这样就完结了一个极简版别FM召回模型。可是这个版别的FM召回模型存在两个问题。

问题一:首要咱们需求问自己,这种累加用户embedding特征向量以及累加物品embedding特征向量,之后做向量内积。这种算法契合FM模型的准则吗?和惯例的FM模型是否等价?

咱们来剖析一下。这种做法其实是在做用户特征调集U和物品特征调集I之间两两特征组合,是契合FM的特征组合准则的,考虑下列公式是否等价就可以了解了:

其实两者是等价的,主张您可以推导一下(这其实不便是上面在介绍FM公式改写的第三步转化吗?当然,跟彻底版别的FM比,咱们没有考虑U和I特征调集内部恣意两个特征的组合,等会会说这个问题)。

也可以这么考虑问题:在上文咱们说过,FM为了提高核算功率,对公式进行了改写,改写后的高效核算公式的榜首个平方项其实等价于:把一切特征embedding向量逐位累加成一个求和向量V,然后自己和自己做个内积操作。这样等价于依据FM的准则核算了恣意两个特征的二阶特征组合了。

而上面描绘的办法,和规范的FM的做法其实是相同的,差异无非是将特征调集区分为两个子调集U和I,别离代表用户相关特征及物品相关特征。而上述做法其实等价于在用户特征和物品特征之间做两两特征组合,仅仅少了U内部之间特征,及I内部特征之间的特征组合罢了。

一般来说,其实咱们不需求做U内部特征之间以及I内部特征之间的特征组合,对终究作用影响很小。所以,沿着这个考虑途径,咱们也可以推导出上述做法底子和FM规范核算进程是等价的。

第二个问题是:这个版别FM是个简化版别模型,由于它没考虑场景上下文特征,那么假如再将上下文特征引进,此刻应该怎样做呢?

参加场景上下文特征

上面叙说了怎样依据FM模型做一个极简版别的召回模型,之所以说极简,由于咱们上面说过,笼统的举荐体系除了用户特征及物品特征外,还有一类重要特征,便是用户发作行为的场景上下文特征(比方什么时刻在什么地方用的什么设备在改写),而上面版别的召回模型并没有考虑这一块。

之所以把上下文特征独自拎出来,是由于它有自己的特色,有些上下文特征是近乎实时改变的,比方改写微博的时刻,再比方关于美团嘀嘀这种对地理位置特别灵敏的运用,用户所在的地址或许随时也在改变,而这种改变在召回阶段就需求表现出来。所以,上下文特征是不太或许像用户特征离线算好存起来直接运用的,而是用户在每一次改写或许都需求从头捕获当时的特征值。动态性强是它的特色。

而考虑进来上下文特征,假如咱们期望结构和规范的FM等价的召回模型,就需求多考虑两个问题:

问题一:已然部分上下文特征或许是实时改变的,无法离线算好,那么怎样融入上文所述的召回核算结构里?

问题二:咱们需求考虑上下文特征C和用户特征U之间的特征组合,也需求考虑C和物品特征I之间的特征组合。上下文特征有时是十分强的特征。那么,怎样做可以将这两对特征组合考虑进来呢?

咱们可以这么做:

首要,由于上下文特征的动态性,所以给定用户UID后,可以在线查询某个上下文特征对应的embedding向量,然后一切上下文向量求和得到归纳的上下文向量C。这个进程其实和U及I的累加进程是相同的,差异无非是上下文特征需求在线实时核算。而一般来说,场景上下文特征数都不多,所以在线核算,速度方面应可承受。

然后,将在线算好的上下文向量C和这个用户的事前算好存起来的用户爱好向量U进行内积核算Score=。这个数值代表用户特征和上下文特征的二阶特征组合得分,算好备用。至于为何这个得分可以代表FM中的两者(U和C)的特征组合,其实道理和上面讲的U和I做特征组合道理是相同的。

瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际

再然后,将U和C向量累加求和,运用(U+C)去Faiss经过内积办法取出Top K物品,这个进程和极简版是相同的,无非查询向量由U换成了(U+C)。经过瘦腿的最快办法,举荐体系召回四模型之全能的FM模型,环国际这种办法取出的物品一同考虑到了用户和物品的特征组合,以及上下文和物品的特征组合。道理和之前讲的内容是相似的。

假定回来的Top K物品都带有内积的得分Score1,再考虑上一步的得分Score,将两者相加对物品重排序(由于跟物品无关,所以其实不影响物品排序,可是会影响终究得分,FM最外边的Sigmoid输出或许会由于参加这个得分而发作改变),就得到了终究成果,而这个终究成果考虑了U/I/C两两之间的特征组合。

所以咱们经过这种手法,结构出了一个完好的FM召回模型。这个蒲熠星刘一戈秀恩爱召回模型经过结构user embedding,Context embedding和Item embedding,以及充分运用相似Faiss这种高效embedding核算结构,就结构了高效履行的和FM核算等价的召回体系。

怎样将多路召回融入FM召回模型

上文所述是怎样运用FM模型来做召回,下面咱们评论下怎样将多路召回一致到FM召回模型里来。

咱们以现在不同类型举荐体系中共性的一些召回战略来阐明这个问题,以信息流举荐为比方,传统的多路召回阶段一般包括以下战略:协同过滤,爱好分类,爱好标签,爱好Topic,爱好实体,抢手物品,相同地域等。这些不同视点的召回战略都是较为常见的。

咱们再将上述不同的召回路分为两大类,可以把协同过滤作为一类,其它的作为一类,协同过滤相对杂乱,咱们先说下其它类别。

关于比方爱好分类,爱好标签,抢手,地域等召回战略,要把这些召回途径一致到FM模型相对直观,只需求在练习FM模型叶深简宁的时分,针对每一路的特性,在用户特征端和物品特征端新增对应特征即可。比方关于地域战略,咱们可以把物品所属地域(比方微博所说到的地域)和用户的感爱好地域都作为特征参加FM模型即可。爱好标签,Topic,爱好实体等都是相似的。所以大多数状况下,在多路召回办法下你参加新的一路召回,在FM一致召回战略下,对应地转化成了新增特征的办法。

然后咱们再说协同过滤这路召回。其实实质上也是将一路召回转化为新加特征的办法。咱们上文在介绍FM模型和MF模型联络的时分说到过:实质上MF模型这种典型的协同过滤战略,是FM模型的一个特例,可以看作在FM模型里只需User ID和Item ID这两类(Fields)特征的景象。

意思是说,假如咱们将user ID和Item ID作为特征放入FM模型中进行练习,那么FM模型自身便是包括了协同过滤的思维的。当然,关于超大规划的网站,用户以亿计,物品或许也在千万等级,假如直接把ID引进特征或许会面对一些工程功率问题以及数据稀少的问题。关于这个问题,咱们可以采纳相似在排序阶段引进ID时的ID 哈希等降维技巧来进行处理。

所以归纳来看,在多路召回下的每一路召回战略,绝大多数状况下,可以在FM召回模型办法中转化为新增特征的办法。

在详细施行的时分,可以沿着这个途径逐渐替换线上的多路召回:先用FM模型替换一路召回,线上替换掉;再新参加某路特征,这样上线,就替换掉了两路召回;如此往复逐渐把每一路召回一致到一个模型里。这是比较稳的一种替换计划。当然假如你是个猛人,直接用完好的FM召回模型一步替换掉线上的各路召回,也,未尝不行。只需小流量AB测验做好也没啥。

FM模型能否将召回和排序阶段一体化

前文有述,之所以现在常见的工业举荐体系会分为召回排序两个阶段,是由于这两个阶段各司其职,责任清楚。召回首要考虑泛化性并把候选物品调集数量降下来;排序则首要担任依据用户特征/物品特征/上下文特征对物品进行精准排名。

那么,咱们现在可以来审视下本文最初提出的第二个问题了:FM模型能否将常见的两阶段模型一体化?便是否能将有用化的举荐体系经过FM召回模型简化为单阶段模型?意思是举荐体系是否可以只保存FM召回这个模块,丢掉后续的排序阶段,FM召回依照得分排序直接作为举荐成果回来。咱们可以这么做吗?

这取决于FM召回模型是否可以一并把原先两阶段模型的两个责任都能承当下来。这句话的意思是说,FM召回模型假如直接输出举荐成果,那么它的速度是否满足快?别的,它的精准程度是否可以跟两阶段模型相媲美?不会由于少了第二阶段的专门排序环节,而导致举荐作用变差?假如上面两个问题的答案都是必定的,那么很显着FM模型就可以将现有的两阶段举荐进程一体化。

咱们分头来剖析这个问题的答案:准确性和速度。先从举荐精准度来阐明,由于假如精准度没有办法保持,那么速度再快也没什么含义。

所以现在的榜首个子问题是:FM召回模型举荐成果的质量,是否可以和召回+排序两阶段办法挨近?

咱们假定一个是FM一致召回模型直接输出排序成果;而比照模型是现在常见的多路召回+FM模型排序的装备。从上文剖析可以看出,虽然FM召回模型为了速度够快,做了一些模型的变形,可是假如比照的两阶段模型中的排序阶段也采纳FM模型的话,咱们很简略推理得到如下定论:假如FM召回模型选用的特征和两阶段模型的FM排序模型选用相同的特征,那么两者的举荐作用是等价的。

这意味着:只需现在的多路召回都能经过转化为特征的办法参加FM召回模型,并且FM排序阶段选用的特征在FM召回模型都选用。那么两者举荐作用是相似的。这意味着,从理论上说,是可以把两阶段模型简化为一阶段模型的。

已然推理的定论是举荐作用可以确保,那么咱们再来看第二个问题:只用FM召回模型做举荐,速度是否满足快?

咱们假定召回阶段FM模型对User embedding和Item embedding的匹配进程选用Facebook的Faiss体系,其速度快慢与两个要素有联络:

微博机器学习团队18年将Faiss改构成了分布式版别,并在事务易用性方面添加了些新功用,之前咱们测验的查询功率是:假定物品库中存储100万条微博embedding数据,而embedding size=300的时分,TPS在600左右,均匀每次查询小于13毫秒。而当库中微博数量增长到200万条,embedding size=300的时分,TPS在400左右,均匀查询时刻小于20毫秒。

这意味着假如是百万量级的物品库,embedding size在百等级,一般来说,经过Faiss做embedding召回速度是满足有用化的。假如物品库大至千万量级,理论上可以经过添加Faiss的并行性,以及削减embedding size来取得可以承受的召回速度。

当然,上面测验的是朴实的Faiss查询速度,而现实上,咱们需求在兼并用户特征embedding的时分,查询用户特征对应的embedding数据,而这块问题也不太大,由于绝大多数用户特征是静态的,可以线下兼并进入用户embedding,Context特征和实时特征需求线上在线查询对应的embedding,而这些特征数量占比不算太大,所以速度应该不会被拖得太慢。

综上所述,FM召回模型从理论剖析视点,其不管在有用速度方面,仍是举荐作用方面,应该可以承载现在“多路召回+FM排序”两阶段举荐办法的速度及作用两方面功用,所以推论它是可以将举荐体系改构成单模型单阶段办法的。

当然,上面都是剖析成果,并非实测,所以不能确认实践运用起来也能到达上述理论剖析的作用。

总结

终究我简略总结一下,现在看形似运用FM模型可以做下面两个作业:

首要,咱们可以运用FM模型将传统的多路召回战略,改为单模型单召回的战略,传统的新增一路召回,可以转化为给FM召回模型新增特征的办法;其次,理论上,咱们形似可以用一个FM召回模型,来做掉传统的“多路召回+排序”的两项作业,可行的原因上文有剖析。

这是本文的首要内容,谢谢观看。本文最初说过,关于一致召回模型,我计划写一个四篇系列,后边会逐渐介绍其它三类模型,它们是谁呢?它们可以用来做一致的召回模型吗?假如能,怎样做?假如不能,又是为什么?它们可以代替掉两阶段举荐模型,一步到位做举荐吗?这些问题的答案会是什么呢?

关于上面这一系列《走近科学》风格的问题,由于我榜首遍写完的时刻比较早,过了好一阵子翻开来看,当读到上面这些问题的时分,自己都把自己招引住了,对着问题考虑了半响。这阐明什么?阐明这些问题真的很有招引力是吗?其实不是,这只能阐明曩昔时刻太长了,连我自己都记不清这些问题的答案是什么了,哈哈。

我其实是个直爽的人,要不,仍是先自动剧透掉下篇文章的标题吧:

“连女神级程序媛美人看了都震动!FFM模型竟然可以做这么大规划举荐体系的召回!”背景音乐预备装备:房东的猫之《云烟成雨》……那么,女神级程序员究竟是谁?她究竟有多神?她究竟有多美?她究竟是不是女人?预知概况,请听下回分化。

称谢:感谢曩昔一段时刻内,连续和我评论一致多路召回模型及一体化举荐模型的微博机器学习团队的雪逸龙,黄通文,佘青云,张童,邸海波等同学,以及冯凯同学供给的Faiss功用测验数据。或许你们并不想让自己的姓名呈现在这种风格的文章后边,可是其实细心想想,能看到这儿的人估量少得不幸,所以别介意想开点,哈哈。

原文链接:

https://zhuanlan.zhihu.com/p/58160982?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=40535670652928

(本文为 AI科技大本营转载文章,转载请联络原作者)

明晚8点

公司 技能 微博
声明:该文观念仅代表作者自己,搜狐号系信息发布途径,搜狐仅供给信息存储空间效劳。
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。