隐马尔科夫模型和词性标注刘挺哈工大信息检索研究室2004年春大纲•隐马尔科夫模型–隐马尔科夫模型概述–任务1:计算观察序列的概率–任务2:计算能够解释观察序列的昀大可能的状态序列–任务3:根据观察序列寻找昀佳参数模型•词性标注隐马尔科夫模型概述马尔科夫链•状态序列:X1,X2,X3,…–常常是“时序”的•从Xt-1到Xt的转换只依赖于Xt-1X2X3X4X1转移概率TransitionProbabilities•假设一个状态Xt有N个可能的值–Xt=s1,Xt=s2,…..,Xt=sN.•转移概率的数量为:N2–P(Xt=si|Xt-1=sj),1≤i,j≤N•转移概率可以表示为N×N的矩阵或者有向图MM•BigramMM(一阶MM)MM•TrigramMM(二阶MM)有限状态自动机•状态:输入输出字母表中的符号•弧:状态的转移•仍然是VMM(VisibleMM)HMM•HMM,从状态产生输出HMM•HMM,不同状态可能产生相同输出HMM•HMM,从弧产生输出HMM•HMM,输出带有概率HMM•HMM,两个状态间有多条弧,具有不同的概率隐马尔可夫模型HiddenMarkovModel•估算隐藏于表面事件背后的事件的概率–观察到一个人每天带雨伞的情况,反过来推测天气情况HiddenMarkovModel•HMM是一个五元组(S,S0,Y,Ps,PY).–S:{s1…sT}是状态集,S0是初始状态–Y:{y1…yV}是输出字母表–PS(sj|si):转移(transition)概率的分布,也表示为aij–PY(yk|si,sj):发射(emission)概率的分布,也表示为bijk•给定一个HMM和一个输出序列Y={y1,y2,…,yk)–任务1:计算观察序列的概率–任务2:计算能够解释观察序列的昀大可能的状态序列–任务3:根据观察序列寻找昀佳参数模型任务1:计算观察序列的概率计算观察序列的概率•前提:HMM模型的参数已经训练完毕•想知道:根据该模型输出某一个观察序列的概率是多少•应用:基于类的语言模型,将词进行归类,变计算词与词之间的转移概率为类与类之间的转移概率,由于类的数量比词少得多,因此一定程度避免了数据稀疏问题TrellisorLattice(栅格)发射概率为1的情况•Y=“toe”•P(Y)=0.6×0.88×1+0.4×0.1×1=0.568算法描述•从初始状态开始扩展•在时间点t扩展得到的状态必须能够产生于观察序列在t时刻相同的输出–比如在t=1时,观察序列输出‘t’,因此只有状态A和C得到了扩展•在t+1时刻,只能对在t时刻保留下来的状态节点进行扩展–比如在t=2时,只能对t=1时刻的A和C两个状态进行扩展•每条路径上的概率做累乘,不同路径的概率做累加•直到观察序列全部考察完毕,算法结束发射概率不为1的情况•0.236608就是在上述模型下“toe”出现的概率Trigram的情况•以Bigram为状态基于类的Trigram模型•N-gramclassLM–p(wi|wi-2,wi-1)→p(wi|ci)p(ci|ci-2,ci-1)–C:Consonant(辅音),V:Vowel(元音)ClassTrigram的Trellis•输出Y=“toy”重叠(overlapping)的ClassTrigram•“r”有时是元音,有时是辅音,因此p(r|C)和p(r|V)都不为零重叠的类Trigram的Trellis讨论•我们既可以从左向右计算,也可以从右向左计算,甚至可以从中间向两头计算•Trellis的计算对于Forward-Backward(也称为Baum-Welch)参数估计很有用任务2:计算能够解释观察序列的昀大可能的状态序列Viterbi算法•用于搜索能够生成观察序列的昀大概率的状态序列•Sbest=argmaxSP(S|Y)=argmaxSP(S,Y)/P(Y)=argmaxS∏i=1…kp(yi|si,si-1)p(si|si-1)•Viterbi能够找到昀佳解,其思想精髓在于将全局昀佳解的计算过程分解为阶段昀佳解的计算示意•从D2返回Stage1的昀佳状态为C1–因为p(A1-D2)=0.6×0.5=0.3–而p(C1-D2)=0.4×0.8=0.32•尽管搜索还没有完全结束,但是D2已经找到了昀佳返回节点Viterbi示例•argmaxXYZP(XYZ|rry)Viterbi计算Viterbi算法•三重循环–第一重:遍历每一个观察值–第二重:遍历当前观察值所对应的每一个状态–第三重:遍历能够到达当前观察值当前状态的上一时刻的每一个状态•计算–假设上一时刻为t,t时刻的的状态为i,t+1时刻的状态为j,t+1时刻的观察值为k,则计算:•δj(t+1)=max1≤i≤Nδi(t)aijbijk•ψj(t+1)=argmax1≤i≤Nδi(t)aijbijk•t+1时刻状态j的返回指针指向t时刻的状态ψj(t+1)•输出–三重循环都结束后,在昀后时刻找到δ值昀大的状态,并从该状态开始,根据返回指针查找各时刻的处于昀佳路径上的状态,并反序输出。N-best计算•保留n个昀佳结果,而不是1个•昀优解:VCV;次优解:CCVN-BestPaths•以分词为例(MM模型)–例句:“结合成分子”–每条弧上的值是该弧所对应的词的Unigram概率的负倒数,即-logp(w)结合成分子N-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞0∞Prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞0∞07.76prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞0∞0∞121.5prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue0∞0∞0∞0∞prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue0∞0∞230.5218.2prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue230.5330.0323.4218.2prevalue0∞0∞0∞0∞prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue230.5330.0323.4218.2prevalue0∞0∞331.2325.2prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue230.5330.0323.4218.2prevalue433.9331.2429.1325.2prevalueN-BestPaths–AsampleThesentence“结合成分子“.结合成分子00000000prevalue0∞0∞0∞010.1Prevalue0∞0∞120.007.76prevalue0∞227.6121.5214.4prevalue230.5330.0323.4218.2prevalue433.9331.2429.1325.2prevalue结果•四条昀佳路径为:1.结合/成/分子2.结合/成分/子3.结/合成/分子4.结合/成/分/子•时间复杂度–假设搜索图中共有k条边–要求获得N条昀佳路径–则时间复杂度为O(k*N2)剪枝Pruning在每一个时刻,如果Trellis上的状态过多,怎么办?答案是剪枝:1、按α的阈值剪枝,α太低的路径不再继续搜索2、按状态的数量剪枝,超过多少个状态就不再扩展了任务3:根据观察序列寻找昀佳参数模型问题•给定一个观察值序列,但是没有标注每个观察值所对应的状态(无指导),在这种条件下如何估计隐马尔可夫模型中的参数,包括转移概率的分布和发射概率的分布•例如:给定一个语料库,语料库只是一个词的序列,没有词性标记,能否估计出词性标注的HMM模型?•是EM算法的特例,象一个魔法(MAGIC)!找到一个能够昀佳地解释观察值序列的模型Baum-Welch算法也称为Forward-Backward算法•1.初始化PS,PY–可能是随机给出的•2.计算前向概率(ForwardProbability)–α(s’,i)=∑s→s’α(s,i-1)×p(s’|s)×p(yi|s,s’)–从左到右搜索过程中的累积值•3.计算后向概率(BackwardProbability)–β(s’,i)=∑s’←sβ(s,i+1)×p(s|s’)×p(yi+1|s’,s)–从右到左搜索过程中的累积值前向概率后向概率示意图Xt=siXt+1=sjt-1tt+1t+2αi(t)βj(t+1)aijbijk观察值为kBaum-Welch算法(续)•4.计数(pseudocount)–c(y,s,s’)=•∑i=0…k-1,y=yi+1α(s,i)p(s’|s)p(yi+1|s,s’)β(s’,i+1)–c(s,s’)=∑y∈Yc(y,s,s’)–c(s)=∑s∈Sc(s,s’)•5.重新估算–p’(s’|s)=c(s,s’)/c(s),p’(y|s,s’)=c(y,s,s’)/c(s,s’)•6.重复运行2-5,直至结果不再有较大变化词性标注词性(PartofSpeech)•词的句法类别–名词、动词、形容词、副词、介词、助动词–分为开放词类(OpenClass)和封闭词类(ClosedClass)–也成为:语法类、句法类、POS标记、词类等POS举例Nnounbaby,toyVverbsee,kissADJadjectivetall,grat