三言两语大话 - DPP
DPP
为什么
当用户在我们系统中点击行为比较少的时候,我们会补充一些热门特征来丰富用户画像。
所谓的热门特征,是累加了所有用户点击过的新闻特征,然后取topk得到的。
会发现,尤其对于一些细粒度的特征,头部会集中在同一语义下。为了平衡热门特征的语义多样性和热门程度,我采用了DPP 的方法。
举个例子,那比如前两天赵丽颖和冯绍峰离婚热度比较高,那么热门关键词可能都是相关事件的关键词,但是当DPP进行打散以后,排名可能就变成赵丽颖,冯绍峰,iPhone12,离婚。。。
什么是
DPP 全称是行列式点过程,行列式的几何意义是方阵中各个列向量所构成的多面体体积的平方。
为了将 DPP 应用到我们这个场景里,首先构造一个列向量 bi,是特征的语义 embedding * 特征的热度。这样构成的多面体,则当热度越大,体积越大,并且语义越不相关,即多样性越好,体积越大。最终通过求解这个方阵的最大行列式值,可以找到特征热度和多样性最大的子集,作为热门特征集合。
怎么做
直接求解优化的话比较困难,hulu 提出了一种贪婪算法,将复杂度从 O(M yyy)降到了 O(My)。其中 M 是选择的最终集合个数,y 是特征维度。
它贪婪的思想是,DPP 取 log 后的函数是满足次模函数的,意思是随着输入集合中元素的增加,收益减小。就好比,小集合与大集合增加同样一个元素,小集合带来的收益大于大集合的收益。
于是每次迭代选择收益最大的 item即可。