def test_marginal_probability(self): """ 各時点m-1からmへのラベル遷移の確率の合計が1になる """ crf = CRF(self.features, self.pos_set) x_list = self.test_word_data[0] crf.predict(x_list) crf._forward_algorithm(x_list) crf._backward_algorithm(x_list) for m in range(1, len(x_list)): p_sum = 0 for i_label in self.pos_set: for j_label in self.pos_set: p_sum += crf._marginal_probability(x_list, i_label, j_label, m) self.assertEqual(1, round(p_sum))
def test_forward_backward_algorithm(self): """ 前向きアルゴリズムと後ろ向きアルゴリズムで求めた状態和が一致する """ crf = CRF(self.features, self.pos_set) for x_list in self.test_word_data: crf.predict(x_list) alpha_z = round(crf._forward_algorithm(x_list)[-1]["<EOS>"], 3) beta_z = round(crf._backward_algorithm(x_list)[0]["<BOS>"], 3) self.assertEqual(alpha_z, beta_z)