前一篇中介绍了用HMM做中文分词,对于未登录词(out-of-vocabulary, OOV)有良好的识别效果,但是缺点也十分明显——对于词典中的(in-vocabulary, IV)词却未能很好地识别。主要是因为,HMM本质上是一个Bigram的语法模型,未能深层次地考虑上下文(context)。对于此,本文将介绍更为复杂的二阶HMM以及开源实现。

1. 前言

n-gram语法模型

n-gram语法模型用来:在已知前面\(n-1\)个词\(w_1, \cdots, w_{n-1}\)的情况下,预测下一个词出现的概率:

\[P(w_n | w_1, \cdots, w_{n-1})
\]

常见的n-gram有Unigram(一元)、Bigram(二元)、Trigram(三元),分别表示当前词出现的概率为自身词频、只与前面一个词相关、只与前面两个词相关;对应的计算公式如下:

\begin{align}

\text{Unigram:} \quad & \hat{P} (w_3) = \frac{f(w_3)}{N} \cr

\text{Bigram:} \quad & \hat{P} (w_3|w_2) = \frac{f(w_2, w_3)}{f(w_2)} \cr

\text{Trigram:} \quad &\hat{P} (w_3|w_1,w_2) = \frac{f(w_1, w_2, w_3)}{f(w_1,w_2)} \

\end{align}

其中,\(N\)为语料中总词数,\(f(w_i)\)为词\(w_i\)在语料中出现的次数。

两种CWS模型

中文分词(Chinese word segmentation, CWS)的统计学习模型大致可以分为两类:Word-Based Generative ModelCharacter-Based Discriminative Model [3]. Word-Based Generative Model采用最大联合概率来对最佳分词方案建模,比如,对于句子\(c_1^{n}=c_1, \cdots, c_n\),最佳分词\(w_1^m=w_1, \cdots, w_m\)应满足:

\begin{equation}

\arg \mathop{\max}\limits_{w_1^m} P(w_1^m)

\end{equation}

此模型可以简化为二阶Markov链(second order Markov Chain)——当前词的转移概率只与前两个词相关,即为Trigram语法模型:

\begin{equation}

P(w_1^m) = \prod_{i=1}{m}P(w_i|w_1{i-1}) \approx \prod_{i=1}{m}P(w_i|w_{i-2}{i-1})

\end{equation}

Character-Based Discriminative Model采用类似与POS(Part-of-Speech)那一套序列标注的方法来进行分词:

\begin{equation}

\arg \mathop{\max}\limits_{t_1^n} P(t_1^n | c_1^n)

\label{eq:pos}

\end{equation}

\(t_i\)表示字符\(c_i\)对应的B/M/E/S词标注。

HMM分词

根据贝叶斯定理,式\eqref{eq:pos}可改写为

\[\begin{aligned}
\arg \mathop{\max}\limits_{t_1^n} P(t_1^n | c_1^n) & = \arg \mathop{\max}\limits_{t_1^n} \frac{P(c_1^n | t_1^n) P(t_1^n)}{P(c_1^n)} \\
& = \arg \mathop{\max}\limits_{t_1^n} P(c_1^n | t_1^n) P(t_1^n)\\
\end{aligned}
\]

HMM做了两个基本假设:齐次Markov性假设与观测独立性假设,即

  • 状态(标注)仅与前一状态相关;

\[P(t_{i}|t_{1}^{i-1}) = P(t_i| t_{i-1})
\]

  • 观测相互独立,即字符相对独立:

\[P(c_1^n|t_1^n) = \prod_{i=1}^{n} P(c_i|t_1^n)
\]

  • 观测值依赖于该时刻的状态,即字符的出现仅依赖于标注:

\[P(c_i|t_1^n) = P(c_i | t_i)
\]

将上述三个等式代入下式:

\[\begin{aligned}
P(c_1^n | t_1^n) P(t_1^n) & = \prod_{i=1}^{n} P(c_i|t_1^n) \times [P(t_n|t_{1}^{n-1}) \cdots P(t_i|t_{1}^{i-1}) \cdots P(t_2|t_1)] \\
& = \prod_{i=1}^{n} [P(c_i|t_i) \times P(t_i|t_{i-1})]\\
\end{aligned}
\]

因此,用HMM求解式子\eqref{eq:pos}相当于

\begin{equation}

\arg \mathop{\max}\limits_{t_1^n} \prod_{i=1}^{n} [P(t_i|t_{i-1}) \times P(c_i|t_i)]

\end{equation}

二阶HMM的状态转移依赖于其前两个状态,类似地,分词模型如下:

\begin{equation}

\arg \mathop{\max}\limits_{t_1^n} \left[ \prod_{i=1}^{n} P(t_i|t_{i-1},t_{i-2}) P(c_i|t_i) \right] \times P(t_{n+1}|t_n)

\label{eq:tnt}

\end{equation}

其中,\(t_{-1},t_0,t_{n+1}\)分别表示序列的开始标记与结束标记。

2. TnT

论文[2]基于二阶HMM提出TnT (Trigrams'n'Tags) 序列标注方案,对条件概率\(P(t_3|t_2, t_1)\)采取了如下平滑(smooth)处理:

\[P(t_3|t_2, t_1)=\lambda_1 \hat{P}(t_3) + \lambda_2 \hat{P}(t_3|t_2) + \lambda_3 \hat{P}(t_3|t_2, t_1)
\]

为了求解系数\(\lambda\),TnT提出如下算法:

算法中,如果分母为0则置式子的结果为0.

3. Character-Based Generative Model

鉴于两种CWS模型的利弊:

  • Word-Based Generative Model高召回IV、低召回OOV;
  • Character-Based Discriminative Model高召回OOV,低召回IV

论文[3]结合两者提出了Character-Based Generative Model:

\[\arg \mathop{\max}\limits_{t_1^n} P([c,t]_1^n)= \arg \mathop{\max}\limits_{t_1^n} \prod_{i=1}^n P([c,t]_i | [c,t]_{i-k}^{i-1})
\]

论文[3]中公式6的连乘下标k应为i,猜测应该是作者写错了。

4. 开源实现Snownlp

isnowfy大神在项目Snownlp实现TnT与Character-Based Discriminative Model;并且在博文中给出两者与最大匹配、Word-based Unigram模型的准确率比较,可以看出Generative Model的准确率较高。Snownlp的默认分词方案采用的是CharacterBasedGenerativeModel

from snownlp import SnowNLP

s = SnowNLP('小明硕士毕业于中国科学院计算所,后在日本京都大学深造')
print('/'.join(s.words))
# 小明/硕士/毕业/于/中国/科学院/计算/所/,/后/在/日本/京都/大学/深造
# Jieba HMM: 小明/硕士/毕业于/中国/科学院/计算/所/,/后/在/日/本京/都/大学/深造

通过分析TnTCharacterBasedGenerativeModel源码,发现作者在求解\eqref{eq:tnt}、Generative Model的最大值都是采用穷举法,导致了较低的分词效率。此外,HanLP的作者hankcs大神给出了TnT算法的Java实现

5. 参考资料

[1] Manning, Christopher D., and Hinrich Schütze. Foundations of statistical natural language processing. Vol. 999. Cambridge: MIT press, 1999.

[2] Brants, Thorsten. "TnT: a statistical part-of-speech tagger." Proceedings of the sixth conference on Applied natural language processing. Association for Computational Linguistics, 2000.

[3] Wang, Kun, Chengqing Zong, and Keh-Yih Su. "Which is More Suitable for Chinese Word Segmentation, the Generative Model or the Discriminative One?." PACLIC. 2009.

[4] isnowfy, 几种中文分词算法的比较

[5] hankcs, 基于HMM2-Trigram字符序列标注的中文分词器Java实现.

【中文分词】二阶隐马尔可夫模型2-HMM的更多相关文章

  1. 【中文分词】隐马尔可夫模型HMM

    Nianwen Xue在<Chinese Word Segmentation as Character Tagging>中将中文分词视作为序列标注问题(sequence labeling ...

  2. 【整理】图解隐马尔可夫模型(HMM)

    写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...

  3. 图解隐马尔可夫模型(HMM)

    写在前面 最近在写论文过程中,研究了一些关于概率统计的算法,也从网上收集了不少资料,在此整理一下与各位朋友分享. 隐马尔可夫模型,简称HMM(Hidden Markov Model), 是一种基于概率 ...

  4. 隐马尔可夫模型(HMM)及Viterbi算法

    HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那是如雷贯耳.那么,这个模型到底长什么样?具体的原理又是什么呢?有什么具体的应用场景呢?本文将会解答这些疑惑.   本文将通过具体形象的例子来引 ...

  5. Viterbi算法和隐马尔可夫模型(HMM)算法

    隐马尔可夫模型(HMM)及Viterbi算法 https://www.cnblogs.com/jclian91/p/9954878.html HMM简介   对于算法爱好者来说,隐马尔可夫模型的大名那 ...

  6. 机器学习中的隐马尔科夫模型(HMM)详解

    机器学习中的隐马尔科夫模型(HMM)详解 在之前介绍贝叶斯网络的博文中,我们已经讨论过概率图模型(PGM)的概念了.Russell等在文献[1]中指出:"在统计学中,图模型这个术语指包含贝叶 ...

  7. 隐马尔可夫模型(HMM)总结

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项(算法过程,调参等注意事项) 5.实现和具体例子 6.适用场合 内容: 1.算法概述 隐马尔科夫模型(Hidden Markov ...

  8. 自然语言处理---用隐马尔科夫模型(HMM)实现词性标注---1998年1月份人民日报语料---learn---test---evaluation---Demo---java实现

    先放上一张Demo的测试图 测试的句子及每个分词的词性标注为:   目前/t 这/rzv 条/q 高速公路/n 之间/f 的/ude1 路段/n 已/d 紧急/a 封闭/v ./w 需要基础知识 HM ...

  9. 隐马尔可夫模型(HMM) 学习笔记

    在中文标注时,除了条件随机场(crf),被提到次数挺多的还有隐马尔可夫(HMM),通过对<统计学习方法>一书的学习,我对HMM的理解进一步加深了. 第一部分 介绍隐马尔可夫 隐马尔可夫模型 ...

  10. 隐马尔可夫模型:HMM

    隐马尔可夫模型求解三大问题实例剖析 HMM 模型如图所示: 一.隐马尔可夫模型定义 隐马尔可夫模型由初始概率分布.状态转移概率分布以及观测概率分布确定. 设 Q(图中的q)是所有可能的状态的集合,V( ...

随机推荐

  1. CSS 选择器及各样式引用方式

    Css :层叠样式表 (Cascading Style Sheets),定义了如何显示HTML元素. 目录 1. 选择器的分类:介绍ID.class.元素名称.符合.层次.伪类.属性选择器. 2. 样 ...

  2. x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法

    这两天学习UWP开发,发现一个很有趣的问题,就是我题目中的描述的. 我习惯了在ResourceDictionary中写样式文件,但是发现用x:Bind时会有问题 如果是写在Style里,则提示 “x: ...

  3. SQL Server-表表达式基础回顾(二十四)

    前言 从这一节开始我们开始进入表表达式章节的学习,Microsoft SQL Server支持4种类型的表表达式:派生表.公用表表达式(CTE).视图.内嵌表值函数(TVF).简短的内容,深入的理解, ...

  4. iOS开发之ReactiveCocoa下的MVVM(干货分享)

    最近工作比较忙,但还是出来更新博客了,今天给大家分享一些ReactiveCocoa以及MVVM的一些东西,干活还是比较足的.在之前发表过一篇博文,名字叫做<iOS开发之浅谈MVVM的架构设计与团 ...

  5. 微信开发笔记(accesstoken)

    access_token分两种 一种是公众号权限获取用,调用cgi-bin接口 ,此种token一个公众号同时只有一个,用这一个就够了. 服务器最好缓存. 用这个token前提是用户关注了此公众号. ...

  6. DockerCon 2016 – 微软带来了什么?

    根据Forrester的调查,接近半数的企业CIO在考虑IT架构的时候更乐于接受开源方案,这主要是基于低成本,避免供应商锁定和敏捷的需求:同时另外一家North Bridge的调研机构的调查显示,20 ...

  7. ASP.NET MVC 5 系列 学习笔记 目录 (持续更新...)

    前言: 记得当初培训的时候,学习的还是ASP.NET,现在回想一下,图片水印.统计人数.过滤器....HttpHandler是多么的经典! 不过后来接触到了MVC,便立马爱上了它.Model-View ...

  8. windows charles response 乱码解决办法

    使用windows 版本的charles来做代理,发现服务端返回的response会出现中文乱码的情况, 查看软件设置,遗憾的是并没有关于编码的选项. 好在charles windows版本安装目录下 ...

  9. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  10. 魅力 .NET:从 Mono、.NET Core 说起

    前段时间,被问了这样一个问题:.NET 应用程序是怎么运行的? 当时大概愣了好久,好像也没说出个所以然,得到的回复是:这是 .NET 程序员最基本的...呵呵! 微软开源,其实不只是对 .NET 本身 ...