推荐系统(一)
2024.12.9号面试了百度用户增长部门中台一面,了解到部门主要做一些推送工作,涉及到推荐系统的召回和排序等工作,故了解学习了推荐系统的大致知识,待后续更新
ps:明天三面,希望能过,想要一个大厂offer结束折磨的秋招了TAT
推荐系统的链路
-
召回:快速从海量数据取回几千个用户可能感兴趣的物品,每条召回通道取回几十到几百篇
-
排序
-
粗排:用小规模的模型的神经网络给召回的物品打分,然后做截断,选出分数最高的几百个物品。
-
精排:用大规模神经网络给粗排选中的几百个物品打分,可以做截断,也可以不做截断。
-
重排:对精排结果做多样性抽样,得到几十个物品,然后用规则调整物品的排序。
-
召回
用很多条召回通道,快速从几十亿篇笔记中取回几千篇笔记
召回通道:协同过滤,双塔模型,关注的作者等等,通过多个召回通道各取到几百篇笔记,在系统中对召回得到的笔记做融合和过滤,包括去重、过滤掉不喜欢的作者、不喜欢的话题等等
排序
用机器学习模型预估用户对笔记的兴趣,保留最高的笔记,为了节省计算量:用粗排和精排
粗排用较小的神经网络,做大概的打分后筛选出一部分笔记交给精排
精排用较大的神经网络,用的特征更大,做更可靠的打分
重排:考虑多样性,从几百篇获取几十篇,同时用规则打散比较相似的笔记
召回详解
-
基于物品的协同过滤(itemCF),原理是:如果用户喜欢物品1,物品1和物品2相似,那么用户很可能喜欢物品2,基于物品的相似性做推荐
-
基于用户的协同过滤(userCF),原理是:如果用户A喜欢物品1,用户A和用户B相似,那么用户B很可能喜欢物品1,基于用户的相似性做推荐
-
线上做召回:给定用户ID,通过“用户-用户”索引,找到topk相似用户,对于这些相似用户找到这些用户最近感兴趣的n个物品,这样就得到了召回的nk个相似物品,再打分,取分数最高的100个,作为召回结果
-
-
双塔模型,双塔模型有两个塔:用户塔、物品塔。两个塔各输出一个向量,作为用户、物品的表征。两个向量的內积或余弦相似度作为对兴趣的预估。
常用的离散特征编码:
-
one-hot编码(有几类数据就有几维编码)
-
embedding编码(适用于类别数量很大的时候,常用的有用户ID embedding,物品ID embedding)
向量召回通道之一:矩阵补充,本质上是对用户ID和物品ID做embedding,这个模型的输入是用户ID和物品ID,用两个embedding向量的内积预估用户对物品的兴趣,但它存在诸多缺点,所以才会有双塔模型的出现,缺点如下:
-
数据量要求大
-
计算复杂度高
-
对观测数据的噪声敏感
-
矩阵补充模型比较弱,没有使用到除了ID以外的其他物品或用户属性,双塔模型属于是一种对矩阵补充的升级
-
双塔模型的结构:
-
用embedding层将用户ID、用户离散特征(感兴趣的话题等等)变成向量,用归一化、分桶等处理用户连续特征(年龄,活跃程度),由此得到很多向量,输入到神经网络当中,得到一个结果,即该用户的表征;
-
物品的处理与用户的处理类似
-
这也就是双塔名字的由来,一个塔是用户塔,一个是物品塔
-
-
双塔模型的训练:pointwise;pairwise;listwise
-
双塔模型的线上召回过程
-
离线存储:把(物品特征向量b,物品ID)保存到向量数据库,向量数据库建立索引,以此加速最近邻查找
-
线上召回:
-
当用户发起请求的时候,给定用户ID和特征,在神经网络线上计算特征向量
-
然后以a作为query,到物品向量数据库中做检索,查找k近邻的k个数据,作为这个召回的结果
-
-
之所以将离线算物品的向量,是因为每做一次召回,就需要用到几亿物品向量,线上算物品向量的代价太大;而对于用户来说,他的兴趣动态变化,所以采取线上计算的方式以达到更好的推荐效果
-
-
双塔模型的模型更新
-
全量更新:在今天凌晨,在昨天全天的数据基础上做模型训练,训练完成后发布新的用户塔神经网络和物品向量,供线上召回使用,对系统要求不高,对时延要求也不高
-
增量更新:做在线学习 更新模型参数,以应对用户兴趣随时产生变化的情况,需要实时收集线上数据,做流式处理,然后对模型做online learning,增量更新ID embedding参数(不更新神经网络其他部分的参数),每隔几十分钟就发布用户ID embedding,供用户塔在线上计算用户向量
-
实际系统:
-
全量更新 与 增量更新相结合,一方面全量更新的模型更准确,而增量更新能更快的捕捉到用户新增的兴趣点,具体过程如下:
-
2号凌晨用1号的全量模型数据,做全量更新,随后持续不断做online learning,每隔几十分钟发布一次增量更新模型,直到3号凌晨,用2号的全量数据做全量更新,并把2号的增量更新内容扔掉,重新开始做3号当天的增量更新
-
-
-
-
其他召回通道
-
地理位置召回:考虑到用户可能对附近发生的事感兴趣,使用GeoHash对经纬度编码,索引为: GeoHash—>优质笔记列表(按时间倒排)
-
同城召回:类似于地理位置召回
-
作者召回:关注作者召回;索引为 用户—>关注的作者 + 作者—>作者的作品
-
-
本文作者:pinoky
本文链接:https://www.cnblogs.com/pinoky/p/18600661
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步