推荐算法总结

文章目录

  • 内容画像
  • 向量检索
      • kd-tree()
  • match
    • 传统match
      • word2vec
    • 深度match
      • item2vec
      • YouTuBe召回排序
      • DSSM
      • 双塔及双塔业界几种用法
    • 多样性召回
    • 性能
    • 召回的评估
    • 召回的采样策略
  • 精排
    • 树模型
    • FM
    • GCN
    • 注意力机制
  • 样本&采样
  • 多目标多兴趣
    • 样本权重融入
    • 多模型融合
    • 多任务联合学习
    • 多兴趣
  • 面试
    • 简历
    • 投递
    • 推荐业务&广告业务

内容画像

文章推荐
用户画像:积累用户行为
内容画像:以文章为例,文章属于哪一类,文章的关键词有哪些,文章的时效性,文章符不符合涉黄涉政?

推荐流程:内容源(头条、百家号)—>爬取–>库–接口(算法内容画像:文本分类、关键词)–人工审核校正(修正结果)

向量检索

使用场景:隐士召回/embedding召回。流程:1/离线训练(例如双塔),2/可推荐的item,get id,get 特征,过item侧的塔,get item侧的embedding。将这些embedding存入某结构(结构最常用faiss)。3/在线服务,user在线请求,get user v,过用户的塔。检索与v最近近邻的topN(去掉不可用),faiss检索。检索完需要再业务过滤。faiss、kd-tree、LSH(一类算法)、Annoy、HNSW。fassi主要是隐士检索,es是显示检索。faiss主要是单路召回,最多几千的量。过程是离线,因为需要聚类。程序关掉,faiss不落盘,重启需要训练。适合小数据更新,加一个item需要重新聚类。
kd-tree:vector的维度较低的时候,最好不超过30维度。面试问的多。
feed流。
faiss:聚类、降维,再查找。用的多。11137,训练查询一个词,1.3s的量级。性能(经验值):id:800w个 ,200dim维度,查找一个vector的十个最近邻,30ms以内。

kd-tree()

二叉搜索树。最近邻查询,是找到数据中和查询最接近的一个或多个数据条目,但随着数据量的增大以及数据维度的提高,这种方法就很难在现实中应用了。解决此类问题的思路基本分为两类:
(1)通过构建索引,快速排除与查询相关度不大的数据;
(2)通过降维的方法,对数据条目先降维,再查询;
前者主要是为了解决数据量过大的问题,比较常见的有我们熟知的二叉搜索树,Merkel tree,B-tree,quad-tree等;后者主要是为了解决维度过大的问题,比较常见的方法有LSH:LSH(Locality Sensitive Hashing)。
Kd-tree就是一种对多维欧式空间分割,从而构建的索引,属于上面的第一类。
Kd-tree全称叫做:k dimension tree,这是一种对于多维欧式空间分割构造的的二叉树,其性质非常类似于二叉搜索树。
构建树、查询树:对k维度的样本构建二叉搜索树,分裂节点的规则是,哪个维度的方差比较大,就用哪一维来分裂,确定维度后选择中位数作为分裂节点。大于这个维度的中位数的点放在右子树,否则在左子树。直到,叶子节点有一个数。查询A:根据树向下查找,A为圆心以A到二叉树找的点距离为半径,如果和线相交叉,则去另一颗子树上查找。
https://blog.csdn.net/guoziqing506/article/details/54692392

match

多种召回,有些召回关注ctr,有些召回关注多样性,

传统match

word2vec

利用训练语料中词与词的共线性,将自然语言中的词语训练转化为向量的形式。word2vec只是将词转化成向量的一种,并不是全部。

深度match

层次softmax:最优二叉树

item2vec

YouTuBe召回排序

排序:加权逻辑回归,每个样本有一个权重,权重是用户观看的时长,观看的时间越长,权值越大。

DSSM

双塔及双塔业界几种用法

双塔,左边用户塔,右边物品塔。物品塔,一级二级,文章所属类ixng,文章关键词等,不常变动。用户塔,用户是变得,比如最近刘的信息,是变动的。如果是静态信息,
不需要过塔,直接把结果存fissi。如果是动态信息,必须要过塔。

实时推荐。
探探男女配对/视频推荐/商品推荐/新闻推荐/
召回一般不拿用户物品交互信息当特征。

item2item,根据物品召回物品。两个塔都改成item。item2item两个塔能共享embedding层。物品item不能共享embedding层。

召回模型怎么评估:召回很难评估。有些召回的评估指标是多样性。每一路召回负责的角色不一样,有些路召回就是为了提高多样性。
1/召回的曝光占比。分发能力:总曝光/这一路的曝光。
2/看端内总体的数据指标。ctr/停留时长等。
误区是看单路指标。ctr,

多样性召回

模型理解力/ 业务理解力/ 优化工程能力/ 沟通/协调(并行计算)/ 管理/ 战略眼光

性能

排序性能:1/加机器。2/有问题,做异步调用。针对一些请求存起来,短时间有相同的请求直接返回结果。

召回的评估

召回的采样策略

采样分成采,同一个类型的采一些,不要只采曝光的,热度的采一些,冷的采一些。
采样的比例:点击率10%,也就是线上正负样本1:9,需要采样和线上一样吗。不需要。采样的比例一般自己定的,1:4,1:10之间。

精排

性能:<=300ms
特征:user侧特征、item侧特征
上下文特征:用户所处环境/网络/地域
交叉特征:用户
匹配特征:1小时的ctr作为特征。
特征爆炸:特征处理后多少维度算爆炸,特征处理完千万维度都没啥问题。
模型:LR、FM、GBDT、GBDT+LR、Wide&Deep、DeepFM

点击率:百分之十几,7%-15%,20%基本不可能。转化率:百分之一点几。
ctr提高多少合适?5%是不可能的,也就1%。除非原来太差。1%已经很多了,LR换成deepFM提升1%才有可能。deepFM到DIN提高1%,是绝对不可能的。大部分
排序模型:LR、FM、GBDT、GBDT+lr、W&D、deepfm、DIN(用的不是很多)
多目标:

树模型

GBDT:全称梯度提升树,学习的是残差。梯度提升,梯度后学习的就是残差。
GBDT:是一颗回归树。基分类器是CART树,cart树的分类规则有两个基尼系数和mse。但GBDT的分裂规则只有mse。

RF和GBDT训练同样的数据集,哪颗树会更深?
RF会更深,RF每一颗树都是从头学习,GBDT不一样,只学残差。

GBDT能识别你的一个特征是类别特征还是连续特征吗?
不能。

GBDT是回归树,那么怎么做分类?
如果选择计算5次残差,如果GBDT做回归的话,则有六棵树。如果GBDT做分类的话,3个类别,则有18棵树,每次有三棵树,三棵树做softmax,然后和label计算残差。

为什么GBDT的叶子节点具有特征组合?
基于热度的推荐算法

FM

优点:1、降低复杂度,2、对稀疏数据比较友好。Embedding的雏形。计算时:和的平方和平方的和的形式。隐向量K的取值8~50,基本8 ~30就差不多了。参数量:n*k,两两组合是n的平方。FM的两种方法:1、libFM,C++写的,不需要写代码,命令行就可以安装,进入bin目录下有个libFM,命令行就可以操作,./libFM -task C -train(训练集)。-test(测试集),-r是回归,-c是训练。-dim是隐形量K的维度。-iter是迭代100次,-save-model 模型文件.txt。txt里面存的是w()和vi vj()。训练集的格式:index1:数据1,index2():数据2…

GCN

树模型(百万树模型达到较好的效果)、深度模型(千万、上一)
ID不适合树模型,在深度比较好用,因为有EMbedding

注意力机制

样本&采样

精排:从日志中获取,有点击没点击。
召回:正样本从日志里面采;负样本应该全库去采,1、日志(曝光未点击)中采,2、未曝光的也要采。正负样本的比例1:10,曝光的采7,曝光中采3条。

手段1:针对用户,均等采样,活跃用户、不活跃用户比例1:1。groupAUC。层次、分层采样。
手段2:
为什么要采样,为什么不能和线上数据保持一致:首先线上数据是不断发生变化的。样本不平衡的缺点。

多目标多兴趣

多目标有三个方向,点击率、完播率、观看时长、点赞数、转发数、收藏。

样本权重融入

视频推荐:观看为1,未观看为0,是不合适的。观看5s以内不能当做正样本,有可能是标题党或者不小心点错。
AB两个样本:一个看10s,一个看60s,都是正样本,但也应该区别对待。60s的损失应该加大。sklearn、tf、pytorch都可以设置。如果想考虑多个目标,既考虑时长又考虑收藏和转发,这个时候必须控制权值的上线,增大到一定程度就不能再增加了。对观看时长需要消除异常值。权重的数值范围:经验不超过2~2.5。可以对多个目标的权重值进行sigmoid,这样总的1-2之间。

多模型融合

方式一:点击:model1,时长:model2,total_score=求和(wjmodel_scorej),这个时候如果时长是回归任务,需要做归一化。系数怎么定:没必要去学习,根据业务定。total_score=求乘积(model_scorej),抑制使用幂的方式,0-1,幂越大,值越小。权重:一般拍一个,或者尝试几个,或者去学习出来但这种效果也一般。
方式二(推荐):取ctr TOPN的里面取阅读时长比较长的。
方法三:total_score=求和(wj
model_scorej)=2阅读时长+5是否点击,去做回归。两个目标只用一个模型,因为多个模型性能可能不够。这种方法和样本权重融入差不多。
方式四:ctr的值带到时长的模型。缺点:模型是串联费时,如果ctr不准则影响市场模型。

多任务联合学习

多兴趣

1、五个embedding进行pooling,如果不是一个网络学习出来的,五个embedding相加没有意义,没有可加性。
2、不进行
胶囊网络
MIND

面试

简历

1、简历不要太长,不超过两页
2、不要太密
3、项目和公司不要分开。公司要倒序,方便面试官看到你近期的工作。公司与公司之间空行。
公司一:2019-01-01~2020-01-01
项目一:
项目二:
公司二:2017-01-01~2018-01-01
项目一:
项目二:
4、不要堆叠模型,小白,可信度不高。一年半七八个模型不可信。线上的数据需要跟模型进行融合,需要时间,刚融合好就换模型,不现实。1-2年四个是上线。1年两个左右就够了。如果一年确实是4个,那么肯定是有主次的,哪个模型做的时间长,哪个模型效果好,突出重点。怎么迭代的,效果哪里不好,怎么改进的,有自己的思考。挑一个拿的出手的亮点,模型、策略、采样。多思考每个改进点为什么好,为什么不好,面试的时候多说自己的理解及做模型的经验,不当工具人。
5、简历上的东西必须都会,写有把握的。
6、多写指标。ctr提升10%~15%,5%、8%都可以。曝光能力提升多少;分发能力提升多少;多样性召回,多样性怎么提高的,deepwork对召回的多样性会好一些,大盘不跌,增加了多样性;
7、模型文件的大小;估计一下参数的量级;线上请求的qps大约是多少,和日活强相关,5000就太大,几百就可以,引擎qps远大于精排的qps,三台机器总的请求量达到四五千不太可能,五台机器每台120左右也是可以的;dau大约多少。精排比较关注qps,召回的话不关注qps。没有推荐系统的经验的,最好不要写精排,可以写召回。
8、项目少简历怎么写:不要编新项目来包装,打比赛。
9、面试重灾区:有没有项目、模型深不深入:lr优化理论、为什么做特征交叉、为什么加注意力、都是跟业务相关的。
10、35岁:热情、多操心、多全局关注项目。在一个业务上深入。推荐、广告、用户增长。

投递

1、推荐不要投中台部门,NLP/CV可以投中台。中台:技术维护,没有业务,没有产出,不好赚钱,裁员先裁中台。找有业务的部门。做算法一定要了解业务。
2、算法架构师:大模型,深度模型不好落地怎么落地,分布式怎么做,怎么扩容,怎么缩短反应时长,承载更大的qps,节省内存,模型压缩,离线auc,加速模型的推理。
3、
一面:小兵,保证懂技术+业务。
三四面:不聊太多技术,方案。
4、发展路线&职业规划
技术专家:
技术管理:

推荐业务&广告业务

推荐:文本、新闻、视频、商品、广告、简历、保险、feed流、图文、
广告:秒杀、优惠券

你可能感兴趣的:(推荐系统,推荐算法,数据挖掘,python)