推荐系统中的召回算法--协同过滤
工业界通用推荐系统架构:
Match&Rank
定义:Match基于当前user(profile、history)和context,快速在全库中找到TopN最相关的Item,给Rank来做小范围综合多目标最大化
通常做法:通常情况下,用各种算法做召回,如:item/user/model-based CF/DNN等等,做粗排之后交由后面的Rank层做更精细的排序,最终展现TopK item.
Match 算法典型应用
猜你喜欢:多样推荐 相似推荐:看了还看 搭配推荐:买了还买
协同过滤算法介绍(Collaborative Filtering简称CF):
1、定义:
简单地来说,CF就是收集(collaborative)用户偏好信息预测(filtering)用户的兴趣
数学形式化:矩阵补全问题
分类:
CF主要包括:
基于邻域(内存、共现关系)的协同过滤---->又包括user-based CF和Item-based CF
基于模型的协同过滤(model-based CF)
2、基于共现关系的协同过滤算法
1、User-based CF :基于用户的协同过滤算法,多用于挖掘那些有共同兴趣的小团体,通常新颖性比较好,准确性稍差
2、Item-based CF:基于物品的协同过滤算法,多用于挖掘物品之间的关系,然后根据用户的历史行为来为用户生成推荐列表
相比于user-based方法,item-based的应用更加广泛
3、相似度
计算相似度主要是通过余弦距离计算
similarity(A,B) = cos(A,B) = A*B/||A||*||B||
1)有时候为了简化,会直接去掉分母,会出现哈利波特效应
(哈利波特效应是指 某个物品太热,而导致好多物品都会跟热门物品关联)
2)在大数据量的环境下,直接计算两个用户之间的相似度,会出现很多用户之间没有对相同的物品进行过行为,大部分交集为 0,为了解决此问题,需要建立每个物品对应用户的倒排表,如下图所示:
可以根据倒排表,只对有效的pair进行计算,从而简化计算
还有一个子主题的知识,看一下下图便知怎么回事,如下图所示:
4、基于ItemCF的推荐算法调用示意图:
尽量不做补足抄底,用算法补全(补足抄底是指match阶段数据不够,可能会使用热门进行补足)
match后面一般有rank和rerank的策略
5、改进Item2Item
针对之前计算Item2Item存在问题:热门用户、哈利波特效应、用户行为缺乏考虑
解决办法:热门用户降权,热门Item降权
降低热门用户影响:
缓解哈利波特效应:
综合考虑:1、用户行为差 2、热门用户降权
6、实时Item2Item
针对之前的情况会出现新品推荐问题
解决办法:实时增量Item2Item
分子:根据user,item的时间顺序流,需要更新item的pair,到存储中去
实时更新统计量
具体详见下述参考文献1
7、混合Item2Item算法框架
针对之前的情况会出现每个场景都用同样的Item2Item
解决办法:有监督混合多种Item2Item算法
1)Learning to Rank
在信息检索中,给定一个query,搜索引擎会召回一系列相关的Documents(通过关键词匹配等方法),然后需要对这些召回的Documents进行排序,最后将Top N的Documents输出。而排序问题就是使用一个模型f(q,d)来对该query下的documents进行排序,这个模型是用机器学习算法训练的模型也可以是人工设定的规则;最关注的是各个Documents之间的相对顺序关系,而不是各个Docuemnts预测分数最准确
具体详见下述参考文献2
2)Hybrid Item2Item算法框架利用Learning to Rank的思想重构Item2Item
以短视频推荐为例:
Feature:
Item Feature : video ctr、video pv、video_comment、
Trigger Feature : trigger ctr、topic ctr
Model:
自己学习各自特征的重要性
Loss:Pairwise Loss,同时优化CTR、LikeR、FavorR
Lambdamart/Neural Nets
3、基于模型协同过滤
1、SVD算法:
目标函数:
SVD存在的几个问题:1、缺失数据和观测到的数据权重相同(>99% 稀疏性) 2、没有正则项,容易过拟合
SVD具体知识可参考下述参考4
2、矩阵分解(Matrix Factorization)算法
主要改进
用latent vector来表示user和item(ID embedding)
组合关系用内积inner product(衡量user对于某一类商品的偏好)
简化SVD:
举例:u_1,u_2,i_1,i_2,构造4条样本,构造v_u,v_i矩阵
损失函数:
w_ui是样本的权重,比如可观测和不可观测的,权重不同
具体详见下述参考文献5
3、Factored Item Similarity Model(因子项相似度模型)
1)MF用UserID来表示用户,可以叫做user-based CF.(找到相似的user用于推荐)
2)用用户评价过的item表示用户,可以叫做item-based CF(找到相似的item用于推荐)
具体可参考下述参考6
4、SVD++:Fusing User-based and Item-based CF
1) MF(user-based CF)表示UserID表示用户 -> 直接映射ID到隐空间
2) FISM(item-based CF)用用户评价的item来表示用户 -> 映射items到隐空间
3) SVD++混合两种想法
具体文献详见下述参考文献7
5、Generic Feature-based Recommendation
上述说到CF的一些算法,但是CF只是用交互矩阵来构建模型,没有利用user/item属性和上下文
如下图所示:
6、FM:Factorization Machines
FM受到前面所有的分解模型的启发,每个特征都表示成embedding vector,并且构造二阶关系
FM允许更多的特征工程,并且可以表示之前所有模型为特殊的FM
只有uid,item_id,那么就相当于是MF;UserID和Item评价,相当于是SVD++
具体文献详见下述参考文献8
7、之前和现在优化loss方面的区别
之前的很多工作都在优化L2 loss:
很多内容表明:一个低MSE模型不一定代表排序模型效果好
可能的原因:均方误差和排序指标之间的分歧(排序指标AUC等);观察有偏用户总是去对喜欢的电影打分
现在大部分工作都是朝向优化pairwise ranking loss
Known as the Bayesian Personalized Ranking loss 个性化排名 优化相对顺序,而不是优化绝对值
8、淘宝搜索推荐核心系统架构(2018)
具体文章可参考下述参考9
4、深度协同过滤模型(Deep Collaborative Filtering Model)
Methods of representation learning
Methods of matching function learning
embedding 学习常用算法:
1、矩阵分解(Matrix Factorization)
2、topic model
1) embedding from topic model:
看看下面这两张图片你会明白很多东西,?
2) LDA in music recommendation:(LDA是一个无监督算法,和聚类有点类似的味道)
建模:歌曲(doc) - 歌词(word) 只看歌词可能是片面的,有时候需要加上其它的特征;用户(doc) - 歌曲(word)
应用:
相似歌曲:根据doc的topic分布计算相似度
生成歌单:每个topic下概率最大的doc
频率比较低的词学习的效果不好
3、word2vec
1)由来:
传统的N-gram统计语言模型:最大化转移概率:w = argmax P(w|History);将词看作原子单位,相互独立;不考虑词之间的相似性;效果受限于语料规模;大多数情况下语料不足,需要平滑
神经网络语言模型:最大化最大似然估计:w = argmax P(w|content);词的分布式表示:词向量;超越n-gram模型-通过上下文,即周围的环境来表示词
其它方法:
LSA:Latent Sematic Analysis 没有线性规则;LDA:Latent Dirichlet Allocation 大数据训练太慢
2)实现方法:
Skip-Ngram是根据word来预测上下文的概率P(context|word)
CBOW(continuous Bag of Words):根据context来预测word概率P(word|context)
3) 训练
Hierarchical Softmax:使用一颗二分Huffman树表示,叶子节点是单词,词频越高离根节点越低,优化计算效率O(logV)
Negative Sampling:
4)优势
不丢失信息的情况下降低维度;矩阵及向量运算便于并行;向量空间具有物理意义;可以在多个不同的维度上具有相似性
线性规则:
4、DNN(Youtobe应用)
1) embedding from DNN:
2)DNN at Google
训练training:通过分类任务学习出用户向量和视频向量,每个视频作为一个类别,观看完成是视频作为一个正例;把最后一层隐层输出作为用户向量(U+C);video embedding:pre trained to feed or training together
服务serving:输入用户向量,查询出与之向量相似度TopK高的视频
3)DNN at Google 前人的一些经验
随机负采样效果好于hierarchical soft-max
使用全量的数据而不是只使用推荐数据
每个用户生成固定数量的样本
丢弃搜索词的序列性
输入数据只使用历史信息
上面主要说一下怎么获取embedding几种方法,其实即使你模型构建好啦,来了一个人,你通过模型给他返回一个可推荐物品列表,返回topK个item,想过这个模型之后选取topK等等过程工业界是怎么实现的嘛
这个部分叫做服务serving,想想去饭店吃饭服务员怎么服务的,其实是一个道理,来一个用户你给他服务给他他最想看的几个物品
下面看一下这个部分的通用框架:
下面框图是一个参数服务器,说白啦就是一个集群,你把数据给它它分给好几个机器处理,最后汇总一下返回,优点就是大数据量的情况下可以加快速度
DB部分:考虑到这种实时的要求,会采用NoSQL存储系统:存储键值对文档,修改灵活;无join操作,操作简单,速度快
kv存储是NoSQL存储的一种,hbase:分布式、持久化、常用于大数据存储,redis:基于内存、速度快、常用于缓存
现在我接触到的存储:定时更新的库会是hbase、hive,如果涉及到实时的话更多的使用redis和ES
哈哈哈,我要去跑步啦,周末愉快~~~
参考:
1、http://net.pku.edu.cn/~cuibin/Papers/2015SIGMOD-tencentRec.pdf
2、https://www.cda.cn/uploadfile/image/20151220/20151220115436_46293.pdf
3、https://blog.csdn.net/huagong_adu/article/details/40710305
4、https://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
5、https://datajobs.com/data-science-repo/Recommender-Systems-%5BNetflix%5D.pdf
6、https://www.researchgate.net/publication/262219034_FISM_factored_item_similarity_models_for_top-N_recommender_systems
7、https://www.cs.rochester.edu/twiki/pub/Main/HarpSeminar/Factorization_Meets_the_Neighborhood-_a_Multifaceted_Collaborative_Filtering_Model.pdf
8、https://www.csie.ntu.edu.tw/~b97053/paper/Rendle2010FM.pdf
9、https://www.sohu.com/a/212035397_612370
推荐系统中的召回算法--协同过滤相关推荐
- 推荐系统中的召回算法大致梳理(非完整)
推荐系统中的召回算法大致梳理(非完整) 定义 推荐策略中的两个关键问题分别是"召回"和"排序". "召回match"是指从全量信息中触发尽可 ...
- 推荐系统实践----基于用户的协同过滤算法(python代码实现书中案例)
本文参考项亮的<推荐系统实践>中基于用户的协同过滤算法内容.因其中代码实现部分只有片段,又因本人初学,对python还不是很精通,难免头大.故自己实现了其中的代码,将整个过程走了一遍. 1 ...
- 推荐系统算法—协同过滤算法详解
文章目录 基于用户的协同过滤(UserCF) 基本思想 例子 UserCF 改进 基于物品的协同过滤(ItemCF) 基本思想 例子 ItemCF 改进 归一化 UserCF 与 ItemCF 对比 ...
- 推荐算法 itemcf java_推荐系统之基于物品的协同过滤算法(ItemCF)
推荐系统之基于物品的协同过滤算法(ItemCF) 发布时间:2018-03-04 16:55, 浏览次数:1778 , 标签: ItemCF 推荐系统之基于物品的协同过滤算法(ItemCF) 前端时间 ...
- 【干货】推荐系统中的机器学习算法与评估实战
[导读]推荐系统是机器学习技术在企业中最成功和最广泛的应用之一.本文作者结合MLMU演讲[1]的Slides,对推荐系统的算法.评估和冷启动解决方案做了详细的介绍. 作者 | Pavel Kordík ...
- 搜索推荐系统中的召回
搜索推荐系统中的召回 1. 召回简介 2. 召回指标 3. 召回策略 3.1 基于内容匹配的召回 3.2 基于协同过滤的召回 1. 召回简介 谈召回离不开搜索推荐,通过用户搜索或者系统推荐获取客户想要 ...
- 推荐系统笔记:基于模型的协同过滤
1 介绍 基于邻域的协同过滤方法可以看作是机器学习中常用的k-最近邻分类器KNN的泛化. 这些方法是基于实例的方法,因此,除了可选的预处理阶段之外,没有专门为预测预先创建模型. 推荐系统笔记:Intr ...
- 探索推荐引擎内部的秘密:深入推荐引擎相关算法 - 协同过滤
上一篇转载的博客<探索推荐引擎内部的秘密 - 推荐引擎初探>,详细讲述了推荐引擎的原理.算法.应用,并且给出了一些优化的trick,真心不错. 这里把第二篇<探索推荐引擎内部的秘密 ...
- 个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 基于用户/项目的协同过滤推荐算法 混合协同过滤推荐算法 协同过滤混合推荐算法
个性化试题推荐系统 协同过滤推荐算法在在线考试系统中的运用 一.项目开发技术及功能介绍 1.SSH开发框架(spring+struts+hibernate) 2.js.jquery.bootstrap ...
最新文章
- 你的.net 2.0 真的能与1.1 安全正确地运行在同一台电脑上吗? 小心Server Application Unavailable 错误...
- chrome使用技巧
- qemu-kvm部署虚拟机
- cp文件服务器,docker容器与物理机的文件传输—docker cp命令
- python用import xlwt出现红字_如何用python处理excel
- study notes for python
- java 线程 wait 一定要同步_java中使用wait就得使用同步锁,而且2个线程必须都使用同步代码块,否则就会异常...
- 12.12 带触发器按钮的输入框
- 使用npm uninstall卸载express无效
- 编码基本功:相似函数参数顺序要一致
- SpringCloud整合Feign的调用源码流程解析
- 高级电工电拖实训考核装置
- tensorflow2.0 numpy.ndarray 与tenor直接互转
- Python中Numpy中省略号的作用
- 2.1.2笼形天线、V形对称天线、电视发射天线
- 脉冲在matlab,脉冲时间信号MATLAB表示
- Cadence的版图绘制、DRC、LVS、PEX-以反相器为例
- BT面板创建站点显示已存在问题解决
- 【尚筹网项目】 三、【后台】 管理员信息维护
- bert-pytorch版源码详细解读
热门文章
- EF架构~单表一对多集合的插入(树型结构)
- 《HiBlogs》重写笔记[1]--从DbContext到依赖注入再到自动注入
- Windows编译OpenSSL
- MyEclipse和tomcat结合编写jsp对于中文乱码的解决方法
- PAT甲级1103 Integer Factorization (30 分):[C++题解]背包问题,DP解法
- 线段覆盖加强版(快速+贪心)
- 中国人民大学《组织行为学》_12怎样让员工快速融入群体?
- rules不显示 vue_使用stylelint规范vue项目
- Linux MySQL Connector/C++ 编程实例
- 服务器虚拟机进不了暗黑3游戏,暗黑破坏神3无法初始化 D3D的解决方法