完整教程:Torch-Rechub学习笔记-task3

news/2025/10/24 13:46:14/文章来源:https://www.cnblogs.com/slgkaifa/p/19163068

完整教程:Torch-Rechub学习笔记-task3

Torch-Rechub学习笔记-task3
以下以DatawhaleTorch—Rechub组队学习的Task笔记
[项目开源地址]: https://github.com/datawhalechina/torch-rechub

推荐系统排序模型

task2中主要是对推荐场景的排序部分进行探索学习

  • 场景:排序(Ranking)
  • 模型:DeepFM、DIN
  • 数据集:Criteo、Amazon

特征交叉建模DeepFM

在这里插入图片描述

DeepFM是对 Wide & Deep 架构的直接改进和优化。它将 Wide & Deep 中需要大量人工特征工程的 Wide 部分,直接替换为了一个无需任何人工干预的 FM 模型,从而实现了真正的端到端训练。更关键的是,DeepFM 中的 FM 组件和 Deep 组件共享同一份特征嵌入(Embedding)。这带来了两大好处:模型可以同时从原始特征中学习低阶和高阶的特征交互;其次,共享 Embedding 的方式使得模型训练更加高效。

DeepFM 的结构非常清晰,它由 FM 和 DNN 两个并行的组件构成,两者共享输入。

最终,DeepFM 的总输出是 FM 部分和 Deep 部分输出的简单相加,再通过一个 Sigmoid 函数得到最终的点击率预测值。
DeepFM模型成功地结合了FM的低阶特征学习能力和深度神经网络的高阶特征学习能力。通过FM组件和深度组件共享相同的特征嵌入,模型可以同时从原始特征中学习低阶和高阶特征交互,无需像Wide & Deep那样依赖专家的特征工程。这种设计使得DeepFM成为一个端到端的自动特征学习模型,在效果和效率上都表现出色。

模型架构组成
DeepFM = Linear部分 + FM部分 + Deep部分
Linear部分(一阶特征交互)
学习特征的线性关系
等价于逻辑回归模型
FM部分(二阶特征交互)
通过向量内积建模特征间的二阶交互
解决稀疏数据下的特征交叉问题
Deep部分(高阶特征交互)
使用深度神经网络学习复杂的高阶特征交互
具备强大的非线性表达能力
核心优势
无需手工特征工程: 自动学习特征交叉,无需人工设计
同时建模低阶和高阶交互: FM处理二阶,Deep处理高阶
端到端训练: 三个部分共享embedding,联合优化
工业界验证: 在多个真实场景中取得显著效果提升
数学原理
DeepFM的预测公式为:
ŷ = sigmoid(y_linear + y_fm + y_deep)
其中:
y_linear: 一阶线性部分
y_fm: FM二阶交互部分
y_deep: 深度网络部分

部分代码截图

在这里插入图片描述
在这里插入图片描述

序列建模DIN

在这里插入图片描述

Deep Interest Network(DIIN)是2018年阿里巴巴提出来的模型,DIN的核心思想:局部激活 (Local Activation)。用户的某一次具体点击行为,通常只由其历史兴趣中的一部分所“激活”。当向一位数码爱好者推荐“机械键盘”时,真正起决定性作用的,很可能是他最近浏览“游戏鼠标”和“显卡”的行为,而不是他上个月购买的“跑鞋”。
基于此,DIN提出了一个观点:用户的兴趣表示不应该是固定的,而应是根据当前的候选广告(Target Ad)不同而动态变化的

技术实现:注意力机制
为了实现“局部激活”这一思想,DIN在模型中引入了一个关键模块——局部激活单元(Local Activation Unit),其本质就是注意力机制。如模型结构图图右侧所示,DIN不再像基准模型那样对所有历史行为的Embedding进行简单的池化,而是进行了一次“加权求和”。

这个权重(即注意力分数)的计算,体现了DIN的核心思想。

一个值得注意的细节是,DIN计算出的注意力权重wj没有经过Softmax归一化。这意味着wj不一定等于1。这样设计的目的是为了保留用户兴趣的绝对强度。例如,如果一个用户的历史行为大部分都与某个广告高度相关,那么加权和之后的向量模长就会比较大,反之则较小。这种设计使得模型不仅能捕捉兴趣的“方向”,还能感知兴趣的“强度”。

DIN(Deep Interest Network)是阿里巴巴在2018年提出的创新性CTR预估模型,专门针对电商场景中用户兴趣的多样性和动态性问题

核心创新点
  1. 注意力机制(Attention Mechanism)
    • 根据候选物品动态计算历史行为的重要性权重
    • 解决传统模型中历史行为等权重处理的问题
  2. 用户兴趣多样性建模
    • 认识到用户兴趣的多样性和动态性
    • 不同候选物品激活不同的历史兴趣
  3. 自适应激活单元(Activation Unit)
    • 设计专门的注意力网络结构
    • 学习候选物品与历史行为的相关性
模型架构组成

DIN = 基础特征 + 注意力池化的历史特征 + 候选物品特

  1. 基础特征层
    • 用户画像特征(年龄、性别、地域等)
    • 上下文特征(时间、设备等)
  2. 历史行为序列层
    • 用户历史点击/购买物品序列
    • 历史物品的类别序列
  3. 注意力机制层
    • 计算历史行为与候选物品的相关性
    • 生成动态的注意力权重
  4. 候选物品特征层
    • 当前候选物品的特征
    • 用于与历史行为计算注意力
注意力机制原理

DIN的核心是Activation Unit,其计算过程为:

attention_weight = ActivationUnit(candidate_item, history_item)
weighted_history = Σ(attention_weight * history_embedding)
应用场景优势
  • 电商推荐: 用户购买意图随商品变化
  • 内容推荐: 用户兴趣点多样且动态
  • 广告推荐: 需要精准捕获用户当前兴趣

部分代码截图

在这里插入图片描述
在这里插入图片描述

学习思考以及心得

本次Task3的两个模型都是非常经典的排序模型。DeepFM是非常通用的CTR预估任务模型,在广告点击率预估、商品推荐点击预测、商品推荐点击预测都有非常好的效果。而DIN在电商推荐场景、用户行为序列丰富也有很好的效果。在工程的实践中,对数据的缺失值和异常值处理、序列特征处理等需要特别关注。而在模型的优化上,需要在超参(Embedding维度、网络结构、学习率)和正则化(Dropout、早停等)上关注。

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

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

相关文章

日期换算(基姆拉尔森公式)

日期换算(基姆拉尔森公式) 已知年月日,求星期数。 int week(int y,int m,int d){if(m<=2)m+=12,y--;return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1; }

sersync for docker 实时同步

sersync for docker 实时同步使用 sersync 工具 放置到 docker 里 实时同步目录 # 环境数据节点 192.168.15.120 /data/kcdoc/{test.txt,test1.txt,test2.txt} 镜像节点 192.168.15.121 /data/kcdoc/空# 目的:…

最长严格/非严格递增子序列 (LIS)

最长严格/非严格递增子序列 (LIS) 一维 注意子序列是不连续的。使用二分搜索,以 \(\mathcal O(N\log N)\) 复杂度通过,另也有 \(\mathcal O(N^2)\) 的 \(\tt dp\) 解法。\(\sf dis\) \(\rm dis\) vector<int> …

动态开点线段树模板

const int M =1e5+5; struct node{int sum=0;int l=0,r=0; }tr[M*30]; #define ls(x) (tr[x].l) #define rs(x) (tr[x].r) #define sum(x) (tr[x].sum) int tot; void pull(int x){sum(x)=sum(ls(x))+sum(rs(x));} vo…

博弈2

威佐夫博弈有两堆石子,给出每一堆的石子数量,两名玩家轮流行动,每人每次任选以下规定的一种操作石子:任选一堆,取走正整数颗石子; 从两队中同时取走正整数颗石子。拿到最后一颗石子的一方获胜。双方均采用最优策…

【Python爬虫】反爬虫入门与基础(一) - 教程

【Python爬虫】反爬虫入门与基础(一) - 教程2025-10-24 13:37 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

sg

SG 游戏(有向图游戏) 我们使用以下几条规则来定义暴力求解的过程:使用数字来表示输赢情况,\(0\) 代表局面必败,非 \(0\) 代表存在必胜可能,我们称这个数字为这个局面的SG值; 找到最终态,根据题意人为定义最终态…

解决复制 Ubuntu Server 虚拟机后网络不通的问题(IP冲突问题)

参考https://www.cnblogs.com/lukecui/p/18403316环境软件/系统 版本 说明Windows windows 10 专业版 22H2 64 位操作系统, 基于 x64 的处理器VMware VMware Workstation 16 ProUbuntu ubuntu-24.04.3-live-server-amd…

postgresql查询数据sql无法使用到索引

如图,刚做过数据迁移将postgresql14中的数据及表迁移到了kingbase数据库中,但发现查询数据在一定范围内内匹配到索引,超过之后就是全表扫描  解决方法:VACUUM ANALYZE sc_surface_water_hour   在 PostgreSQL …

博弈1

巴什博奕有 \(N\) 个石子,两名玩家轮流行动,按以下规则取石子: 规定:每人每次可以取走 \(X(1 \le X \le M)\) 个石子,拿到最后一颗石子的一方获胜。 双方均采用最优策略,询问谁会获胜。两名玩家轮流报数。 规定:…

Day3综合案例一:个人简介

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

自动机

AC 自动机 定义 \(|s_i|\) 是模板串的长度,\(|S|\) 是文本串的长度,\(|\Sigma|\) 是字符集的大小(常数,一般为 \(26\)),时间复杂度为 \(\mathcal O(\sum|s_i|+|S|)\) 。 // Trie+Kmp,多模式串匹配 struct ACAut…

边缘计算与AI:移动端设计软件的实时性能突破 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

标注工具--抹除目标

恩,chatgpt帮我写的标注抹除的工具 import cv2 import numpy as np import argparse import os """ 左键拖动 框选区域 左键单击 粘贴选区 z 撤销上一次操作 c 取消当前选区 s 手动保存 n 自动保存当前…

1024程序员节福利!参与互动,5分钟赢好礼!

Hi 程序员朋友们! 敲得了代码,扛得住需求,也该在 1024 这个专属节日里,给自己拆份“技术人专属福利”啦~ 作为深耕开源数据库的 IvorySQL,今年 1024 不想搞复杂玩法——2 种方式,轻松参与,即可获得 IvorySQL 周…

具身智能/智能体 定义

1. 具身智能智能并非一个孤立于身体的大脑计算过程,而是源于身体与环境的实时交互。智能、知觉和行动是一个不可分割的整体。 一个系统必须拥有“身体”(可以是实体机器人,也可以是虚拟环境中的化身),并通过这个身…

【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)

【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

实用指南:flink批处理-水位线

实用指南:flink批处理-水位线2025-10-24 13:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

字符串模式匹配算法 KMP

子串与子序列中文名称 常见英文名称 解释子串 \(\tt substring\) 连续的选择一段字符(可以全选、可以不选)组成的新字符串子序列 \(\tt subsequence\) 从左到右取出若干个字符(可以不取、可以全取、可以不连续)组成…

Z函数(扩展 KMP)

Z函数(扩展 KMP) 获取字符串 \(s\) 和 \(s[i,n-1]\) (即以 \(s[i]\) 开头的后缀)的最长公共前缀(LCP)的长度,总复杂度 \(\mathcal O(N)\)。 vector<int> zFunction(string s) {int n = s.size();vector&l…