HMM(Hidden Markov Model),中文称作隐含马尔可夫模型,因俄国数学家马尔可夫而得名。它一般以文本序列数据为输入,以该序列对应得隐含序列为输出。
什么是隐含序列:
序列数据中每个单元包含得隐性信息,这些隐性信息之间也存在一定关联。
举个列子:
给定一段文本: "人生该如何起头"
我们看到的这句话可以叫做: 观测序列
我们可以将这句话以词为单位进行划分得到:
["人生", "该", "如何", "起头"]
那么每个词对应的词性就是它的隐含序列, 如:
["n", "r", "r", "v"]
在NLP领域,HMM用来解决文本序列标注问题。如分词,词性标注,命名实体识别都可以看作是序列标注问题。
HMM模型使用过程简述
首先,HMM模型表示为:lambda = HMM(A, B, pi),其中A, B, pi都是模型的参数,分别称作:转移概率矩阵,发射概率矩阵和初始概率矩阵。
接着,开始训练HMM模型,语料就是事先准备好的一定数量的观测序列及其对应的隐含序列,通过极大似然估计求得一组参数,使由观测序列到对应隐含序列的概率最大。
在训练过程中,为了简化计算,马尔可夫提出一种假设:隐含序列中每个单元的可能性只与上一个单元有关,这个假设就是著名的隐含假设。
训练后,就得到了具备预测能力的新模型:lambda = HMM(A, B, pi), 其中的模型参数已经改变。
之后给定输入序列(x1, x2, ..., xn), 经过模型计算lambda(x1, x2, ..., xn)得到对应隐含序列的条件概率分布。
最后, 使用维特比算法从隐含序列的条件概率分布中找出概率最大的一条序列路径就是我们需要的隐含序列: (y1, y2, ..., yn).
CRF(Conditional Random Fields), 中文称作条件随机场, 同HMM一样, 它一般也以文本序列数据为输入, 以该序列对应的隐含序列为输出.
同HMM一样, 在NLP领域, CRF用来解决文本序列标注问题. 如分词, 词性标注, 命名实体识别.
首先, CRF模型表示为: lambda = CRF(w1, w2, ..., wn), 其中w1到wn是模型参数.
接着, 我们开始训练CRF模型, 语料同样是事先准备好的一定数量的观测序列及其对应的隐含序列.
与此同时我们还需要做人工特征工程, 然后通过不断训练求得一组参数, 使由观测序列到对应隐含序列的概率最大.
训练后, 我们就得到了具备预测能力的新模型: lambda = CRF(w1, w2, ..., wn), 其中的模型参数已经改变.
之后给定输入序列(x1, x2, ..., xn), 经过模型计算lambda(x1, x2, ..., xn)得到对应隐含序列的条件概率分布.
最后, 还是使用维特比算法从隐含序列的条件概率分布中找出概率最大的一条序列路径就是我们需要的隐含序列: (y1, y2, ..., yn).
HMM模型存在隐马假设, 而CRF不存在, 因此HMM的计算速度要比CRF模型快很多, 适用于对预测性能要求较高的场合.
同样因为隐马假设, 当预测问题中隐含序列单元并不是只与上一个单元有关时, HMM的准确率会大大降低, 而CRF不受这样限制, 准确率明显高于HMM.
HMM和CRF模型曾在多种序列任务中表现出色, 伴随NLP工程师度过漫长的一段时期.
但由于近年来深度学习发展迅速, 经典序列模型, 如HMM和CRF, 已经开始慢慢淡出人们的视野.
因此, 我们这里也是对其做了简洁的总结知识, 让大家对其有一定的基本认识.