【经典论文阅读1】FM模型——搜推算法里的瑞士军刀

  • 全文由『说文科技』原创出品,文章同步更新于公众号『说文科技』。版权所有,翻版必究
    在这里插入图片描述

FM模型发表于2010年,它灵活好用且易部署。作者行文极其流畅,作者首先对要处理的问题进行介绍,接着作者提出FM模型,这个模型与SVM的关键区别在于FM模型在稀疏数据上具备更好的性能。FM模型的底层思想就是用特征向量(可以看出本文已经初步具备embedding的思想)的点积代替简单的权重从而得到更好的权重表示,这种思想巧妙地绕开了稀疏数据的影响。现在FM模型仍然在搜推行业上发挥作用,对于业务刚起步的公司来说,它不仅效果好,而且性能强,故大多数人称之为搜索算法里的瑞士军刀。

0. 前言

看这篇文章前,首先需要理解one-hot向量和SVM

0.1 理解one-hot向量。

其实在embedding被广泛接受之前,业界一直使用的都是one-hot向量。这个one-hot向量很好理解,举个例子来说:如果一个词表大小为7(假设词典就是:『别和捞女谈恋爱』),那么别这个字的表示就是[1,0,0,0,0,0,0]。但是使用one-hot的一个最大的缺点就是:向量太稀疏了,只有一个1,其它全是0。而业界之前的做法就是将类似词表这种特征信息作为模型的输入,所以模型就需要对稀疏值有一个很好的处理能力(,但实际上大多数模型做不到)。

0.2 熟悉SVM。

简单来说:SVM算法就是需要去构建一个超平面,这个超平面可以很好的将数据进行分类,达到的分类效果是:使得支持向量到超平面最短的距离达到最大。 如果对这段话不能理解,可以参考我之前的算法工程师面试题十之支持向量机(SVM) 进行学习。SVM在稀疏特征上的效果很差,所以才出现了本文的FM模型。

1. 摘要

FM模型,是一个将factorization model(因式分解)模型和SVM模型优点结合在一起的模型。它具备如下优点:

  • FMs are a general predictor working with any real valued feature vector.
    这意思就是说:FMs是一个通用的预测器,这个预测器的输入可以是任何真实的特征向量

  • 对于巨大稀疏值这一问题,FM模型依然可以做出交互。【这一点就是FM的关键思想】
    在这里插入图片描述

  • FMs subsume many of the most successful approaches for the task of collaborative filtering including biased MF, SVD++ [2], PITF [3] and FPMC.
    意思就是说:FMs 归纳了协同过滤任务中大多数的成功的方法:例如 biased MF,SVD++,PITF,FPMC等。

总结一下,就是如下这些优点:
在这里插入图片描述

2. 思想

下面这句话就是本文最核心的思想:
在这里插入图片描述
the FM models the interaction by factorizing it. 就是说通过因式分解的方式建模交互, 交互的过程就是通过点积实现。

3. 模型

3.1. FM 模型

下面这段表述就清楚地说明了FM模型长什么样子:
在这里插入图片描述
x i x_i xi x j x_j xj 是特征向量 x x x 的第 i i i 维和 第 j j j 维上的值。

通过式子(1),可以看出,FM模型与逻辑回归的不同之处就在于多计算了
∑ i = 1 n ∑ j = i + 1 n < v i , v j > x i x j \sum_{i=1}^{n}\sum_{j=i+1}^{n} <v_i,v_j>x_i x_j i=1nj=i+1n<vi,vj>xixj
这一部分。假设 V 3 ∗ 2 V_{3*2} V32,那么这部分就等价于: < v 1 , v 2 > x 1 x 2 + < v 1 , v 3 > x 1 x 3 + < v 2 , v 3 > x 2 x 3 <v_1,v_2>x_1 x_2 + <v_1,v_3>x_1x_3 + <v_2,v_3>x_2x_3 <v1,v2>x1x2+<v1,v3>x1x3+<v2,v3>x2x3。这么做的效果就相当于让各个特征进行充分的交互,每个交互的权值由 < x i , x j > <x_i,x_j> <xi,xj>决定。

3.2. FM模型的表达能力

在这里插入图片描述

3.3. 稀疏数据下的参数估计

在这里插入图片描述

这段话看着挺头疼的,看懂了也就明白作者说的是哪会儿事儿了。这个思想很简单就是『因式分解』,再说的详细点儿,就是用embedding间点积的思想代替以前单个值作为特征交互的权重

  • 如果直接使用权重 w A , S T = 0 w_{A,ST} = 0 wA,ST=0 表示Alice和 Star Wars间的交互,则显得过于绝对了(Alice没看过这部电影或者没评价这部电影,不代表她没情绪啊);

那么有没有好的衡量方法呢?显然是有的?如果一步做不成的事儿,那就分两步做。将第 i i i个特征都抽象成一个向量 v i v_i vi(所有的特征向量的表示就成了一个矩阵 V V V),那么用向量间的点积去表示权重,这样总会避免得到0值吧!

在这里插入图片描述

上图完美的诠释了什么叫一图胜千言。说实话,在现在这个鱼龙混杂的论文年代,看到这种非常细致,非常认真的作图的论文真的很少(至少这个作者的论文比我本人写论文画的图要好太多)。

3.4. 复杂度

经过一系列的转换计算,可以得出FM模型的复杂度是 O(kn)。详细的转换计算过程如下:
在这里插入图片描述

3.5. 损失优化

使用随机梯度下降(SGD) 的方法来更新参数值。

3.6. d-way FM模型

上面介绍FM模型时,都是将交互矩阵的维度取成2,也就是所说的2-way FM模型,那么泛化成 d-way FM模型,就是下面这样:
在这里插入图片描述

4. 效果

4.1 FM vs SVM in sparse data

在这里插入图片描述

5. 疑问

5.1. 什么是pairwise training data

也就是一个tuple = (x,y),这个tuple (x,y) 表示 x 应该 比y 的排名更靠前,可以结合下面这篇文章理解:
在这里插入图片描述

5.2. 稀疏的含义是什么?

指的就是一个向量 x 的大多数元素都是zero。下面给出了一个简单的示例:

One reason for huge sparsity is that the underlying problem deals with large categorical variable domains.
原因就是:每项特征的类别都太多了,搞成one-hot 形式就会有很多稀疏值。

5.3 为啥拿特征之间的交互?

通过文章中的表达式:
在这里插入图片描述

5.4 SVM 未能在collaborative filtering 领域发挥价值的原因是:

在这里插入图片描述
hyperplane 也就是分类的超平面;non-linear kernel 也就是让你学习过程中十分头疼的那些核方法。

5.5 复杂度里的k,n 分别表达什么?

上文中提到 k k k是交互矩阵的纬度, n n n代表输入特征向量 x x x的维度

5.6 下文中的 degree d = 2是啥意思?

在这里插入图片描述
很简单,就是指交互向量的维度。

5.7 为啥用点积模拟交互?

在这里插入图片描述
那不然用啥捏?

6. 好句分享

In the remainder of this paper, we will show the relationships between factorization machines and support vector machines as well as matrix, tensor and specialized factorization models.

in the remainder of this paper, 在文章的剩余部分…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/6430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue单页面应用和多页面应用的区别

概念&#xff1a; SPA单页面应用&#xff08;SinglePage Web Application&#xff09;&#xff0c;指只有一个主页面的应用&#xff0c;一开始只需要加载一次js、css等相关资源。所有内容都包含在主页面&#xff0c;对每一个功能模块组件化。单页应用跳转&#xff0c;就是切换…

Grad-CAM(梯度加权类激活图)

Grad-CAM&#xff08;Gradient-weighted Class Activation Mapping&#xff09;是一种可视化技术&#xff0c;用于解释卷积神经网络&#xff08;CNN&#xff09;的决策过程。它通过生成类激活图&#xff08;Class Activation Map&#xff0c;CAM&#xff09;来突出显示对网络预…

笔试强训-day17_T2 十字爆破

一、题目链接 十字爆破 二、题目描述 牛牛在玩一个游戏&#xff1a; 一共有n行m列共nm个方格&#xff0c;每个方格中有一个整数。 牛牛选择一个方格&#xff0c;可以得到和这个方格同行、同列的所有数之和的得分。 例如&#xff1a;对于一个22的方格&#xff1a; 1 2 3 4 牛牛…

Python字符串常用方法(全网最细,仅此一份)

🥇作者简介:CSDN内容合伙人、新星计划第三季Python赛道Top1 🔥本文已收录于Python系列专栏: 👉Python从入门到精通 💬订阅专栏后可私信博主进入Python学习交流群,进群可领取Python180G全栈视频教程以及Python相关电子书合集 😊私信未回可以加V:hacker0327 备注P…

Nodejs-异步并发控制

异步并发控制 在 node 中可以利用异步发起并行调用。但是如果并发量过大&#xff0c;就会导致下层服务器吃不消。 bagpipe 解决方案 解决方案 通过一个队列来控制并发量如果当前活跃的异步调用小于限定值&#xff0c;从队列中取出执行如果活跃调用达到限定值&#xff0c;调…

文心一言 VS 讯飞星火 VS chatgpt (251)-- 算法导论18.2 4题

四、假设关键字 {1&#xff0c;2&#xff0c;…&#xff0c;n} 被插入一棵最小度数为 2 的空 B 树中&#xff0c;那么最终的B树有多少个结点&#xff1f;如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; B树&#xff08;B-tree&#xff09;是一种自平衡的树&…

对于Java和mysql的时间类型不一样而引发的问题应该怎么处理

在Java和MySQL中&#xff0c;时间类型有一些不同&#xff0c;可能会导致一些问题。一种常见的情况是Java中的时间类型与MySQL中的时间类型不匹配&#xff0c;例如Java中的java.sql.Timestamp和MySQL中的TIMESTAMP类型之间的差异。这种情况下&#xff0c;可以采取以下处理方法&a…

深入探索微信小程序:图像处理与优雅预览的艺术

深入探索微信小程序&#xff1a;图像处理与优雅预览的艺术 微信小程序中的图片基础一、图片上传与压缩二、图片预览技巧三、图片处理进阶&#xff1a;Canvas与滤镜四、性能优化与最佳实践参考资料 微信小程序中的图片基础 图片资源存储&#xff1a;本地资源与网络资源的使用区…

Linux系统下设置命令的别名

给常用Docker命令起别名&#xff0c;方便我们访问&#xff1a; 第一步&#xff1a;修改/root/.bashrc文件 vi /root/.bashrc第二版&#xff1a;添加别名 # .bashrc # User specific aliases and functionsalias rmrm -i alias cpcp -i alias mvmv -i alias dpsdocker ps --f…

sql数据库——增删改

1.插入 insert into <表><字段1&#xff0c;字段2&#xff0c;字段3> values<值1&#xff0c;值2&#xff0c;值3> 2.更新/修改 update <表名> set 修改字段1值1&#xff0c;修改字段2值2&#xff0c;修改字段3值3&#xff0c; 3.删除 delete …

商务分析方法与工具(一):Python的趣味快捷-运算符、表达式与内置对象

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

【Spring】6.深入解析分布式事务:CAP理论、一致性模型与容错机制

随着业务需求的日益复杂&#xff0c;分布式系统架构已成为构建可扩展、高可用服务的主流选择。然而&#xff0c;分布式系统带来了新的挑战&#xff0c;尤其是在事务处理方面。分布式事务需要在多个服务或数据库实例间保持数据的一致性和完整性&#xff0c;这在技术实现上具有很…

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

【C++并发编程】(二)线程的创建、分离和连接

文章目录 &#xff08;二&#xff09;线程的创建、分离和链接创建线程&#xff1a;示例线程的分离&#xff08;detach&#xff09;和连接&#xff08;join&#xff09;。 &#xff08;二&#xff09;线程的创建、分离和链接 创建线程&#xff1a;示例 线程&#xff08;Thread…

docker搭建redis集群三主三从

为什么需要做分布式redis 水平扩展&#xff1a; 随着业务的发展&#xff0c;单机Redis可能无法满足日益增长的数据存储和访问需求。分布式Redis可以通过将数据分散到多个节点上来实现水平扩展&#xff0c;提高存储容量和处理能力。高可用性&#xff1a; 单点故障是任何系统的一…

C++关联容器2——关联容器特有操作

关联容器操作 除了http://t.csdnimg.cn/osoJZ 中列出的类型&#xff0c;关联容器还定义了下表中列出的类型。这些类型表示容器关键字和值的类型。 关联容器额外的类型别名 key_type此容器类型的关键字类型mapped_type每个关键字关联的类型&#xff1b;只适用于mapvalue_type对…

macOS asdf 工具版本管理器

一、区别于Homebrew "asdf"和"Homebrew"都是用于管理软件包的工具&#xff0c;但它们的主要区别在于适用范围和管理的内容&#xff1a; 1.适用范围&#xff1a; asdf&#xff1a;是一个通用的版本管理工具&#xff0c;可以用来管理多种不同的软件工具和…

结构体介绍(1)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 结构体&#xff08;1&#xff09; 前言一、struct介绍结构体声明结构体创建和初始化struct 的特殊声明结构体自引用 二、结构体内存对齐2.1.对齐规则 总结 前言 结构体 属于…

复习结构体

1.怎样使用结构体变量2.关于 . 和-> 的用法 pst -> age 会被计算机内部转化为&#xff08;*pst).age&#xff0c;这就是 ->的含义&#xff0c;是一种硬性规定 像 float 类型和 double 类型 &#xff0c;由于编码原因&#xff0c;一般都不能被精确存储 像 数字66.6在C…

【快速入门Linux】10_Linux命令—Vi编辑器

文章目录 一、vi 简介1.1 vi1.2 vim1.3查询软连接命令&#xff08;知道&#xff09; 二、打开和新建文件&#xff08;重点&#xff09;2.1 打开文件并且定位行2.2 异常处理 三、vi三种工作模式&#xff08;重点&#xff09;3.1 末行模式-命令 四、常用命令4.0 命令线路图4.1 移…