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
..
Tensorflow 有自己的 crf 实现。在训练一个 crf 模型之后,我们可以通过ory
得到每个测试输入序列的最佳标签序列及其非归一化分数。x
tf.contrib.crf.viterbi_decode()
tf.contrib.crf.crf_decode()
但是,仅获得一个最佳序列对我来说是不够的。目前,top-k 最好的序列及其对应的分数都对我有用。我注意到目前上述两个功能不提供这些信息。因此,我想知道在对 tensorflow 源代码进行微小修改后是否有可能获得前 k 个最佳候选者。
- top-k 标签序列及其对应的非标准化分数。
- 每个标签的边际概率(如 CRF++)