【推荐系统】深度学习训练框架(九):推荐系统与LLM在Dataset、Tokenizer阶段的异同

在推荐系统中,Dataset与Tokenizers(分词器)的对应关系,可以理解为 "数据管理与特征处理器" 的协作。但核心区别在于:推荐系统处理的是结构化、多元的特征,而LLM处理的是自然语言文本。

简单来说:

  • Dataset 的角色几乎不变:仍然是数据的管理者、组织者和提供者。
  • Tokenizer 的角色被"特征处理器/编码器"替代 :它们负责将各种原始特征(用户ID、电影ID、年龄、历史序列等)转换成模型可以理解的数值化向量

下表清晰地展示了这种核心映射关系和差异:

概念 NLP (文本) 推荐系统 (结构化数据)
Dataset 的职责 存储和管理(文本, 标签)对, 提供访问接口。 存储和管理(用户特征, 物品特征, 上下文, 标签)对, 提供访问接口。
核心处理单元 Tokenizer 特征处理器 (Feature Processor)
它的任务 文本字符串 转换为词元ID列表 (input_ids)。 各类原始特征 转换为数值向量/嵌入
处理对象 单一的文本序列。 多元特征:用户ID、物品ID、类别、数值、序列等。
典型输出 {'input_ids': [...], 'attention_mask': [...], ...} {'user_embedding': ..., 'item_embedding': ..., 'category': ..., 'price': ...}
核心目的 捕捉词法、句法、语义信息。 捕捉用户兴趣、物品属性、交互上下文信息。

💡 深入理解:推荐系统中的"特征处理器"

推荐系统的"特征处理器"不是一个单一模块,而是一个处理流水线,针对不同类型的特征使用不同的编码方法:

  1. 类别型特征 (如用户ID、电影ID、城市)

    • 对应关系 : 最接近NLP中的Tokenizer
    • 处理方法 : 使用 Embedding Layer
    • 过程 : 原始ID (如 user_123) → 通过查表映射为一个稠密向量。这个向量就是该ID的"嵌入",用于在向量空间中表达其潜在特征。
    • 代码体现 : 通常在模型定义中,会看到 torch.nn.Embedding(num_users, embedding_dim)
  2. 数值型特征 (如年龄、价格、评分次数)

    • 处理方法标准化/归一化 后直接输入,或也通过一个全连接层转换。
    • 过程: 原始数值 → 缩放处理 → 作为标量或向量输入模型。
  3. 序列型特征 (如用户最近点击的10个商品ID)

    • 对应关系: 类似NLP中处理一个句子。
    • 处理方法 : 先对每个ID做嵌入 ,再将得到的向量序列输入 RNN、Transformer 等序列模型来捕捉顺序兴趣。
    • 过程[item_id_1, item_id_2, ...] → 各自嵌入 → 序列模型 → 得到一个代表用户短期兴趣的向量。

📊 一个电影推荐的代码实例

以经典的MovieLens数据集为例,我们来看一个简化版的推荐系统Dataset如何工作:

python 复制代码
import torch
from torch.utils.data import Dataset
import pandas as pd
from sklearn.preprocessing import LabelEncoder, StandardScaler

class MovieLensDataset(Dataset):
    def __init__(self, df):
        self.data = df
        
        # 初始化各种"特征处理器"(替代了单一的Tokenizer)
        self.user_encoder = LabelEncoder() # 处理用户ID
        self.item_encoder = LabelEncoder() # 处理电影ID
        self.scaler = StandardScaler()     # 处理数值特征
        
        # 拟合所有处理器
        self.user_ids = self.user_encoder.fit_transform(df['userId'])
        self.item_ids = self.item_encoder.fit_transform(df['movieId'])
        self.ratings = df['rating'].values.astype('float32')
        
        # 假设我们还有用户年龄特征
        self.user_ages = self.scaler.fit_transform(df['age'].values.reshape(-1, 1)).flatten()
    
    def __len__(self):
        return len(self.data)
    
    def __getitem__(self, idx):
        # Dataset负责组织数据
        user_id = self.user_ids[idx]
        item_id = self.item_ids[idx]
        rating = self.ratings[idx]
        user_age = self.user_ages[idx]
        
        # 注意:这里返回的是"处理好的特征ID/数值",
        # 真正的嵌入转换通常在模型内部(nn.Embedding)完成。
        return {
            'user_id': torch.tensor(user_id, dtype=torch.long), # 类似input_ids,但含义单一
            'item_id': torch.tensor(item_id, dtype=torch.long),
            'user_age': torch.tensor(user_age, dtype=torch.float32), # 数值特征
            'rating': torch.tensor(rating, dtype=torch.float32) # 要预测的标签
        }

# 模型定义中会有对应的嵌入层
class RecommenderModel(torch.nn.Module):
    def __init__(self, num_users, num_items, embedding_dim=16):
        super().__init__()
        # 这些Embedding层就是特征处理的核心
        self.user_embedding = torch.nn.Embedding(num_users, embedding_dim)
        self.item_embedding = torch.nn.Embedding(num_items, embedding_dim)
        # 处理数值特征的全连接层
        self.age_fc = torch.nn.Linear(1, embedding_dim)
        
    def forward(self, batch):
        user_emb = self.user_embedding(batch['user_id']) # 将ID转为向量
        item_emb = self.item_embedding(batch['item_id'])
        age_emb = self.age_fc(batch['user_age'].unsqueeze(1))
        # 组合所有特征向量,进行预测...
        combined = user_emb + item_emb + age_emb
        return combined

🎯 总结与类比

步骤 NLP 世界 推荐系统世界
1. 原始输入 一段文本句子。 一组结构化特征(用户, 物品, 上下文)。
2. 特征处理 Tokenizer 将词转为 input_ids 各种编码器 将特征转为 ID/数值/向量
3. 模型理解 nn.Embeddinginput_ids 转为词向量。 nn.Embeddingnn.Linear 等将 特征ID/数值 转为特征向量。
4. 核心目标 捕捉语义, 完成分类/翻译等。 捕捉匹配信号, 预测用户对物品的偏好(评分/点击概率)。

本质是相同的Dataset负责数据的组织与加载 ,而"特征处理器"(替代了Tokenizer)负责将原始数据翻译成模型能理解的数学语言(向量)

如果你在构建一个具体的推荐场景(例如新闻推荐或电商推荐),我可以帮你进一步梳理其中需要哪些具体的"特征处理器"以及如何设计Dataset

相关推荐
私人珍藏库10 分钟前
[Android] 会计快题库 -财会职称考试刷题学习
android·人工智能·学习·app·软件·多功能
Sirius Wu27 分钟前
OpenClaw Skill:Matplotlib 可视化技能 + 沙箱双层隔离完整详解
服务器·网络·人工智能·安全·ai·架构·aigc
闻道且行之33 分钟前
TurboOCR:基于PP-OCRv6的极速Windows离线OCR工具,深度解析3.4GB依赖背后的技术架构
c++·人工智能·python·qt·机器学习·ocr
We0 AI35 分钟前
2026 年的 B2B 官网竞争,已经不只是页面竞争了
人工智能·aigc·#ai建站
橙臣程1 小时前
深度学习2——CNN与RNN概述
rnn·深度学习·cnn
冬奇Lab1 小时前
每日一个开源项目(第160篇):Destructive Command Guard - 在 AI Agent 运行 rm -rf 之前拦截它
人工智能·安全·开源
绝世番茄1 小时前
鸿蒙HarmonyOS ArkTS原生拖拽排序深度解析
深度学习·华为·list·harmonyos·鸿蒙
IvorySQL1 小时前
PG 日报|SQL/PGQ 图查询基于联接重写机制实现
数据库·人工智能·sql·postgresql·区块链·ivorysql
博图光电1 小时前
博图汽车零配件视觉检测与测量解决方案
人工智能·汽车·视觉检测
仿生狮子1 小时前
别再说“全栈”了,AI 时代团队只认这 5 种人
前端·人工智能·后端