中文信息处理核心技术
- 词层面的技术:
- 分词
- 词性标注
- 句子层面的技术
- 句法分析:完全句法分析、依存句法分析
- 句义分析:语义角色标注
- 篇章层面的技术
- 句子关系分析
- 指代消解
中文分词
NLP任务层次
Tockenization:英文只把最基本的词标注
一、为什么分词?
-
词是汉语里表达意义的基本单位,是有意义的最小语法单位
- 词:单字词、多字词,最常见的是二字词。
- 平均词长:24个汉字。
-
分词是许多NLP任务的基础。
• 如:机器翻译、信息抽取、自动问答、信息检索…… (机器翻译(MT)中,如果不分词,无法翻译。大学:big study? )
二、分词为什么难?
- 歧义:一个字符串,对应多种切分形式。
- 未登录词(out of vocabulary ,OOV),包括:
- 命名实体:人名、地名、机构名等(如:北大、
高检……)。同时,汉语实体没有词形变化(英语可能首字母会大写)。 - 新词:不断产生,不断消失 (41%新词会留存)
- 命名实体:人名、地名、机构名等(如:北大、
三、常见的分词系统
- 中科院计算所分词系统:ICTCLAS
- NLPIR-ICTCLAS
- 清华大学分词系统:THULAC
- LTP平台(哈工大社会计算与信息检索研究中心)
- Jieba分词系统
- 做最好的 Python中文分词组件
- 开源:https://github.com/fxsjy/jieba
- 主要算法:基于统计的最短路径词图切分方法,近期
内置了预训练模型+大规模蒸馏的前沿分词模型。 - 三种分词模式:
精确模式:试图将句子最精确地切开,适合文本分析;
全模式:把句子中所有的词都扫描出来, 速度非常快,但不能解决歧义;
搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎。
- STANFOORD CORENLP(斯坦福大学推出的工具)
• 可以支持多种语言。
• 算法核心:基于CRF模型。
• 开源:https://stanfordnlp.github.io/CoreNLP/
四、几种分词方法
分词目标:输入:一个字串,输出:一个带分隔符的词串。
系统评价指标:
- 召回率(Recall):$ R = {输出的正确词数}/测试集中总词数$
- 精确率(Precision): R = 输 出 的 正 确 词 数 / 输 出 总 词 数 R = {输出的正确词数}/输出总词数 R=输出的正确词数/输出总词数
- F测度(F-measure): F = 2 P R / ( P + R ) F=2PR/(P+R) F=2PR/(P+R)
下面是两个系统对给定句子的分词结果:
输入:严守一把手机关了
标准答案:严守一 把 手机 关 了
系统1输出:严守 一把手 机关 了
系统2输出:严守一 把手 机关 了
系统1的召回率为1/5 ,精确率为 1/4。
系统2的召回率为 2/5 ,精确率为 1/2 。
1. 基于词表的分词
1.1 主要思想
把一个句子从左向右扫描一遍,
- 遇到字典里的词就标识出来;
- 遇到复合词(比如 “北京大学”)就找最长的词匹配;
- 遇到不认识的字串就分割成单字词。
最简单的分词法,又称最大匹配法分词或机械分词法。(正向最大匹配法错误率略高于逆向最大匹配法 )
1.2 最大匹配分词法关键问题
- 预先建立词表(知识库)(覆盖率和准确性非常重要)
词的定义是什么?怎么收词?
新词和名实体词是否要收录?收录多少? - 最大词长如何确定?
词长过短,长词会切错
词长过长,效率比较低。
1.3 最大匹配分词法的特点和缺点
- 复杂性不高,可以解决7、8成的问题。
- 大词(复合词)优先。
但是各种应用不同,分词的颗粒度也需要不同。如:MT中,粒度大易于处理;信息检索(IR)中,粒度小,查全率高。
好的处理方法:找到嵌套结构,保留多个结果。 - (缺点)没有考虑上下文,不能解决歧义。
- (缺点)没有解决未登录词的识别。
1.4 早期解决歧义的方法
与分词过程分离,单独进行。
(1)发现歧义:寻找有多种切分可能的字串。
方法:正向最大匹配和逆向最大匹配结果不一致的地方。
(2)基于规则解决歧义:用规则总结歧义现象,但不成功。
1.5 早期解决未登录词识别的方法
与分词过程分离,单独进行。
• 对于不同种类的命名实体,分别击破识别。如人名分为:汉族式、少数民族式、欧美式、日韩式和其他人名译名。
• 新词:?没有好的处理方法
基于词表分词这种思想未登录词识别效果不高!
2.基于统计语言模型的分词
2.1 统计语言模型和Markov独立性假设
- 建模
上个世纪90年前后,清华大学郭进博士用统计语言模型成功解决分词歧义问题,将分词错误率降低一个数量级。
给定一个句子S,由词组成,估计句子S出现在文本中的概率P(S)
P ( S ) = P ( w 0 ) P ( w 1 ∣ w 0 ) P ( w 2 ∣ w 0 w 1 ) … P ( w n − 1 ∣ w 0 w 1 … w n − 2 ) \large P(S) = P(w_0)P(w_1|w_0)P(w_2|w_0w_1)…P(w_{n-1}|w_0w_1…w_{n-2}) P(S)=P(w0)P(w1∣w0)P(w2∣w0w1)…P(wn−1∣w0w1…wn−2)
P ( w 0 ) P(w_0) P(w0)表示第一个词出现的概率, P ( w 1 ∣ w 0 ) P(w_1|w_0) P(w1∣w0)表示在已知第一个词的前提下,第二个词出现的概率,以此类推,但如果n很大的话,要取决于前面的所有词,可能性太多,无法实现。所以引入Markov独立性假设(规定某个词的概率只与它之前有限个词有关)
- 一元模型
- 二元模型,S出现的概率就变为:
P(S) = P(w0)P(w1|w0)P(w2|w1)…P(wn-1|wn-2)
-
计算概率
-
概率最大化
最好的分词方法就是是P(S)最大(句子在文本中出现的概率最大)
S = a r g m a x P ( S i ) S = arg maxP(S_i) S=argmaxP(Si)
2.2 工程细节问题
实际中的一些处理:在log空间下计算概率,因为乘很可能导致跌破下界,所以将乘变为加法
(1) 必须建立分词语料库
数据类型要符合面对的问题领域
规模要足够
质量可靠:保证一致性(前后对同一个词的切分要一样)或准确率。
建立方法:基于词表的方法+人工校对。
(2)参数估计——如何估计 P ( w i ∣ w i − 1 ) P (wi|wi-1) P(wi∣wi−1)和 P w i ) Pwi) Pwi)?
经过简单推理
P ( w i ∣ w i − 1 ) = P ( W i , W i − 1 ) P ( W i − 1 ) P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i}, W_{i-1}\right)}{P\left(W_{i-1}\right)} P(wi∣wi−1)=P(Wi−1)P(Wi,Wi−1)
P ( w i ) = N u m ( W i ) N u m P ( w _ { i} ) = \frac { N u m ( W_i ) } { N u m } P(wi)=NumNum(Wi)
2.3 零概率问题
问题:
语料库中,如果
N
u
m
(
w
i
)
=
0
Num(w_i)=0
Num(wi)=0,则
P
(
w
i
)
=
0
P(w_i)=0
P(wi)=0,我们称模型“不平滑”,可以说,零概率问题是统计语言模型无法回避的。
解决方法:
- 增加语料规模?不能完全解决。
- 参数平滑
加 1 ( a d d − o n e ) 平 滑 : P ( w i ∣ w i − 1 ) = P ( W i , W i − 1 ) + 1 P ( W i − 1 ) + ∣ V ∣ 加1(add-one)平滑 :P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i},W_{i-1}\right)+1}{P\left(W_{i-1}\right)+|V|} 加1(add−one)平滑:P(wi∣wi−1)=P(Wi−1)+∣V∣P(Wi,Wi−1)+1
加 k ( a d d − k ) 平 滑 : P ( w i ∣ w i − 1 ) = P ( W i , W i − 1 ) + k P ( W i − 1 ) + ∣ V ∣ 加k(add-k)平滑:P\left(w_{i} \mid w_{i-1}\right)=\frac{P\left(W_{i},W_{i-1}\right)+k}{P\left(W_{i-1}\right)+|V|} 加k(add−k)平滑:P(wi∣wi−1)=P(Wi−1)+∣V∣P(Wi,Wi−1)+k
- 重新估计(主要方法:古德-图灵估计)
对于没有看见的事件,不认为其发生的概率为0,而是从概率总量中分配一个很小的比例给予这些事件
2.4 Zipf定律
20%的词占据了80%的出现次数。只有少数高频常用词,大多数词很少使用。
2.5 得到概率最大的分词词串
(1)穷举法(效率低)
穷举所有可能的分词词串,并计算其概率。然后得到最大概率输出。
效率低的解决办法:动态规划
(2)动态规划(引入累积概率变量与最大左邻词)
动态规划,保留现阶段最好结果。
引入累积概率变量与最大左邻词,全部计算完之后回溯
以 P ′ ( w i ) P'(w_i) P′(wi)表示累计概率
P ′ ( w 0 ) = P ( w 0 ) P'(w_0) = P(w_0) P′(w0)=P(w0)
P ′ ( w i ) = P ′ ( w i − 1 ) ∗ P ( w i ) P'(w_i) = P'(w_{i-1}) * P(w_i) P′(wi)=P′(wi−1)∗P(wi)
如果wi有若干个左邻词wj, wk, …,其中累计概率最大的候选词称为wi的最佳左邻词
最大概率分词算法——基于一元模型
- 对字串S,从左到右取出全部候选词W1,W2,Wi,········,Wn
- 词典中查出每个候选词的概率值P(w),并记录其全部左邻词;
- 计算每个候选词的累计概率,比较得到其最佳左邻词
- 如果当前词Wn是字串S的尾词,且累计率 P ( w n ) P(w_n) P(wn)最大,则Wn就是S的终点词;
- 从Wn开始,从右到左依次将每个词的最佳左邻词输出,即为S的分词结果。
2.6 基于统计语言模型分词的评价
- 考虑了上下文,输出是基于概率的整体最优结果,自动解决了歧义问题。
- 通过语料库与词表,完成了词的可计算性定义
- 局限:
- 无法解决语言的长距离依赖。
The computer which I had just put intothe machine room on the fifth floor crashed. - 未登录词仍然没有解决。
- 无法解决语言的长距离依赖。
3. 基于字标注分词(主要解决未登录词问题)
把分词过程视为字在词中的位置标注问题,是对字的构词能力进行建模
-
基于字标注的分词:把分词过程视为字在词中的位置标注问题,是对字的构词能力进行建模
若标注标准为:B :词首,M :词中,E:词尾,S:单独成词 以往的分词结果:
/ 上海/ 计划/ 到/ 本/ 世纪/ 末/ 实现
/ 人均/ 国内/ 生产/ 总值/ 五千/美元/ 。
字标注形式的结果:
上/B 海/E 计/B 划/E 到/S 本/S 世/B 纪/E
末/S 实/B 现/E 人/B 均/E 国/B 内/E 生/B 产/E
总/B 值/E 五/B 千/E 美/B元/E。/ S -
重要优势:
- 能平衡地看待词表词和未登录词的识别。
都用统一的字标注过程来实现。不必专门强调词表词信息,也不用专门设计特定的未登录词识别模块。 - 使分词系统的设计大大简化。
- 能平衡地看待词表词和未登录词的识别。
问题一:词的可计算性定义是如何完成的?
1.词的语言学定义
能够独立运用、有意义的最小语法单位。(抽象的,无法用于计算机进行计算)
2.早期信息自动化处理阶段
此阶段词的定义:分词规范+静态词表
- 1993年,推出国家标准《信息处理用现代汉语分词规范》,按词类分别给出了各类分词单位的定义。在许多地方把”结合紧密、使用稳定”视为分词单位的界定准则。
- 建立了总词数为92843条的《信息处理用现代汉语分词词表》
局限:
- 词表定义不灵活。有些词可有多种切分形式。如:有褒有贬…
- 分词单位的界定准则模棱两可,不可操作,或不可计算。无论对词表建立、分词系统的实现还是评测都造成极大的困惑。
评测机制(九十年代的863、973评测 ):
- 组织者不公布相关词表、语料
- 评测结果引入评测人员的主观判断,系统输出结果允许有一定的“柔性”。容易引入心理词(不是词表词,也不是新词),如:规范化,取决于……
- 弊端:标准答案不统一、评测结果不可比
对文本中的词,人都没界定清楚,让计算机去做自动分词不是勉为其难吗?
——黄昌宁,赵海,中文分词十年回顾,中文信息学报,2007,
3.基于统计语言学的处理方法(完成了词的可计算性定义)
分词规范+词表+分词语料库
(1)分词规范、词表主要用于语料标注,要制作高质量的分词语料库,分词规范和词表缺一不可。
(2)评测中有多家机构提供语料库 (不同单位的语料库,分词标准可以不同。但保证每种语料库内部分词标准一致 )
优点:通过不同标准的分词语料,完成了“词”的可计算性定义
问题二:未登录词对分词精度的影响
人们通常把未登录词和分词歧义并列为影响分词精度的两大因素 ,但实际上未登录词对分词精度的影响远大于歧义