数学之美 系列二 — 谈谈中文分词

数学之美 系列二 — 谈谈中文分词

 

谈谈中文分词

—– 统计语言模型在中文处理中的一个应用

上回我们谈到
利用统计语言模型进行语言处理,由于模型是建立在词的基础上的,对于中日韩等语言,首先需要进行分词。例如把句子 “中国航天官员应邀到美国与太空总署官员开会。”

分成一串词:

中国 / 航天 / 官员 / 应邀 / 到 / 美国 / 与 / 太空 / 总署 / 官员 / 开会。

最容易想到的,也是最简单的分词办法就是查字典。这种方法最早是由北京航天航空大学的梁南元教授提出的。

用 “查字典” 法,其实就是我们把一个句子从左向右扫描一遍,遇到字典里有的词就标识出来,遇到复合词(比如 “上海大学”)就找最长的词匹配,遇到不认识的字串就分割成单字词,于是简单的分词就完成了。这种简单的分词方法完全能处理上面例子中的句子。八十年代,
哈工大的王晓龙博士把它理论化,发展成最少词数的分词理论,即一句话应该分成数量最少的词串。这种方法一个明显的不足是当遇到有二义性 (有双重理解意思)的分割时就无能为力了。比如,对短语 “发展中国家” 正确的分割是“发展-中-国家”,而从左向右查字典的办法会将它分割成“发展-中国-家”,显然是错了。另外,并非所有的最长匹配都一定是正确的。比如“上海大学城书店”的正确分词应该是 “上海-大学城-书店,” 而不是 “上海大学-城-书店”。

九十年代以前,海内外不少学者试图用一些文法规则来解决分词的二义性问题,都不是很成功。90年前后,清华大学的郭进博士用统计语言模型成功解决分词二义性问题,将汉语分词的错误率降低了一个数量级。

利用统计语言模型分词的方法,可以用几个数学公式简单概括如下:

我们假定一个句子S可以有几种分词方法,为了简单起见我们假定有以下三种:

A1, A2, A3, …, Ak,

B1, B2, B3, …, Bm

C1, C2, C3, …, Cn

其中,A1, A2, B1, B2, C1, C2 等等都是汉语的词。那么最好的一种分词方法应该保证分完词后这个句子出现的概率最大。也就是说如果 A1,A2,…, Ak 是最好的分法,那么 (P 表示概率):

P (A1, A2, A3, …, Ak) 〉 P (B1, B2, B3, …, Bm), 并且

P (A1, A2, A3, …, Ak) 〉 P(C1, C2, C3, …, Cn)

因此,只要我们利用上回提到的统计语言模型计算出每种分词后句子出现的概率,并找出其中概率最大的,我们就能够找到最好的分词方法。

当然,这里面有一个实现的技巧。如果我们穷举所有可能的分词方法并计算出每种可能性下句子的概率,那么计算量是相当大的。因此,我们可以把它看成是一个
动态规划(Dynamic Programming) 的问题,并利用 “维特比”(
Viterbi) 算法快速地找到最佳分词。

在清华大学的郭进博士以后,海内外不少学者利用统计的方法,进一步完善中文分词。其中值得一提的是清华大学孙茂松教授和香港科技大学吴德凯教授的工作。

需要指出的是,语言学家对词语的定义不完全相同。比如说 “北京大学”,有人认为是一个词,而有人认为该分成两个词。一个折中的解决办法是在分词的同时,找到复合词的嵌套结构。在上面的例子中,如果一句话包含“北京大学”四个字,那么先把它当成一个四字词,然后再进一步找出细分词 “北京” 和 “大学”。这种方法是最早是郭进在 “Computational Linguistics” (《计算机语言学》)杂志上发表的,以后不少系统采用这种方法。

一般来讲,根据不同应用,汉语分词的颗粒度大小应该不同。比如,在机器翻译中,颗粒度应该大一些,“北京大学”就不能被分成两个词。而在语音识别中,“北京大学”一般是被分成两个词。因此,不同的应用,应该有不同的分词系统。Google 的葛显平博士和朱安博士,专门为搜索设计和实现了自己的分词系统。

也许你想不到,中文分词的方法也被应用到英语处理,主要是手写体识别中。因为在识别手写体时,单词之间的空格就不很清楚了。中文分词方法可以帮助判别英语单词的边界。其实,语言处理的许多数学方法通用的和具体的语言无关。在 Google 内,我们在设计语言处理的算法时,都会考虑它是否能很容易地适用于各种自然语言。这样,我们才能有效地支持上百种语言的搜索。

对中文分词有兴趣的读者,可以阅读以下文献:

1. 梁南元


书面汉语自动分词系统

http://www.touchwrite.com/demo/LiangNanyuan-JCIP-1987.pdf

2. 郭进


统计语言模型和汉语音字转换的一些新结果

http://www.touchwrite.com/demo/GuoJin-JCIP-1993.pdf

3. 郭进


Critical Tokenization and its Properties

http://acl.ldc.upenn.edu/J/J97/J97-4004.pdf

4. 孙茂松


Chinese word segmentation without using lexicon and hand-crafted training data

http://portal.acm.org/citation.cfm?coll=GUIDE&dl=GUIDE&id=980775

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110864.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java免费的开发工具有哪些?分享这15个!

    Java免费的开发工具有哪些?分享这15个!随着Java行业需求增加,Java工程师岗位薪资节节升高,很多小伙伴想要通过快速的方式掌握Java技能。对于初学Java的小伙伴来说了解一些免费的Java开发工具让我们工作、学习更顺畅,那么免费Java开发工具有哪些?针对这点我汇总了一些,可供参考。1、Java免费开发工具:JDK(Java开发工具包)如果你打算用Java开发一些小程序和应用程序,那么首先得给自己准备一个类似于JDK的工具,…

  • c语言之字符型数据类型关键字_字符型系统数据类型主要包括

    c语言之字符型数据类型关键字_字符型系统数据类型主要包括字符型数据类型就是字符1、字符数据的表示字符型数据是用单引号括起来的一个字符。例如:’a’、’b’、’=’、’+’、’?’都是合法字符型数据。在C语言中,字符型数据有以下特点:字符型数据只能用单引号括起来,不能用双引号或其它括号。字符型数据只能是单个字符,不能是字符串。字符可以是字符集中任意字符。但数字被定义为字符型之后就不能参与数值运算。如’5’和5是不同的。’5’是字符型数据,不能参与运算。…

    2022年10月28日
  • pytest的assert_java断言assert

    pytest的assert_java断言assert前言断言是写自动化测试基本最重要的一步,一个用例没有断言,就失去了自动化测试的意义了。什么是断言呢?简单来讲就是实际结果和期望结果去对比,符合预期那就测试pass,不符合预期那就测试failed

  • Opencv cvCircle函数

    Opencv cvCircle函数

  • cisco交换机常用命令[通俗易懂]

    一台全新交换机,不同模式命令大全交换机基本状态显示及各个状态切换:hostname>用户模式hostname#特权模式hostname(config)#全局配置模式hostname(config-if)#接口或者vlan多个接口配置模式hostname(vlan)#…

  • 追番必备,动漫角色也可以用人脸识别了

    追番必备,动漫角色也可以用人脸识别了机器之心报道作者:小舟用人脸识别找到你「老婆」。自七十年代以来,人脸识别已经成为了计算机视觉和生物识别领域研究最多的主题之一。近年来,传统的人脸识别方法已经被基于卷积神经网络(CNN)的…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号