NLP(二)N-gram模型和HMM模型用于分词

“一个句子是否合理,就看看它的可能性大小如何”(引自数学之美)。由此,很容易理解语言模型的定义。什么是语言模型(Language Model)?假设 S 表示一个有意义的句子,由一连串特定顺序排列的词 《NLP(二)N-gram模型和HMM模型用于分词》 组成,《NLP(二)N-gram模型和HMM模型用于分词》 为句子的长度。则有: 《NLP(二)N-gram模型和HMM模型用于分词》 ,为了使序列 S 的概率最大化,我们也可以最小化 《NLP(二)N-gram模型和HMM模型用于分词》《NLP(二)N-gram模型和HMM模型用于分词》《NLP(二)N-gram模型和HMM模型用于分词》 都可以被称为语言模型。总而言之,语言模型就是建立了一个基于统计的模型去计算一个序列 S 的可能性。

N-gram就是语言模型。对于前面提到的语言模型从计算上来看,序列的前两个词的条件概率 《NLP(二)N-gram模型和HMM模型用于分词》 不难计算,但是,越到后面的单词可能性越多,无法估算。因此,引入马尔可夫假设:任意一个词出现的概率只和它前面的几个词有关,于是 《NLP(二)N-gram模型和HMM模型用于分词》 ,这就是N-gram模型中的二元模型(bigram)。同理,可得到一元模型(unigram)、三元模型(trigram)的定义。

有了模型的定义,如何求解模型呢,即该如何计算条件概率呢?根据定义: 《NLP(二)N-gram模型和HMM模型用于分词》 ,通过统计语料库(corpus)中的相应词和词对的频数,根据大数定理,只要统计量足够,相对频度就等于概率,即可得到 《NLP(二)N-gram模型和HMM模型用于分词》这其实就是模型根据训练数据集学习的过程。很容易发现,存在一个问题,考虑到汉语词汇的数量级,测试语料中会有词在训练语料库中不会相邻出现,即导致 《NLP(二)N-gram模型和HMM模型用于分词》 (稀疏);另外,还有很多训练语料中不存在的词。这种模型我们称为不平滑。对语言而言,由于数据稀疏的存在,极大似然法不是一种很好的参数估计办法。这时的解决办法,我们称之为“平滑技术”或者 “减值” 。其主要策略是把在训练样本中出现过的事件的概率适当减小,然后把减小得到的概率密度分配给训练语料中没有出现过的事件。

由以上介绍的N-gram内容,我们能容易的理解N-gram的一个应用就是评估一个句子是否合理。我这里主要关注N-gram在分词上的应用。思路很简单,既然给定一个句子,N-gram可以计算出一个概率值,那只要列举出所有可能的分词方式,再分别计算句子概率,选择概率最大的作为最终分词结果就好了。用脚趾头想也知道,穷举法肯定很慢。

所以,一个现成例子:jieba分词不采用HMM模型时的分词算法,就是N-gram的一元模型(unigram)算法。直接使用词频表中单词的频数作为边构造有向无环图(DAG),运用了动态规划来找出词频最大切分组合,即选择使得这个句子出现概率最大的切分组合。如果使用条件概率作为边去构造DAG,那么就是二元模型。jieba算法在这里不展开了。至此,N-gram语言模型介绍完成,需要注意语言模型直接对句子的概率建模,是一个判别模型。

HMM模型是可用于序列标注问题的统计学模型。例如,BEIS标注体系,对句子中的每个字标注“BEIS”其中的一个。HMM中由状态序列(BEIS)生成观测序列(句子)。它的定义很简洁,在已知要标注的句子的情况下,去判断生成标注序列的概率: 《NLP(二)N-gram模型和HMM模型用于分词》 (这里 《NLP(二)N-gram模型和HMM模型用于分词》 对应下图中的状态序列和观测序列)。也可以表示为 《NLP(二)N-gram模型和HMM模型用于分词》 ,其中,A是状态转移矩阵,B是观测概率矩阵, 《NLP(二)N-gram模型和HMM模型用于分词》是初始概率向量。HMM作了两个基本假设:1.齐次马尔可夫假设;2.观测独立性假设。这两个假设也决定了单纯HMM模型用于序列标注的结果不会很好。

《NLP(二)N-gram模型和HMM模型用于分词》
《NLP(二)N-gram模型和HMM模型用于分词》 s是状态序列,o是观测序列。s之间的连线是状态转移矩阵,s与o之间的连线是观测概率矩阵。

通过模型定义,只要算出了 A、B、 《NLP(二)N-gram模型和HMM模型用于分词》 三个参数模型就求解出来了。当有训练数据集时,使用极大似然估计法来估计这三个参数。例如,BEIS标注体系,语料库中分出来10000个单词,则A为4*4矩阵,B为10000*4矩阵, 《NLP(二)N-gram模型和HMM模型用于分词》 为1*4矩阵。这就是学习过程(训练过程)。预测算法采用维特比,不展开。同样的,HMM也可以用于计算一个句子的概率 《NLP(二)N-gram模型和HMM模型用于分词》 (和之前语言模型中提到的 《NLP(二)N-gram模型和HMM模型用于分词》是一回事 ),这就是概率计算问题,一般使用前向算法和后向算法。

可以从三方面比较HMM和N-gram。1.HMM模型是一个生成模型,这区别于N-gram语言模型,通过上面的介绍可以了解HMM没有直接对给定观测值后状态的分布 《NLP(二)N-gram模型和HMM模型用于分词》O 代表观测序列)进行建模,而是对状态序列本身的分布 《NLP(二)N-gram模型和HMM模型用于分词》注意这里的 S 代表状态序列和图中对应,和语言模型中使用的 S 含义不同)和给定状态后观测值的分布 《NLP(二)N-gram模型和HMM模型用于分词》 ;2.学习过程与N-gram相同,HMM在有监督学习的情况下,使用极大似然估计参数;3.预测时,HMM采用维特比算法。

这两个方法没有涉及到对单词的向量编码,只是通过统计训练语料库中单词的频数,去估计一个句子的可能性。

    原文作者:ly洋
    原文地址: https://zhuanlan.zhihu.com/p/57417045
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞