广告深度学习计算:向量召回索引的演进以及工程实现

问题定义

召回操作通常作为搜索/推荐/广告的第一个阶段,主要目的是从巨大的候选集中选出相对合适的条目,交由后链路的排序等流程进行进一步的择优。因此,召回问题本质上就是一个大规模的最值的搜索问题:

对于评分  和候选集 ,给定输入 ,寻找固定大小的  的子集 ,使得 {  , } 在 { , }尽可能靠前。

这个问题本身非常简单直接,而其核心在于其巨大的规模。通常,在阿里妈妈广告场景中,召回的候选集规模能达到千万甚至是上亿的数量级。受在线系统较为严格的延时约束,在这样规模的候选集上通过暴力搜索找出最优解显然是不现实的。

因此,我们会对候选集Z构建索引,从而对搜索过程进行剪枝。尽管某些索引会导致检索出的结果并非最优解,但好在召回问题本身对精确度的trade off容忍度较大。首先,搜索/推荐/广告本身就是非确定性的,其最优解并不能严格定义;其次,后链路还会进行进一步择优,召回结果只要做到尽可能包含后链路的最优解,也就是保证召回率即可。

本文将介绍阿里妈妈广告召回索引的演进过程,以及在这一过程中的工程解决方案。

1.分区索引(量化索引)

这种构建索引的方式是最直接的。简单来说,就是在每个维度上进行量化,从而把整个向量空间划分成若干个不同的分区。这样可以将向量划归到不同的分区,在需要进行剪枝时,可以先根据分区进行筛选:首先粗略地挑选出若干分区,再将归属于这几个分区的向量挑选出来进行详细的计算与排序。由此可以避免计算候选集中的全部向量。

如下图所示:对于寻找最近欧几里得距离向量的问题,在一个二维的向量空间上,我们对每个维度量进行5等分的量化,从而将整个空间划分成25个分区。对于输入向量 z,我们可以首先筛选出分区{B2, B3, B4, C2, C3, C4, D2, D3, D4},然后对这几个分区中的{c, d, e, h, i, k, l, m}这8个向量进行距离计算和排序,相比于全局的比较搜索的21个向量,计算量缩小了2.6倍。

7a7ad5b87b8aaaaf549592499cd7836a.png

这种量化索引被广泛运用于传统的向量检索引擎,例如faiss/proxima。这种索引对于平均分布的低维向量上针对距离的检索效果很好,但同时存在几个问题。首先是对于非平均分布的向量集,可能需要非均匀的量化策略,一方面增加了复杂性,一方面也未必有很好的效果;其次,对于比距离函数更复杂的评分函数,很难找到分区于函数结果之间的相关关系,很难做剪枝算法;最后,对于高维的向量,还存在高维稀疏的问题,导致分区数量远远大于实际向量的个数。举个例子,我们NANN模型中广告向量位128维,即使我们每个维度只进行2分,就有2^128个分区,远大于数百万的向量个数,导致其实很多分区里是没有向量的。为了解决这个问题需要对向量空间进行降秩,而降秩算法本身又引入了新的更复杂的问题。

2.树状索引

为了规避量化索引的种种弊端,我们在TDM模型中采取用了树状索引。量化方法最主要的思想是要分类(分治),而它的弊端主要是来自于天然向量空间的限制。为了突破这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值