Open Lukasjame opened 5 years ago
是不是用了自己做的语料?若果是,可能是语料不好。 还可以试试在 for k,v in enumerate(line_state): Count_dic[v] += 1 if k == 0: 这个if下面也加入self.B_dic[line_state[k]][word_list[k]] = self.B_dic[line_state[k]].get(word_list[k],0)+1.0 我碰到这个问题的时候是用的自己的语料,发现是语料不好,换一个就OK了。
最好用来分析短句子,长文本的话V矩阵,超过一定的迭代后,计算结果会很小,最后趋于为0,导致for y0 in states if V[t - 1][y0] > 0的结果是空。可以采用对数概率相加来解决下溢的问题。
128行 for y0 in states if V[t - 1][y0] > 0]),会出现上一时刻不存在的状态如“B”,应该修改为 for y0 in V[t - 1].keys()])
当需要分词的是一个文本段落时,viterbi函数中的max函数报错
Traceback (most recent call last): File "D:\code\python_test\test\start.py", line 11, in
print(str(list(res)))
File "D:\code\python_test\test\hmm.py", line 150, in cut
prob, pos_list = self.viterbi(text, self.state_list, self.Pi_dic, self.A_dic, self.B_dic)
File "D:\code\python_test\test\hmm.py", line 134, in viterbi
for y0 in states if V[t - 1][y0] > 0])
ValueError: max() arg is an empty sequence