前面已经学习完词法,现在就可以学习语法了。语法学习中比较常用的是马尔可夫模型,然后进行词性标注,接着采用概率上下文无关文法学习人们说话的方式存在的一些结构和规则,最后采用概率句法分析来识别出高层次的结构但愿来简化句子的描述,实现语块分析。下面先来介绍马尔可夫模型。
markov模型,具体来说是隐形马尔可夫模型已经成为现代语音识别系统中构建统计模型的重要手段,即使存在不足,但仍然认为是最成功的运用在自然语言处理中的技术。为了区别不同的马尔可夫过程,我们把一般的马尔可夫模型称为显马尔可夫模型(VIsible Markov Model, VMM), 而通过假定额外的隐含结构,使模型在更高的抽象水平上进行操作,并且允许我们查看词语类别顺序,该模型称为隐形马尔可夫模型(Hide Markov Model, HMM)。
在显式马尔可夫模型中,机器的当前状态是已知的,因此状态系列或者它的一些确定函数被认为是输出。在隐形马尔可夫模型中,模型所经过的状态系列是未知的,我们只知道它的一些概率函数。可以看到,隐形马尔可夫模型输出之前,经过的状态是未知的,那么在什么情况下才可以使用隐性马尔可夫过程呢?
当系统中表层事件可能是由底层事件引发的时,可以采用HMM有效地解决这类问题。一个HMM可以由一个五元组(S,K,I,A,B)表示,其中S、K分别表示状态集合和输出字母表,I、A和B分别是初始状态、状态转移以及符号发射概率。
在隐性马尔可夫模型中我们需要了解三个基本问题:
1、给出一个模型,怎么有效地计算某个观测序列发生地概率?
2、给出观测序列和模型,我们怎么样选择一个状态序列,以便能够最好地解释观测序列?
3、给定观测序列,以及通过改变模型地参数而得到的模型空间,我们怎么样才能找到一个最好地解释这个观测序列的模型?
当模型的参数未知,我们不得不从数据中估计,即解决上面的问题3;通过解决问题1,我们可以确定最佳模型。而问题2 让我们猜测出马尔可夫链中哪条路径才是最优可能经过的,而且这条隐藏路径能够被用来解决分类问题。
针对上面的三个问题,我们首先来介绍如何计算观测序列的概率。
采用直接的算法来计算观测序列的概率,效率较低。因此,我们才用动态编程和记忆来避免复杂度,即记住部分结果而不是每次都重新计算,即为前向过程。前向过程表示可以通过对每个入弧的概率与起始节点的前向概率的乘积进行求和计算得到。
前向过程需要保存较多的结果,而实际上我们不一定需要像这样一直存储前向计算的结果,我们也可以进行后向计算。后向过程计算了后向向量,后向变量中纪录了在给定当前状态Si和t时刻的情况下观测序列中剩余部分概率之和。
结合前向概率和后向概率,对于解决问题3中的参数重估很关键。
对于问题2,怎么最好地解释观测序列?可以认为该问题是译码过程,即需要最大化将被正确猜测的状态的期望数目。译码最常用的方法是Viterbi算法,因为它能够有效地计算最可能地状态序列。Viterbi算法地详细过程参见:HMM学习最佳范例六:维特比算法。
HMM广泛应用于机器学习模型中,但其的难点在于其参数估计问题。根据给定特定的观测序列,我们希望能够确定模型的参数值,并且要求该模型能够给出观测序列的最佳解释。通过观测序列,一般可以采用期望最大化算法,其工作方式如下:
1、在不知道模型参数的信息时,可以使用某个随机的模型算出观测序列的概率——E步骤;
2、查看计算过程,可发现哪个状态转移或者符号发射可能出现的次数最多。通过增加其概率,修改模型参数,使得选择出可以为观测序列给出更高概率的模型——M步骤。
通过E步骤,使用现有的模型估计每个模型参数值的期望;M步骤,迭代改善模型,使得模型收敛到参数的最优值。
HMM模型建立完成后,可以用来处理对测试序列进行预测,同时通过测试序列不断修改模型参数,使得模型更加精确地表示事物的发展规律,能够更精准的解答HMM的三个问题。