如何采用FM进行召回
前言
FM算法大家应该比较熟悉吧,如果不熟悉的话可以看看张俊林大佬的这篇文章:https://zhuanlan.zhihu.com/p/58160982(不知道为啥,想到FM我就想到微博推荐)。看完了那我们就可以复习一下:
FM:y=w0+∑i=1nwixi+∑i=1n∑j=i+1n<vi,vj>xixjFM:y=w_0+\sum_{i=1}^{n}w_ix_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j>x_ix_jFM:y=w0+∑i=1nwixi+∑i=1n∑j=i+1n<vi,vj>xixj
但是由于我们在线上使用的时候都是使用的ID类特征,或者可以说是0-1特征。(如用户是否是男,用户是否有机器学习画像这类的0-1特征,特征维度会非常大)因此对于上面的公式我们可以修改为:
FM:y=w0+∑i=1nwi+∑i=1n∑j=i+1n<vi,vj>FM:y=w_0+\sum_{i=1}^{n}w_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j>FM:y=w0+∑i=1nwi+∑i=1n∑j=i+1n<vi,vj>
(计算的时候只会取特征为1的特征进行以上的操作)
引入
我之前一直略微了解FM算法,但是并没有实践过,在网上听说FM是召回排序全能的算法一直比较好奇,排序我懂,但是怎么进行召回呢?目前业内的模型召回都是双塔类的召回,使用生成的embedding进行向量化召回。比如常见的U2i召回,我们将所有候选物料的embedding计算出来离线建立索引,线上我们实时计算出user的embedding,然后使用user的embedding在索引内进行查找(一般我们使用Annoy索引),百万级的候选物料在微秒级内就可以查找出结果,但是FM怎么看都可不可能。不过最近仔细地学习了一点FM的相关知识才发现自己年轻。
FM中的特征一般分为四类:
1:user类特征,比如用户的画像,消费历史,用户的基本信息
2:item类的特征,一般指物品的内容理解特征,以及一些消费数据特征
3:上下文信息(时间发生的时间,地点,或者等等)
4:交叉类特征:这类交叉特征与FM中的交叉不一样,比如用户和item都有机器学习特征,我们可以做一个交叉特征是:是否含有相同的tag类特征。该类特的值为1,在用户侧和物品侧也分别会有一个特征是:是否含有机器学习tag,值为1。这种交叉类在精排模型中会有显著的效果,但是同样是不能出现在召回模型中的。
推理
此外,由于我们是人选物品,因此我们的上下文特征也可以放置在用户侧,那么我们就有:
vi{i=0......n}=[vu{i=1.....m},vk{k=m+1....n}]v_i\{i=0......n\}=[v_u\{i=1.....m\},v_k\{k=m+1....n\}]vi{i=0......n}=[vu{i=1.....m},vk{k=m+1....n}]
我们将上述FM公式的特征拆分为两部分一部分为用户侧特征,另外一部分为物品侧特征。因此上述的公式可以变为:
FM:y=w0+∑i=1nwi+∑i=1n∑j=i+1n<vi,vj>FM:y=w_0+\sum_{i=1}^{n}w_i+\sum_{i=1}^{n}\sum_{j=i+1}^{n}<v_i,v_j> FM:y=w0+i=1∑nwi+i=1∑nj=i+1∑n<vi,vj>
=>y=w0+∑u=1u=mwu+∑k=m+1k=nwk+∑i=1m∑j=i+1m<vi,vj>+∑i=m+1n∑j=i+1m<vi,vj>++∑u=1m∑k=m+1n<vu,vk>=>y=w_0+\sum_{u=1}^{u=m}w_u+\sum_{k=m+1}^{k=n}w_k+\sum_{i=1}^{ m}\sum_{j=i+1}^{m}<v_i,v_j>+\sum_{i=m+1}^{n}\sum_{j=i+1}^{m}<v_i,v_j>++\sum_{u=1}^{m}\sum_{k=m+1}^{n}<v_u,v_k>=>y=w0+∑u=1u=mwu+∑k=m+1k=nwk+∑i=1m∑j=i+1m<vi,vj>+∑i=m+1n∑j=i+1m<vi,vj>++∑u=1m∑k=m+1n<vu,vk>
将用户侧特征和item侧特征拆分放入公式得到以上的结果,既然可以拆分开来,那么我们不妨令用户侧特征为uiu_iui,物品侧的特征为viv_ivi,同时将权重www拆分w1w1w1,w2w2w2
那么上面的公式为:
FM:y=w0+∑w1+∑w2+∑∑<ui,uj>+∑∑<vi,vj>+∑∑<ui,vj>FM:y=w_0+\sum w1+\sum w2+\sum\sum<u_i,u_j>+\sum\sum<v_i,v_j>+\sum\sum<u_i,v_j>FM:y=w0+∑w1+∑w2+∑∑<ui,uj>+∑∑<vi,vj>+∑∑<ui,vj>
除w0w_0w0外上面各项代表用户特征权重,item特征权重,用户内特征交互,item内特征交互,以及用户特征与item特征的交互。
线上召回
召回的场景是在线上根据用户召回item,因此对于所有的item来说,用户特征权重和w0w_0w0以及用户内的特征交互都是相同的。因此我们需要比较的是:
用户item匹配得分=item的一阶权重+item特征的内交互+item与用户交互
注意:上面的公式∑∑<ui,vj>\sum\sum<u_i,v_j>∑∑<ui,vj>其实就是<∑ui,∑vj><\sum u_i, \sum v_j><∑ui,∑vj>,等于用户侧所有特征向量的累加于item侧所有特征向量的累加做一个dot乘积。
现在就比较清楚了:我们的用户item匹配得分为:
item一阶权重+item特征交互+dot<item向量和,用户向量和>item一阶权重+item特征交互+dot<item向量和,用户向量和>item一阶权重+item特征交互+dot<item向量和,用户向量和>
简化一下有:
匹配得分=item侧得分+dot<item向量和,用户向量和>匹配得分=item侧得分+dot<item向量和,用户向量和>匹配得分=item侧得分+dot<item向量和,用户向量和>
这样与我们的常见的embedding匹配就很接近了,我们可以:
Euser=[1,用户向量和]E_{user}=[1,用户向量和]Euser=[1,用户向量和]
Eitem=[item侧得分,item向量和]E_{item}=[item侧得分,item向量和]Eitem=[item侧得分,item向量和]
根据上述的公式,在离线计算所有item的embedding,并且建立索引,线上计算出用户的embedding就可以直接进行向量索引召回了。
以上就是FM进行embedding召回的方法了。
如何采用FM进行召回相关推荐
- 推荐系统召回四模型之全能的FM模型
作者 | 张俊林 作者简介:中国中文信息学会理事,中科院软件所博士.目前在新浪微博 AI Lab 担任资深算法专家.在此之前,张俊林曾经在阿里巴巴任资深技术专家并负责新技术团队,以及在百度和用友担任技 ...
- 从矩阵分解到FM的演进、FM如何用于召回和排序以及实现说明
本文主要包含以下内容: 1.背景 2.矩阵分解类算法 2.1 协同过滤 CF 2.2 矩阵分解 MF 2.3 逻辑回归 LR 2.4 因子分解机FM 2.5 组合模型 3.FM深入介绍 3.1 FM特 ...
- 推荐系统召回四模型之:全能的FM模型
原文地址:https://zhuanlan.zhihu.com/p/58160982?utm_source=ZHShareTargetIDMore&utm_medium=social& ...
- 如何用FM模型做召回模型
FM怎么用在召回中? 极简的模式 第一,离线训练.这个过程跟在排序阶段采用FM模型的离线训练过程是一样的,比如可以使用线上收集到的用户点击数据来作为训练数据,线下训练一个完整的FM模型.在召回阶段,我 ...
- 推荐系统技术演进趋势:召回-排序-重排
来源:DataFunTalk 导读:推荐系统技术,总体而言,与 NLP 和图像领域比,发展速度不算太快.不过最近两年,由于深度学习等一些新技术的引入,总体还是表现出了一些比较明显的技术发展趋势.这篇文 ...
- FM模型及其在推荐系统中的应用
推荐模型或者推荐场景下的排序模型,您脑子里第一个念头冒出的模型是哪个或哪几个? 如果你第一念头冒出来的仍然是SVD/矩阵分解啥的,那么明显你还停留在啃书本的阶段,实践经验不足:如果你第一念头是LR模型 ...
- 2021-06-05 推荐系统技术演进趋势:召回->排序->重排
推荐系统技术演进趋势:召回->排序->重排 实际的工业推荐系统,如果粗分的化,经常讲的有两个阶段.首先是召回,主要根据用户部分特征,从海量的物品库里,快速找回一小部分用户潜在感兴趣的物品, ...
- @#####haohaohao#####推荐系统技术演进趋势:从召回到排序再到重排
" 张俊林老师最新推荐技术总结,近乎覆盖推荐分发全链路.召回侧介绍了传统多路x2i到模型召回的发展历程以及知识图谱和GNN在其中的应用:排序侧从模型的表达能力.优化目标和特征及信息的利用三个 ...
- 新年首日涨姿势不能停:召回→排序→重排技术演进趋势深度总结
作者 | 张俊林 来源 | 深度学习前沿笔记专栏 [导读]推荐系统技术,总体而言,与NLP和图像领域比,发展速度不算太快.不过最近两年,由于深度学习等一些新技术的引入,总体还是表现出了一些比较明显的技 ...
最新文章
- 《DDIA》读书笔记(一):可靠性、可扩展性、可维护性
- php水平垂直居中,html水平垂直居中的问题
- 【随笔】JVM核心:JVM运行和类加载
- 1111 Online Map (30 分)【难度: 一般 / 知识点: Dijkstra最短路】
- 编写字符串反转函数 .
- 实验四 栈和队列的基本操作
- php如何新建xml文件,PHP新建XML打开XML读取XML怎么写
- 红旗河最早设计计算机的目的,论红旗河的利弊及其替代方案
- 在您的构建过程中添加微基准测试
- 互联网晚报 | 2月20日 星期日 | 天猫回应“改名转自营”;上汽奥迪正式进驻成都;谷爱凌在抖音开启直播首秀...
- 深度学习—大厂笔试题
- html js 选择器,h.js - dom元素选择器
- Python实例:通过字典某个关键字排序
- C# RSACryptoServiceProvider加密解密签名验签和DESCryptoServic
- Emacs Lisp基本语法(六)
- java基于springboot+vue学生考勤签到请假管理系统84y43
- Java基础视频教程
- 趣味生活,智能工业,10个仿生机械臂带你畅游电子工程师的硬核世界
- 30款硬盘有问题 细看希捷固件门事件.
- C语言qsort()函数用法总结
热门文章
- 软路由折腾记(一)openwrt
- 唐宇迪机器学习实战课程笔记(全)
- 如何去除win10此电脑(这台电脑)首页的六个文件夹?
- 数据安全三要素:机密性、完整性、身份验证
- 【ML4CO论文精读】用于组合优化的机器学习:方法论之旅(Yoshua Bengio, 2021)
- (xshell中)Linux服务器查看GPU的使用情况。
- BIDS Helper (Free)微软BI开发辅助工具--非常棒
- 基于python的数据分析系统,python数据分析经典案例
- 2. 两数相加【中等】
- TemplatesImpl在Shiro中的利用