利用深度兴趣挖掘多类别特征

发布者

在Taboola,我们的目标是预测用户是否会点击我们向他们呈现的广告。我们的模型使用各种功能,但最有趣的功能往往与用户的历史有关。了解如何使用这些功能可能会对模型的个性化功能产生巨大影响,这是由于他们所掌握的用户特定知识。

不同用户的用户历史特征差异很大;例如,一个流行的特性是用户类别-用户之前读过的主题。一个这样的列表的例子可能看起来像这样-{“体育”、“业务”,“新闻”}.这些列表中的每个值都是分类的,它们有多个条目,所以我们命名它们多分类功能。多分类列表可以拥有每个用户的任何数量 - 这意味着我们的模型必须处理非常长的列表和完全空列表(对于新用户)。

向机器学习模型提供未知长度的输入是一个需要明智解决的问题。这篇文章将指导你如何在你的神经网络中整合这些不同长度的特征,从最基本的方法一直到“深度兴趣”,即当前的技术状态。

平均

让我们继续用户类别.我们如何将一个未知长度的列表变成一个我们可以使用的固定长度的特征?最天真,但又非常流行的方法是简单地平均。我们假设有一个单独的嵌入长度d对于每个类别—以便将列表的每个值映射到Rd向量。我们可以使用平均池-平均所有用户的类别,并得到一个长度矢量d每次。更正式,如果emb (wj是嵌入的joverall这个词N单词,然后可以写入用户的平均池:

但这还远远不够完美。平均可能很有效,但当列表很长时1 / N.Factor创造一个小的最终结果;对不同的指向向量求和可能会导致它们相互抵消,并除以N使这更糟糕(如果你来自物理学/ ee背景,这应该是一个铃声,因为这与非相干集成的发生了很多。这是糟糕的,因为它伤害了用户更长的历史向量,这是我们拥有最多的信息并且可以提供更好的预测。因为这,我们(以及那些人来自阿里巴巴研究)删除1 / N.在用户历史中考虑并使用总和池,以确保可预测的客户不会对网络产生微不足道的影响。

举重,天真地

平均自动为所有元素分配相同的权重。这是我们想要的吗?让我们考虑使用此列表的用户:{'足球','网球','篮球','时尚'}.平均对他们来说将重点强调体育类别,忽略“时尚”。对于一些人来说,这将是准确的 - 对体育更感兴趣的人比时尚更感兴趣;对于其他人来说,它可能不是。我们可以做些什么来给出不同的类别不同的​​权重,以更好地描绘用户?

一个更好的解决方案是使用一些其他信息,例如:用户对每个类别的过去浏览次数(印象)。由于用户阅读一篇文章的次数与他的个人品味相关,我们可以将这些计数作为权重,并进行加权平均池。这将帮助我们区分,例如,以下两个非常不同的用户:
用户1 ={'足球':2,'网球':2,'篮球':2,'时尚':200}
用户2 ={'足球':2,'网球':2,'篮球':2,'时尚':2}

你关注吗?

我们能积累更多的信息吗?说我们不仅有数量的每个用户每一类的观点,但也像上次这一类的用户读过一篇文章,或这一类CTR(点击通过率)每个用户(意义,多少次用户读到一篇文章从这个类别的所有乘以这个类别提出了)。在没有无休止的算法A/B测试的情况下,将这些功能结合起来的最佳方法是什么?当然,答案是利用机器学习的力量,并应用一个额外的层,其工作是为每个值输出权重。这有时被称为“注意层”。这一层拥有所有可用的相关数据作为输入,并学习理想的权重来平均这些值。让我们看一个关于单个类别值“tennis”的注意子网示例。假设"网球"的嵌入是{5、0.3、5、1、4.2},用户被推荐10篇网球文章,但只点击一次,流量如下图所示:

注意层计算每个类别嵌入的重量。在上面的示例中,计算的重量为0.2。说这个用户也对“时尚”和注意层输出0.5为此类别,这个用户的历史嵌入的最终计算将是0.2 *emb(网球)+0.5 *emb(时尚)这些注意层学习如何利用我们对此用户的所有信息来计算每个类别的权重。

太棒了!但我们能做得更好吗?

介绍:深息架构

记住,我们试图预测某个用户是否会点击某个广告,那么为什么不插入一些关于当前建议广告的信息呢?假设我们有一个用户,其历史记录是{“tennis-equipment”、“童装”},我们目前的广告适用于网球拍。当然,我们希望在网球设备上更体重,忽视孩子们的这种特定情况。我们之前的注意层仅设计用于建模用户的兴趣,并且在汇集阶段期间向他建议的广告也不考虑用户个人品味之间的相互作用。在汇集之前,我们希望在汇集之前跨越该用户广告交互,以便计算更具体于向用户呈现的当前广告的权重。

为此目的,我们可以使用很深的兴趣建筑,由阿里巴巴研究的一群人在KDD2018会议上提出的工作。如果我们返回前一张插图,我们现在可以添加对用户建议的特定广告的嵌入式:

在Deep Interest中,广告特征被用作神经网络的两次输入:曾经作为输入模型本身(贡献信息向用户展示这个广告是否会导致点击),和第二次作为输入用户的历史嵌入层(优化用户的历史关注的部分相关的特定的广告)。

我们也可以用不同的方法为广告功能创建嵌入:一种方法是为上述两种情况使用相同的嵌入向量,另一种方法是为这两种情况生成两个不同的嵌入。第一种选择在训练时给予嵌入两倍的梯度,并且可能更好地收敛。在后者中,我们可以有两种不同的嵌入(比如对整个网络嵌入大小为12,对用户历史权值层嵌入大小为3)。较短的嵌入可以节省运行时服务,但增加了更多的参数到学习过程,并可能延长训练时间。这两个选项之间的选择当然取决于具体的用例。

概括

多分类特征对于各种常见问题的预测至关重要,特别是在尝试预测来自过去的交互的未来用户行为(如点击,转换)。有简单的方法来实现 - 但是为了更好的预测,我们推荐深层兴趣体系结构,因为它允许根据相关上下文进行动态加权。这种架构对许多推荐系统实现了很简单,并为许多推荐系统提供了很大的结果。去吧给它一个镜头!

今天就开始你的Taboola事业吧!