深度推荐模型之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

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri