TensorFlow 嵌入查找
TensorFlow Embedding Lookup
我正在尝试学习如何使用 TensorFlow 为语音识别构建 RNN。首先,我想尝试 TensorFlow 页面 TF-RNN
上的一些示例模型
根据建议,我花了一些时间通过研究 word2vec 模型代码的基本版本来理解如何将单词 ID 嵌入到密集表示(矢量表示)中。我了解 tf.nn.embedding_lookup
实际上做了什么,直到我在 TF-RNN ptb_word_lm.py
中实际遇到了与二维数组一起使用的相同函数,当它不再有意义时。
我认为 tf.nn.embedding_lookup
做了什么:
给定一个二维数组 params
和一个一维数组 ids
,函数 tf.nn.embedding_lookup
从参数中获取行,对应于 [=14= 中给出的索引],它与它返回的输出维度一致。
我困惑的地方:
尝试使用相同的参数和二维数组 ids
、tf.nn.embedding_lookup
returns 三维数组,而不是二维数组,我不明白为什么。
我查阅了Embedding Lookup的手册,但我仍然很难理解分区是如何工作的,以及返回的结果。我最近用 tf.nn.embedding_lookup
尝试了一些简单的例子,它似乎每次都 returns 不同的值。这种行为是由于分区中涉及的随机性造成的吗?
请帮助我了解 tf.nn.embedding_lookup
的工作原理,以及为什么在 word2vec_basic.py
和 ptb_word_lm.py
中使用,即使用它们的目的是什么?
关于 tf.nn.embedding_lookup
.
的内容已经有了答案
When tried with same params, and 2-d array ids, tf.nn.embedding_lookup returns 3-d array, instead of 2-d which I do not understand why.
当你有一个 id 的一维列表 [0, 1]
时,该函数将 return 嵌入列表 [embedding_0, embedding_1]
其中 embedding_0
是形状数组 embedding_size
。例如,id 列表可以是一批单词。
现在,您有一个 矩阵 个 ID,或一个 ID 列表列表。例如,你现在有一批句子,即一批单词列表,即一组单词列表。
如果您的句子列表是:[[0, 1], [0, 3]]
(句子 1 是 [0, 1]
,句子 2 是 [0, 3]
),该函数将计算一个嵌入矩阵,它是形状 [2, 2, embedding_size]
看起来像:
[[embedding_0, embedding_1],
[embedding_0, embedding_3]]
关于partition_strategy
的说法,你不必理会。基本上,如果您在计算方面有限制,它允许您将嵌入矩阵列表作为 params
而不是 1 个矩阵。
因此,您可以将形状为 [1000, embedding_size]
的嵌入矩阵拆分为十个形状为 [100, embedding_size]
的矩阵,并将此变量列表作为 params
传递。参数 partition_strategy
处理词汇表(1000 个单词)在 10 个矩阵中的分布。
我正在尝试学习如何使用 TensorFlow 为语音识别构建 RNN。首先,我想尝试 TensorFlow 页面 TF-RNN
上的一些示例模型根据建议,我花了一些时间通过研究 word2vec 模型代码的基本版本来理解如何将单词 ID 嵌入到密集表示(矢量表示)中。我了解 tf.nn.embedding_lookup
实际上做了什么,直到我在 TF-RNN ptb_word_lm.py
中实际遇到了与二维数组一起使用的相同函数,当它不再有意义时。
我认为 tf.nn.embedding_lookup
做了什么:
给定一个二维数组 params
和一个一维数组 ids
,函数 tf.nn.embedding_lookup
从参数中获取行,对应于 [=14= 中给出的索引],它与它返回的输出维度一致。
我困惑的地方:
尝试使用相同的参数和二维数组 ids
、tf.nn.embedding_lookup
returns 三维数组,而不是二维数组,我不明白为什么。
我查阅了Embedding Lookup的手册,但我仍然很难理解分区是如何工作的,以及返回的结果。我最近用 tf.nn.embedding_lookup
尝试了一些简单的例子,它似乎每次都 returns 不同的值。这种行为是由于分区中涉及的随机性造成的吗?
请帮助我了解 tf.nn.embedding_lookup
的工作原理,以及为什么在 word2vec_basic.py
和 ptb_word_lm.py
中使用,即使用它们的目的是什么?
关于 tf.nn.embedding_lookup
When tried with same params, and 2-d array ids, tf.nn.embedding_lookup returns 3-d array, instead of 2-d which I do not understand why.
当你有一个 id 的一维列表 [0, 1]
时,该函数将 return 嵌入列表 [embedding_0, embedding_1]
其中 embedding_0
是形状数组 embedding_size
。例如,id 列表可以是一批单词。
现在,您有一个 矩阵 个 ID,或一个 ID 列表列表。例如,你现在有一批句子,即一批单词列表,即一组单词列表。
如果您的句子列表是:[[0, 1], [0, 3]]
(句子 1 是 [0, 1]
,句子 2 是 [0, 3]
),该函数将计算一个嵌入矩阵,它是形状 [2, 2, embedding_size]
看起来像:
[[embedding_0, embedding_1],
[embedding_0, embedding_3]]
关于partition_strategy
的说法,你不必理会。基本上,如果您在计算方面有限制,它允许您将嵌入矩阵列表作为 params
而不是 1 个矩阵。
因此,您可以将形状为 [1000, embedding_size]
的嵌入矩阵拆分为十个形状为 [100, embedding_size]
的矩阵,并将此变量列表作为 params
传递。参数 partition_strategy
处理词汇表(1000 个单词)在 10 个矩阵中的分布。