嵌入 (embedding) 的想法来自于 NLP(word2vec)
在这篇文章中, 我们将讨论机器学习中的两个问题: 第一个问题是关于深度学习如何在图像和文本上表现良好, 并且我们如何在表格数据中使用它第二个问题是你在构建机器学习模型时必须问自己的问题: 在这个数据集中, 我如何处理分类变量?
令人惊讶的是, 我们可以用同样的答案来回答两个问题: 实体嵌入(entity embeddings)
在许多方面, 深度学习的表现都优于其他机器学习方法: 图像识别音频分类和自然语言处理只是其中的一些例子这些研究领域都使用所谓的非结构化数据, 即没有预定义结构的数据一般来说, 这些数据也可以作为一个序列 (像素用户行为文本) 进行组织在处理非结构化数据时, 深度学习已经成为标准最近的一个问题是, 深度学习是否也能在结构化数据上表现最好结构化数据是以表格形式组织的数据, 其中列表示不同的特性, 而行代表不同的数据样本这类似于如何在 Excel 表中表示数据目前, 结构化数据集的黄金标准是梯度提升树模型 (Chen & Guestrin, 2016) 在学术文献中, 它们总是表现得最好最近, 深度学习表明, 它可以与结构化数据的这些提升树模型的性能相匹配实体嵌入在这方面起着重要的作用
结构化和非结构化数据
实体嵌入
在将神经网络与结构化数据进行匹配时, 实体嵌入已经被证明是成功的例如, 在 Kaggle(大数据竞赛平台)的竞赛中, 预测出租车行驶距离的获胜的解决方案使用实体嵌入来处理每一辆车的分类元数据同样, 德国大型超市 Rossmann 预测商店销售的第三解决方案使用了一种比第一和第二解决方案更复杂的方法该团队通过使用一个简单的前馈神经网络和实体嵌入来实现这种成功这包括超过 1000 个类别的变量, 比如 store id
简而言之, 嵌入指的是向量的类别表示让我们来看看它是如何在短句中奏效的:
Deep learning is deep
我们可以用一个向量来表示每个单词, 所以 deep 这个词就变成了像是 [0.20, 0.82, 0.45, 0.67] 这样的变量在实践中, 一个人可以用像 1 2 3 1 这样的整数替换单词, 并使用查找表来查找与每个整数相关的向量这种做法在自然语言处理中非常常见, 并且也被用于包括行为序列的数据实体嵌入指的是在分类变量上使用这一原则, 即一个分类变量的每一个类别都由一个向量表示让我们快速回顾一下在机器学习中处理分类变量的两种常用方法
独热编码: 创建二进制的子特性, 如 word_deep, word_learning, word_is 这些是属于该数据点的类别为 1, 其他的则为 0 因此, 对于 deep 这个词来说, 特性 word_deep 将是 1, 特性 word_learning 和 word_is 等将是 0
标签编码: 像我们在前面的例子中那样分配整数, 所以 deep 变成 1,learning 变成 2 等等这个方法适用于基于树型结构的方法, 但不适用于线性模型, 因为它意味着所赋值的顺序
实体嵌入基本上是将标签编码方法提升到下一个级别, 不只是将一个整数赋值给一个类别, 而是整个向量这个向量可以任意大小, 必须由研究人员指定下面列出了 3 个实体嵌入的优点
1. 实体嵌入解决了独热编码的缺点具有多个类别的独热编码变量会导致非常稀疏的向量, 这在计算上效率很低, 而且很难达到优化标签编码也解决了这个问题, 但是只能被基于树型结构的模型使用
2. 嵌入式数据提供了不同类别之间距离的信息使用嵌入的美妙之处是, 在神经网络训练过程中, 分配给每个类别的向量也被训练因此, 在训练过程的最后, 我们会得到一个代表每一个类别的向量这些经过训练的嵌入式设备可以被可视化, 从而为每个类别提供深入的见解在 Rossmann 的销售预测任务中, 德国各州的可视化嵌入显示了类似的各州的地理位置的集群尽管这些地理信息都没有提供给模型
3. 经过训练的嵌入式设备可以在非深度学习模型中被保存和使用例如, 每个月都可以训练分类特性的嵌入, 并保存嵌入的特性这些嵌入可以被用来训练一个随机森林或者一个梯度提升树模型, 通过加载被学习的嵌入物来进行分类特性
选择嵌入的大小
嵌入大小指的是表示每个类别的向量的长度, 并且可以为每个类别特性设置与神经网络中超参数的优化过程类似, 对于选择嵌入的大小没有严格的规则在出租车距离预测任务中, 研究人员使用了每个特性为 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, 它是一种用于维数减少的技术, 可以很好地利用高维性来可视化数据集让我们用两个快速的可视化嵌入例子来结束这篇文章以下是家得宝 (美国家居连锁店) 产品及其所属类别的可视化嵌入类似的产品, 如烤箱冰箱和微波炉, 彼此非常接近对于像充电器电池和钻头这样的产品也是如此
家得宝产品的嵌入
另一个例子是在这篇文章中提到的 Rossmann 销售预测任务中, 德国各州的状态嵌入在嵌入中这些相邻的州接近于它们的地理位置
德国各州嵌入的例子
来源: https://cloud.tencent.com/developer/article/1043861