嵌入(embedding)的想法来自于NLP(word2vec)
在这篇文章中,我们将讨论机器学习中的两个问题:第一个问题是关于深度学习如何在图像和文本上表现良好,并且我们如何在表格数据中使用它。第二个问题是你在构建机器学习模型时必须问自己的问题:在这个数据集中,我如何处理分类变量?
令人惊讶的是,我们可以用同样的答案来回答两个问题:实体嵌入(entity embeddings)。
在许多方面,深度学习的表现都优于其他机器学习方法:图像识别、音频分类和自然语言处理只是其中的一些例子。这些研究领域都使用所谓的“非结构化数据”,即没有预定义结构的数据。一般来说,这些数据也可以作为一个序列(像素、用户行为、文本)进行组织。在处理非结构化数据时,深度学习已经成为标准。最近的一个问题是,深度学习是否也能在结构化数据上表现最好。结构化数据是以表格形式组织的数据,其中列表示不同的特性,而行代表不同的数据样本。这类似于如何在Excel表中表示数据。目前,结构化数据集的黄金标准是梯度提升树模型(Chen & Guestrin, 2016)。在学术文献中,它们总是表现得最好。最近,深度学习表明,它可以与结构化数据的这些提升树模型的性能相匹配。实体嵌入在这方面起着重要的作用。
结构化和非结构化数据
‘Deep learning is deep’
我们可以用一个向量来表示每个单词,所以“deep”这个词就变成了像是[0.20, 0.82, 0.45, 0.67]这样的变量。在实践中,一个人可以用像1 2 3 1这样的整数替换单词,并使用查找表来查找与每个整数相关的向量。这种做法在自然语言处理中非常常见,并且也被用于包括行为序列的数据。实体嵌入指的是在分类变量上使用这一原则,即一个分类变量的每一个类别都由一个向量表示。让我们快速回顾一下在机器学习中处理分类变量的两种常用方法。
嵌入大小指的是表示每个类别的向量的长度,并且可以为每个类别特性设置。与神经网络中超参数的优化过程类似,对于选择嵌入的大小没有严格的规则。在出租车距离预测任务中,研究人员使用了每个特性为10的嵌入大小。这些特性有非常不同的维度,范围从7(每周的天数)到57106(客户id)。为每个类别选择相同的嵌入大小是一种简单而透明的方法,但可能不是最优的方法。
对于Rossmann商店的销售预测任务,研究人员选择了1到M(类别的数量)-1的值,最大的嵌入大小为10。例如,每周的一天(7个值)的嵌入大小为6,而store id(1115个值)的嵌入大小为10。然而,没有明确的规则来选择1和m-1之间的大小。
Kaggle的前主席和首席科学家Jeremy Howard重建了Rossmann竞争的解决方案,并提出了以下解决方案来选择嵌入尺寸:
# c is the amount of categories per feature
embedding_size = (c+1) // 2
if embedding_size > 50:
embedding_size = 50
嵌入的优点是可以将所学到的嵌入进行可视化,以显示哪些类别是相似的。最流行的方法是t-SNE,它是一种用于维数减少的技术,可以很好地利用高维性来可视化数据集。让我们用两个快速的可视化嵌入例子来结束这篇文章。以下是家得宝(美国家居连锁店)产品及其所属类别的可视化嵌入。类似的产品,如烤箱、冰箱和微波炉,彼此非常接近。对于像充电器、电池和钻头这样的产品也是如此。
家得宝产品的嵌入
德国各州嵌入的例子