Как получить топ-k лучших последовательностей-кандидатов при использовании CRF для декодирования в тензорном потоке
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, мы можем получить лучшую последовательность тегов y
и его нормализованная оценка для каждой тестовой входной последовательности x
через tf.contrib.crf.viterbi_decode()
или же tf.contrib.crf.crf_decode()
,
Однако для меня недостаточно получить одну лучшую последовательность. В настоящее время лучшие из лучших последовательностей и их соответствующие оценки все полезны для меня. Я заметил, что в настоящее время вышеупомянутые две функции не предоставляют эту информацию. Следовательно, мне интересно, возможно ли получить топ-k лучших кандидатов после незначительных изменений в исходном коде тензорного потока.
- последовательности тегов top-k и соответствующие им не нормированные оценки.
- предельные вероятности для каждого тега (как CRF++)