互联网信息检索应用-推荐系统初识
Posted 程序员阿赞
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了互联网信息检索应用-推荐系统初识相关的知识,希望对你有一定的参考价值。
1. 序言
2. 召回模块
2.1 基于倒排索引的方法
2.2 基于语义匹配的方法
2.3 基于运营策略的方法
3. 排序模块-CTR模型
3.1 传统模型
3.2 深度模型
4. 总结
5. 参考文献
1. 序言
年关将至,终于决定写第二篇文章,也算是拖延症重症患者了!过去一年的工作中,一直在做搜索和问答相关的项目,算是积累了些许经验。随着互联网的高速发展,用户面临的信息过载状况愈发严重,我们生活在一个信息爆炸的时代,每天都在和各种APP打交道,浏览新闻、观看视频、听歌曲、购物、寻找好玩的地方、好吃的餐厅等等,这里面涉及到许多信息检索的技术。本质上可以归为两种技术方案:其一是为了解决用户的主动行为,即搜索引擎技术,它的最终目的是为了精确匹配用户的主动意图,将最相关的内容呈现给用户;其二是主动服务用户,发现用户的兴趣爱好,即推荐系统技术,它的最终目的是为了提升用户的留存或者转化,将用户最感兴趣的内容呈现给用户。
比较经典的说法是,搜索更关注结果的相关性,推荐更关注结果的多样性。我认为这只是相对而言的说法,从实际场景分析,要求用户精准表述自己的搜索意图是一件不合理的事情,许多用户的搜索行为本身就是模糊的。比如,用户搜索“球鞋”,这个时候用户的意图是不明确的,或者说是多意图,用户的意图可以是购买球鞋,或者查询球鞋相关的知识等等,而要确定用户的真实意图需要根据用户的历史行为和用户画像,以及发生该搜索行为的上下文环境来确定。我个人倾向于将这个例子看作更偏向推荐相关的技术,因为这个例子在保证相关性的同时对不同的用户需要个性化的内容呈现。
搜索、推荐和广告在很多业务场景中都是密不可分的,其使用的技术方案或多或少有一些交叉,从技术架构上来说都包括:召回、排序(粗排和精排)两阶段。其本质都是一个匹配任务,实际场景来说,搜索的排序阶段比较深入的涉及Learning To Rank技术,从point-wise到pair-wise,再到list-wise的这样一种排序思想的演进。而推荐在排序阶段,更多是CTR的实现方式,即point-wise的排序方法。而广告则在考虑用户和结果的基础之上,再考虑商家、店铺或者广告主的诉求,加入竞价这些策略机制。其中相关技术细节不再深入,虽然过去一年主要在做搜索和问答项目,但是业余之时学习了一些推荐系统相关的知识,本文以一个新人的视角简单谈一谈推荐相关的技术体系,如有纰漏,还请见谅。
2. 召回模块
互联网上的信息内容非常之多,数以亿计。要从这么庞大的内容库里找出用户感兴趣的部分内容,对于计算资源的要求非常之高。为了解决这个难题,现代推荐系统架构体系由两阶段组成,其一就是召回阶段,该阶段的技术模型相对来说要简单一些,计算量小,其目的是为了从海量内容库里筛选出几十或者上百个用户感兴趣的候选集。在这一阶段,往往会有多种召回策略并行计算,即所谓的多路召回,在进入下一阶段(排序模块)之前,需要对多路召回的结果进行多路归并、去重,随着硬件技术的发展,有很多公司已经在这一阶段设计相对复杂的模型对结果进行粗排。
召回策略主要有以下几种方法:
-
基于倒排索引的方法 -
基于语义匹配的方法 -
基于运营策略的方法
2.1 基于倒排索引的方法
倒排索引,英文叫Inverted index,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。其开源库可以参考大名鼎鼎的Lucene,基于Lucene的Elastic search经常被用在搜索引擎的召回方案中。
倒排索引,主要包括三个概念。单词索引,词典和倒排列表。词典就是关键词词典,而关键词则可以理解为用来检索物料的单词。倒排列表则是由每个关键词所对应的物料集合构成,对于文本内容来说可以使用关键词提取的算法来提取关键词,而对于非文本的物料来说,则可以人工定义一些关键词->物料
这样的映射,或者基于内容理解技术构建物料的标签体系等等。单词索引则是为了快速索引到对应关键词,其实就是查找算法,要求快速自然而然会想到哈希表,但是哈希表需要额外的内存空间存储映射关系,内存消耗大。对于熟悉NLP算法(或者搜索引擎)的工程师来说,前缀字典树也是非常熟悉的快速查找单词的算法,同时还有双数组字典树,其在搜索引擎中经常用来实现query联想。在Lucene中,单词索引基于Finite State Transducers算法实现,既保证了查询速度同时又节省了内存占用。
2.2 基于语义匹配的方法
语义匹配,是一种向量空间模型,通过Embedding技术将物料表示成分布式向量。在同一个向量空间中,计算两个向量之间的相似度,其相似性度量方法包括:曼哈顿距离,欧氏距离,余弦距离等。使用该方法,在线服务时仅需要计算用户侧的向量表示,物料侧的向量表示可以提前离线计算,这样就变成了一个近邻搜索的问题,当候选集的数量为k时,就是所谓的k近邻(KNN)算法。对于该问题,往往并不需要精确解,精确解是非常耗时的,通常基于Faiss开源工具来进行近邻搜索。Faiss支持精确搜索和近似搜索,为了加速计算,通常采用近似搜索,相似性度量方法默认使用余弦距离。Faiss工具使用到了PCA、K-means和PQ等算法对数据进行降维,分群等处理,缩小数据查找范围来加速查询。值得一提的是Faiss工具有基于局部敏感哈希(LSH)的加速包,局部敏感哈希的思想是相似的value经过哈希函数的映射后,生成的key也相似,这样将高维稠密向量分段hash后,进行分桶,仅查找落在同一个桶里的向量。
上面说了Embedding之后的匹配方法,但是语义向量如何生成才是最核心的问题。通常一般有以下两种方法:
-
基于矩阵分解的传统方法,该方法通过线上日志构建 用户-物品
共现矩阵,利用矩阵分解的方法得到用户向量表示和物品向量表示 -
基于表示学习的深度方法,该方法一般基于双塔模型,构建深度网络对用户和物品pair对进行建模,在网络建模上层对用户向量和物品向量进行相似性(如余弦距离)计算,利用CTR等目标优化深度网络的参数。
2.3 基于运营策略的方法
该方法主要用于满足业务侧运营的需求,在召回候选集中加入一批物料。可用于解决部分冷启动问题,或者满足广告主的曝光需求等等。主要采用配置系统,由业务侧运营人员人工配置。
3. 排序模块-CTR模型
CTR(Click Through Rate),即点击率,是互联网常用术语,指物品(商品、广告、网页、文章、视频、音乐等)的点击到达率,是衡量推荐效果的一项重要指标。工业界通常基于该目标,构建排序模型,在线服务时根据pCTR作为物品展现结果的排序分数。因此,在本章中对主流的CTR模型做一个简单的介绍。
3.1 传统模型
从Logistic Regression(LR)模型出发,可以衍生出如上图所示的一些模型。LR模型的数学形式如下所示:
其本质是一个线性模型,就是各个特征的加权和,再通过sigmoid函数输出y=1的概率。该模型简单直观,易于实现和部署,是早期各大公司推荐系统的基石,而且由于LR模型可解释性强,在线上指标出现波动时可及时定位原因,向业务侧进行解释。但是,LR模型仅利用一阶单一特征进行判断,模型表达能力不强,不仅会造成有效信息的损失,有时候还会得出错误的结论。比如,著名的“辛普森悖论”证明了对样本集合进行分组研究时,在各个分组中都占优势的一方,在总评时却可能不是最好的一方,这强调了特征交叉生成高维组合特征的重要性。
基于先验知识手工进行特征的交叉组合,能够有效的提升模型效果,例如年龄和性别的组合特征在很多场景都是非常有效的二阶交叉特征,能够帮助模型有效的进行判断。但是这种方式需要深入理解业务场景,以及进行详细的数据分析,劳民伤财的同时效率并不高。图中的POLY2模型,进行特征的暴力组合,即对于所有单一特征两两组合,其特征组合数学形式如下:
POLY2模型本质上仍是线性模型,训练方法与LR一致,该模型在一定程度上解决了特征组合的问题,但是其存在两个较大的缺陷:
-
特征经常采用one-hot编码,致使特征非常稀疏,特征的暴力组合加重这种影响,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛 -
权重参数的数量由 上升到 ,极大增加了训练复杂度。
FM(Factorization Machine),因子分解机模型正是为了解决上述缺陷,其特征组合的数学形式如下:
相比POLY2,FM模型为每个特征学习了一个隐权重向量,在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重,将权重参数的数量由 降低到 ,k为隐向量维度, 。隐向量的引入还在一定程度上解决了特征稀疏的问题,这里则引入了两个概念,记忆性和泛化性。所谓记忆性指的是模型的记忆能力,简单来讲就是模型必须得见过样本才能记住特征,而泛化性则指的是模型的泛化能力,模型不一定需要见过对应的特征组合,也能做出有效的判断。
“举例来说,我们有两个特征,分别是channel和brand,一个训练样本的feature组合是(ESPN, Adidas),在POLY2中,只有当ESPN和Adidas同时出现在一个训练样本中时,模型才能学到这个组合特征对应的权重。而在FM中,ESPN的隐向量也可以通过(ESPN, Gucci)这个样本学到,Adidas的隐向量也可以通过(NBC, Adidas)学到,这大大降低了模型对于数据稀疏性的要求。甚至对于一个从未出现过的特征组合(NBC, Gucci),由于模型之前已经分别学习过NBC和Gucci的隐向量,FM也具备了计算该特征组合权重的能力。”
基于FM模型进化的FFM模型引入了Field-aware这一概念,使模型的表达能力更强,限于篇幅,这里不再赘述,以后有机会对各个模型进行更详细的介绍。
上面提到的方法本质上还是特征的两两组合,只能够做二阶的特征交叉,如果要提高特征交叉维度,会发生组合爆炸和计算复杂度过高的情况。上图中往右衍生出了GBDT+LR组合模型的解决方案,GBDT是梯度提升决策树,本质上就是在进行特征的组合选择,将GBDT的叶节点当成新的特征训练LR模型,可以利用模型自动进行特征的交叉选择,推进了特征工程模型化的趋势。上图中往左则衍生出一种在线实时训练模型的方法,FTRL并不是一种模型,而是一种训练方法,其主要点在于权重更新的改变,保证模型的稀疏解优势,同时可以在线训练。这一块知识数学性很强,而且有完整的演进路线,值得在之后的文章中单独拎出来详细介绍。稀疏解本质上是减少模型参数,即丢弃一些不重要的特征,这个过程有点像模型代替人工筛选出了一批不重要的特征进行丢弃,可以防止过拟合同时使得模型更加“轻量化”,在机器学习领域参数稀疏是一个比较好的模型优化方向,L1正则化项有利于这一点。
LS-PLM,又称MLR模型,是阿里盖坤、朱小强团队提出来的算法,该团队之后基于刻画用户兴趣为目标又提出了DIN和DIEN模型,都取得了较好的效果,且应用在了阿里的线上服务中。MLR模型在LR的基础上采用分而治之的思路,利用softmax和sigmoid函数实现了非线性学习。
3.2 深度模型
随着深度学习的蓬勃发展,CTR模型也逐步开始向深度学习靠拢,模型框架由DNN/MLP构成。从Wide&Deep模型出发,Wide部分是传统模型,是模型记忆能力的体现,Deep部分则是深度模型,是模型泛化能力的体现。图中往下是分别对Wide部分和Deep部分做改进的演化路线,需要重点关注的是DeepFM模型,将Wide部分由LR替换为FM,加强了Wide部分特征组合的能力,增强了模型的表达能力。
对于仅有Deep部分的深度模型来说,其网络主要由embedding层和MLP组成,对于图中的PNN,FNN和Deep Crossing模型本文暂不展开讨论。本文重点关注阿里的DIN和DIEN模型。
3.2.1 DIN模型
DIN模型的输入由4部分组成:用户画像特征,用户行为特征,候选物品特征和上下文特征。其模型图如上所示,论文中有提出该模型的base model,即在上图中去掉attention unit结构。该模型从网络结构上来看并不复杂,即对4种输入特征进行embedding表示,然后拼接起来过MLP进行输出,需要注意的地方是用户行为特征是一个不等长的行为序列,一般可以通过average pooling操作得到最终的表示向量。
因为我本身是NLP出身,在看到这个模型时就在想两件事情,一是这种行为序列是有时序的,所以能不能使用LSTM/GRU等网络进行时序建模;二是这种行为序列中每个点的权重不应该是均等的,很容易想到attention的机制。当我仔细看完论文之后,发现论文中有提到第一点,作者使用LSTM做了实验,发现效果不好,并且做出了解释,用户的行为序列不像文本存在一定的语法,用户的行为更多是快速的或者突然终止的,可能不太适合LSTM结构。第二点其实就是DIN模型的idea,论文作者本身的出发点是基于反向的激活结构自适应地发现用户的兴趣,不过这一点跟当时的attention机制本质上非常相似。
该模型attention的计算方式是将用户行为与候选物料进行处理(如element-wise的减法、乘法、拼接)送入一个前馈网络计算出attention分数,这种结构旨在建模用户行为与候选物料之间的相关性。值得注意的是,该结构中并没有对attention分数使用softmax归一化,作者提到这样旨在保留用户兴趣的强度。
这篇文章非常贴合真实场景,用户行为的兴趣探索是非常有价值的,尤其在淘宝等电商平台,用户短期内的行为兴趣可能会比较几种,对于候选物料的选取非常有帮助,当然本文还有一些工程性的优化,比如评测指标GAUC和dice激活函数。用户兴趣在推荐系统中是很有价值意义的,但是对于视频或者歌曲类场景,用户的兴趣往往是多峰的,对于建模可能存在一定难度。
3.2.2 DIEN模型
DIEN模型是对于DIN模型的改进,该模型使用GRU网络来建模用户行为。同时提出了interest extractor layer来发现用户的兴趣,和interest evolving layer来建模用户行为和候选物料的相关性。其在interest extractor layer提出了auxiliary loss来监督用户行为隐向量的学习,更好的表示用户兴趣。auxiliary loss的数学形式如下:
表示用户 的第 个行为的隐向量, 表示用户 第 个行为的embedding表示,视为正样本,而 由负采样得到,表示用户 第 个行为的负样本embedding表示,基于极大似然估计,要优化auxiliary loss则增加正样本和第 个行为的隐向量的相关性,减小负样本和第 个行为的隐向量的相关性。
该模型利用attentional update gate增强候选物料和用户行为兴趣之间的相关性表达,同时克服兴趣漂移现象。
4. 总结
推荐系统是一个相对成熟的技术系统,在互联网的发展中扮演了非常重要的角色。搜索、推荐和广告在技术细节和业务目标上存在一定差异,但是在整体技术框架上有很多互相借鉴的经验。可以说搜索、推荐和广告是NLP技术或者IR技术在工业界比较成熟的落地应用,这些应用不仅指算法模型本身,对于工业界来说,整套系统的工程架构也非常重要,例如A/B Test系统,模型部署上线系统,服务日志系统,指标监控系统等等
对于算法工程师来说,还有一道鸿沟难以逾越,即技术指标和业务指标之间的不一致性。推荐系统或者搜索引擎相关评测指标,如precision, recall, NDCG, mAP, AUC等可以另外写一篇文章详细介绍。但其实对于推荐系统本身而言,有一些业务指标也是视场景进行区分的,比如点击率、转化率、留存率、停留时长等,不同的业务目标则关注不同的指标,需要算法工程师深入理解业务场景。比如对于电商平台来说,用户一般很少同一窗口内购买同类型产品,这个时候则需要注意不能重复推荐用户在窗口期内已经购买过的物品;而对于音乐平台来说,用户在同一窗口内反复听一首歌是符合真实场景的;同样的对于新闻类平台来说,物品的时效性是非常重要的参考因素,而对于音乐平台来说,候选集的时间窗可以无限长,时效性对于歌曲这类物品来说并不是一个重要的特征。
5. 参考文献
-
传统CTR预估模型-王喆 -
深度CTR预估模型-王喆 -
LR-Microsoft -
FM-UKON -
GBDT+LR-Facebook -
MLR-Alibaba -
Wide&Deep-Google -
DeepFM-Huawei -
PNN-SJTU -
DIN-Alibaba -
DIEN-Alibaba
以上是关于互联网信息检索应用-推荐系统初识的主要内容,如果未能解决你的问题,请参考以下文章