把原始 jsonl 用户行为序列,转成模型能直接吃的张量和特征字典
一、整体定位
- MyDataset 读取训练数据,产出:
- 用户序列 seq
- 正样本 pos
- 负样本 neg
- token 类型
- 各类特征
- 时间特征相关原始时间戳
- MyTestDataset 读取测试/推理数据,产出
- 用户序列 seq
- token 类型
- 特征
- user_id
- 时间信息
- 暴露未点击集合
- collate_fn 在 DataLoader 拼 batch 时,把"每条样本里的字典特征"整理成规则 tensor,并额外构造时间特征。
- model.py 里的 BaselineModel 再把这些 tensor 转成 embedding,送入序列模型(HSTU block)做训练/预测。
二、架构设计
MyDataset
- init:加载索引、特征表、多模态向量和 schema
- load_offsets:加载每个用户序列的文件偏移
- load_user_data:按 uid 从 seq.jsonl 随机读取一条用户序列
- random_neq:随机负采样
- getitem:把单个用户序列转成训练样本
- len:返回训练用户数
- init_feat_info:定义特征类型、默认值、统计信息
- get_time_diff_bin:把时间差映射到离散桶
- fill_missing_feat:给特征字典补默认值和多模态 emb
- collate_fn:把 batch 样本拼成 tensor,并构造时间特征
MyTestDataset
- init:加载推理集索引和特征配置
- load_data_and_offsets:加载推理集偏移
- process_cold_start_feat:把冷启动 string 特征归零
- getitem:把单个用户序列转成推理输入
- len:返回推理用户数
- collate_fn:拼 batch,并额外构造曝光未点击集合
工具函数
- save_emb:把 embedding 存成二进制文件
- load_mm_emb:加载多模态 embedding