转自http://blog.minidx.com/2008/01/04/352.html
By Minidxer
| January 4, 2008
在《“全文检索(full-text search)”和“搜索引擎(search engine)”的区别和联系
》中我们提及到了中文分词,以及《双数组Trie(Double Array Trie)实现原理的一点剖析
》中阐述了高效率中文分词的实现。接下来让我们抛开双数组Trie的那些公式,从概念上来了解一下分词技术,因为英文分词相对比较简单,这里主要来了解的是中文分词。
英文是以词为单位的,词与词之间上靠空格隔开,而中文是以字为单位,句子中所有的字连起来才能描述一个意思。例如,英文句子I am a
student,翻译成“我是一个学生”。计算机可以很简单的通过空格知道student是一个单词,但是“学”,“生”假如分开来,计算机是无法理解
的。必须把他们合在一起才变得有意义。把中文的汉字序列切分成有意义的词,就是中文分词。再比如“研究生命”,可以划分为“研究生/命”,也可以是“研究
/生命”,假如是人脑可以很明显的判断出这里后者的划分更加的确切,但是计算机要做到这一点却是相当的困难。
现有的分词算法有3种:基于字符串匹配的分词算法、基于理解的分词算法和基于统计的分词算法。
什么是中文分词
何为分词?中文分词与其他的分词又有什么不同呢?分词就是将连续的字序列按照一定的规范重新组合成词序列的过程
。
在上面的例子中我们就可以看出,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段可以通过明显的分界符来简单划界,唯独词没有一
个形式上的分界符,虽然英文也同样存在短语的划分问题,但是在词这一层上,上面的例子中我们也可以看出,中文比之英文要复杂的多、困难的多。
中文分词的意义和作用
要想说清楚中文分词的意义和作用,就要提到智能计算技术。智能计算技术涉及的学
科包括物理学、数学、计算机科学、电子机械、通讯、生理学、进化理论和心理学等等。简单的说,智能计算就是让机器“能看会想,能听会讲”,让计算机像人类
一样可以快速判断出“研究生命”这样短语的切分。要想实现这样的一个目标,首先就要让机器理解人类的语言,只有机器理解了人类的语言文字,才使得人与机器
的交流成为可能。再反观我们人类的语言中,“词是最小的能够独立活动的有意义的语言成分”,所以对于中文来讲,将词确定下来是理解自然语言的第一步,只有
跨越了这一步,中文才能象英文那样过渡到短语划分、概念抽取以及主题分析,以至于自然语言理解,最终达到智能计算的最高境界,实现人类的梦想。目前我们常
用的Google,Baidu,Yahoo这些主流的搜索引擎,还都是基于关键字(Keyword)来匹配结果的,不过可喜的是,已经有很多公司投入了大
量的资金进行着自然语言检索的方式来进行查询,随着研究的进行,计算机可以理解人类的语言从而实现真正意义上的人机对话,那也将不再是遥不可及的而变得指
日可待了。从现阶段的实际情况来看,英文已经跨越了分词这一步,也就是说在词的利用上已经先我们一步,并且已经展现了良好的应用前景,无论是信息检索还是
主题分析的研究都要强于中文,究其根本原因就是中文要通过分词这道难关,只有攻破了这道难关,我们才有希望赶上并超过英文在信息领域的发展,所以中文分词
对我们来说意义重大,可以说直接影响到使用中文的每一个人的方方面面。
中文分词的应用
中文分词主要应用于信息检索、人机交互、信息提取、文本挖掘、中外文对译、中文校对、自动摘要、自动分类等很多方面。下面就以信息检索为例来说明中文分词的应用。
通
过近几年的发展,互联网已经离我们不再遥远。互联网上的信息也在急剧膨胀,在这海量的信息中,各类信息混杂在一起,要想充分利用这些信息资源就要对它们进
行整理,如果由人来做这项工作,已经是不可能的,而如果面对中文信息不采用分词技术,那么整理的结果就过于粗糙,而导致资源的不可用,例如一个我们常见的
比较经典的例子:“制造业和服务业是两个不同的行业”和“我们出口日本的和服比去年有所增长”中都有“和服”,而被当作同一类来处理,结果是检索“和服”
的相关信息,会将他们都检索到,在信息量少的情况下,似乎还能够忍受,如果是海量信息,这样的结果就会令人讨厌了。通过引入分词技术,就可以使机器对海量
信息的整理更准确更合理,在
“制造业和服务业是两个不同的行业”中“和服”不会被当做一个词来处理,那么检索“和服”当然不会将它检索到,使得检索结果更准确,效率也会大幅度的提
高。
所以中文分词的应用会改善我们的生活,使人们真正体会到科技为我所用。目前对分词的研究,大都集中于通用的分词算法,以提高分词准确率为目的。
目前的分词算法中,一些切分精度比较高的算法,切分的速度都比较慢;而一些切分速度快的算法,因为抛弃了一些繁琐的语言处理,所以切分精度都不高。
速度:每秒几十k~几M
切分正确率:80%~98%
中文分词简介和困难
中文分词(Chinese Word
Segmentation):将一个汉字序列切分成一个一个单独的词。比如将“一次性交足100元”切分成“一次/性交/足/100/元”的话,那这样比
较“色”的分词并不是我们所希望的。另外还有就是未登录词识别,比如“施瓦辛格”这个词字典中并没有,如何才能让计算机正确的识别出这是一个词,当然这并
不是中文分词所独有的难点,英文等其他语言也都有这样的问题。
分词规范
:词的概念和不同应用的切分要求
分词算法
:歧义消除和未登录词识别
分词规范方面的困难
汉语中词的界定,也就是消除歧义
“长春市长”:“长春/市长”?“长春市/长”?“长春/市/长” ?
核心词表如何收词?
词的变形结构问题:“看/没/看见” ,“相不相信”
分词算法上的困难
●切分歧义的消除
交集型歧义(交叉歧义):“组合成”
我们/小组/合成/氢气了;组合/成/分子;
–组合型歧义(覆盖歧义):“马上”
他/从/马/上/下/来;我/马上/就/来/了 ;
–“学生会组织义演活动” : “学生/会/组织/义演/活动” or “学生会/组织/义演/活动”?
●未登录词识别
–命名实体:数词、人名、地名、机构名、译名、时间、货币
–缩略语和术语:“超女”、“非典”
–新词:“酱紫”、“星盘”
●先识别已知词还是先识别未登录词
–先识别已知词:“内塔尼亚/胡说”
–先识别未登录词:“胜利取决/于勇/气”
常用评测指标
召回率(Recall) |
|
准确率(Precision) |
|
基于词典和规则的方法
●最大匹配
–正向最大匹配、反向最大匹配和双向最大匹配
–实现简单,而且切分速度快。但无法发现覆盖歧义,对于某些复杂的交叉歧义也会遗漏。
实际试验的结果表明,反向最大匹配的准确率要高于正向最大匹配。
●全切分
–利用词典匹配,获得一个句子所有可能的切分结果。
–时空开销非常大。
●基于理解的分词算法
–模拟人的理解过程,在分词过程中加入句法和语义分析来处理歧义问题。
–难以将各种语言信息组织成机器可直接读取的形式,还处在试验阶段
基于规则的消歧和未登录词识别
这一步其实在语根处理 (stemming)中也可以处理,比如Snowball
就是一个不错的过滤器,但是可惜的是目前的版本出错率比较高。
–规则消歧
CONDITION FIND(R,NEXT,X){%X.ccat=~w}SELECT 1
CONDITION FIND(L,NEAR,X){%X.yx=听|相信|同意}SELECT 1
CONDITION FIND(L,NEAR,X){%X.yx=假如|如果|假设|要是|若}SELECT 2
OTHERWISE SELECT 1
–用规则识别未登录词
LocationName à Person Name LocationNameKeyWord
LocationName à Location Name LocationNameKeyWord
OrganizationName à Organization Name OrganizationNameKeyWord
OrganizationName à Country Name {D|DD} OrganizationNameKeyWord
●N元语法(N-gram)模型
隐马尔可夫模型(HMM)
对于一个随机事件,有一个状态序列{X1X2,…,Xn},还有一个观察值序列{Y1Y2,…,Yn}。隐马模型可以形式化为一个五元组(S,O,A,B),其中:
S ={q1,q2,…,qn}:状态值的有限集合
O={v1,v2,…vm}:观察值的有限集合
A={aij},aij =p(Xt+1=qj|Xt=qi):转移概率
B={bik},bik =p(Ot=vk| Xt=qi):输出概率
={ }, =p(X1=qi):初始状态分布
N
元切分法
(N-gram)
:对一个字符串序列以N为一个切分单位进行切分。
–如二元切分法: “ABCDEFG” →“AB\CD\EF\G”
–交叉二元切分法(Overlapping Bigram):“ABCDEFG” →“AB\BC\CD\DE\EF\FG”
–简单快速,但会产生大量无意义的标引词,导致标引产生的索引文件的空间,以及检索和进行标引的时间都大大增加。同时,因为它的切分单位并非语言学意义上的词语,所以也会导致检索的查准率下降
1.查询切分和文档切分采用相同的分词算法,有一些文件切分错误的词,在查询时也遇到相同的切分错误,所以即使切分阶段错误,但最后相同错误匹配,使得仍然可以正确检索到;
2.有些词被错误的切分成几个部分,尽管这样会导致分词正确率下降,但对于检索来说,最后可以通过结果合并得到正确的结果,分词的错误并不影响检索的性能;
3.分词测得的准确率高低并不是绝对的,有时跟用标准答案有关。这涉及到对词的定义问题,有些标准答案认为是该切分的词,实际上不切分用于检索更加准确一些。如:“国\内”vs”国内“ 、“民进党团”vs”民进\党团“vs”民进党\团“
1.分词算法的时间性能要比较高。
尤其是现在的web搜索,实时性要求很高。所以作为中文信息处理基础的分词首先必须占用尽可能少的时间。
2.分词正确率的提高并不一定带来检索性能的提高。
分词到达一定精度之后,对中文信息检索的影响不再会很明显,虽然仍然还是
有一些影响,但是这已经不是CIR的性能瓶颈。所以片面的一味追求高准确率的分词算法并不是很适合大规模中文信息检索。在时间和精度之间存在矛盾无法兼顾
的情况下,我们需要在二者之间找到一个合适的平衡点。
3.切分的颗粒度仍然可以依照长词优先准则,但是需要在查询扩展层面进行相关后续
处理。
在信息检索中,分词算法只需要集中精力考虑如何消除交叉歧义。对于覆盖歧义,我们可以利用词典的二次索引和查询扩展来解决。
4.未登录词识别的准确率要比召回率更加重要。
要尽量保证未登录词识别时不进行错误结合,避免因此切分出错误的未登录词。如果将单字错误的结合成未登录词了,则有可能导致无法正确检索到相应的文档。
<!-- for paginate posts-->
<!-- Google Adsense Begin -->
<script type="text/javascript"><!--
google_ad_client = "pub-2748932162110627";
/* 1st-Minidx-Article-336-280-01 */
google_ad_slot = "5298684134";
google_ad_width = 336;
google_ad_height = 280;
//-->
</script>
分享到:
相关推荐
jieba “结巴”中文分词:做最好的...搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词 支持自定义词典 MIT 授权协议 详情,见https://github.com/fxsjy/jieba
SCWS(Simple Chinese Word Segmentation)由黄炯峰开发,采用HMM( Hidden Markov Model,隐马尔科夫模型)算法进行分词,具备较高的准确率和效率。该组件支持UTF-8编码,可以很好地处理现代汉语的各种表达方式,...
而IK中文分词器(Intelligent Chinese Word Segmentation)则是专门为处理中文文本而设计的一种分词工具,旨在提高中文信息处理的准确性和效率。 首先,我们需要理解Solr4.1的主要特点和改进。在4.1版本中,Solr...
在PHP中,一个常用的开源中文分词库是php-scws(Simple Chinese Word Segmentation)。它是由Xunsearch团队开发的一个轻量级的分词引擎,支持多种分词模式,包括全模式、简模式和用户自定义模式。php-scws v2.3版本...
- **搜索引擎**:在构建中文搜索引擎时,对用户查询进行分词,以便匹配网页内容。 - **文本分析**:在舆情分析、情感分析等场景中,分词是预处理文本的第一步。 - **推荐系统**:通过分词了解用户的兴趣,为个性化...
在构建高效的搜索引擎或者文本分析系统时,中文分词是至关重要的一步。PHP作为一种广泛使用的服务器端脚本语言,虽然在处理中文方面相较于专门的语言处理库(如Python的jieba)可能略显不足,但依然可以通过一些扩展...
压缩包中的文件“hightman-scws-010940b”很可能就是该分词系统的版本号,"hightman"可能是开发者的用户名或者项目名,"scws"可能是“Simple Chinese Word Segmentation”的缩写,代表简单的中文分词系统。...
"IK中文分词工具"(Intelligent Chinese Word Segmentation,简称IK)就是专门为Solr设计的一款高效、可扩展的中文分词组件。它在Solr6.x版本中被广泛应用,提供了对中文文本的精确和灵活的分词能力。 首先,我们...
在PHP中,有一些现成的中文分词库可以帮助我们快速实现这一功能,如`PSCWS`(PHP Simple Chinese Word Segmentation)、`Snownlp`、`HanLP-PHP`(对Java版HanLP的PHP封装)等。这些库通常提供了简单易用的API,...
SCWS中文分词系统是一种基于PHP的开源中文分词组件,其全称为Simple Chinese Word Segmentation。这个系统设计的目标是为了解决在处理中文文本时遇到的分词问题,因为中文句子不像英文那样以空格作为单词之间的边界...
##### 2.3 中文分词(Chinese Word Segmentation) 中文分词是自然语言处理中的一个重要步骤,尤其是在中文搜索引擎中尤为重要。因为中文没有明显的词与词之间的分隔符,因此需要专门的算法来确定词语边界。对于...
"raycool.plugin.ds.cws"这个名字可能是指一个名为Raycool的Java分词插件,其中“ds”可能代表数据结构或特定的分词策略,“cws”则很可能表示“Chinese Word Segmentation”,即中文分词。这个插件可能包含了特定...
CSW,全称为“Chinese Word Segmentation”,是一种高效的中文分词系统,特别适用于C++编程环境。这个系统在处理中文文本时,能够准确地识别出词语边界,从而为后续的文本分析、信息检索、机器翻译等任务提供基础。 ...
2. **中文分词(Chinese Word Segmentation)**:搜索引擎处理中文内容时,将连续的汉字序列分割成有意义的词语。 3. **索引(Index)**:搜索引擎存储和组织网页内容的数据库,用于快速响应用户的查询。 4. **蜘蛛...
构建垂直搜索引擎涉及的关键技术包括:网页爬虫(Web Crawler)、网页信息抽取(Web Information Retrieval)、中文分词(Chinese Word Segmentation)以及建立与搜索索引(Index)。 ##### 1. 网页爬虫 网页爬虫,即网络...
在IT领域,中文分词是自然语言处理中的关键步骤,特别是在搜索引擎、文本分析和智能推荐系统等应用中。ThinkPHP 3.2 是一个广泛使用的PHP框架,它为开发高效、稳定的应用提供了便利。SCWS(Simple Chinese Word ...
SCWS(Simple Chinese Word Segmentation,简单中文分词系统)是一款专为中文处理设计的开源分词库,尤其适用于PHP编程环境。它由xunsearch项目团队开发,旨在解决中文文本处理中的关键问题——分词,即把连续的汉字...
- PSCWS:全称PHP Simple Chinese Word Segmentation,提供了一个简单的API,方便在PHP中进行中文分词。 3. **分词算法**:常见的中文分词算法有最大匹配法、最少切分法、正向最大匹配法、逆向最大匹配法、双向...
"Adaptive Chinese Word Segmentation with.pdf"可能讨论了自适应的中文分词方法,这种方法能够根据上下文动态调整分词策略;"汉语语料库的若干进展.pdf"可能涵盖了汉语语料库的发展及其在分词和其他NLP任务中的应用...
接着,中文分词(Chinese Word Segmentation)是搜索引擎处理中文文本的关键步骤。由于中文没有明显的分隔符,如空格,所以需要专门的分词算法。常见的中文分词工具有HanLP、jieba分词和IK Analyzer等。这些工具通常...