Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用tensorflow进行序列标记:同步序列输入和输出_Tensorflow - Fatal编程技术网

使用tensorflow进行序列标记:同步序列输入和输出

使用tensorflow进行序列标记:同步序列输入和输出,tensorflow,Tensorflow,我想使用Tensorflow进行序列标记,即词性标记。我尝试使用这里概述的相同模型:(它概述了一个将英语翻译成法语的模型) 由于在标记中,输入序列和输出序列具有完全相同的长度,因此我配置了桶,以便输入和输出序列具有相同的长度,并尝试在ConLL 2000上使用此模型学习词性标记器 然而,解码器有时输出的标记序列似乎比输入序列短(似乎感觉EOS标记过早出现) 例如: 他估计9月份经常账户赤字将缩小到18亿欧元。 上面的句子被标记为有18个标记,填充到20个(由于bucketing) 当要求解码上述

我想使用Tensorflow进行序列标记,即词性标记。我尝试使用这里概述的相同模型:(它概述了一个将英语翻译成法语的模型)

由于在标记中,输入序列和输出序列具有完全相同的长度,因此我配置了桶,以便输入和输出序列具有相同的长度,并尝试在ConLL 2000上使用此模型学习词性标记器

然而,解码器有时输出的标记序列似乎比输入序列短(似乎感觉EOS标记过早出现)

例如: 他估计9月份经常账户赤字将缩小到18亿欧元。

上面的句子被标记为有18个标记,填充到20个(由于bucketing)

当要求解码上述内容时,解码器会给出以下内容:

PRP VBD DT JJ JJ NN MD VB到NN中的VB DT NN_EOS_EOS CD

因此在这里,它在15个标记(而不是18个)之后结束序列(EOS)


在我的场景中,如何强制序列了解解码序列的长度应与编码序列的长度相同。

有多种方法指定序列结束参数。翻译演示使用一个标志
来确定序列的结束。但是,您也可以通过计算输出中预期的字数来指定序列的结束。在
translate.py
的第225-227行中:

# If there is an EOS symbol in outputs, cut them at that point.
if data_utils.EOS_ID in outputs:
    outputs = outputs[:outputs.index(data_utils.EOS_ID)]

您可以看到,每当遇到
时,输出都会被切断。您可以轻松地调整它以限制输出单词的数量。你也可以考虑在训练的时候去掉<代码> <代码>标志,考虑你的应用程序。

< P>如果你的输入和输出序列是相同的长度,你可能想要比SEQ2SEQ模型更简单的东西(因为处理不同的序列长度是它的强项)

你试过仅仅训练(word->tag)吗

注意:对于像词性标记这样的东西,两边都有来自标记的清晰信号,你肯定会从双向网络中受益

如果你想发疯,还会有一些有趣的字符级变体,你只会在标记边界处发出标记(基本原理是词性标记受益于字符级功能;例如,单词外的名称)。要尝试的变体太多了!:D


我遇到了同样的问题。最后,我发现tensorflow示例中的ptb_word_lm.py示例正是标记化、NER和词性标记所需要的


如果查看语言模型示例的详细信息,您会发现它将输入字符序列视为X,将1个空格的右移位X视为Y。这正是固定长度序列标签所需要的

谢谢你的指点。是否有一些锅炉板代码可用于构建第一个模型(word->tag)。我相信tensor flow中的ptb代码也做了类似的事情(预测下一个单词)。我想知道我是否可以用它来预测标签。