前言

《NPL基于词典分词(二)》介绍n元语法模型从词语接续的流畅度出发,为全切分词网中的二元接续打分,进而利用维特比算法求解似然概率最大的路径。这种词语级别的模型无法应对 OOV(Out of Vocabulary,即未登录词) 问题: 00V在最初的全切分阶段就已经不可能进人词网了,更何谈召回。

序列标注模型

例如下面一句:

头上戴着束发嵌宝紫金冠,齐眉勒着二龙抢珠金抹额

加粗的就是相对陌生的新词,之前的分词算法识别不出,但人类确可以,是因为读者能够识别“戴着”,后面往往跟着是一个词。

序列标注

序列标注指的是给定一个序列x=x1x2x3...xnx=x_1x_2x_3...x_nx=x1​x2​x3​...xn​ ,找出序列中每个元素对应标签y=y1y2y3...yny=y_1y_2y_3...y_ny=y1​y2​y3​...yn​ 的问题。其中,y 所有可能的取值集合称为标注集{x,y}={(xi,yi)},i=1,2...k\{x,y\} = \{(x_i,y_i)\}, i=1,2...k{x,y}={(xi​,yi​)},i=1,2...k。比如,输入一个自然数序列,输出它们的奇偶性。

通过标注的学习,现在OOV的“9”,也可以判断出其为奇的属性

即通过一个标注数据集学习相关知识后再进行预测。在NLP问题中,x 通常是字符或词语,而 y 则是待预测的组词角色或词性等标签。中文分词、词性标注以及命名实体识别,都可以转化为序列标注问题。

  1. 序列标注与中文分词
    考虑一个字符序列(字符串) x,想象切词器真的是在拿刀切割字符串,如此,中文分词转化为标注集{切,过}的序列标注问题。

    分词标注集并非只有一种,为了捕捉汉字分别作为词语收尾(Begin、End)、词中(Middle)以及单字成词(Single)时不同的成词概率,人们提出了{B,M,E,S}这种最流行的标注集。

  2. 序列标注与词性标注
    词性标注任务是一个天然的序列标注问题:x 是单词序列,y 是相应的词性序列。需要综合考虑前后的单词与词性才能决定当前单词的词性。

  3. 序列标注与命名实体识别
    所谓命名实体,指的是现实存在的实体,比如人名、地名和机构名,命名实体是 OOV 的主要组成部分。可以通过将命名实体类别附着到BMES标签来达到目的。比如,构成地名的单词标注为“B/M/E/S-地名”,以此类推。对于那些不构成命名实体的单词,则统-标注为O ( Outside)。

隐马尔可夫模型

在所有“序列标注”模型中,隐马尔可夫模型( Hidden Markov Model, HMM)是最基础的一种。描述两个时序序列联合分布 p(x,y) 的概率模型:

  • x 序列外界可见(外界指的是观测者),称为观测序列(obsevation sequence);
  • y 序列外界不可见,称为状态序列(state sequence)。

隐马尔可夫模型之所以称为“马尔可夫模型”,”是因为它满足马尔可夫假设。

  • 马尔可夫假设:每个事件的发生概率只取决于前一个事件。

  • 马尔可夫链:将满足马尔可夫假设的连续多个事件串联起来,就构成了马尔可夫链。

观测 x 为单词,状态 y 为词性。

  1. 当前状态 Yt 仅仅依赖于前一个状态 Yt-1
  2. 任意时刻的观测 x 只依赖于该时刻的状态 Yt

状态与观测之间的依赖关系确定之后,隐马尔可夫模型利用三个要素来模拟时序序列的发生过程----即初始状态概率向量、状态转移概率矩阵和发射概率矩阵。

初始状态概率向量

第一个状态 Y1 称为初始状态,假设 y 有 N 种可能的取值,那么 Y1 就是一个独立的离散型随机变量,由 P(y1 | π) 描述。其中

是概率分布的参数向量,称为初始状态概率向量。给定 π ,初始状态 Y1 的取值分布就确定了.比如采用{B,M,E,S}标注集时概率如下:

那么此时隐马尔可夫模型的初始状态概率向量为 π=[0.7,0,0,0.3].

此概念怎么得出来?
当然也是经过大量的文本分析出来的
即,句子第一个词是单字的可能性要小一些

状态转移矩阵

Yt 如何转移到 Yt+1 呢?根据马尔可夫假设,t+1 时的状态仅仅取决于 t 时的状态,既然一共有 N 种状态,那么从状态 Si 到状态 Sj 的概率就构成了一个 N*N 的方阵,称为状态转移矩阵 A:

其中下标 i、j 分别表示状态的第 i、j 种取值。假设昨天今天天气取决于昨天的天气,得出矩矩阵 A如下

把其放在中文分词中

  1. 标签 B 的后面不可能是 S,于是就有 P(Yt+1 = S | Yt = B) = 0。
  2. 词性标注中的“形容词->名词”“副词->动词”也可通过状态转移概率来模拟
  3. 这些概率分布参数不需要手动设置,而是通过语料库上的统计自动学习。

发射概率矩阵

有了状态 Yt 之后,如何确定观测 Xt 的概率分布呢?当前观测 Xt 仅仅取决于当前状态 Yt。也就是说,给定每种 y,x 都是一个独立的离散型随机变量,其参数对应一个向量。 假设观测 x 一共有 M 种可能的取值,则 x 的概率分布参数向量维度为 M。由于 y 共有 N 种,所以这些参数向量构成了 N*M 的矩阵,称为发射概率矩阵B。

其中,第 i 行 j 列的元素下标 i 和 j 分别代表观测和状态的第 i 种和第 j 种取值。再以天气为例子,民间传说告诉我们水藻的状态(词)与天气状态(词性)有一定的概率关系。即观察的状态(水藻的状态)和隐藏的状态(天气的状态)。如何不通过直接观察天气的情况下,来预测天气?以天气系统(晴天、多云、雨天)和 观察到4个等级的海藻湿润情况(干、稍干、潮湿、湿润)构造矩阵B。

把其放在中文分词中,可以算出当前词对应不同词性的概率分布。矩阵B也可以通过语料库上的统计自动学习。

隐马尔可夫模型应用

一个隐马尔科夫模型是一个三元组(pi, A, B)。

一旦一个系统可以作为HMM被描述,就可以用来解决三个基本问题。
其中前两个是模式识别的问题:

  • 给定HMM求一个观察序列的概率(评估);
  • 搜索最有可能生成一个观察序列的隐藏状态序列(解码)。

第三个问题是:

  • 给定观察序列生成一个HMM(学习)。

给定HMM求一个观察序列的概率

给定一个天气及与它密切相关的海藻湿度状态的隐马尔科夫模型(HMM),即(pi, A, B)已知的情况下,我们想找到观察序列的概率。假设连续3天海藻湿度的观察结果是(干燥、湿润、湿透),三天的天气情况如何。对于观察序列以及隐藏的状态,可以将其视为网格:

可以看出,一种计算观察序列概率的方法是找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列概率相加。对于上面那个(天气)例子,将有3^3 = 27种不同的天气序列可能性,因此,观察序列的概率是:
Pr(dry,damp,soggy∣HMM)=Pr(dry,damp,soggy∣sunny,sunny,sunny)+Pr(dry,damp,soggy∣sunny,sunny,cloudy)+Pr(dry,damp,soggy∣sunny,sunny,rainy)+....Pr(dry,damp,soggy∣rainy,rainy,rainy)Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy) Pr(dry,damp,soggy∣HMM)=Pr(dry,damp,soggy∣sunny,sunny,sunny)+Pr(dry,damp,soggy∣sunny,sunny,cloudy)+Pr(dry,damp,soggy∣sunny,sunny,rainy)+....Pr(dry,damp,soggy∣rainy,rainy,rainy)
用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度,前向算法

搜索最有可能生成一个观察序列的隐藏状态序列

通过上述问题,已经列举出所有可能发生显示状态海藻(干燥、湿润、湿透)的隐性状态的概率了,我们只要找寻最大概率所对应的状态序列就行了。
这种方法是可行的,但是通过穷举计算每一个组合的概率找到最可能的序列是极为昂贵的。与前向算法类似,我们可以利用这些概率的时间不变性来降低计算复杂度,维特比算法

给定观察序列生成一个HMM

以隐马尔可夫模型应用于中文分词为例

  1. 语料转换,将语料库的转换成(x,y)二元组,字符-{B,M,E,S}标签

BE S BE
商品 和 服务
BE BE BMME
商品 和服 物美价廉
BE S BE
服务 和 货币

  1. 训练,通过大量训练,得出初始状态,状态转移矩阵A,混淆矩阵B
初始状态 B M E S
概率 1 0 0 0
转移矩阵A B M E S
B 0 1/7 6/7 0
M 0 1/2 1/2 0
E 2/4 0 0 2/4
S 2/2 0 0 0
混淆矩阵B
B 2/9 0 1/9 2/9 0 1/9 0 0 0 1/9 0
M 0 0 0 0 0 0 1/2 1/2 0 0 0
E 0 2/7 0 1/7 2/7 0 0 0 1/7 0 1/7
S 0 0 2/2 0 0 0 0 0 0 0 0
  1. 通过输入的文本(观察序列),求出找出最大的隐藏状态序列。

HanLP 已经实现了基于隐马尔可夫模型的中文分词器 HMMSegmenter

性能评测

如果隐马尔可夫模型中每个状态仅依赖于前一个状态, 则称为一阶;如果依赖于前两个状态,则称为二阶。

算法 P R F1 R(oov) R(IV)
最长匹配 89.41 94.64 91.95 2.58 97.14
二元语法 92.38 96.70 94.49 2.58 99.26
一阶隐马尔可夫模型 78.49 80.38 79.42 41.11 81.44
二阶隐马尔可夫模型 78.34 80.01 79.16 42.06 81.04

可以看到,二阶隐马尔可夫模型的 Roov 有少许提升,但综合 F1 反而下降了。这说明增加隐马尔可夫模型的阶数并不能提高分词器的准确率,单靠提高转移概率矩阵的复杂度并不能提高模型的拟合能力,我们需要从别的方面想办法。

主要参考

《隐马尔可夫模型与序列标注》
《HMM学习最佳范例二》
《HMM学习最佳范例三》
《HMM学习最佳范例四》
《HMM学习最佳范例五》
《HMM学习最佳范例六》

NPL基于词典分词(三)相关推荐

  1. NPL基于词典分词(四)

    前言 <NPL基于词典分词(三)>介绍第一个基于序列标注的中文分词器-隐马尔可夫模型,然而效果并不理想.事实上,隐马尔可夫模型假设人们说的话仅仅取决于一个隐藏的{B.M,E,S序列,这个假 ...

  2. NPL基于词典分词(二)

    前言 <NPL基于词典分词(一)>中我们实现了块儿不准的词典分词,词典分词无法消歧.给定两种分词结果"商品 和服 务"以及"商品 和 服务",词典分 ...

  3. NPL基于词典分词(一)

    前言 自然数据处理里很重要的一环节就是中文分词,它指的是将一段文本拆分为一系列单词的过程,这些单词顺序拼接后等于原文本.而中文分词算法大致分为基于词典规则与基于机器学习这两大派. 什么是词 在基于词典 ...

  4. 基于词典的前缀扫描中文分词

    说明 中文分词是很多文本分析的基础.最近一个项目,输入一个地址,需要识别出地址中包含的省市区街道等单词.与以往的分词技术不同.jieba/hanlp等常用的分词技术,除了基于词典,还有基于隐马尔科夫/ ...

  5. NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】

    分词与NLP关系:分词是中文自然语言处理的基础,没有中文分词,我们对语言很难量化,进而很能运用数学的知识去解决问题.对于拉丁语系是不需要分词的. 拉丁语系与亚系语言区别 拉丁语言系不需要分词,因为他们 ...

  6. NPL系列之分词常用原则以及算法(三)

    上一章简单介绍了分词和分词框架的功能以及基本的使用,那么今天说一下分词常用的原则和算法支撑,因为在实际生产环境中,有时候可能需要根据自己的业务对已有的分词进行扩展或者像一些大型互联网的公司基本上都是直 ...

  7. 中文分词算法 之 基于词典的正向最大匹配算法

    基于词典的正向最大匹配算法(最长词优先匹配),算法会根据词典文件自动调整最大长度,分词的好坏完全取决于词典. 算法流程图如下: Java实现代码如下: /*** 基于词典的正向最大匹配算法* @aut ...

  8. 基于Python实现的词典分词方法或统计分词方法

    资源下载地址:https://download.csdn.net/download/sheziqiong/85787813 资源下载地址:https://download.csdn.net/downl ...

  9. 基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词

    基于词典的正向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤 第一次写中文分词程序,欢迎拍砖. publicclass MM ...

  10. 基于词典的逆向最大匹配中文分词算法,更好实现中英文数字混合分词

    基于词典的逆向最大匹配中文分词算法,能实现中英文数字混合分词.比如能分出这样的词:bb霜.3室.乐phone.touch4.mp3.T恤.实际分词效果比正向分词效果好 publicclass RMM ...

最新文章

  1. IJCAI 2020开幕,杰出论文奖、卓越研究奖、约翰·麦卡锡奖等8项大奖公布 | AI日报...
  2. 2018南京网络赛L题 Magical Girl Haze(分层图+优先队列优化的dijkstra)
  3. 机器学习基础-支持向量机 SVM-17
  4. 【海洋女神原创】一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(二) --基本设置二...
  5. 生鲜配送小程序源码_生鲜社区团购配送系统小程序源码搭建平台模式
  6. 怎么判断到了月初_双春年与无春年怎么区分?2021年是寡妇年吗?
  7. js获取window窗口高度(页面滚动条可滚动高度) - 代码篇
  8. WebSocket转载
  9. 【正在完善】高级CSS特效解析其示范案例
  10. 【ICLR2020】Dream to Control:Learning Behaviors by Latent Imagination
  11. Battle Zone 战争地带
  12. .java中jar_java中的jar
  13. HiJson工具(查看Json)
  14. python高斯核函数_python 实现高斯核与卷积过程
  15. Guideline 2.3.3 -- We noticed that your screenshots do not sufficiently reflect your app in use
  16. 欧姆龙NX102与JTEKT PC10G进行EIP实列ID通信
  17. 《现代操作系统》阅读笔记
  18. python陆股通_要闻:11月“陆股通”渠道外资净买入A股579亿元
  19. 2018最佳计算机配置,2018年主流的组装电脑配置是什么样的?
  20. 重叠社区发现-LFM算法

热门文章

  1. HTML文本框边框宽度,如何设置文本框尺寸 word文本框怎么设置统一大小
  2. java截取文件名后缀
  3. MT6755芯片资料文档
  4. (声明)“天外野草”为本人今后的笔名以及网名
  5. gym100818F-F - Irrational Roots
  6. 计算机博士复试英语自我介绍,博士复试自我介绍中英文
  7. openjdk环境中java项目启动慢的问题
  8. 依山傍水,云淡风轻-----只是传说
  9. 什么才是真正的高级程序员
  10. 黑盒测试用例编写八大方法