技术文档腾讯广告算法比赛项目回顾
腾讯广告算法比赛项目回顾
项目推荐系统对比学习
内容
【推荐系统】【生成式】 这是一个生成式推荐比赛:基于用户行为序列,预估其下一次点击的广告。
已尝试的方法
- 调参
- learning rate:warm up3000+cos decay
- 增大epoch 5,hidden units 64,heads 4,num_blocks 4 ==0.02235-0.02727==
- 双卡训练hidden_units=128,head4 ==0.04679->0.05483==
- 双卡训练hidden_units=128,head8,temp0.05,pre-norm True,drop out 0.3 ==0.05088->0.05875==
- 关了model dropout ==0.06779->0.07124==
- 算法大赛-baseline重构
- infer mytestdataset seq-1 ==0.05875->0.06619==
- user和seq的0init ==0.06619->0.06779==
- 速度优化(当前一个epoch 2h)
- 加入多线程:feat2tensor搬到dataset
- 向量化预制数据减少IO
- 字典操作全部放数组
- infer
- Mytestdataset
- ANN重写(加速)
- 数据
- 对比学习loss: bce -> infoNCE ==0.02727->0.04558==
- 输入的seq list做一些扰动,做点shuffle或者mask
- 做了简单的随机shuffle ==0.04757->0.04814==
- 噪声扰动 FGM PGD freelb
- emb做dropput
- 难负样本挖掘
- infoNCE->MoCo InfoNCE
- infoNCE->SimSiam
- 增大负样本数量(随机的时候多采样几条)
- 多模态数据集怎么用?
- 模型结构
- transformer ffn->SwiGLU ==0.04558->0.04732==
- SwiGLU+HSTU ==0.04732->0.04757==
- HSTU进步不大,应该是模型结构没调好,去看看
- SwiGLU+Rope 0.04814->0.04679
- Rope小小掉分,加了起点裁剪==0.04814->0.05088==
- 广告算法大赛-特征工程
- 点击侧:ctr 曝光排序,1放在前面,0放在后面
- 套ctr的框架,dcnv2
- https://www.bilibili.com/video/BV15Y4y1p7Cv/?spm_id_from=333.337.search-card.all.click&vd_source=36d7ac85fed0652f1ac894d4fa5e20f2
- 套ctr的框架,dcnv2
- 感知侧:时间月日时分桶
- 长尾数据优化
- 点击侧:ctr 曝光排序,1放在前面,0放在后面
- 重构:
- 复现duorec
- 加rdrop
- 论文:https://arxiv.org/abs/2110.05730
- github:https://github.com/RuihongQiu/DuoRec
控制变量看看模型效果 (先把FGM去了那个太慢了) V1 infoNCE, SwiGLU,ROPE,残差; 随机起点裁剪+数据扰动 数据集82 V2 infoNCE, SwiGLU,HSTU,残差; 随机起点裁剪+数据扰动 数据集82 取一个效果好的用数据集81试试
看看数据维度,理解一下原因 看看duorec
Plan
- [x] 学习率warm up
- [x] infoNCE: 正样本接近 负样本远离
- [ ] 尝试训练通rqvae流程 Semantic IDs
- [ ] 尝试他们的分析方法
- [ ] 奇艺谱分析
- [ ] Discriminability
- [ ] Similarity Transfer:embedding之间的相似度计算
ideas
数据构造
数据层面
- 如何结合曝光序列优化排序
- ndxg 算法但不是生成式
- 数据构造如何输入模型
- baseline的方法很粗糙,全部cat拼上去
- 能不能做些新的重要特征拼上去呢?(什么是重要特征?)
- 随机种子 42/3407
- 稀疏索引+分面搜索+agentic search
- 采样方法能不能改改?
多模态
- 如何用上多模态信息?
- 现在只能输入82,怎么让他输入更高?
- 选择流式或者压缩的方式
- 建索引优化IO?
- 需要理解一下embedding是什么?
模型
- 如何把模型做大?怎么提高参数量?
- 哪些参数影响模型的大小,参数重要性怎么区分?
- 当前召回模型如何加入排序这一阶段? (为什么是召回不是生成?
- 优先把召回做好?
- 模型结构怎么调?
- 在注意力那里加一个残差
loss
-
如何优化loss?
- 当前用的是bce loss 二元交叉熵损失(Binary Cross‐Entropy)
-
bce loss对正负样本学习粒度不够,扩充负样本进行学习比较有效
-
[x] 考虑别的loss?triple loss?
- 使用了infoNCEloss
-
[x] 有大佬表示训练后期出现NaN loss,我们也注意一下
- infoNCEloss归一化时分母为0,l2_normalize加个eps
推理优化
暂时还没有想法
其他
- 引入sim id:官方给了rqvae的代码,如何和现有模型结合?
- 看生成式论文
- tiger,onerec是什么? ID的生成加上特征?
- [ ] 延长训练时间到5个epoch