ViterbiDecoder¶
构建一个 ViterbiDecoder
类的可调用对象。请参见 viterbi_decode API。
参数¶
transitions (Tensor) 转移概率。形状为[num_tags, num_tags],数据类型为 float32 或 float64。
include_bos_eos_tag (bool,可选) 是否包含前置、后置标签。如果设为 True,transition_params 中倒数第一列为前置标签的转移概率,倒数第二列为后置标签的转移概率。默认值为 True。
name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。
形状¶
potentials (Tensor) 发射概率。形状为[batch_size, sequence_length, num_tags],数据类型为 float32 或 float64。
lengths (Tensor) 序列真实长度。形状为[batch_size],数据类型为 int64。
返回¶
scores (Tensor) Viterbi 路径的最高得分。形状为[batch_size],数据类型为 float32 或 float64。
paths (Tensor) Viterbi 路径。形状为[batch_size, sequence_length],数据类型为 int64。
代码示例¶
>>> import paddle
>>> paddle.seed(2023)
>>> batch_size, seq_len, num_tags = 2, 4, 3
>>> emission = paddle.rand((batch_size, seq_len, num_tags), dtype='float32')
>>> length = paddle.randint(1, seq_len + 1, [batch_size])
>>> tags = paddle.randint(0, num_tags, [batch_size, seq_len])
>>> transition = paddle.rand((num_tags, num_tags), dtype='float32')
>>> decoder = paddle.text.ViterbiDecoder(transition, include_bos_eos_tag=False)
>>> scores, path = decoder(emission, length)
>>> print(scores)
Tensor(shape=[2], dtype=float32, place=Place(cpu), stop_gradient=True,
[2.57385254, 2.04533720])
>>> print(path)
Tensor(shape=[2, 2], dtype=int64, place=Place(cpu), stop_gradient=True,
[[0, 0],
[1, 1]])