【发布时间】:2016-12-01 20:26:30
【问题描述】:
我正在构建一个 Tensorflow 模型来对文本短语进行推理。 为简单起见,假设我需要一个具有固定数量的输出类但输入中的 可变长度文本 的分类器。换句话说,我的小批量将是一系列短语,但并非所有短语都具有相同的长度。
data = ['hello',
'my name is Mark',
'What is your name?']
我的第一个预处理步骤是构建字典中所有可能单词的字典,并将每个单词映射到其整数单词 ID。输入变为:
data = [[1],
[2, 3, 4, 5],
[6, 4, 7, 3]
处理这种输入的最佳方式是什么? tf.placeholder() 可以处理同一批数据中的可变大小输入吗? 或者我应该填充所有字符串,使它们都具有相同的长度,等于最长字符串的长度,使用一些占位符来代替缺失的单词?如果某些字符串比其他大多数字符串长得多,这似乎是非常低效的内存。
-- 编辑--
这是一个具体的例子。
当我知道我的数据点的大小(并且所有数据点都具有相同的长度,例如 3)时,我通常会使用以下内容:
input = tf.placeholder(tf.int32, shape=(None, 3)
with tf.Session() as sess:
print(sess.run([...], feed_dict={input:[[1, 2, 3], [1, 2, 3]]}))
占位符的第一个维度是小批量大小。
如果输入序列是不同长度的句子中的单词怎么办?
feed_dict={input:[[1, 2, 3], [1]]}
【问题讨论】:
-
文本通常由序列模型处理。 IE,您的模型接受当前单词和上一步的输出,并且您堆叠模型的副本。作为基线,您可以从“词袋”开始——只需将所有词一起添加到单个字典向量中。
-
感谢您的回复。我的问题更多是关于 Tensorflow 的数据结构而不是模型。我可以使用以词袋表示的文本馈送的 RNN。仍然如果我的数据点有不同的长度,我应该在哪里或如何存储这种数据?
-
我编辑了删除对词嵌入的引用的问题,并举了一个更具体的例子来澄清我的问题。
标签: python string text tensorflow variable-length-array