使用词向量得到更好的类别特征的嵌入

回到2012年,当神经网络重新流行起来时,人们对不用担心特征工程就可以训练模型的可能性感到兴奋。事实上,最早的突破大多出现在计算机视觉领域,在这一领域,原始像素被用作网络的输入。

作者:Inbar Naor

编译:ronghuaiyang

导读

词向量除了用在NLP中,还可以用在类别特征的嵌入表达上,是不是很神奇,一起来看看吧!

使用词向量得到更好的类别特征的嵌入

回到2012年,当神经网络重新流行起来时,人们对不用担心特征工程就可以训练模型的可能性感到兴奋。事实上,最早的突破大多出现在计算机视觉领域,在这一领域,原始像素被用作网络的输入。

很快我们发现,如果你想使用文本数据,点击流数据,或者几乎所有带有分类特征的数据的时候,你必须问自己—我如何将我的分类特征表示为我的网络可以使用的向量?

最流行的方法是嵌入层—在网络中添加一个额外的层,它为分类特征的每个值分配一个向量。在训练过程中,网络学习不同层的权重,包括那些嵌入层。

在这篇文章中,我将展示这种方法失败的例子,介绍category2vec,这是一种使用第二个网络学习嵌入的替代方法,并将展示在主网络中使用这些嵌入的不同方法。

那么,嵌入层有什么问题吗?

嵌入层被训练以适应特定的任务—网络被训练的任务。有时候这正是你想要的。但是在其他情况下,你可能希望你的嵌入能够捕获一些关于问题领域的直觉,从而减少过拟合的风险。你可以将其视为向模型中添加先验知识,这有助于模型的泛化。

此外,如果你在相似的数据上有不同的任务,你可以使用来自一个任务的嵌入来改进另一个任务上的结果。这是深度学习工具箱中的主要技巧之一。这被称为迁移学习,预学习或多任务学习,取决于环境。其基本假设是,解释数据的许多未观察到的随机变量是跨任务共享的。因为嵌入试图隔离这些变量,所以可以重用它们。

最重要的是,将嵌入作为网络的一部分来学习会增加模型的复杂性,因为这会向模型添加许多权重,这意味着你将需要更多标记的数据来学习。

并不是说嵌入层不好,但是我们可以做得更好。让我们看一个例子。

例子:点击预测

Taboola的研究小组开发了一种算法,可以根据用户当前阅读的内容向他们推荐内容。我们可以把它看作一个点击预测问题:给定你的阅读历史,你会点击每一篇文章的概率是多少?

为了解决这个问题,我们训练深度学习模型。很自然,我们开始学习嵌入作为我们网络的一部分。

但是我们得到的很多嵌入都没有意义。

你怎么知道你的嵌入有没有意义?

最简单的方法是使用几个条目的嵌入,并查看它们的相邻的嵌入。看看它们在你的领域里相似吗?这可能很累人,而且不能给你一个总体的印象。因此,你还可以使用PCA或t-SNE来降低向量的维数,并根据特定的特性对它们进行着色。

一个项目的广告商是一个强特征,我们希望类似的广告商有类似的嵌入。但这是我们对于不同广告商训练的不同的嵌入,我们用不同的颜色来区分广告商使用的不同的语言:

使用词向量得到更好的类别特征的嵌入

有些事情显然是不对的。我的意思是,除非我们假设我们的用户是多语种的天才,他们阅读了一篇西班牙语的文章,然后毫不费力地去阅读另一篇日语的文章,否则我们可能会希望在我们的嵌入空间中,类似广告商是使用相同的语言来提供内容的。

这使得我们的模型更难解释。人心烦意乱。有些人甚至失眠。

我们能做得更好吗?

使用词向量得到更好的类别特征的嵌入

Word2Vec

如果你听说过嵌入,你可能听说过word2vec。这种方法将单词表示为高维向量,因此语义相似的单词将具有相似的向量。它有两种风格:CBOW和Skip-Gram。CBOW训练网络从上下文预测一个单词,而Skip-Gram则完全相反,它根据特定的目标单词预测上下文。

使用词向量得到更好的类别特征的嵌入

我们可以用同样的方法来提高我们广告商的嵌入吗?是的,我们…你懂的。

从Word2Vec到Category2Vec

这个想法很简单:我们对word2vec进行了用户点击历史的训练。现在,每个“句子”都是用户单击的一组广告商,我们尝试根据用户喜欢的其他广告商(“上下文”)预测特定的广告商(“单词”)。唯一的不同是,与句子不同,语序不一定重要。我们可以忽略这个事实,或者使用每个历史的排列来增强数据集。你可以将这种方法应用于任何种类的高模态分类特征,比如国家、城市、用户id等。参见此处和此处。

如此简单,却又如此有效。还记得我们之前看到的嵌入可视化吗这是它现在的样子:

使用词向量得到更好的类别特征的嵌入

好多了!所有使用相同语言的广告商都聚集在一起。

现在我们有了更好的嵌入,我们可以用它们做什么?

对不同的模型使用嵌入

首先,请注意,category2vec只是一个通用实践的示例:在task a中学习到的嵌入式应用程序用于task b。我们可以使用不同的体系结构、不同的任务,甚至在某些情况下,使用不同的数据集替换它。这是这种方法的一大优点。

在我们的模型中有三种不同的方式来使用新的嵌入:

  1. 使用新的嵌入作为新网络的特性。例如,我们可以对用户点击的所有广告商的嵌入进行平均,以表示用户历史,并使用它来了解用户的品味。这篇文章的重点是神经网络,但是你可以用任何ML算法来实现。
  2. 初始化网络中嵌入层的权重,使用我们刚刚学习的嵌入。这就像告诉网络—这是我从其他任务中知道的,现在根据当前任务调整它。
  3. 多任务学习 -使用两个网络,通过参数共享对它们进行训练。你可以强制它们共享嵌入(硬共享),或者允许它们在权重相差太大时通过“惩罚”网络(软共享)具有稍微不同的权重。这通常是通过正则化权重之间的距离来实现的。
  4. 你可以将其看作是将知识从一个任务传递到另一个任务,但也可以看作是一种正则化技术:word2vec网络充当另一个网络的正则化器,并强制它学习具有我们感兴趣的特性的嵌入式。

好了,我们重新复述一遍

有时候,我们可以通过简单地使用一些现有的方法,但是将它应用到一些新的东西上,从而获得很好的结果。我们使用word2vec为广告商创建了广告的嵌入,我们的结果比使用嵌入层获得的结果更有意义。正如我们在Taboola 中所说,有意义的嵌入=有意义的生活。

英文原文:https://engineering.taboola.com/using-word2vec-better-embeddings-categorical-features/

本文为专栏文章,来自:AI公园,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/66217.html 。

(0)
上一篇 2019-09-20 19:39
下一篇 2019-09-27 08:53

相关文章

关注我们
关注我们
分享本页
返回顶部