当前位置: 首页 > 科技观察

大观数据:推荐系统算法实践重排序

时间:2023-03-18 14:45:11 科技观察

互联网的出现和普及,给用户带来了大量的信息,满足了信息时代用户对信息的需求。然而,随着互联网的飞速发展,网上信息量的大幅增加,使得用户在面对海量信息时,无法获取对自己真正有用的那部分信息,效率低下。使用信息反而减少,形成信息过载的问题。大观数据有几种解决信息过载的方法:一是搜索。当用户有明确的信息需求时,他们会将意图转化为几个简短的关键词,并将关键词提交给相应的搜索引擎。另一种是推荐,当用户的意图不明确或难以表达时,尤其是近几年,随着移动互联网的兴起,用户不一定有明确的意图去浏览,更多时候,你浏览的是网页或以“购物”或消磨时间为目的的APP。在这种情况下,可以解决信息过载,了解用户意图,根据用户喜好推送个性化结果。推荐系统是一个比较。好的选择。本文主要简单介绍一下推荐系统的流程框架,然后主要介绍重排序。1.推荐系统流程框架从框架来看,推荐系统流程可以分为数据清洗、数据存储、候选集生成、候选集融合规则过滤、重排序。首先对客户上报的数据进行清洗,检查数据的一致性,对无效值、缺失值等进行处理,去除脏数据,处理成格式化数据,存储到不同类型的存储系统中。由于用户行为日志和推荐日志会随着时间的推移而积累,一般存储在分布式文件系统(HDFS),即Hive表中,需要时可以下载到本地进行离线分析。商品信息一般存储在MySQL中,但是对于大观数据,越来越多的客户导致商品信息表(item_info)越来越大,所以也会同时存储在Hive表和HBase中。Hive可以方便的进行离线分析操作,但是Hive表在实时程序读取时实时性较差,所以同时会写一份放在HBase中供实时程序使用读。对于各个程序模块产生的结果,有进程同步的程序一般使用Redis作为缓冲存储,生产者将信息写入redis供消费者使用。候选集生成是根据用户的历史行为、实时行为,采用各种策略和算法,生成推荐的候选集。同时,点击反馈会根据用户的实时操作实时调整候选集。对于一些新用户和历史行为不太丰富的用户,由于候选集太小,需要一些替代策略来补充。候选集融合规则过滤主要有两个作用。一是对生成的候选集进行融合,提高推荐策略的覆盖率和准确率;另外,需要根据产品和运营的角度,人为确定一些规则,过滤掉不符合条件的。item,重排序主要是利用机器学习模型对融合后的候选集进行重排序。对于候选集生成和重排序两个层次,需要频繁修改两个层次进行效果迭代,所以需要支持ABTest。为了支持高效的迭代,我们解耦了候选集触发和重新排序的两层。这两层的结果是正交的,所以可以单独进行对比实验,互不影响。同时,在每一层内,我们会根据用户将流量分成多个部分,支持多种策略同时在线对比,提高推荐效果。2.机器学习重排序对于不同算法触发的候选集,如果仅根据算法的历史效果来确定算法生成的item的位置,有点简单粗暴。同时,在每个算法中,不同项目的顺序很简单。它是由一个或几个因素决定的。这些排序方法只能在第一次初步选择过程中使用。最终的排序结果需要通过机器学习方法、相关排序模型以及综合因素来确定。.排名模型分为非线性模型和线性模型。非线性模型可以更好地捕捉特征中的非线性关系,但训练和预测的成本高于线性模型,这也导致非线性模型的更新周期相对较高。属于。相比之下,线性模型对特征处理的要求比较高。它需要依靠领域知识和经验来预先手动处理特征。但是,由于线性模型简单,因此在训练和预测方面效率更高。所以更新周期也可以做的更短一些,可以结合业务做一些在线学习的尝试。2.1线性模型线性模型主要介绍逻辑回归(LogisticRegression)。逻辑回归是一种广义线性模型。虽然名称中包含回归,但实际上是一种分类算法,主要用于二分类或多分类算法。在多分类中,有两种不同的分类思想,one-vs-rest(OvR)和many-vs-many(MvM)。这里主要讨论预测和分类的问题(某个userid是否会点击某个itemid)。首先将每个userid和每个itemid作为特征,模型函数为:gz=i=1mαi*Ui+j=1kβj*Ijhz=11+e-g(Z)m,k分别为userid和itemid的个数,αi、βj分别为自变量Ui、Ij的参数。逻辑回归模型使用最大似然法来估计模型的参数。Costfunction为:Jθ=i=1nyi*hθ(Zi):n为样本个数,yi为样本的标签,所有参数用θ向量代替。然后计算Costfunction优化时的参数。在优化理论中,求解优化参数的方法有很多,如梯度下降法、随机梯度下降法、牛顿法、拟牛顿法、共轭梯度法等。这里使用牛顿法。牛顿法的思路很简单,就是将泰勒展开式展开为二阶形式:公式成立当且仅当:求解:得到迭代公式:牛顿求根法图解:比较,牛顿法相比梯度下降法更容易收敛(迭代次数少),但在高维情况下,牛顿迭代公式为:其中H为hessian矩阵:hessian矩阵增加了计算的复杂度,但一般来说候选集的数量不是太多,所以可以接受。对于点击率预估,正负样本严重失衡,因此需要采样一些负样本。同时在训练前需要使用TFIDF将训练数据转化为列向量,使得每一行都是一个长度为m+k的列向量,然后将结果作为模型输入进行训练。根据交叉验证的结果,precision、recall和f1-score都在0.83左右,相当可观。候选集输入模型后,得到对应的预测概率。概率是将输入值转化为向量,然后用logit函数对(0,1)之间的值进行归一化,根据值得到对应的阶数。(大观数据孟立斌)2.2非线性模型非线性模型主要介绍GBDT(GradientBoostDecisionTree)及其对应的应用。GBDT是常用的非线性模型,是Boost算法的一种。首先,我们将介绍一种称为AdaBoost的高级元算法。Adaboost算法在开始时为每个样本分配一个权重值,并且最初,每个样本具有相同的权重。每次迭代构建一个单层决策树分类器(任何分类器都可以作为弱分类器,只要比随机猜测稍微好一点即可,但弱分类器越简单越好),分类器是根据最小错误率选择最好的单层决策树,同时增加误分类点的权重,降低正确点的权重,这样如果有些点总是被误分类,就会被“严重关注”,它也被赋予了很高的权重。然后进行N次迭代(由用户指定),就会得到N个简单分类器(basiclearner),然后我们将它们组合起来(比如可以给它们加权,或者让它们投票等),得到一个最终模型。原始的Boost算法在算法开始时为每个样本分配一个权重值。一开始,每个人都是同等重要的。每一步训练得到的模型都会对数据点做出正确或错误的估计。在每一步之后,我们都会增加错误点的权重,减少正确点的权重,这样一些点如果总是被错误分类,就会被“严重关注”并赋予很高的权重。那么经过N次迭代(用户指定),就会得到N个简单分类器(basiclearner),然后我们将它们组合起来(比如可以给它们加权,或者让它们投票等),得到最终的模型。GradientBoost和传统Boost的区别在于每次计算都是对上一次的残差进行减去,而为了消除残差,我们可以在减少残差的梯度(Gradient)的方向上创建一个新的。模型。因此,在GradientBoost中,每一个新模型的resume都是在梯度方向上减少前一个模型的残差,这与传统Boost对正确样本和错误样本进行加权有很大区别。具体算法是:我们的目标是在样本空间中找到最好的预测函数f*(X),使得从X映射到y的损失函数L(y,F(X))达到最小值,即:loss函数的平方误差:假设预测函数F(X)以P={P1,P2,…}为参数,可以写成几个弱分类器的相加,其中P={βm,αm}0M,第m个弱分类器的表达形式为βmh(X;αm),其中βmh(X;αm)表示第m个回归树,向量αm表示第m个回归树的参数,而βm表示第m个回归树的预测函数权重在:那么对于N个样本点{xi,yi}N,优化问题等价于求参数{βm,αm},m=0,1,2,...,M,使得:求解归因于以下迭代过程:1.首先定义初始化分类器为常数ρ,其中F0(X),表示初始化弱分类器,常数ρ使得我初始预测损失函数达到最小值:2.每次迭代构造一棵回归树弱分类器,第m次迭代后得到的预测函数为Fm(X),对应的预测函数为L(y,Fm(X)).为了最快的减少预测损失函数,第m个弱分类器βmh(X;αm)应该建立在第m-1次迭代产生的预测损失函数的梯度方向上,其中-gm(xi)表示第m次迭代弱分类器的建立方向,L(yi,F(xi))表示前m-1次迭代产生的预测损失函数,表达式为L(yi,F(xi))=((yi-F(xi))2):根据得到的梯度下降方向,参数αm为使回归树h(X;αm)沿该方向逼近的参数值,即:βm为最大步长沿该方向搜索的大小,即:3.更新每次迭代后得到的预测函数,即Fm(X)=Fm-1(X)+βmh(X;αm),如果对应的预测损失函数满足误差收敛条件或生成的回归树达到预设值M,则迭代终止。4、为了避免过拟合,通常在每个弱分类器前乘以“学习率”ν,取值范围为0到1。ν值越小,学习越保守,需要的迭代次数越大达到同样的准确率,反之,学习越快越容易过拟合:值得一提的是,GBDT的天然优势在于可以发现多种区分特征和特征组合。我们可以结合GBDT和LR,如下:先用已有的特征训练GBDT模型,然后用GBDT模型学习到的树构造新特征,最后将这些新特征加入到原有特征中一起训练模型。构造的新特征向量为0/1,向量的每个元素对应GBDT模型中树的叶子节点。当一个样本点经过一棵树,最后落在树的一个叶子节点上,那么新的特征向量中叶子节点对应的元素的值为1,树的其他叶子节点对应的元素的值为1值为0。新特征向量的长度等于GBDT模型中所有树包含的叶子节点个数之和。例如。下图中的两棵树是GBDT学习的,第一棵树有3个叶子节点,第二棵树有2个叶子节点。对于一个输入样本点x,如果它是***树***中的第二个叶子节点,并且是第二棵树***中的***叶节点。那么GBDT得到的新特征向量为[0,1,0,1,0],其中向量中的前三位对应第一棵树的三个叶子节点,后两位对应第二棵树的2个叶节点。LR虽然简单,训练和预测效率高,但是特征工程很重要。现有的特征工程实验主要集中在寻找具有判别力的特征和特征组合,折腾不一定能带来更好的结果。利用GBDT算法的特点,可以发现有区别的特征和特征组合,减少特征工程的人工成本。2014年KaggleCTR比赛的冠军就是用的这种组合方式,笔者也借鉴了他们。【本文为专栏作者“大观数据”原创稿件,如需转载可通过专栏取得联系】点此查看该作者更多好文