- for feat in feats:
- alphas_t = []
- for next_tag in range(self.tagset_size):
- # 状态特征函数的得分
- emit_score = feat[next_tag].view(1, -1).expand(1, self.tagset_size)
- # 状态转移函数的得分
- trans_score = self.transitions[next_tag].view(1, -1)
- # 从上一个单词的每个状态转移到 next_tag 状态的得分
- # 所以 next_tag_var 是一个大小为 tag_size 的数组
- next_tag_var = forward_var + trans_score + emit_score
- # 对 next_tag_var 进行 log_sum_exp 操作
- alphas_t.append(log_sum_exp(next_tag_var).view(1))
- forward_var = torch.cat(alphas_t).view(1, -1)
- terminal_var = forward_var + self.transitions[self.tag_to_ix[STOP_TAG]]
- alpha = log_sum_exp(terminal_var)
- return alpha
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
维特比算法中规中矩, 可以参考李航书上条件随机场的预测算法
来源: http://www.bubuko.com/infodetail-3123491.html