在张量流中使用CRF进行解码时如何获得前k个最佳候选序列

lon*_*ing 5 python viterbi beam-search crf tensorflow

CRF ++允许我们获得每个标签的边际概率(每个输出标签的一种置信度)和一个可能的输出条件(整个输出的置信度)。

% crf_test -v2 -m model test.data
# 0.478113
Rockwell        NNP     B       B/0.992465      B/0.992465      I/0.00144946    O/0.00608594
International   NNP     I       I/0.979089      B/0.0105273     I/0.979089      O/0.0103833
Corp.           NNP     I       I/0.954883      B/0.00477976    I/0.954883      O/0.040337
's              POS     B       B/0.986396      B/0.986396      I/0.00655976    O/0.00704426
Tulsa           NNP     I       I/0.991966      B/0.00787494    I/0.991966      O/0.00015949
unit            NN      I       I/0.996169      B/0.00283111    I/0.996169      O/0.000999975
..
Run Code Online (Sandbox Code Playgroud)

Tensorflow有自己的crf实现。训练完crf模型后,我们可以通过或y为每个测试输入序列获得最佳的标签序列及其标准化分数。xtf.contrib.crf.viterbi_decode()tf.contrib.crf.crf_decode()

但是,对于我来说,获得一个最佳顺序是不够的。目前,排名前k位的最佳序列及其对应的分数对我都很有用。我注意到,当前上述两个功能不提供这些信息。因此,我想知道在对tensorflow源代码进行少量修改后是否有可能获得前k个最佳候选者。

  1. top-k标签序列及其对应的归一化分数。
  2. 每个标签的边际概率(如CRF ++)