技术文档腾讯广告算法比赛项目回顾

腾讯广告算法比赛项目回顾

项目推荐系统对比学习
内容

【推荐系统】【生成式】 这是一个生成式推荐比赛:基于用户行为序列,预估其下一次点击的广告。

已尝试的方法

  • 调参
    • 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
    • 感知侧:时间月日时分桶
    • 长尾数据优化
  • 重构:
  • 复现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