第3次实验:基于HMM的词性标注-1目标:编写一个基于HMM的词性标注程序。任务:利用结巴对CDIAL-BIAS-race文件进行分词与词性标注,将语料分成测试集与训练集(一般为1:4的比例)。在训练集上统计HMM中初始概率、发射概率、转移概率估算所需的参数。 第4次实验:基于HMM的词性标注-2 任务1:利用Viterbi算法,实现基于HMM的词性标注程序。 任务2:编写评价程序,计算HMM在测试集上的词性标注准确率。
时间: 2023-05-23 21:06:24 浏览: 161
A:
任务1:
根据HMM的定义,假设已知标注为 Y=(y1,y2,...,ym),对于当前词汇 xi,我们需要在已知历史观测值O=(o1,o2,...,om)的情况下,找到最优的标注 yi,即求解:
y1*,y2*,...,ym* = arg max(y1,y2,...,ym) [P(Y|O,θ)]
其中θ表示模型的参数,包括初始概率,转移概率和发射概率。
Viterbi算法是一个动态规划的过程,在每个时刻t,我们维护一个局部的概率矩阵δ,它表示对于前t个词的所有标注为y1,y2,...,yt,最大概率是多少:
δ(t,yt) = max(y1,y2,...,yt-1) [P(Y[:t-1],yt,O[:t],θ) * δ(t-1,yt-1)]
其中Y[:t-1]表示标注为y1,y2,...,yt-1的标注序列,O[:t]表示前t个词的观察序列。
同时,我们还需要维护一个转移矩阵backpointer,它记录每个(t,yt)状态最优转移路径上的上一个状态:
backpointer(t, yt) = arg max(yt-1) [P(Y[:t-1],yt-1,yt,O[:t],θ) * δ(t-1,yt-1)]
维护完整的矩阵后,我们可以求解最终的标注序列Y*,它对应的概率是δ(m,y*),其中y* = arg max(y) δ(m,y)。
根据以上算法,我们可以实现基于HMM的词性标注程序。
任务2:
评价程序对测试集中的每个句子进行词性标注,并与人工标注进行比较,计算出准确率。准确率计算公式如下:
accuracy = (# of correctly tagged words) / (# of total words)
其中,正确标注的单词数除以总单词数得到准确率。
阅读全文