如何理解张量流中的"viterbi_decode"



HMM中使用的传统维特比算法有一个开始概率矩阵(维特比算法wiki(,但tensorflow中viterbi_decode的参数只需要转移概率矩阵发射概率矩阵。如何理解它?

def viterbi_decode(score, transition_params):
"""Decode the highest scoring sequence of tags outside of 
TensorFlow.
This should only be used at test time.
Args:
score: A [seq_len, num_tags] matrix of unary potentials.
transition_params: A [num_tags, num_tags] matrix of binary potentials.
Returns:
viterbi: A [seq_len] list of integers containing the highest scoring tag
indicies.
viterbi_score: A float containing the score for the Viterbi 
sequence.
"""

Tensorflow中的viterbi算法不需要初始概率矩阵,因为它通过给所有状态零概率来开始解码。

这意味着它从状态0开始。

您可以在此处查看实现。

我已经创建了完整详细的教程,其中包含关于tensorflow的viterbi算法的示例,您可以在这里查看:

假设你的数据看起来像:

# logits :       A [batch_size, max_seq_len, num_tags] tensor of unary potentials to use as input to the CRF layer.
# labels_a :     A [batch_size, max_seq_len] matrix of tag indices for which we compute the log-likelihood.
# sequence_len : A [batch_size] vector of true sequence lengths.

然后

log_likelihood , transition_params = tf.contrib.crf.crf_log_likelihood(logits,labels_a,sequence_len)
#return of crf log_likelihood function
# log_likelihood: A scalar containing the log-likelihood of the given sequence of tag indices.
# transition_params: A [num_tags, num_tags] transition matrix. 
# This is either provided by the caller or created in this function.

现在我们可以计算维特比分数:

# score: A [seq_len, num_tags] matrix of unary potentials.
# transition_params: A [num_tags, num_tags] matrix of binary potentials.

笔记本链接

相关内容

最新更新