1

我正在尝试使用 tensorflow seq2seq ,但我无法想出一种添加“GO”、“EOS”+“PAD”元素标签序列的好方法。我正在使用 tf.TextLineReader 从 .csv 读取这些数据,我创建的 .csv 有一个文本列,然后是每个顺序标签的 4 列。

这是我创建的示例 csv sample_input.csv:“这是我们想要的示例文本消息”,Label1,Label2,Label3,“这是我们要加载的另一个句子”,Label10,,,

这是我在以下位置读取此 csv 的代码:

import tensorflow as tf
tf.reset_default_graph()

_BATCH_SIZE = 2

sess = tf.InteractiveSession()

filename_queue = tf.train.string_input_producer(['sample_input.csv'])
reader = tf.TextLineReader(skip_header_lines=1)

_, rows = reader.read_up_to(filename_queue, num_records=_BATCH_SIZE)

row_columns = tf.expand_dims(rows, -1)
Text, Label1, Label2, Label3, Label4 = tf.decode_csv(
    row_columns, record_defaults=[[""],[""],[""],[""],[""]])

start = tf.constant(["START"] * _BATCH_SIZE)
start = tf.expand_dims(start, -1)
input_seq = tf.string_join(
    inputs = [start, Label1, Label2, Label3],separator = ", ")

output_seq = tf.string_join(
    inputs = [Label1, Label2, Label3, Label4],separator = ", ")
features = tf.stack([Text, input_seq, output_seq])

sess.run(tf.global_variables_initializer())
tf.train.start_queue_runners()
features.eval()

上面的示例将在 features.eval() 上打印出以下内容:

array([[[b'This is an example text message that we want to have'],
    [b'Here is another sentences that we want to load']],

    [[b'START, Label1, Label2, Label3'],[b'START, Label10, , ']],

    [[b'Label1, Label2, Label3, '], [b'Label10, , , ']]], dtype=object)

现在我知道这不是创建这些序列的正确位置,但我希望得到一些关于如何正确创建序列的建议。这些 4 个标签的序列长度不同,有些可能只有 1 个,而另一些可能有 4 个。理想情况下,我的输入最终会是

单标签:

  • 解码器输入 = [GO,Label1,PAD,PAD]
  • 解码器输出 = [标签 1,结束,垫,垫]

双标:

  • 解码器输入 = [GO,Label1,Label2,PAD]
  • 解码器输出 = [标签 1,标签 2,结束,垫]

三个标签:

  • 解码器输入 = [GO,标签 1,标签 2,标签 3]
  • 解码器输出 = [标签 1,标签 2,标签 3,结束]

四个标签:

  • 解码器输入 = [GO,标签 1,标签 2,标签 3]
  • decoder_output = [Label1, Label2, Label3, Label4] *注意:最后一个没有结束序列,因为它已经有 4 个元素长

任何人都可以提出一种更好的方法来从 csv 中的四个单独的列创建解码器输入/输出吗?

4

0 回答 0