上一篇主要讲了文本语料的抽取和预处理的过程,接下来我们就进入核心步骤,也就是对于处理模型的掌握,处理模型的长度会很长。对于不同的模型,它们的优缺点是不同的,因此需要对这部分有一个全面的把握。在深度学习技术应用于自然语言处理领域之前,自然语言处理领域最通用的模型都是基于概率统计的。核心模型是HMM(HiddenMarkovModel)。下面就让本文为读者揭开HMM的面纱吧。提前说明,掌握这个模型需要一定的概率论基础知识。对于这个内容,本文不会过多重复,因为大学本科高等数学基本都包括了概率论这门课。1.概率模型在掌握HMM模型之前,首先需要掌握概率模型。概率模型,顾名思义,就是将学习任务归因于计算变量的概率分布的模型。针对自然语言处理领域,通过概率分布的形式表达不同词之间的关联和差异。概率模型是根据生活中观察到的一些现象,对未知事物进行推测和估计的任务提出的。在概率模型中,这种推测和估计也称为推理。推理的本质是利用已有的或可观测的变量来推断未知变量的条件分布。1.1.生成模型和判别模型目前,概率模型可以分为两类,即生成模型和判别模型。从上面可以看出,概率模型是通过可观测变量来推断未知变量的分布。因此,为了更好的把握生成模型和判别模型的区别,可以将可观测变量命名为X,将需要推断的未知变量命名为Y。那么对于生成模型来说,它需要什么要学习的是X和Y之间的联合概率分布P(X,Y),而判别模型学习的是条件概率分布P(Y|X)。至于联合概率分布和条件概率分布,已经是概率论的基础理论知识,这里不再赘述,不了解的读者可以自行查阅。对于这两个概率分布不同的模型,其各自模型的能力是不同的。例如,对于给定的观测值X,利用条件概率分布P(Y|X),可以很容易地得到未知数Y的值(P(Y)=P(X)*P(Y|X)).因此,对于分类问题,可以直接使用判别模型,即观察对于给定的X,哪一个是Y的概率最大,就可以识别出哪一类。因此,判别模型更适用于分类任务,在分类任务中具有显着优势。对于生成模型,直接将模型用于分类任务是比较困难的,除非将联合概率分布转化为条件概率分布,即将生成模型转化为判别模型用于分类任务。然而,生成模型主要处理的不是分类问题,它有一个特殊的用途。后面说的HMM是一种生成模型,这里先卖一下。1.2.概率图模型在掌握了生成模型和判别模型的主要过程和任务之后,还需要对概率图模型有一个基本的掌握。它是一种概率模型,它使用图结构作为表示工具来表达变量之间的关系。这里的图类似于数据结构中图的结构,即由节点和连接节点的边组成。在概率图模型中,一般用一个节点来表示一个随机变量,节点之间的边表示不同变量之间的概率关系。同时,类比于数据结构,边也分为有向和无向,从而分为有向图模型(贝叶斯网络)和无向图模型(马尔可夫网络)。虽然HMM的名称中有“马尔可夫”,但HMM模型是贝叶斯网络的一种,所以不要在这里混淆。HMM是最常见的动态贝叶斯网络,即对变量序列建模的贝叶斯网络,属于有向图模型。为了更好的理解后续的HMM模型,这里先介绍一下马尔可夫链。马尔可夫链是一个描述一系列可能事件的随机过程模型,而这个系列中的每个事件的概率只依赖于前一个事件。如下图所示:该图是一个简单的马尔可夫链,图中的两个节点分别代表两个事件:晴天和雨天,图中节点之间的边代表事件之间的转移概率。即:晴天过后,仍然是晴天的概率为0.9,下雨的概率为0.1;雨天过后,晴天的概率为0.4,继续下雨的概率为0.6。因此,该模型对今天天气的预测只与昨天的天气有关,与前天及更早的天气无关。因此,从马尔可夫链可以看出,只要知道前一天的天气,就可以推断出今天天气的可能性。2.HMM—HiddenMarkovModel在掌握概率模型的基础上,进一步掌握HMM模型会加深读者对HMM模型的理解。HMM是一种概率模型,即序列的概率模型。2.1.序列模型HMM是一种时间序列概率模型,其中变量分为两组状态变量和观测变量,每组都是一个时间序列,每个状态或观测值对应一个时刻,如图下图(箭头代表依赖关系):上图中,状态变量为,...,观察变量为,...。一般情况下,状态序列是隐藏的,即无法观察到,所以状态变量是一个隐变量,这就是HMM中Hidden的原因。其中,这个隐藏的、不可观察的状态序列是由一条马尔可夫链随机产生的,即HMM中的第一个M就是马尔可夫的意思。同时,一般HMM的状态变量取值是离散的,观测变量的取值可以是离散的也可以是连续的。下面为了说明方便,只讨论状态变量和观测变量都是离散的情况,这也是大多数应用中的情况。2.2.基本假设HMM模型基于两个基本假设:1.假设隐马尔可夫链在任意时刻t的状态只依赖于前一时刻(t-1)的状态,与其他时刻不同该假设也称为齐次马尔可夫假设,公式表示为:P(...)=P(),t=1,2,...k2。假设任意时刻的观测值只依赖于此时马尔可夫链的状态,而不管其他观测值和状态,这种假设也称为观测独立性假设,公式表示为:P(…………)=P()2.3。HMM判定条件决定了一个HMM模型的条件是两个空间,三组参数。这两个空间就是上面提到的观测值空间和状态值空间,即观测空间W和状态空间S。确定这两个空间后,还需要三组参数,即三个概率矩阵。它们是:初始状态概率:模型各个状态在初始时刻的概率,概率矩阵代表各个状态的初始概率值,通常定义为=(,...),表示初始时刻的概率模型状态;状态转移概率:模型在不同状态之间切换的概率。通常,概率矩阵定义为A=,矩阵表示任意时刻状态到下一个状态的概率;输出观测概率:模型根据当前状态获取不同观测值的概率。通常,概率矩阵定义为:B=,矩阵中的矩阵表示状态为时任意时刻获得观测值的概率。(这个概率矩阵是针对有时已知但不知道的情况)。有了上面的状态空间S,观察空间O和三组参数=[A,B,],就可以确定一个HMM模型。2.4.HMM解决问题HMM模型确定后,需要利用该模型解决一系列问题,主要包括概率计算问题、预测问题和学习问题。概率计算问题,即评价问题,给定模型设置参数后,给定观察序列,求其与模型的匹配度。预测问题,即解码问题,给定模型设置参数后,给定一个观察序列,找到与其对应的最有可能(最大概率)的加载序列。学习问题,即训练问题,是给定观测序列和状态序列,估计模型的参数,使得在模型参数下,观测序列出现的概率最大。也就是说,训练模型以更好地用模型表示观察到的数据。以上三个问题中,前两个问题是关于已知模型参数(模型已经确定),如何使用模型,第三个问题是如何通过训练得到模型参数(确定模型)。3.模型学习算法HMM模型的学习算法根据训练数据的不同可以分为监督学习和非监督学习。这两种学习方式也是未来深度学习技术模型中应用最为广泛的。即对于模型,如果训练数据既包括观测值(观测序列)又包括状态值(状态序列),并且两者之间的对应关系已经被标记(即在训练前就确定了对应关系)),那么使用学习算法就是监督学习。否则,对于只有观察序列而没有明确对应的状态序列,采用无监督学习算法进行训练。3.1.监督学习在模型训练过程中,训练数据由观察序列和对应状态序列的样本对组成,即训练数据不仅包含观察序列,还包含每个观察对应的状态值价值。这都是众所周知的。这样,频率可以用来估计概率。首先统计训练数据中的状态值和观测值得到状态空间(,…),观测变量分别为(,…)。那么当样本在t时刻处于状态时,当到达t+1时刻时,状态的频率为,则可以用频率来表示估计的状态转移概率为:当样本状态为观察到的频率为,那么可以用频率来表示观察概率为:而初始状态概率是训练数据中所有具有初始状态的样本的频率。因此,监督学习可以通过对训练数据进行统计估计,得到模型对应的参数=[A,B,]。3.2.无监督学习无监督学习是指训练数据只有观察值(观察序列),但没有相应的状态序列。因此,状态序列S实际上处于隐藏状态,无法直接通过频率来估计概率。对于这个算法,有一个类似前向-后向算法的特殊Baum-Welch算法可以学习。该算法类似于聚类算法中使用的EM算法,即利用迭代的思想来解决数据缺失情况下的参数估计问题。基本过程是根据给定的观测数据估计模型参数的值;缺失数据的值由上一步估计的参数值进行估计,然后根据估计的缺失数据加上之前观察到的数据重新估计参数值,然后反复迭代直到最后收敛,得到迭代结束。4.小结在深度学习模型应用于自然语言处理之前,自然语言领域的序列数据都是通过概率统计模型进行处理的。具体的概率统计模型有两种:HMM和CRF,其核心是HMM模型,CRF也是一种类似于HMM的模型。本文主要关注HMM模型,有助于读者更全面地掌握HMM模型。由于篇幅关系,CRF模型会在后面进行讲解。该模型也是在HMM的基础上进行扩展,适用性低于HMM模型。因此,掌握HMM模型非常重要。同时,对于目前深度学习技术在自然语言处理领域存在的瓶颈问题(难以获得大幅提升的结果),不妨考虑换个思路,使用概率更低的统计模型HMM来处理用它。也许能取得不错的成绩。笔者介绍稀饭,51CTO社区编辑,曾就职于电商人工智能研发中心大数据技术部,从事推荐算法工作。目前智能网络与大数据方向的研究生主要擅长推荐算法、NLP、CV,使用Java、Python、Scala等代码语言。
