首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Embeddings(嵌套)

本文档介绍了嵌入的概念,给出了如何在TensorFlow中操练嵌入的简单示例,并解释了如何使用TensorBoard嵌入式投影仪查看嵌入。前两部分是针对机器学习或TensorFlow的新手,而嵌入式投影机则是针对各级用户的。

嵌入是从离散对象(如文本)到实数向量的映射。 例如,英文文本的300维嵌入可能包括:

blue:  (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)
blues:  (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)
orange:  (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)
oranges:  (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)

这些向量中的各个维度通常没有固有含义。相反,它是机器学习利用的向量之间的位置和距离的整体模式。

嵌入对于机器学习的输入非常重要。更一般地,分类器和神经网络用于实数向量。他们操练最好的密集向量,其中所有值都有助于定义一个对象。然而,机器学习的许多重要输入,例如文字,没有自然的向量表示。嵌入函数是将这些离散输入对象转换为有用的连续向量的标准和有效方法。

嵌入作为机器学习的输出也很有价值。由于嵌入将对象映射到向量,因此应用程序可以使用向量空间中的相似性(例如,欧几里德距离或向量之间的角度)作为对象相似性的鲁棒性强且灵活的度量。一个常见用途是找到最近的邻居。例如,使用与上述相同的文字嵌入,这里是每个文字的三个近邻和相应的角度:

blue:  (red, 47.6°), (yellow, 51.9°), (purple, 52.4°)
blues:  (jazz, 53.3°), (folk, 59.1°), (bluegrass, 60.6°)
orange:  (yellow, 53.5°), (colored, 58.0°), (bright, 59.9°)
oranges:  (apples, 45.3°), (lemons, 48.3°), (mangoes, 50.4°)

这将告诉一个应用程序,苹果和橙子(相距45.3°)在某种程度上比柠檬和橙子(相距48.3°)相似。

在TensorFlow中嵌入

要在TensorFlow中创建文字嵌入,我们首先将文本分割成文字,然后为词汇表中的每个单词分配一个整数。假设这已经完成,那word_ids是这些整数的一个向量。例如,“I have a cat.”这个句子可以被分解[“I”, “have”, “a”, “cat”, “.”],然后相应的word_ids张量就会形成[5]并由5个整数组成。为了将这些单词id映射到向量,我们需要创建嵌入变量并使用tf.nn.embedding_lookup如下函数:

word_embeddings = tf.get_variable(“word_embeddings”,
    [vocabulary_size, embedding_size])
embedded_word_ids = tf.nn.embedding_lookup(word_embeddings, word_ids)

在此之后,在我们的例子中张量embedded_word_ids将具有形状[5, embedding_size],并且包含5个单词中的每一个的嵌入(密集向量)。在操练结束时,word_embeddings将包含词汇表中所有单词的嵌入。

嵌入可以在许多网络类型中进行操练,并且具有各种损失函数和数据集。例如,可以使用递归神经网络来预测前一个词的下一个单词,给定大量语句,或者可以操练两个网络进行多语言翻译。这些方法在Vector Vectorations of Words教程中有所描述。

可视化嵌入

TensorBoard包括嵌入式投影仪,这是一款可让您交互式显示嵌入的工具。此工具可以读取模型中的嵌入,并以二维或三维方式呈现。

嵌入式投影机有三个面板:

  • 数据面板位于左上方,您可以在其中选择运行,嵌入变量和数据列以对点进行着色和标记。
  • 投影面板位于左下方,您可以在其中选择投影类型。
  • 在右侧的检查器面板,您可以搜索特定的点并查看最近的邻居列表。

Projections

嵌入式投影仪提供三种方法来降低数据集的维度。

  • t-SNE:一种非线性非确定性算法(T分布式随机邻居嵌入),它试图保留数据中的局部邻域,通常以扭曲全局结构为代价。您可以选择是否计算二维或三维投影。
  • PCA:一种线性确定性算法(主成分分析),试图在尽可能少的维度上捕捉尽可能多的数据变异性。PCA倾向于强调数据中的大规模结构,但可能会扭曲局部社区。嵌入式投影仪计算前10个主要组件,您可以从中选择两个或三个进行查看。

  • 自定义:使用数据中的标签指定水平和垂直轴上的线性投影。例如,通过给出“Left”和“Right”的文本模式来定义水平轴。嵌入投影仪查找标签与“左”模式相匹配的所有点并计算该组的质心; “Right”同理。穿过这两个质心的线定义了水平轴。垂直轴同样根据与“Up”和“Down”文本模式匹配的点进行质心计算。
  • 另外有用的文章是如何有效地使用t-SNE主要分量分析可视化地解释
  • Exporation
  • 您可以通过使用自然的点击和拖动手势进行缩放,旋转和平移来进行视觉浏览。将鼠标悬停在某个点上将显示该点的所有元数据。您还可以检查最近邻点子集。单击一个点会导致右窗格列出最近的邻点,以及到当前点的距离。最近邻点在投影中也突出显示。
  • 有时将视图限制为点的子集并仅在这些点上执行投影。为此,您可以通过多种方式选择点:
  • 点击一个点后,其最近的邻居也被选中。
  • 搜索后,将选择与查询匹配的点。
  • 启用选择,单击一个点并拖动即可定义选择范围。

然后单击右侧检查器窗格顶部的“Isolate nnn points”按钮。下图显示了101个被选中的点,并准备好让用户点击“Isolate 101 points”:

在单词嵌入数据集中选择“important”的最近邻居。

高级技巧:使用自定义投影进行过滤可能很奏效。下面,我们过滤了100个“politics”最近的邻居,并将它们投影到“worst” - “best”向量上作为x轴。y轴是随机的。结果,你将发现右侧有“ideas”,“science”,“perspecive”,“journalism”,但在左侧有“crisis”,“violence”和“confict”。

Custom projection controls.

Custom projection of neighbors of "politics" onto "best" - "worst" vector.

要分享您的发现,您可以使用右下角的书签面板并将当前状态(包括任何投影的计算坐标)保存为小文件。然后可以将投影仪指向一组一个或多个文件,以制作下面的面板。然后其他用户可以遍历一系列书签。

Metadata

如果您正在使用嵌入,则可能需要将标签/图像附加到数据点。您可以通过生成包含每个点的标签的元数据文件,然后在嵌入式投影仪的数据面板中单击“加载数据”来完成此操作。

元数据可以是标签或图像,它们存储在单独的文件中。对于标签,格式应该是TSV文件(制表符显示为红色),其第一行包含列标题(以粗体显示),后续行包含元数据值。例如:

Word\tFrequency

Airplane\t345

Car\t241

...

假设元数据文件中行的顺序与嵌入变量中的向量顺序相匹配,标题除外。因此,元数据文件中的第(i + 1)行对应于嵌入变量的第i行。如果TSV元数据文件只有一个列,那么我们不希望有一个标题行,并且假设每行都是嵌入标签。我们包含这个例外是因为它与常用的“vocab文件”格式相匹配。

要将图像用作元数据,您必须生成一个精灵图像,其中包含小缩略图,嵌入中的每个矢量都有一个缩略图。精灵应按行先存储缩略图:第一个数据点放置在左上方,最后一个数据点放在右下方,尽管最后一行不必填充,如下所示。

0

1

2

3

4

5

6

7

按照此链接查看嵌入式投影仪中缩略图的有趣示例。

Mini-FAQ

“嵌入”是一个动作还是一个事物?两者都是。人们讨论在向量空间中嵌入单词(动作),并讨论如何生成单词嵌入(事物)。两者共同的是将嵌入作为从离散对象到矢量的映射的概念。创建或应用该映射是一个操作,但映射本身是一个事物。

嵌入是高维还是低维?要看情况。例如,与其包含的数百万个单词和短语相比,单词和短语的300维向量空间通常被称为低维(并且密集)。但在数学上它是高维的,显示出许多与我们的人类直觉了解的二维和三维空间有很大不同的特性。

嵌入是否与嵌入层相同?不。嵌入层是神经网络的一部分,但嵌入是一个更一般的概念。

扫码关注腾讯云开发者

领取腾讯云代金券