码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机


    一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机

    提示:最近系统性地学习推荐系统的课程。我们以小红书的场景为例,讲工业界的推荐系统。
    我只讲工业界实际有用的技术。说实话,工业界的技术远远领先学术界,在公开渠道看到的书、论文跟工业界的实践有很大的gap,
    看书学不到推荐系统的关键技术。
    看书学不到推荐系统的关键技术。
    看书学不到推荐系统的关键技术。

    王树森娓娓道来**《小红书的推荐系统》**
    GitHub资料连接:http://wangshusen.github.io/
    B站视频合集:https://space.bilibili.com/1369507485/channel/seriesdetail?sid=2249610

    基础知识:
    【1】一文看懂推荐系统:概要01:推荐系统的基本概念
    【2】一文看懂推荐系统:概要02:推荐系统的链路,从召回粗排,到精排,到重排,最终推荐展示给用户
    【3】一文看懂推荐系统:召回01:基于物品的协同过滤(ItemCF),item-based Collaboration Filter的核心思想与推荐过程
    【4】一文看懂推荐系统:召回02:Swing 模型,和itemCF很相似,区别在于计算相似度的方法不一样
    【5】一文看懂推荐系统:召回03:基于用户的协同过滤(UserCF),要计算用户之间的相似度
    【6】一文看懂推荐系统:召回04:离散特征处理,one-hot编码和embedding特征嵌入
    【7】一文看懂推荐系统:召回05:矩阵补充、最近邻查找,工业界基本不用了,但是有助于理解双塔模型
    【8】一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
    【9】一文看懂推荐系统:召回07:双塔模型——正负样本的选择,召回的目的是区分感兴趣和不感兴趣的,精排是区分感兴趣和非常感兴趣的
    【10】一文看懂推荐系统:召回08:双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新
    【11】一文看懂推荐系统:召回09:地理位置召回、作者召回、缓存召回
    【12】一文看懂推荐系统:排序01:多目标模型
    【13】一文看懂推荐系统:排序02:Multi-gate Mixture-of-Experts (MMoE)
    【14】一文看懂推荐系统:排序03:预估分数融合
    【15】一文看懂推荐系统:排序04:视频播放建模
    【16】一文看懂推荐系统:排序05:排序模型的特征
    【17】一文看懂推荐系统:排序06:粗排三塔模型,性能介于双塔模型和精排模型之间


    提示:文章目录

    文章目录

    • 一文看懂推荐系统:特征交叉01:Factorized Machine (FM) 因式分解机
    • Factorized Machine (FM) 因式分解机
    • 总结


    Factorized Machine (FM) 因式分解机

    前面的文章介绍了召回和排序模型,这节后面内容是特征交叉,在召回和排序中都会用到。

    这节介绍最基础的factory machine缩写是FM。

    几年前FM在召回和排序中都很常用,但是现在FM已经不太常用了,

    但大家不妨了解一下FM的思想,知道某些年特征交叉是怎么做的。

    在讲FM之前,我先讲一下线性模型,
    在这里插入图片描述

    设模型用到第一个特征,用D位向量X表示。

    用下标表示向量中的元素,这是个线性模型,
    在这里插入图片描述

    公式中的B是偏移项,英文叫做bias。
    第二项是对D个特征的连加,其中的W下标I表示每个特征的权重。
    把线性模型的输出记作P,它是对目标的预估。

    为了方便,这里我没有用激活函数。

    如果做二分类,可以用sigmoid激活函数,这个线性模型有D加一个参数,We到WD是权重,D是偏移项。

    不难看出,线性模型的预测是特征的加权和。

    这个特征X1到XD只有相加,没有相乘,也就是说特征之间没有交叉。

    在推荐系统的应用中,特征交叉是很有必要的,可以让模型的预测更准确。
    在这里插入图片描述

    这个公式用到了二阶交叉特征,这两项跟前面一样,就是个简单的线性模型,

    区别在后面,这里的Xi乘以XJ是两个特征的交叉,前面的u下标ij是权重,
    这种特征交叉的话,两个特征不仅仅能相加,还能相乘,这样可以提升模型的表达能力。

    举个例子,假设特征是房屋的大小,还有周边楼盘每平米的单价
    目标是估计房屋的价格,
    仅仅用房屋的大小和每平米的单价的加权和是估不准房屋价格的。
    如果做特征交叉,让房屋大小和每平米单价这两个特征相乘,就能把房价估的很准,
    这就是为什么交叉特征有用。

    如果有这个特征,那么模型参数量正比于d 平方,
    大多数的参数是交叉特征的权重u,如果d比较小,这样的模型没有问题,
    但如果d很大,那么参数数量就太大了,计算代价会很大,而且容易出现over fitting。

    接下来我们讨论如何减少参数数量,我们重点关注交叉特征的权重,

    小u可以把所有的权重小u ij组成矩阵大U
    在这里插入图片描述

    小u ij是大U的第I行第j列上的一个元素。

    矩阵大U有d行和d列,d是参数的数量大,U是个对称矩阵,
    可以对矩阵大U做低值近似,用矩阵大V乘以大V转置
    来近似矩阵大U
    在这里插入图片描述

    矩阵大V有d行,跟大U一样,
    大V有k列,k远小于d,K是个超参数,由我们自己设置,k越大,大V乘以大V转置就越接近矩阵大U。

    我们看一下权重小u ij,可以把它近似成Vi和Vj的内积。
    在这里插入图片描述

    我在图中标注一下,uij是矩阵大U的第i行,第j列上的元素,Vi是矩阵V的第i行,Vj是矩阵大V的第j行。

    小u ij约等于这两个向量的内积,

    把交叉特征的权重小u ij近似成向量vi和vj的内积,
    那么模型就变成了下面的factories machine
    在这里插入图片描述

    唯一的区别就是在这里FM用向量vi和vj的内积作为交叉特征的权重,

    FM的参数数量是取成大V的大小等于bogO of kd。【数据结构中的复杂度表示方法】

    k是超参数,远比d小

    FM的好处在于参数数量更少,从big O of d square降低到了big O of kd,这样使得推理的计算量更小,而且不容易出现过拟合。

    FM的原理很简单,我已经讲完了。

    最后总结一下,FM是线性模型的替代品,凡是能用线性回归、逻辑回归的场景都可以用FM
    就是在线性模型后面加上交叉项。
    在这里插入图片描述

    FM使用二阶交叉特征,因此模型的表达能力比线性模型更强,
    尤其是在推荐系统中,交叉特征非常有用。
    FM的效果显著比线性模型好,简单粗暴。
    使用二阶交叉特征的话,参数数量是be goto square d。

    特征数量FM的好处在于减少了参数数量,通过把小u ij近似为向量ui和vj的内积
    FM把参数数量从big O of d square降低到了big O of kd

    FM是上面那篇2010年论文提出的。

    在那个时代,早期的推荐系统通常使用逻辑回归预估点击率。
    在逻辑回归中用FM做特征交叉,在推荐系统中效果很好,流行了很长一段时间。

    我的感觉是,现在FM在工业界推荐系统中已经过时了,我不清楚其他公司是不是还在用FM,反正我们小红书的召回排序早就下掉了FM。


    总结

    提示:如何系统地学习推荐系统,本系列文章可以帮到你

    (1)找工作投简历的话,你要将招聘单位的岗位需求和你的研究方向和工作内容对应起来,这样才能契合公司招聘需求,否则它直接把简历给你挂了
    (2)你到底是要进公司做推荐系统方向?还是纯cv方向?还是NLP方向?还是语音方向?还是深度学习机器学习技术中台?还是硬件?还是前端开发?后端开发?测试开发?产品?人力?行政?这些你不可能啥都会,你需要找准一个方向,自己有积累,才能去投递,否则面试官跟你聊什么呢?
    (3)今日推荐系统学习经验:现在FM在工业界推荐系统中已经过时了

  • 相关阅读:
    Java 对象的揭秘
    千兆以太网网络层 ARP 协议的原理与 FPGA 实现
    成功转行软件测试感受,一个从业3年的过来人告诉你
    数据结构--7.2.1排序算法(冒泡、直接选择、直接插入)
    Linux操作
    前端开发技术栈(工具篇):2023深入了解webpack的安装和使用以及核心概念和启动流程(详细) 63.3k stars
    C/C++选择题好题分享
    肖sir__mysql之子查询语句__006
    python实现UI自动化配置谷歌浏览器驱动
    小程序判断是否授权位置信息和手动授权
  • 原文地址:https://blog.csdn.net/weixin_46838716/article/details/126477715
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号