您的位置:首页 > 其它

NLP汉语自然语言处理原理与实践 3 词汇与分词技术

2017-12-14 11:58 543 查看
中文分词的研究经历了二十来年,现在看来基本上分为如下三个流派:

机械式分词法(基于词典):

基于语法和规则的分词法:

基于统计的分词法:

针对这些问题,经过20年来的不懈努力,最终较成功地实现了中文词汇的自动切分技术。本章简要介绍了ICTCLAS中文分词算法的来源和现状,以及实现了NShort最短路径算法的一些著名的开源框架。为了读者理解方便,我们选择HaNLP系统提供的开源框架,结合实例,详细分析和讲解著名的NShort最短路径分词法。内容包括:一元词网与原子切分、生成二元词图、NShort最短路径、命名实体识别、细分阶段等内容。

迄今为止,该算法仍旧是中文自然语言处理的最大突破和最重要的成果。

3.1 中文分词

信息处理的目标是使用机器(主要指计算机)能够理解和产生自然语言。而自然语言理解和产生的前提是对语言能够做出全面的解析。汉语词汇是语言中能够独立运用的最小的语言单位,是语言中的原子结构。因此,对中文进行分词就显得至关重要。

什么是词与分词规范
《中文分词十年回顾》

本书涉及的分词规范有两类:

第一类包括《北大(中科院)词性标注》、《现代汉语语料库加工规范---词语切分与词性标注》、《北京大学现代汉语语料库基本加工规范》三篇文章。

第二类为《宾州树库中文分词规范》,http://www.threedweb.cn/thread-1478-1-1.html下载

将汉语的词类主要分为13种:名词、动词、代词、形容词、数词、量词、副词、介词、连词、助词、语气词、叹词和象声词。

两种分词标准
粗粒度分词:将词作为语言处理最小的基本单位进行切分。主要用于NLP的各种应用

细粒度分词:不仅对词汇进行切分,也要为词汇内部的语素进行切分。主要用于搜索引擎,一种常用的方案是,在索引的时候使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。

歧义、机械分词、语言模型
基于机械方法的分词虽然没有得到广泛的应用,但是却揭示了一个重要的语言规律:一个词汇的出现与其上下文环境中出现的词汇序列存在着紧密的关系,如果算法不能反映和处理这种上下文依赖关系,则不能最终达到满意的分词结果。所谓上下文相关性是指,文本中第n个词的出现与其前后n-m到n+m个词有高度的相关性,而与这个范围之外的其他词的相关性较低。我们把[-m, m]范围称为窗口范围。

二元模型,也称为一阶Markov链,将语言模型应用到分词算法中,中文分词的水平将会得到显著的改善,ICTCLAS的中文分词算法就是这方面的最成功的案例,经测试该分词器的准确率为98%,;召回率为98.5%;F1值约为98%。该算法使高精度中文文本处理成为可能。

词汇的构成与未登录词
能够正确地消除切分中的歧义,使计算机处理词汇问题又前进了一大步。但是问题仍旧没有完全解决。所谓词汇,一般都具有三个重要的特性:稳固性、常用性和能产性。

在NLP中,它们被统称为未登录词识别(Named Entity Recognition, NER)。在真实文本的切分中,为登录词总数的大约九成是专有名词,其余的为通用新词或专业术语。因此,未登录词识别就是包括中国人名、译名、日本人名、等。通常将上述专有名词和数字、日期等词称为命名实体。由于命名实体识别不仅是汉语自动分词研究中的关键问题,也是诸如英语等其他语言处理中的重要问题,它的处理效果直接影响到信息抽取、信息检索和机器翻译、文摘自动生成等应用系统的性能。因此,近几年来专有名词的处理(包括识别、翻译等)已经称为自然语言处理研究中一个非常活跃的分支。

HaNLP中文分词的系统就是一种基于构词角度来进行命名实体识别的算法。

笔者认为应从语义类的角度来重新考虑这个问题。基于半监督的条件随机场(semi-CRF)算法,对于处理不同领域的专有名词识别具有较低的成本和较好的效果。

3.2 系统总体流程与词典结构

ICTCLAS汉语分词系统是由张华平博士于2002年设计开发的一套中文分词系统。目前,据笔者所知,各大知名的网络公司都以该算法为分词系统的核心算法。该算法使中文自然语言处理终于从词法分析时代跨入了句法分析时代。http://ictclas.nlpir.org下载。

FreeICTCLAS下载http://www.threedweb.cn/thread-162-1-1.html

中文分词流程
使用Java语言的ICTCLAS算法,比较全面的是HanLP,http://hanlp.linrunsoft.com。其对ICTCALS的算法还原得比较好。另外,它还是一个非常丰富的NLP算法库,除N-最短路径算法之外,还实现了HMM的Veterbi算法,最大熵算法直至CRF算法等,同时,该算法库提供了丰富的语料资源,供用户使用。

源代码http://hanlp.linrunsoft.com/release/hanlp-1.2.8-sources.jar

词典文件https://github.com/hankcs/HanLP

与原ICTCLAS算法,HanLP的实现做了如下修改: P100

使用双数组Tire树读取和检索词典,提高性能

使用提供了更丰富的命名实体识别库:人名、译名、地名、组织机构名等

搜索引擎系统的支持等---

细分阶段使用了最短路径法

命名实体的词典结构

词典的存储结构
双数组Trie结构就是将Trie树用两个整型数组来表示,目的是为了设计一种Trie结构的压缩形式,

分词流程
HanLP不仅提供了NShort分词算法,还提供了基于HMM、CRF、Dijkstra等的多种切分和标注方法。所有这些分词方法都继承自Segment类。

待详细源代码分析
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: