Java教程

字节跳动广告召回端到端算法 - Deep Retrieval 算法

本文主要是介绍字节跳动广告召回端到端算法 - Deep Retrieval 算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

广告召回现状

现有的广告召回模型一般会分两步:

1. 首先用一个双塔模型去学习user embedding 和 ad embedding

2. 然后对于每个user embedding,用诸如HNSW、ball tree等方法召回相似向量

缺点:模型训练和向量召回是分离的,召回无法反馈到训练

 

Deep Retrieval 算法介绍

模型结构

DR的模型包含了D层,每层K个节点。每层都是一个MLP+softmax,但是如上图b所示,这些多层感知器不是连接在一起的,而是每层都输出一个概率分布。

训练样本

用(x, y)表示一个训练样本,x 表示user, y表示item(会绑定一条或多条上图中的路径)

前向传播过程

损失函数

在现实世界中一种商品往往不只属于一个类别,如蛋糕既可以属于食品也可以属于礼物,因此DR中的一个item允许对应多条path

Beam search for inference

Beam search 算法参考:https://blog.csdn.net/batuwuhanpei/article/details/64162331 在看论文Sequence to Sequence Learning with neural networks时看到了beam search算法,特此记录一下该算法的基本思想   在CS领域,beam search是一种启发式搜索,在优化领域,其属于一种最佳优先算法,最佳优先算法是一种图搜索算法,其会将所有可能的解依据启发式规则进行排序,该规则用来衡量得到的解与目标解到底有多接近。但是对于beam search与最佳优先算法有有一些地方不同,beam search只会保存一部分解作为候选解,而最佳优先算法则会将所有解都作为候选,其具体过程如下所述: beam search是使用宽度优先搜索来构建它的搜索树。在每一层,其都会生成一系列的解,然后对这些解进行排序,选择最好的K个解作为候选解,这里的K我们称为集束宽度。只有被选中的这些解可以向下继续扩展下去。因此,集束宽度越大,被裁减掉的解越少。由于存在裁减,目标解有可能会被裁减掉,因此该算法是不完全的,即无法保证能够找到全局最优解   看到一个很通俗易懂的回答回答来源(萧瑟的回答),在此也贴出一下。   在seq2seq中在test阶段使用了beam search来寻找解码时最优的结果,我们假设集束宽度为2,词典大小为3(a,b,c),那么其解码过程如下所示:   生成第1个词的时候,选择概率最大的2个词,假设为a,c,那么当前序列就是a,c; 生成第2个词的时候,我们将当前序列a和c,分别与词表中的所有词进行组合,得到新的6个序列aa ab ac ca cb cc,然后从其中选择2个得分最高的,作为当前序列,加入aa cb 后面不断重复这个过程,直到遇到结束符为止。最终输出2个得分最高的序列

Learning

Penalization

Multi-task Learning and Reranking with Softmax Models

 

1. deep retrieval 中输入的 user vec 怎么得到?

deep retrieval 还是需要一个双塔模型来辅助的,这user vec就是来自于双塔模型的user tower,那么DR模型在训练的时候会更新user tower吗?

2. DR 模型好像是无法利用到广告侧的feature的,这会影响效果吗?

这篇关于字节跳动广告召回端到端算法 - Deep Retrieval 算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!