输入“/”快速插入内容

突破双塔

2024年4月19日修改
双塔有在线检索部署性能的优势,同时也存在一些问题:
正如之前提的,双塔分离的结构,导致用户交互简单,模型上限不高
两阶段目标不一致:双塔使用ANN based 召回范式,如LSH/HNSW等算法,本质是为了近似topk或者搜索最大内积而设计的,并不是直接优化user-item训练样本,索引构建和检索目标的优化方向不一致。
同时难以避免双塔版本不一致问题
在技术迭代上来说,我们需要探索一种复杂度相对更高,更接近全库计算的召回方式,以满足业务增长诉求下增强对于召回结果的可控性,比如对相关性、多样性、效率收益等的控制,从而在召回的有效物料的数量与质量上再上一个层级;以及在算力允许的情况下,与复杂度更高的打分模型进行可插拔式的组合。
从整体看召回,全部过程包括三个重要的模块:
1.
候选item的索引结构:如何对全库商品组织成特定的结构,加速检索过程
2.
user-item的打分模型:如何衡量u-i的相似度
3.
target item的检索算法:如何在索引结构中检索出打分最高的item集合
从这三个角度出发,有了多种突破双塔结构的探索。
1.
基于树结构的检索
1.1
TDM
阿里KDD'18的论文:Learning Tree-based Deep Model for Recommender Systems
TDM基本原理是使用树结构对全库item进行索引,然后训练深度模型以支持在树上的逐层检索,可以将检索的复杂度从O(N) 降至 O(logN) 。
树的每一个叶子节点都是一个item,非叶子节点代表item的集合。
如何实现topk检索??主要是beam search算法,如果最终需要检索出TopK个商品,只需要自顶向下的在每一层检索出当前层的TopK节点,当前层的检索集是上一层TopK节点的子节点,从这些子节点中检索出当前层的TopK节点。
如何选取某一层的topk节点??把该层的所有子节点(不是所有节点)输入兴趣建模网络,得到打分,排序取topk
如何联合树结构和兴趣网络建模??
训练样本:正样本从叶子正样本节点开始往上层回溯得到,负样本为正样本同层的节点随机采样得到。
训练目标:
训练过程:① 利用上一轮训练得到的各item emb,通过k-means建立树;② 在树上采样得到正负样本;③训练DNN网络;④训练完毕得到新embedding,返回第一步开启下一轮训练