基于隐马尔科夫模型的中文分词方法

本文主要讲述隐马尔科夫模及其在中文分词中的应用。 基于中文分词语料库,建立中文分词的隐马尔科夫模型,最后用维特比方法进行求解。

一、隐马尔科夫模型介绍

隐马尔科夫模型中包括两个序列,其中一个是观测序列,另一个是隐藏序列。模型要解决的一个问题是,给定观测序列, 求其对应的隐藏序列。比如对于语音识别,这里的观测序列是语音的每一个序列,隐藏序列是这一串语音对应的文字。 或者对于机器翻译,观测序列是待翻译的语言,而隐藏序列则是目标语言。在解决这类问题时,我们的已知条件是, 第一,隐藏序列中某一个元素到观测序列中某一个元素之间的映射关系。第二是隐藏序列中每个元素转变到另一个元素之间的关系。 并且会有两个假设,第一是每个隐藏元素中的元素,只依赖于它前面一个元素。第二是每一个隐藏元素能够直接确定另一个观测元素。 其中以上两个已知条件可以分别表示为两个矩阵,这个矩阵可以通过分词语料库,根据统计的方法求得。

从数学上理解,给定观测序列求解隐藏序列。一个观测序列可能对应无数个隐藏序列,而我们的目标隐藏序列就是, 概率最大的那一个隐藏序列,也就是说最有可能的那个序列。即求给定隐藏序列这个条件下观测序列概率最大的那个序列的条件概率问题。

虽然隐马尔科夫模型中做了比较强的假设,这里比较强的意思是,现实生活中,可能根本无法满足这种假设条件, 但是它的应用范围却是比较广泛,能够非常简单有效的解决复杂的问题。这个也是统计学方法的一个特点, 基于大量的数据,使用简单的方法便可以解决复杂的问题。这可能是大数据的一种威力吧,如果我们有足够多的数据, 那么我们的模型可以做简化。而如果我们只有少量的数据,则我们必须用非常精确的模型,才可以得到我们想要的结果。 数据模型以及数据量也是一种此消彼长的关系。

下图为隐马尔科夫模型的概率图,其中 \(x\) 代表隐藏序列, \(y\) 代表观察序列。

其中这里的隐藏序列,又称为一个马尔科夫链。马尔科夫链的定义是,序列中每一个元素,只依赖于他前面的一个元素而与其他所有元素不相关。

为了使用隐马尔科夫模型,我们必须知道两个矩阵。第一个矩阵式表示隐藏序列中, 一个元素转变到另一个元素的概率. 如果总的序列的元素数目为n,则这个是一个n乘n的矩阵。 第二个矩阵表示隐藏序列中某个元素转变到观测序列中某个元素的概率. 如果隐藏序列中元素个数为n,观测序列中元素的数目为m, 则这个矩阵的维数为n乘m。 这两个矩阵都可以通过大量的统计数据来求得。

第二、中文分词的隐马尔科夫模型

中文分词要解决的问题是,给定一段中文文字,将其划分为一个个单独的词或者单字。中文分词是所有后续自然语言处理的基础。 如果将连续的中文文字看作是观测序列,将每个文字所对应的分词状态看作是隐藏序列,每个字的分子状态可能有两个值, 一个表示这个字是某一个词的词尾,用字母E表示。另一个表示这个字不是某一个词的词尾,用字母B表示。 则中文分词问题可以看作是一个标准的隐马尔科夫模型。实际中将每个字的分子状态表示为四个可选的值。 词的开始,词的中间,词的结尾,单字成词。分别用bmes表示。

第三、中文分词语料库

在网上可以免费下载,北京大学和香港大学提供的中文分词语料库。这个语料库实际上是一个txt的文档, 文档中每个单独的词用两个空格隔开。 根据分词语料库,我们可以求得隐马尔科夫模型中的两个参数矩阵. 根据大数定理,概率等于次数的比值。因此为了模型的准确性, 我们必须有大量的语料数据来计算模型的参数。

第四、使用维特比算法进行求解

给定马尔科夫模型中的两个参数以及一个观测序列,求解隐藏序列的问题,可以看作是一个类似于图论中的最短路径问题.

维特比算法使用动态规划的方法进行求解。动态规划的子问题是,对于第 \(i\) 列的每一个元素 \(A_j\), 以这个元素为最后一个节点的最短路径。如果知道第 \(i\) 列的每一个元素的最短路径,那么第 \(i+1\) 列的每个元素的最短路径变可求得.

最终的结果就是第 \(n\) 列中每一个元素的最短路径中值最小的那一个元素所对应的最短路径。

第五、代码实现

nlp-word-segmentation

a = 1
# print(a)
def foo(a):
  return a+1
print("bbbb cccc ")

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老秦求学

基于Keras的imdb数据集电影评论情感二分类

二分类可能是机器学习最常解决的问题。我们将基于评论的内容将电影评论分类:正类和父类。

4013
来自专栏机器学习、深度学习

物体计数--Learning To Count Objects in Images

Learning To Count Objects in Images NIPS 2010 http://www.robots.ox.ac.uk/~v...

2839
来自专栏PPV课数据科学社区

这是一份文科生都能看懂的线性代数简介

选自Medium 作者:Niklas Donges 机器之心编译 参与:Tianci LIU、思源 线性代数的概念对于理解机器学习背后的原理非常重要,尤其是在深...

34610
来自专栏算法channel

机器学习决策树:提炼出分类器算法

? 前面三天推送了决策树的基本原理和选择最佳分裂特征的几种公式,用到决策树一般都会出现过拟合问题,因此需要对决策树进行剪枝,阐述了常用的几种剪枝的方法(这些方...

3528
来自专栏yw的数据分析

R语言通过loess去除某个变量对数据的影响

  当我们想研究不同sample的某个变量A之间的差异时,往往会因为其它一些变量B对该变量的固有影响,而影响不同sample变量A的比较,这个时候需要对samp...

4378
来自专栏大数据挖掘DT机器学习

机器学习模型的特性

机器学习模型中有许多种不同方法可以用来解决分类和回归问题。对同一个问题来说,这些不同模型都可以被当成解决问题的黑箱来看待。然而,每种模型都源自于不同的...

35211
来自专栏人工智能LeadAI

线性回归与最小二乘法 | 机器学习笔记

这篇笔记会将几本的线性回归概念和最小二乘法。 在机器学习中,一个重要而且常见的问题就是学习和预测特征变量(自变量)与响应的响应变量(应变量)之间的函数关系 ...

3507
来自专栏游戏开发那些事

【Unity3d游戏开发】Unity3D中的3D数学基础---向量

向量是2D、3D数学研究的标准工具,在3D游戏中向量是基础。因此掌握好向量的一些基本概念以及属性和常用运算方法就显得尤为重要。在本篇博客中,马三就来和大家一起回...

1351
来自专栏IT派

深度学习入门实战

导语:在本文的开始前,强烈推荐两个深度学习相关的视频集 1.台湾李宏毅教授的ML 2016,清晰明了,很多晦涩的原理能让你看了也能明白:https://www....

3327
来自专栏AI研习社

深度学习自动编码器还能用于数据生成?这篇文章告诉你答案

什么是自动编码器 自动编码器(AutoEncoder)最开始作为一种数据的压缩方法,其特点有: 跟数据相关程度很高,这意味着自动编码器只能压缩与训练数据相似...

3716

扫码关注云+社区

领取腾讯云代金券