用途:FM算法可以用来做召回,排序

背景:旨在解决稀疏数据下的特征组合问题

优势:高度稀疏的数据场景具有线性计算复杂度。

原理

  • 公式
    F M : y = w 0 + ∑ i = 1 n w i x i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j F M: y=w_{0}+\sum_{i=1}^{n} w_{i} x_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}<v_{i}, v_{j}>x_{i} x_{j} FM:y=w0+i=1nwixi+i=1nj=i+1n<vi,vj>xixj

n为特征数,v为特征的隐向量,时间复杂度: O ( n 2 ) O( n^2 ) O(n2)

  • 公式推导

∑ i = 1 n ∑ j = i + 1 n ⟨ v i , v j ⟩ x i x j = 1 2 ∑ i = 1 n ∑ j = 1 n ⟨ v i , v j ⟩ x i x j − 1 2 ∑ i = 1 n ⟨ v i , v i ⟩ x i x i ] = 1 2 ( ∑ i = 1 n ∑ j = 1 n ∑ f = 1 k v i , f v j , f x i x j − ∑ i = 1 n ∑ f = 1 k v i , f v i , f x i x i ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) ( ∑ j = 1 n v j , f x j ) − ∑ i = 1 n v i , f 2 x i 2 ) = 1 2 ∑ f = 1 k ( ( ∑ i = 1 n v i , f x i ) 2 − ∑ i = 1 n v i , f 2 x i 2 ) \begin{aligned} & \sum_{i=1}^{n} \sum_{j=i+1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j} \\ =&\left.\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{j}\right\rangle x_{i} x_{j}-\frac{1}{2} \sum_{i=1}^{n}\left\langle\mathbf{v}_{i}, \mathbf{v}_{i}\right\rangle x_{i} x_{i}\right] \\ =& \frac{1}{2}\left(\sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{j, f} x_{i} x_{j}-\sum_{i=1}^{n} \sum_{f=1}^{k} v_{i, f} v_{i, f} x_{i} x_{i}\right) \\ =& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)\left(\sum_{j=1}^{n} v_{j, f} x_{j}\right)-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \\ =& \frac{1}{2} \sum_{f=1}^{k}\left(\left(\sum_{i=1}^{n} v_{i, f} x_{i}\right)^{2}-\sum_{i=1}^{n} v_{i, f}^{2} x_{i}^{2}\right) \end{aligned} ====i=1nj=i+1nvi,vjxixj21i=1nj=1nvi,vjxixj21i=1nvi,vixixi]21i=1nj=1nf=1kvi,fvj,fxixji=1nf=1kvi,fvi,fxixi21f=1k((i=1nvi,fxi)(j=1nvj,fxj)i=1nvi,f2xi2)21f=1k(i=1nvi,fxi)2i=1nvi,f2xi2

公式经过转换,时间复杂度为 O ( k n ) O( kn) O(kn)。n是特征数量,k是隐向量的维度。

FM模型做召回

FM中的特征可以分为三类:

1:user类特征,比如用户的画像,消费历史,用户的基本信息

2:item类的特征,一般指物品的内容理解特征,以及一些消费数据特征

3:上下文特征(时间发生的时间,地点,或者等等)

做召回的时候,使用user去在线检索item,因此可以将上下文特征融入到用户侧中做在线计算。统一成为用户侧特征,于是FM的特征可以分为两部分,用户侧与物料侧。

  • 公式变换
    F M : y = w 0 + ∑ i = 1 n w i + ∑ i = 1 n ∑ j = i + 1 n < v i , v j > = > y = w 0 + ∑ u = 1 u = m w u + ∑ k = m + 1 k = n w k + ∑ i = 1 m ∑ j = i + 1 m < v i , v j > + ∑ i = m + 1 n ∑ j = i + 1 m < v i , v j > + + ∑ u = 1 m ∑ k = m + 1 n < v u , v k > \begin{aligned} &F M: y=w_{0}+\sum_{i=1}^{n} w_{i}+\sum_{i=1}^{n} \sum_{j=i+1}^{n}<v_{i}, v_{j}> \\ &=>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}> \end{aligned} FM:y=w0+i=1nwi+i=1nj=i+1n<vi,vj>=>y=w0+u=1u=mwu+k=m+1k=nwk+i=1mj=i+1m<vi,vj>+i=m+1nj=i+1m<vi,vj>++u=1mk=m+1n<vu,vk>

v i { i = 0 … … n } = [ v u { i = 1 … . . m } , v k { k = m + 1 … n } ] v_{i}\{i=0 \ldots \ldots n\}=\left[v_{u}\{i=1 \ldots . . m\}, v_{k}\{k=m+1 \ldots n\}\right] vi{i=0n}=[vu{i=1..m},vk{k=m+1n}],用户侧特征和item侧特征拆分放入公式得到第一步结果,令用户侧特征为 u i u_{i} ui物品侧的特征为 v i v_{i} vi ,同时将权重w拆分w1,w2,得到最终结果。

由公式可知:各项分别代表:user特征权重,item特征权重,user特征交互,item内特征交互,以及user特征与item特征的交互。

  • 线上召回

而对于所有的item来说,user特征权重以及user内的特征交互都是相同的。因此我们需要比较的是:item特征权重,item内特征交互,以及user与item特征的交互。即:
y = ∑ w i t e m + ∑ ∑ < v i , v j > + ∑ ∑ < u i , v j > \begin{aligned} y=\sum w_{i t e m}+\sum \sum<v_{i}, v_{j}>+\sum \sum<u_{i}, v_{j}> \end{aligned} y=witem+<vi,vj>+<ui,vj>

其中 ∑ ∑ ⟨ u i , v j > 等价于 < ∑ u i , ∑ v j > \sum \sum\left\langle u_{i}, v_{j}\right>\text {等价于}<\sum u_{i}, \sum v_{j} > ui,vj等价于<ui,vj>就等于用户侧所有特征向量的累加于item侧所有特征向量的累加做一个dot乘积。

所以user侧和item侧的向量我们可以得到:
E u s e r = [ 1 , user  特征隐向量和  ] E item  = [ ∑ w i t e m + ∑ ∑ < v i , v j > , item特征隐向量和  ] \begin{gathered} E_{u s e r}=[1, \text { user } \text { 特征隐向量和 }] \\ E_{\text {item }}=\left[\sum w_{i t e m}+\sum \sum <v_{i}, v_{j}>, \text { item特征隐向量和 }\right] \end{gathered} Euser=[1,user特征隐向量和]Eitem=[witem+<vi,vj>,item特征隐向量和]

∑ ∑ < v i , v j > \sum \sum<v_{i}, v_{j}> <vi,vj> 等价于 1 2 ( ( ∑ v ) 2 − ∑ v 2 ) \frac{1}{2} \left(\left(\sum v\right)^{2}-\sum v^{2}\right) 21((v)2v2)

于是在实际应用场景中,当有一个用户进行请求时,会进行以下步骤。

  1. 实时计算用户特征,查询离线训练好的FM模型对应的特征embedding向量,然后将n个用户的特征embedding向量累加,形成用户兴趣向量U,这个向量维度和每个特征的维度是相同的。类似的,离线计算每个item其对应的特征,查询离线训练好的FM模型对应的特征embedding向量,然后将m个物品子集合的特征embedding向量累加,形成物品向量I
  2. U与I做内积,按照得分由高到低返回得分Top K的物料作为召回结果

思考

  • FM泛化能力强,适用于大规模稀疏数据的原因:

FM是学习单个特征的embedding,并不依赖某个特定的特征组合是否出现过,所以只要某个特征和其它任意特征组合出现过,那么就可以学习自己对应的embedding向量。

参考

参考链接1 参考链接2

FM算法原理及如何用来召回相关推荐

  1. FM算法原理及python实战

    一.引入FM 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接的交互作用,可能需要人工对特征进行交叉组合:非线性SVM可以对特征进行kernel映射,但是在特征高度稀疏的情况下 ...

  2. 推荐系统算法系列(一):FM算法

    一.FM算法背景 在计算广告和推荐系统中,CTR预估是非常重要的一个环节,判断一个商品的是否进行推荐需要根据CTR预估的点击率来进行. 在进行CTR预估时,除了单特征外,往往要对特征进行组合,对于特征 ...

  3. tensorflow实现FM算法

    FM算法 Tensorflow实现 Contens FM算法 Tensorflow实现 FM 算法原理 Tensorflow 实现 本节通过实现FM 算法熟悉tensorflow的使用 FM 算法原理 ...

  4. 主线1.1FM算法原理详解

    文章目录 一.FM算法原理 1.什么是FM 2.为什么引入FM(FM优势) 3.交叉项分解推导 4.权值求解(迭代更新) 5.简单总结 本文参考自:https://www.cnblogs.com/wk ...

  5. 【机器学习入门】(9) 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)附python完整代码和数据集

    各位同学好,今天我和大家分享一下python机器学习中的逻辑回归算法.内容主要有: (1) 算法原理:(2) 精确率和召回率:(3) 实例应用--癌症病例预测. 文末有数据集和python完整代码 1 ...

  6. fm算法详解_FM算法原理分析与实践

    一.简介 FM是Steffen Rendle在2010年提出的,FM算法的核心在于特征组合,以此来减少人工参与特征组合工作.对于FM,其优势可分以下三点: FM能处理数据高度稀疏场景,SVM则不能: ...

  7. PCM/FM解调原理与Matlab算法仿真

    调制的作用是将调制信息的频谱从低频搬移到高频,以适合信道传输.关于调制的原理,在上一节中已经讲过了.在这一节中,主要讲解FM的解调原理.与调制相对应的是在接收端需要解调过程将调制信息复原,所以解调是影 ...

  8. 今日头条算法原理(全文)【转】

    原文地址:https://www.toutiao.com/i6511211182064402951/?tt_from=weixin_moments&utm_campaign=client_sh ...

  9. 搜狐新闻推荐算法原理 | “呈现给你的,都是你所关心的”

    导读 在当前这个移动互联网时代,各种信息内容爆炸,面对海量数据,用户希望在有限的时间和空间内,找到自己感兴趣的内容,这就是推荐需要解决的问题.接下来主要讲解新闻推荐的算法原理. 01.新闻推荐算法架构 ...

最新文章

  1. Coursera课程Python for everyone:Quiz: Single-Table SQL
  2. 推荐优秀的SQL脚本调试工具Embarcadero DBArtisan 可以调试SQL Server 2000/2005 SQL调试工具汇总...
  3. 网站性能优化之HTTP请求过程简述!
  4. 软件开发报价的计算方法[转载]
  5. “人肉”背后隐藏的网络风险
  6. RabbitMQ 最新版安装 (Linux环境)
  7. Windows下svn服务器安装
  8. 排序----在线性时间内排序
  9. python对象的相关术语
  10. 永久更改R包的安装目录 #R语言
  11. 数字信号处理(DSP)实验——IIR数字滤波器设计与仿真
  12. 杭电 2037 经典贪心
  13. 如何录制游戏视频?游戏录制软件推荐
  14. 2012年8月 至 2014年2月1日读书列表
  15. 【期末复习】操作系统
  16. 计算机配件名称++太平洋,笔记本电脑配件大全
  17. 大陆汽车:汽车电子电器架构的发展及其对车载以太网的影响
  18. gradient设置上下渐变_CSS3 渐变
  19. 吴秀波新片《情圣2》正式撤档 片方:来日再见
  20. Vue里面使用el-cascader 级联选择器 children为空 和获取value和label问题

热门文章

  1. 普通人修谱必须读的三本书,最后一本市场买不到
  2. Quzh[python]统计元音字母——输入一个字符串,统计处其中元音字母的数量。
  3. 微型计算机硬件系统中作为载体的是什么,青书学堂: (单选题) 微型计算机硬件系统中最核心的部件是( )。...
  4. 我男朋友是个程序员# 2 之《噩梦》
  5. 公司停电,程序员去网吧写代码;iPhone 14将于北京时间9月8日发布;GitLab修复一个关键远程代码执行漏洞|极客头条...
  6. 数学:确定性的丧失---第四章 第一场灾难:真理的丧失
  7. 如何用html写好看的邮件内容
  8. iOS调取本地相册成功之后,显示的相册英文名称变成中文的解决方法
  9. 西安Java培训 | java设计模式之工厂设计模式
  10. delphi读音_delphi中获取汉字的拼音首字母