首页 百科知识 汉语自动分词

汉语自动分词

时间:2022-10-04 百科知识 版权反馈
【摘要】:而汉字在句子中是连续书写的,虽然汉语基本的书写单位是字,但最基本有意义的单位是词组,所以必须将句子中的词组与词组正确地切分下来,才能对文本进行基于内容的处理。自动分词是基于内容处理中文信息的必要基础,信息检索、机器翻译、文本分类、情感分析、信息抽取、自然语言理解等应用都离不开自动分词,而且自动分词的准确性直接影响着这些上层应用的准确性。汉语自动分词已经被研究了20多年,目前依然是一个“瓶颈”。

实验目的

1.理解汉语自动分词的作用、意义与困难所在。

2.理解并掌握正向与逆向最大分词算法

3.了解常用的分词系统与调用方法。

实验内容

1.设计一个用于正向最大分词的词典存储结构。

2.设计一个在正向最大分词词典数据中检索词条的算法。

3.利用分词软件的API调用接口,实现一个可以对文件进行汉语自动分词的软件。

预备知识

一、自动分词

英文书写的时候,单词之间是以空格分开,可以非常容易地辨别出每一个单词。而汉字在句子中是连续书写的,虽然汉语基本的书写单位是字,但最基本有意义的单位是词组,所以必须将句子中的词组与词组正确地切分下来,才能对文本进行基于内容的处理。这一过程如果用计算机自动完成,我们就称为自动分词。

自动分词是基于内容处理中文信息的必要基础,信息检索、机器翻译、文本分类、情感分析、信息抽取、自然语言理解等应用都离不开自动分词,而且自动分词的准确性直接影响着这些上层应用的准确性。

汉语自动分词已经被研究了20多年,目前依然是一个“瓶颈”。自动分词最主要的两个障碍是歧义处理与未登录词识别问题,同时“到底什么是词?”也是一个仁者见仁智者见智的问题。但值得注意的是,自动分词是基于内容信息处理的关键基础,不同的上层应用其实对分词的需求是有所区别的,有的强调未登录词的识别,有的必须有很好的歧义处理能力。

ACL(Association for Computational Linguistics)组织下面的SIGHAN委员会从2003年开始组织了多次国际汉语自动分词评测,对自动分词的发展起到了很大的促进作用。

二、歧义

中文分词的歧义可以分成交集型歧义和组合型歧义。设有文本串“ABC”,如果“AB”是一个词,同时“BC”也是一个词,那么“ABC”就被称为交集型歧义,也被称为交叉歧义。显然“项目的”就是一个交集型歧义,可以切分成“项目/的”,也可以被切分成“项/目的”。如果文本串“AB”是一个词,同时“A”和“B”也分别是一个词,那么“AB”被称为组合型歧义,也称为覆盖歧义,“操作系统”就是一个典型的组合型歧义,例如,“经过培训,他能熟练操作系统。”“操作系统是一门计算机专业基础课。”。

三、自动分词方法

按照使用的技术,自动分词方法可以分为:基于字符串匹配的分词、基于统计的分词、基于理解的分词。

1.基于字符串匹配的分词又称为机械分词、基于字典的分词,其中常见的有正向最大分词、逆向最大分词、双向最大分词、全切分等。该类分词方法的优点是非常容易实现,基于字符串的分词需要使用一个词库(字典),将待切分的文本串按照词库中的词加以匹配后切分,显然如果词库的数量很大则检索慢,从而导致分词速度低,因此往往需要设计一些便于快速检索的数据结构来为机械分词服务。由于机械分词只是做字符串匹配,所以这类分词本身通常不具有歧义处理的能力,而且如果词库不同,产生的歧义也不同。

2.基于统计的分词方法通过对一定规模的真实文本语料库进行统计学习,建立统计语言模型,再利用统计得到的各种语言信息完成对待切分字符串的切分处理。所使用的统计模型和方法主要有N-Gram模型、隐马尔科夫模型、最大熵模型、条件随机场、支持向量机等。随着语料库规模与质量的增加,语言模型的覆盖面越广,本类方法具有较好的歧义处理和未登录词识别的能力。但这类分词往往与训练的语料库关系密切,待切分的字符串与训练语料库相似,则分词效果好,反之,可能会效果很差。

3.基于理解的分词试图模拟人脑,它把分词的过程看成是知识推理的过程。这类分词主要有基于专家系统神经网络的分词,但由于汉语的语法知识复杂、灵活多变、不能完全枚举,所以推理的规则受限,因此本类的分词目前还难以达到较好的实用性。

目前大多数实用系统中往往以基于字符串匹配分词为基础,综合使用基于统计的分词方法来处理歧义与未登录词。这样既利用了机械分词的简单、速度快的优点,又利用了基于统计分词的处理歧义与未登录词的能力。

四、正向和逆向最大分词方法

正向最大分词和逆向最大分词是最简单的机械分词算法,二者从算法上没有本质区别。但是由于汉语是修饰性的语言,一个句子中往往修饰词语在前,中心主体在后,所以逆向分词的精度略高于正向分词。

同时使用正向最大分词和逆向最大分词算法,就是双向最大分词算法,通过双向分词算法可以找出文本中的交叉型歧义,但对于组合型歧义无能为力。

五、常见分词系统

目前美国斯坦福大学、国内的中科院计算所、天津海量信息技术有限公司等单位都已经开发了可供免费使用的汉语自动分词系统。其中有些是开源系统、有些能提供二进制代码和调用接口。

·ICTCLAS

ICTCLAS(Institute of Computing Technology,Chinese Lexical Analysis System的缩写)是由中国科学院计算技术研究所开发的词法分析系统,它的主要功能有:自动分词、词性标注和未登录词识别等。主要特点有:切分准确率高(973专家评测达到97.58%),中国人名和未登录词处理效果好,它同时提供了C++、Java和C#三种主流编程语言的实现版本,因此非常容易在具体的应用中加以结合使用。

·海量智能分词

它是由海量信息技术有限公司开发的分词系统,同样提供了自动分词和词性标注的功能。其中“海量智能分词研究版”是一个可供免费学习、使用的版本,它没有提供源程序,但提供了C++的调用接口,接口设计精良、调用方便,可以很方便地集成到自己需要的应用中。

·斯坦福分词系统

斯坦福分词系统是一个开源的软件,采用Java语言实现。它是一个基于统计的分词系统,它使用CRF(Condition Random Field,条件随机场)机器学习理论进行歧义处理。该系统提供了两个分词数据模型,一个是基于宾州中文树库,另外一个是基于北京大学为sighan第二届中文分词评测提供的数据。在调用时可以通过参数选择使用具体的分词数据模型。斯坦福分词系统待分词的数据文件可以是GB18030、UTF-8等多种编码,极大地方便了不同环境下的使用。

使用形式如下:

segment ctb|pk filename encoding

参数说明如下:

ctb:宾州中文树库。

pk:北京大学语料库。

filename:待分词的文件名。

encoding:待分词文件的编码,可以是UTF-8,GB18030等Java所支持的编码。

实验原理

一、正向最大分词算法

正向最大分词算法的基本思想:

(1)取待切分汉语句的m个连续字符str作为匹配字段,其中m为分词词典中最长词条的汉字个数。

(2)在分词词典中匹配str。若能匹配,则将这个匹配字段作为一个词切分出来;若不能匹配,则将这个匹配字段的最后一个汉字去掉,剩下的字符串作为新的str进行再次匹配。

(3)重复以上过程,直到切分出所有词为止。

二、正向分词词典结构的设计

为了便于高效检索,正向分词所用的词典也可以采用索引结构,图12.1是一个基于首汉字索引的分词词典索引结构。

图12.1 基于首汉字索引的分词字典结构

在正向最大分词时,根据图12.1中的存储结构,可以将待比对的词典正文缩小到一个较小的范围,从而提高分词效率。但该存储结构不利于词典词条的扩充,在增加词条时不仅需要重新生成索引表,而且要对词典正文部分重新排序。图12.2显示了一个基于首字的二级索引结构,它与12.1相比,存储空间略大,但是词典正文无需排序,因而便于词典正文扩充词条。

图12.2 基于首汉字二级索引的分词字典结构

如果在设计分词字典存储结构时综合使用索引与二叉树,可以达到更加快速的检索效果,但是生成这些结构的字典数据的过程也比较复杂。

三、海量分词系统的API

海量分词系统和分词相关的API接口可以分成三类:第一类是基本接口,用于初始化和卸载分词运行环境,如加载分词字典、分配内存等;第二类用于分词;第三类用于获取分词的结果。

·基本接口函数:

(1)bool HLSplitInit(const char*lpszDataFilePath=NULL);

功能描述:初始化海量分词系统,加载分词用数据。

参数说明:lpszDataFilePath [IN] 分词数据文件路径(不包括文件名)。

当lpszDataFilePath为NULL时,先搜索内存中是否存在分词数据字典,若存在,不再加载;若不存在,加载DLL目录下的字典文件。

返回值:成功标志,成功返回true,否则返回false。

说明:如果初始化失败,通常的原因是初始化路径不正确或数据文件遭到破坏。初始化成功后,可进行多次分词,在不再进行分词时,调用HLFreeSplit函数卸载分词系统。

(2)void HLCloseSplit(HANDLE hHandle);

功能描述:关闭分词结果句柄,释放分词结果所占资源。

返回值:无。

说明:调用此接口前请保证分词词典已加载成功;在每次调用HLOpenSplit后调用此函数释放分词所占资源。

(3)void HLFreeSplit(void);

功能描述:卸载海量自动中文分词系统,释放分词系统所占资源。

(4)HANDLE HLOpenSplit();

功能描述:创建自动中文分词结果句柄。

返回值:返回创建的分词结果句柄,创建失败返回NVALID_HANDLE_VALUE。

说明:调用此接口前请保证分词词典已加载成功。

·分词接口函数:

(1)bool HLSplitWord(HANDLE hHandle,LPCSTR lpText,int iExtraCalcFlag=0);

功能描述:对指定字符串进行分词。

参数说明:hHandle [IN] 分词结果句柄。

lpText [IN] 要分词的字符串。

iExtraCalcFlag [IN] 附加计算标志,默认为0。

返回值:返回成功标志。成功返回true,否则返回false。

说明:调用此接口前请保证分词词典已加载成功,并且分词结果句柄有效。

·获取分词结果的接口函数:

(1)int HLGetWordCnt(HANDLE hHandle);

功能描述:得到分词结果中的词的个数。

参数说明:hHandle [IN] 分词结果句柄。

返回值:分词结果的个数,小于0表示失败。

说明:调用此接口前请保证分词词典已加载成功,并且分词结果句柄有效。

(2)SHLSegWord*HLGetWordAt(HANDLE hHandle,int iIndex);

功能描述:得到指定的分词结果。

参数说明:hHandle [IN] 分词结果句柄。

Iindex [IN] 分词结果下标。

返回值:分词结果,返回NULL表示失败。

说明:调用此接口前请保证分词词典已加载成功,且分词结果句柄有效。

如下的代码片段显示了一个调用海量分词API进行分词处理的宏观过程。

……

if(!HLSplitInit()) //海量分词初始化

cout<<″海量分词初始化失败!″;

return;

……

HANDLE hHandle=HLOpenSplit(); //创建分词句柄

if(hHandle==INVALID_HANDLE_VALUE)

cout<<″创建分词句柄失败!″;

HLFreeSplit(); //卸载分词字典

return;

LPCSTR lpText=_T(″待分词的文本数据″);

bool bRet=HLSplitWord(hHandle,lpText,0);

//对分词结果进行处理

……

HLCloseSplit(hHandle); //关闭分词句柄

……

HLFreeSplit(); //卸载海量分词

实验环境

一、操作系统

Windows 2000以上版本,例如,Windows 2000/XP/Vista/7/8/8.1/10等。

二、开发环境

可以使用Visual Studio 6.0/2003/2005/2008/2010/2012/2013/2015附带的C或C++开发环境。

实验步骤

1.请在实验报告中给出你所设计的一个分词词库的存储结构。

2.请在实验报告中用流程图给出基于上述结构的检索算法。

3.调用海量分词系统API,实现一个基于控制台的分词软件。

(1)在VC中创建一个控制台应用程序,工程名称为:exam12-1。

(2)将海量分词包的include文件夹下的HLPubDef.h和HLSegFunc.h文件复制到工程exam8_1文件夹中,并通过【Project】→【Add To Project】→【Files】菜单将这两个文件添加到exam9_1工程中。

(3)将海量分词包的Lib&dll文件夹下的HLSSplit.lib文件复制到工程所在的文件夹,然后通过Visual C++的【Project】→【Settings】菜单,打开如图12.3所示的选项卡,并在其中的“Object/library modules”中添加HLSSplit.lib,参见图12.3。

图12.3 在工程Link选项卡中添加lib库

(4)编写调用代码,并把相关代码填写在下面。

(5)编译与链接程序。

(6)复制词典数据和dll到debug文件夹。

(7)运行测试,请组织几个句子调用自己编写的程序,并按照如下格式在实验报告中填写测试结果。

思考题

1.思考你设计的分词词库存储结构是否便于添加新词?

2.请查阅文献,思考如何处理中文人名识别?

3.目前的汉语自动分词主要面临哪些困难?请举例加以说明。

4.请自行查阅资料了解R语言中的汉语自动分词包,并下载测试。

参考文献

[1]奉国和,郑伟.国内中文自动分词技术研究综述[J].图书情报工作,2011(02):41-45.

[2]杨尔弘,方莹,刘冬明,等.汉语自动分词和词性标注评测[J].中文信息学报,2006(01):44-49+97.

[3]傅立云,刘新.基于词典的汉语自动分词算法的改进[J].情报杂志,2006(01):40-41.

[4]孙茂松,肖明,邹嘉彦.基于无指导学习策略的无词表条件下的汉语自动分词[J].计算机学报,2004(06):736-742.

[5]李凯,左万利,吕巍.汉语文本中交集型切分歧义的分类处理[J].小型微型计算机系统,2004 (08):1486-1490.

[6]李家福,张亚非.基于EM算法的汉语自动分词方法[J].情报学报,2002(03):269-272.

[7]李亚超,加羊吉,宗成庆,等.基于条件随机场的藏语自动分词方法研究与实现[J].中文信息学报,2013(04):52-58.

[8]黄昌宁,赵海.中文分词十年回顾[J].中文信息学报,2007(03):8-19.

[9]朱晓旭.汉字输入教学系统中词组切分方法的设计[C]//中国中文信息学会汉字编码专业委员会第八届年会、中国计算机学会中文信息技术专业委员会第六届年会暨汉字输入技术与应用研讨会论文集.2002:49-53.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈