天天看点

【转】embedding概念理解1、分类数据矢量化2、Embedding3、Obtaining Embeddings(获取embedding)

原文来自google developer的机器学习入门课程。主要觉得有几个点,很能说明embedding的本质,以及为什么要用embedding来做矢量化。以下我对原文做了我需要的信息的摘录,需要阅读原文的请自行去google developer上查看。

1、分类数据矢量化

分类数据是指表示来自有限选择集的一个或多个离散项的输入特征。分类数据最直接的是通过稀疏张量(sparse tensors)表示,即one-hot编码实现矢量化。

但one-hot编码实现的分类数据向量化,有两个问题使得机器学习不能有效学习。主要问题是构造的ont-hot vector太大以及vector之间距离刻画问题。

问题一one-hot vector太大,在深度学习中,巨大的输入向量意味着神经网络的超大数量的权重。 如果你的词汇表中有M个单词,并且输入上的网络的第一层中有N个节点,则您需要使用MxN个权重来训练该层。 大量的权重会导致进一步的问题:

  1. 数据量:模型中的权重越多,有效训练需要的数据就越多。
  2. 计算量:权重越多,训练和使用模型所需的计算量就越多。 很容易超出硬件的能力。

问题二向量间缺少有意义的关系。如果将RGB通道的像素值提供给图像分类器,那么谈论“相近”值是有意义的。 略带红色的蓝色接近纯蓝色,无论是在语义上还是在向量之间的几何距离方面。 但是对于索引1247的1的向量表示的“马”,与索引50,430为1的向量表示的“羚羊”的关系不比索引238为1表示的向量“电视”的更接近。

我们需要足够大的维度来编码丰富的语义关系,同时又想要一个足够小的向量空间,以便能够更快地训练系统。

解决方案:embedding

这些问题的解决方案是使用embedding,embedding将大型稀疏向量转换为保留语义关系的低维空间。 我们将在本单元的以下部分中直观地、概念上地和编程式地探索embedding。

2、Embedding

将高维数据映射到较低维空间来解决稀疏输入数据的核心问题。即第一解决了向量空间高维度的问题,第二赋予了单词间几何空间距离大小的实际意义。

向量空间中的位置(距离和方向)可以把语义编码到一个好的embedding中。 例如,以下真实的embedding可视化显示了捕获的语义关系,如国家与其首都之间的几何关系:

【转】embedding概念理解1、分类数据矢量化2、Embedding3、Obtaining Embeddings(获取embedding)

这种有意义的空间为机器学习系统提供了检测可能有助于学习任务的机会。

Embeddings as lookup tables(embedding看作查表)

embedding是一种矩阵,其中每列是与词汇表中的item对应的向量。 要获取单个词汇item的稠密向量,就检索与该item对应的列。可以参照tensorflow中的tf.nn.embedding_lookup函数。

但你怎么转换一堆稀疏的词袋(bag of words)向量? 要获得表示多个词汇item(例如句子或段落中的所有单词)的稀疏向量的稠密向量,可以检索每个单独item的embedding,然后将它们相加。

如果稀疏向量包含词汇项的计数,则可以将每个embedding乘以其相应项的计数,然后再相加。

Embedding lookup as matrix multiplication(查找看作矩阵乘法)

我们刚才描述的查找、乘法和加法过程等同于矩阵乘法。 给定1×N稀疏表示S和N×M的embedding表E,矩阵乘法S X E给出1×M稠密向量。

但是你怎么在第一时间得到E? 我们将在下一节中介绍如何获取embedding。

3、Obtaining Embeddings(获取embedding)

有许多方法可以实现embedding,包括在Google创建的最先进的算法。

Standard Dimensionality Reduction Techniques(标准降维技术)

有许多用于捕获低维空间中的高维空间的重要结构的现有数学技术。 理论上,这些技术中的任何一种都可用于为机器学习系统创建embedding。

例如,主成分分析(PCA)已用于创建单词embedding。 给定一组像词袋向量一样的实例,PCA试图找到可以折叠成单个维度的高度相关的维度。

Word2vec

Word2vec是Google发明的用于训练单词embedding的算法。 Word2vec依赖于分布假设(distributional hypothesis)来将语义相似的词映射到几何上相近的embedding向量。

word2vec参考https://www.tensorflow.org/tutorials/word2vec/index.html

Training an Embedding as Part of a Larger Model(当作训练网络的一部分)

您还可以通过作为目标任务的神经网络的一部分来学习embeeding。 这种方法可以为特定系统定制良好的embedding,但可能需要比单独训练embedding花更长的时间。

通常,当有稀疏数据(或您想要作embedding的稠密数据)时,你可以创建一个embedding单元,它只是一种特殊类型的大小为d的隐藏单元。 该embedding层可以与任何其他特征和隐藏层组合。 与任何DNN一样,最后一层将是优化的损失函数。

【转】embedding概念理解1、分类数据矢量化2、Embedding3、Obtaining Embeddings(获取embedding)

Figure 5. A sample DNN architecture for learning movie embeddings from collaborative filtering data.

当学习d维embedding时,每个item被映射到d维空间中的点,使得相似的item在该空间中是相近的。 图6有助于说明embedding层中学习的权重与几何视图之间的关系。 输入节点和d维embedding层中的节点之间的边权重对应于每个d轴的坐标值。

【转】embedding概念理解1、分类数据矢量化2、Embedding3、Obtaining Embeddings(获取embedding)

Figure 6. A geometric view of the embedding layer weights.

继续阅读