一、TorchRec里边的输入输出类型

TorchRec中的输入和输出格式


文章目录

  • TorchRec中的输入和输出格式
  • 前言
  • 一、JaggedTensor
    • 1.1 核心概念
    • 1.2 核心属性,也就是参数
    • 1.3 关键操作与方法
  • 二、KeyedJaggedTensor
    • 2.1 核心概念
    • 2.2 核心属性,也就是参数
  • 3、KeyedTensor
  • 总结


前言

  • TorchRec具有其特定的输入输出格式,跟Torch中的Tonsor有些不同,下边就让我们来了解他们。

一、JaggedTensor

  • JaggedTensor 通过长度、值和偏移量来表示稀疏特征。它之所以被称为“jagged”,是因为它可以有效地表示可变长度序列的数据。
  • 相比之下,规范的 torch.Tensor 假设每个序列具有相同的长度,但这在真实世界数据中通常不是这种情况。
  • JaggedTensor 有助于表示此类数据而无需填充,从而使其非常高效。

1.1 核心概念

  • JaggedTensor表示一个包含多个不等长序列的2D张量,例如:
    • 用户历史点击序列:[[item1, item2], [item3], [item4, item5, item6], …]
    • 文本分词后的句子:[[tokenA, tokenB], [tokenC], …]

1.2 核心属性,也就是参数

  • values (Tensor): 一个 1D 张量,包含每个实体的实际值,连续存储,形状为[total_values]
  • lengths (Optional[Tensor]): 一个整数列表,表示每个实体的元素数量,形状为[B]
  • offsets (Optional[Tensor]): 一个整数列表,表示扁平化值张量中每个序列的起始索引。这些提供了长度的替代方案。形状为[B+1]

演示代码如下:

import torch
from torchrec.sparse.jagged_tensor import JaggedTensor# 方式1 - 使用lengths
values = torch.tensor([1, 2, 3, 4, 5])
lengths = torch.tensor([2, 1, 2])  # 三个序列的长度分别为2,1,2
jt = JaggedTensor(lengths=lengths, values=values)
# 意思就是有三个张量[[1, 2],[3],[4, 5]]# 方式2 - 使用offsets
values = torch.tensor([10, 20, 30, 40])
offsets = torch.tensor([1, 3])  # 两个序列的偏移量
jt = JaggedTensor(offsets=offsets, values=values)
# 意思就是有两个张量[[10],[20, 30, 40]]

1.3 关键操作与方法

  • 操作:
    • 拼接
    torchrec.sparse.jagged_ops.concat(jt1, jt2)
    
    • 分块
    jt.split(split_size)
    
    • 聚合
    jt.sum(dim=1) 或 jt.mean(dim=1)
    
  • 方法
    • 与稠密张量互转()
    # 转Padded Tensor
    padded, mask = jt.to_padded_tensor(padding_value=0, max_length=5)
    # 转Packed Tensor (类似PyTorch的PackedSequence)
    packed = jt.to_packed_tensor()
    
    • 嵌入表查询
    # 转Padded Tensor
    embedding_bag = torch.nn.EmbeddingBag(num_embeddings=100, embedding_dim=16)
    embeddings = embedding_bag(jt.values, offsets=jt.offsets())
    

二、KeyedJaggedTensor

  • KeyedJaggedTensor 通过引入键(通常是特征名称)来标记不同的特征组(例如,用户特征和项目特征),从而扩展了 JaggedTensor 的功能。
  • 这是 EmbeddingBagCollectionEmbeddingCollectionforward 中使用的数据类型,因为它们用于表示表中的多个特征。

2.1 核心概念

  • KeyedJaggedTensor 是用于管理多个变长特征序列的高效数据结构,核心场景包括:

    • 多特征推荐系统:同时处理用户历史点击(click_ids)、搜索词(search_ids)、收藏商品(favor_ids)等不同特征

2.2 核心属性,也就是参数

  • keys (List[str]): 特征名称列表,如 [“click”, “search”]
  • values (Tensor): 一个 1D 张量,所有特征值的展平拼接,连续存储,形状为[total_values]
  • lengths (Optional[Tensor]): 一个整数列表,表示每个特征在样本中的长度,按 keys 顺序排列
  • offsets (Optional[Tensor]): 一个整数列表,表示扁平化值张量中每个特征列的起始索引。形状为[B+1]

演示代码如下:

import torch
from torchrec.sparse.jagged_tensor import KeyedJaggedTensor, JaggedTensor# 方式一:从多个JaggedTensor构建
# 创建两个特征的JaggedTensor
click_jt = JaggedTensor(lengths=torch.tensor([2, 1]),values=torch.tensor([101, 202, 303])
)
search_jt = JaggedTensor(lengths=torch.tensor([1, 3]),values=torch.tensor([401, 402, 403, 404])
)# 合并为KeyedJaggedTensor
kjt = KeyedJaggedTensor.from_jagged_tensors(keys=["click", "search"],tensors=[click_jt, search_jt]
)print(kjt)
# KeyedJaggedTensor({
#    "click": JaggedTensor([[101, 202], [303]]),
#    "search": JaggedTensor([[401], [402, 403, 404]])
# })# 方式二:从原始数据直接构建
kjt = KeyedJaggedTensor(keys=["click", "search"],values=torch.tensor([101, 202, 303, 401, 402, 403, 404]),lengths=torch.tensor([2, 1, 1, 3]),  # click_lengths + search_lengthsoffsets=None  # 自动生成
)
# 跟上边是一样的效果

3、KeyedTensor

  • torch.Tensor 的包装器,允许通过键访问张量值。

总结

  • 本节我们学习TorchRec中的数据类型,了解他的输入输出格式。

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

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

相关文章

JAVA实现在H5页面中点击链接直接进入微信小程序

在普通的Html5页面中如何实现点击URL链接直接进入微信小程序,不需要扫描小程序二维码? 网上介绍的很多方法是在小程序后台设置Schema,不过我进入我的小程序后台在开发设置里面 没有找到设置小程序Schema的地方,我是通过调用API接口…

uniapp解决上架华为应用市场审核要求-监听权限的申请

支持android平台全局监听权限的申请。当申请权限时,会在页面顶部显示申请权限的目的。主要解决上架华为应用市场审核要求:APP在调用终端权限时,应同步告知用户申请该权限的目的。 因为如果不提示,你上架应用市场会被打打回来 Tip…

文件IO5(JPEG图像原理与应用)

JPEG图像原理与应用 ⦁ 基本概念 JPEG(Joint Photographic Experts Group)指的是联合图像专家组,是国际标准化组织ISO制订并于1992年发布的一种面向连续色调静止图像的压缩编码标准,所以也被称为JPEG标准。 同样,JP…

vue3 history路由模式刷新页面报错问题解决

在使用history路由模式时刷新网页提示404错误,这是改怎么办呢。 官方解决办法 https://router.vuejs.org/zh/guide/essentials/history-mode.html

3D激光轮廓仪知识整理(待完善)

文章目录 1.原理和应用场景1.1 相机原理1.1.1 测量原理1.1.2 相机激光器1.1.3 沙姆镜头1.1.4 相机标定1.1.5 中心线提取 1.2 应用场景1.2.1 测量相关应用1.2.2 缺陷检测相关应用 2.相机参数介绍及选型介绍2.1 成像原理2.2 原始图成像2.3 生成轮廓图2.4 相机规格参数2.4.1 单轮廓…

w285药店管理系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

Google Chrome Canary版官方下载及安装教程【适用于开发者与进阶用户】

谷歌浏览器(Google Chrome)以其高性能、强扩展性和良好的用户体验深受全球用户喜爱。在其多个版本中,Chrome Canary因具备最前沿的功能测试环境,成为开发者和技术探索者的首选。如果你希望第一时间体验Google Chrome最新功能&…

RocketMQ深度百科全书式解析

​一、核心架构与设计哲学​ ​1. 设计目标​ ​海量消息堆积​:单机支持百万级消息堆积,适合大数据场景(如日志采集)。​严格顺序性​:通过队列分区(Queue)和消费锁机制保证局部顺序。​事务…

每日一题(小白)暴力娱乐篇19

样例: 6 1 1 4 5 1 4 输出: 56 66 52 44 54 64 分析题意可以得知,就是接收一串数字,将数字按照下标每次向右移动一位(末尾循环到第一位),每次移动玩计算一下下标和数字的乘积且累加。 ①接收…

如何应对“最后时刻任务堆积”(鼓包现象)

应对“最后时刻任务堆积”(鼓包现象)的方法包括:合理规划项目时间表、强化进度跟踪管理、明确任务优先级、有效的资源配置、提升团队沟通效率。其中,强化进度跟踪管理尤为关键。根据项目管理协会(PMI)的调查…

19C-19.3环境-impdp导入到view时卡死

帮客户导入一个用户时,发现VIEW部分无法进行下去 Processing object type SCHEMA_EXPORT/TABLE/IDENTITY_COLUMN Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC Processing object type SCHEMA_EXPORT/FUNCTION/FUNCTION Processing object type SCH…

一、简单的 Django 服务

一、配置虚拟环境 1.1 创建一个文件夹在导航栏输入cmd打开 1.2 安装依赖两个库 pip install virtualenv virtualenvwrapper-win -i https://pypi.tuna.tsinghua.edu.cn/simple验证是否安装成功 virtualenv --version pip show virtualenvwrapper-win 1.3 创建虚拟环境 mkvi…

道路运输安全员岗位事项有哪些?

道路运输安全员的岗位事项主要包括以下几个方面: 安全制度与计划 参与制定和完善道路运输企业的安全管理制度、安全操作规程等,确保各项安全工作有章可循。协助制定年度安全工作计划和目标,并负责组织实施和监督执行情况,定期对…

潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json

Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad 搜索dify源码 注释掉,重启容器 或者直接在容器中修改重启

工作记录 2015-08-24

工作记录 2015-08-24 序号 工作 相关人员 1 更新76.19的D:\FNEHRRD,更新的差不多了,还在测试中。具体情况见附件。 郝 识别引擎监控 Ps (iCDA LOG :剔除了204篇ASG_BLANK之后的结果): LOG_File 20150823.txt BLANK_CDA/ALL 102/947 (10.8%) TIME…

Robot---SPLITTER行星探测机器人

1 背景 先给各位读者朋友普及一个航天小知识,截止到目前为止,登陆火星的火星车有哪些?结果比较令人吃惊:当前只有美国和中国登陆过火星。 “勇气”号(Spirit):2004年1月4日,美国国家…

Python asyncio

一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序; 建立event_loop 概念,上面event_loop 可以理解为大脑,下面是若干个可执行的Task; Task 没有控制权,没有办法控制event_loop 执行某个Task,只…

Dify什么?Dify 零门槛打造专属 AI 应用

Dify 是一个专注于简化大语言模型(LLM)应用开发的开源平台,旨在帮助用户通过可视化界面和模块化工具快速构建、部署和管理 AI 驱动的应用程序。以下是其核心特点: 主要功能 可视化编排 提供直观的界面,无需深入编码即…

Hierarchical Reinforcement Learning for Course Recommendation in MOOCs论文阅读

论文1简介 标题:Hierarchical Reinforcement Learning for Course Recommendation in MOOCs 作者:Jing Zhang, Bowen Hao, Bo Chen, Cuiping Li, Hong Chen, Jimeng Sun 单位: 中国人民大学教育部数据工程与知识工程重点实验室、 中国人民大学信息学院…

零基础学Git

大家好!最近跟着网上的课程看了一下git的课,浅浅地学了一下,以下内容为作为一个小白初识git的学习历程和学习笔记!!! 1.Git概述 1.1什么是Git? 分布式版本控制系统(DVCS)&#x…