深度推荐模型之DeepFM

2024-01-28 10:12
文章标签 推荐 深度 模型 deepfm

本文主要是介绍深度推荐模型之DeepFM,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、FM

背景:主要解决大规模稀疏数据下的特征组合遇到的问题:1. 二阶特征参数数据呈指数增长
怎么做的:对每个特征引入大小为k的隐向量,两两特征的权重值通过计算对应特征的隐向量内积
在这里插入图片描述

而特征之间计算点积的复杂度原本为
实际应用:在推荐场景中,用户特征和物品特征可以相互组合,例如用户性别男经过onehot编码之后为[0,1],物品颜色蓝色经过onehot编码之后为[1,0],那么组合特征[用户性别=男,物品颜色=蓝]可能会很有用。此时可以用FM模型,对用户性别和物品颜色特征进行组合。

二、wide & deep

https://arxiv.org/abs/1606.07792 2016年
参考:https://blog.csdn.net/google19890102/article/details/78171283
核心思想是结合线性模型的记忆能力和DNN模型的泛化能力,从而提升整体模型性能。
wide 模型:可用线性模型如LR模型,起记忆作用,即从历史数据中发现特征之间的相关性。缺点:1.需要更多人工设计;2.可能出现过拟合;3.无法捕捉训练数据中未曾出现过的特征对。
deep模型:深度学习模型,起泛化作用,即相关性的传递,发现在历史数据中很少或者没有出现过的特征组合,寻找用户的新偏好。当user-item矩阵比较稀疏时,模型会过分泛化,即使部分user-item应该是没有关联的,但模型仍旧可以得到user-item的非零预测,导致推荐并不相关的物品,这时准确性不能得到保证。
将这两个模型结合起来可以更好地在用户的历史兴趣和探索新的兴趣点之间做到平衡。
模型结构:
在这里插入图片描述

特征处理:以文章中的场景用户app推荐为例,每一条训练数据的特征包括用户数据和曝光数据,label是用户是否下载。
wide的输入:离散特征以及离散特征之间的组合特征。
deep的输入:1. 连续特征,通过归一化到区间[0,1]后直接输入到DNN中;2.类别特征,通过词典映射成32维稠密向量,词典根据模型训练调整参数。
wide & deep联合训练,输出通过加权方式合并到一起,通过sigmoid激活函数输出。
wide部分对deep模型进行记忆能力的补充,因此小规模的交叉特征即可。

三、DeepFM

https://arxiv.org/pdf/1703.04247.pdf 2017年
在这里插入图片描述

将Deep和FM相结合。FM做特征见低阶组合,Deep部分做特征间高阶组合。
DeepFM相对于wide & deep的改进就是将wide人工建立交叉特征变为自动获取交叉特征权重,并且FM和Deep模块共享feature embedding的部分,可以更快的训练。
连续变量可以直接作为单个值输入,或者离散化作为一个向量输入。标准代码中是将它直接作为DNN的输入。

以“看点日报”优化算法为例:
输入分为如下4组:

  1. 连续型特征:这部分特征的典型代表为文章CTR,文章点赞数,评论数等。
  2. 单值离散特征,这部分将进行embedding操作,典型代表为文章分类信息,用户收入等级,学历等级等。
  3. 多值离散特征:这部分将进行加权embedding操作,典型代表为用户画像信息,假设用户有多个分类的兴趣爱好,如动漫与娱乐,在lookup table中其向量分别为v33与v3,其中动漫点击10次,娱乐点击2次,那么最终以点击加权的embedding特征为(10/12)v33+(2/12)v3
  4. 向量特征:通过PCA等手段将向量特征进行维度变换后作为embedding输入模型,典型代表为文章的TFIDF向量,用户预训练向量等。
    优化后的DeepFM主要由三部分组成,分别为
  5. FM部分:该部分接受全部的embedding特征,进行二交叉,输出结果至concat层
  6. Deep部分:该部分接受全部的embedding展开特征与连续特征,经过多层的全连接网络,输出结果至concat层
  7. Wide部分:该部分接受离散特征进行LR,将最终结果输出concat层

推荐领域中的向量召回之双塔DSSM
Deep Structured Semantic Models
LSA 潜在语义分析
分布式假设:一个单词的属性是由它所处的环境刻画的。如果两个单词在含义上比较接近,那么他们也会出现在相似的文本中,也就是说具有相似的上下文。
构建一个“单词-文档”矩阵:矩阵的每一行表示一个单词,矩阵的每一列表示一个文章,第i行第j列的值表示第i个单词在第j个段落里面出现了几次或者表示该单词的tf-idf值。
将这个矩阵基于奇艺值分解SVD:
优点:对文本特征维度降低到一个低维语义空间,减轻一词多义和一义多词问题。
缺点:无监督模型,没有利用点击信息。

DSSM 2013年

在这里插入图片描述

总体分为三层结构:输入层、表示层和匹配层。
输入层:将文本映射到低维向量空间转化成向量提供给深度学习网络。主要的技术点是Word Hashing。方法:将每个单词word表示成n-gram形式,例如将每个单词写成trigram的形式:good -> “#go”,“goo”,“ood”,“od#”。这样原本500K的vocab_size能够简化为30k的Token size。
表示层:即图中的Multi-layer nonlinear projection 和 semantic feature。
匹配层:即图中计算query和
训练方法:选择query和文档集合D,其中
应用时可以离线计算item/doc/广告的embedding,线上计算query/user的embedding,线上计算相关性。
优点:

  • 有监督,使用最大似然函数进行优化
  • 使用word-hashing方法解决大规模且稀疏的词典问题
  • 将用户的Query行为和Document映射到同一语义空间中,通过余弦相似度计算相关性。
    缺点:
  • word hash可能造成词语冲突;
  • 因为表示层用的是词袋模型BOW,不考虑词序信息,损失了上下文语序信息
  • 仅用点击来判断正负样本,没有考虑到position偏差,产生的噪声较大
    因为cos的表达是有限的,很难提取交叉特征,所以双塔还是比较适用于召回场景。
    DSSM双塔由很多种变形,例如CNN-DSSM、LSTM-DSSM,sentence BERT,其本质只在于所使用的特征抽取器的不同。

这篇关于深度推荐模型之DeepFM的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653331

相关文章

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Java中实现订单超时自动取消功能(最新推荐)

《Java中实现订单超时自动取消功能(最新推荐)》本文介绍了Java中实现订单超时自动取消功能的几种方法,包括定时任务、JDK延迟队列、Redis过期监听、Redisson分布式延迟队列、Rocket... 目录1、定时任务2、JDK延迟队列 DelayQueue(1)定义实现Delayed接口的实体类 (

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll