• 搜索引擎技术揭密:中文分词技术


    http://www.williamlong.info/archives/333.html

    信息的飞速增长。使搜索引擎成为人们查找信息的首选工具,Google、百度、中国搜索等大型搜索引擎一直是人们讨论的话题。

    随着搜索市场价值的不断添加。越来越多的公司开发出自己的搜索引擎。阿里巴巴的商机搜索、8848的购物搜索等也陆续面世,自然,搜索引擎技术也成为技术人员关注的热点。

      搜索引擎技术的研究。国外比中国要早近十年。从最早的Archie。到后来的Excite,以及altvista、overture、google等搜索引擎面世,搜索引擎发展至今。已经有十几年的历史,而国内開始研究搜索引擎是在上世纪末本世纪初。在很多领域,都是国外的产品和技术一统天下,特别是当某种技术在国外研究多年而国内才開始的情况下。比如操作系统、字处理软件、浏览器等等,但搜索引擎却是个例外。

    尽管在国外搜索引擎技术早就開始研究。但在国内还是陆续涌现出优秀的搜索引擎,像百度(http://www.baidu.com)等。眼下在中文搜索引擎领域,国内的搜索引擎已经和国外的搜索引擎效果上相差不远。之所以能形成这种局面,有一个重要的原因就在于中文和英文两种语言自身的书写方式不同。这当中对于计算机涉及的技术就是中文分词。

      什么是中文分词:

      众所周知,英文是以词为单位的,词和词之间是靠空格隔开,而中文是以字为单位。句子中全部的字连起来才干描写叙述一个意思。比如。英文句子I am a student。用中文则为:“我是一个学生”。计算机能够非常简单通过空格知道student是一个单词,可是不能非常easy明确“学”、“生”两个字合起来才表示一个词。把中文的汉字序列切分成有意义的词,就是中文分词,有些人也称为切词。我是一个学生,分词的结果是:我 是 一个 学生

      中文分词和搜索引擎:

      中文分词究竟对搜索引擎有多大影响?对于搜索引擎来说,最重要的并非找到全部结果,由于在上百亿的网页中找到全部结果没有太多的意义。没有人能看得完,最重要的是把最相关的结果排在最前面,这也称为相关度排序。中文分词的准确与否,经常直接影响到对搜索结果的相关度排序。笔者近期替朋友找一些关于日本和服的资料。在搜索引擎上输入“和服”。得到的结果就发现了非常多问题。以下就以这个样例来说明分词对搜索结果的影响,在现有三个中文搜索引擎上做測试,測试方法是直接在Google(http://www.google.com)、百度(http://www.baidu.com)上以“和服”为关键词进行搜索:

      在Google上输入“和服”搜索全部简体中文网页。总共结果507,000条,前20条结果中有14条与和服一点关系都没有。

      在百度上输入“和服”搜索网页,总共结果为287,000条,前20条结果中有6条与和服一点关系都没有。

      在中搜上输入“和服”搜索网页。总共结果为26,917条,前20条结果都是与和服相关的网页。

      这次搜索引擎结果中的错误。就是因为分词的不准确所造成的。通过笔者的了解,Google的中文分词技术採用的是美国一家名叫Basis Technology(http://www.basistech.com)的公司提供的中文分词技术。百度使用的是自己公司开发的分词技术。中搜使用的是国内海量科技(http://www.hylanda.com)提供的分词技术。由此可见,中文分词的精确度,对搜索引擎结果相关性和准确性有相当大的关系。

      中文分词技术:

      中文分词技术属于自然语言处理技术范畴,对于一句话,人能够通过自己的知识来明确哪些是词。哪些不是词,但怎样让计算机也能理解?其处理过程就是分词算法。

      现有的分词算法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。

      1、基于字符串匹配的分词方法

      这样的方法又叫做机械分词方法,它是依照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。依照扫描方向的不同,串匹配分词方法能够分为正向匹配和逆向匹配;依照不同长度优先匹配的情况,能够分为最大(最长)匹配和最小(最短)匹配;依照是否与词性标注过程相结合,又能够分为单纯分词方法和分词与标注相结合的一体化方法。

    经常使用的几种机械分词方法例如以下:

      1)正向最大匹配法(由左到右的方向);

      2)逆向最大匹配法(由右到左的方向);

      3)最少切分(使每一句中切出的词数最小)。

    近期看了一下分词算法的东西。整理例如以下:

    以下介绍的分词算法中最简单的正向最大匹配和反向最大匹配。
    这样的两种方法都是机械分词方法。它是依照一定的策略将待分析的汉字串与一个”充分大的”机器词典中的词条进行配,若在词典中找到某个字符串。则匹配成功(识别出一个词)。


    依照扫描方向的不同,串匹配分词方法能够分为正向匹配和逆向匹配;依照不同长度优先匹配的情况。能够分为最大(最长)匹配和最小(最短)匹配;依照是否与词性标注过程相结合,又能够分为单纯分词方法和分词与标注相结合的一体化方法。经常使用的几种机械分词方法例如以下:
    1)正向最大匹配法(由左到右的方向);
    2)逆向最大匹配法(由右到左的方向);
    3)最少切分(使每一句中切出的词数最小)。


    还能够将上述各种方法相互组合,比如。能够将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。因为汉语单字成词的特点,正向最小匹配和逆向最小匹配一般非常少使用。一般说来。逆向匹配的切分精度略高于正向匹配。遇到的歧义现象也较少。统计结果表明,单纯使用正向最大匹配的错误率为1/169。单纯使用逆向最大匹配的错误率为1/245。

    但这样的精度还远远不能满足实际的须要。实际使用的分词系统。都是把机械分词作为一种初分手段,还需通过利用各种其他的语言信息来进一步提高切分的准确率。
    一种方法是改进扫描方式。称为特征扫描或标志切分。优先在待分析字符串中识别和切分出一些带有明显特征的词。以这些词作为断点,可将原字符串分为较小的串再来进机械分词。从而降低匹配的错误率。还有一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助。而且在标注过程中又反过来对分词结果进行检验、调整,从而极大地提高切分的准确率

    定义比較抽象,举个样例来说明正向最大匹配和反向最大匹配。

    样例:’今天来了很多新同事’
    1.正向最大匹配方式,最大长度为5
    今天来了许
    今天来了
    今天来
    今天 ====》 得到一个词–今天
    来了很多新
    来了很多
    来了许
    来了
    来 ====》 得到一个词–来
    了很多新同
    了很多新
    了很多
    了许
    了 ====》 得到一个词–了
    很多新同事
    很多新同
    很多新
    很多 ====》得到一个词– 很多
    新同事
    新同
    新 ====》得到一个词– 新
    同事 ====》得到一个词– 同事

    最后正向最大匹配的结果是:

    /今天/来/了/很多/新/同事/

    2.反向最大匹配方式。最大长度为5
    很多新同事
    多新同事
    新同事
    同事 ====》得到一个词– 同事
    来了很多新
    了很多新
    很多新
    多新
    新 ====》得到一个词– 新
    天来了很多
    来了很多
    了很多
    很多 ====》得到一个词– 很多
    今天来了
    天来了
    来了
    了 ====》得到一个词– 了
    今天来
    天来
    来 ====》得到一个词– 来
    今天 ====》得到一个词– 今天

    最后反向最大匹配的结果是:

    /今天/来/了/很多/新/同事/

    正向最大匹配和反向最大匹配的结果并不一定同样

    样例:’我一个人吃饭’
    1.正向最大匹配方式,最大长度为5
    我一个人吃
    我一个人
    我一个
    我一
    我 ====》得到一个词– 我
    一个人吃饭
    一个人吃
    一个人
    一个 ====》得到一个词– 一个
    人吃饭
    人吃
    人 ====》得到一个词– 人
    吃饭 ====》得到一个词– 吃饭

    最后正向最大匹配的结果是:

    /我/一个/人/吃饭/

    2.反向最大匹配方式。最大长度为5
    一个人吃饭
    个人吃饭
    人吃饭
    吃饭 ====》得到一个词– 吃饭
    我一个人
    一个人
    个人 ====》得到一个词– 个人
    我一
    一 ====》得到一个词– 一
    我 ====》得到一个词– 我

    最后反向最大匹配的结果是:

    /我/一/个人/吃饭/

      还能够将上述各种方法相互组合,比如,能够将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。因为汉语单字成词的特点,正向最小匹配和逆向最小匹配一般非常少使用。一般说来,逆向匹配的切分精度略高于正向匹配,遇到的歧义现象也较少。

    统计结果表明,单纯使用正向最大匹配的错误率为1/169。单纯使用逆向最大匹配的错误率为1/245。但这样的精度还远远不能满足实际的须要。实际使用的分词系统。都是把机械分词作为一种初分手段,还需通过利用各种其他的语言信息来进一步提高切分的准确率。

      一种方法是改进扫描方式,称为特征扫描或标志切分,优先在待分析字符串中识别和切分出一些带有明显特征的词,以这些词作为断点,可将原字符串分为较小的串再来进机械分词,从而降低匹配的错误率。

    还有一种方法是将分词和词类标注结合起来,利用丰富的词类信息对分词决策提供帮助,而且在标注过程中又反过来对分词结果进行检验、调整。从而极大地提高切分的准确率。

      对于机械分词方法,能够建立一个一般的模型。在这方面有专业的学术论文,这里不做具体论述。

      2、基于理解的分词方法

      这样的分词方法是通过让计算机模拟人对句子的理解。达到识别词的效果。其基本思想就是在分词的同一时候进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。

    它通常包含三个部分:分词子系统、句法语义子系统、总控部分。在总控部分的协调下,分词子系统能够获得有关词、句子等的句法和语义信息来对分词歧义进行推断。即它模拟了人对句子的理解过程。

    这样的分词方法须要使用大量的语言知识和信息。

    因为汉语语言知识的笼统、复杂性。难以将各种语言信息组织成机器可直接读取的形式,因此眼下基于理解的分词系统还处在试验阶段。

      3、基于统计的分词方法

      从形式上看。词是稳定的字的组合,因此在上下文中,相邻的字同一时候出现的次数越多。就越有可能构成一个词。因此字与字相邻共现的频率或概率可以较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计,计算它们的互现信息。定义两个字的互现信息。计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可觉得此字组可能构成了一个词。这样的方法仅仅需对语料中的字组频度进行统计,不须要切分词典,因而又叫做无词典分词法或统计取词方法。

    但这样的方法也有一定的局限性,会经常抽出一些共现频度高、但并非词的经常使用字组。比如“这一”、“之中的一个”、“有的”、“我的”、“很多的”等,而且对经常使用词的识别精度差。时空开销大。实际应用的统计分词系统都要使用一部主要的分词词典(经常使用词词典)进行串匹配分词。同一时候使用统计方法识别一些新的词。即将串频统计和串匹配结合起来。既发挥匹配分词切分速度快、效率高的特点。又利用了无词典分词结合上下文识别生词、自己主动消除歧义的长处。

      究竟哪种分词算法的精确度更高,眼下并无定论。

    对于不论什么一个成熟的分词系统来说,不可能单独依靠某一种算法来实现,都须要综合不同的算法。

    笔者了解。海量科技的分词算法就採用“复方分词法”,所谓复方,相当于用中药中的复方概念。即用不同的药才综合起来去医治疾病。相同。对于中文词的识别。须要多种算法来处理不同的问题。

      分词中的难题:

      有了成熟的分词算法。是否就能easy的解决中文分词的问题呢?事实远非如此。中文是一种十分复杂的语言,让计算机理解中文语言更是困难。

    在中文分词过程中,有两大难题一直没有全然突破。

      1、歧义识别

      歧义是指相同的一句话,可能有两种或者很多其它的切分方法。比如:表面的,由于“表面”和“面的”都是词。那么这个短语就能够分成“表面 的”和“表 面的”。这样的称为交叉歧义。像这样的交叉歧义十分常见。前面举的“和服”的样例,事实上就是由于交叉歧义引起的错误。“化妆和服装”能够分成“化妆 和 服装”或者“化妆 和服 装”。

    由于没有人的知识去理解。计算机非常难知道究竟哪个方案正确。

      交叉歧义相对组合歧义来说是还算比較easy处理。组合歧义就必需依据整个句子来推断了。比如,在句子“这个门把手坏了”中。“把手”是个词,但在句子“请把手拿开”中,“把手”就不是一个词;在句子“将军任命了一名中将”中,“中将”是个词,但在句子“产量三年中将增长两倍”中,“中将”就不再是词。这些词计算机又怎样去识别?

      假设交叉歧义和组合歧义计算机都能解决的话,在歧义中另一个难题,是真歧义。真歧义意思是给出一句话。由人去推断也不知道哪个应该是词,哪个应该不是词。

    比如:“乒乓球拍卖完了”,能够切分成“乒乓 球拍 卖 完 了”、也可切分成“乒乓球 拍卖 完 了”,假设没有上下文其它的句子,恐怕谁也不知道“拍卖”在这里算不算一个词。

      2、新词识别

      新词,专业术语称为未登录词。也就是那些在字典中都没有收录过,但又确实能称为词的那些词。

    最典型的是人名,人能够非常easy理解句子“王军虎去广州了”中,“王军虎”是个词,由于是一个人的名字。但要是让计算机去识别就困难了。假设把“王军虎”做为一个词收录到字典中去,全世界有那么多名字。并且每时每刻都有新增的人名,收录这些人名本身就是一项巨大的project。即使这项工作能够完毕。还是会存在问题,比如:在句子“王军虎头虎脑的”中,“王军虎”还能不能算词?

      新词中除了人名以外,还有机构名、地名、产品名、商标名、简称、省略语等都是非常难处理的问题,并且这些又正好是人们常常使用的词,因此对于搜索引擎来说。分词系统中的新词识别十分重要。眼下新词识别准确率已经成为评价一个分词系统好坏的重要标志之中的一个。

      中文分词的应用:

      眼下在自然语言处理技术中,中文处理技术比西文处理技术要落后非常大一段距离,很多西文的处理方法中文不能直接採用。就是由于中文必需有分词这道工序。中文分词是其它中文信息处理的基础。搜索引擎仅仅是中文分词的一个应用。

    其它的比方机器翻译(MT)、语音合成、自己主动分类、自己主动摘要、自己主动校对等等,都须要用到分词。由于中文须要分词。可能会影响一些研究。但同一时候也为一些企业带来机会,由于国外的计算机处理技术要想进入中国市场,首先也是要解决中文分词问题。在中文研究方面。相比外国人来说,中国人有十分明显的优势

      分词准确性对搜索引擎来说十分重要。但假设分词速度太慢,即使准确性再高,对于搜索引擎来说也是不可用的,由于搜索引擎须要处理数以亿计的网页,假设分词耗用的时间过长,会严重影响搜索引擎内容更新的速度。

    因此对于搜索引擎来说,分词的准确性和速度,二者都须要达到非常高的要求。眼下研究中文分词的大多是科研院校,清华、北大、中科院、北京语言学院、东北大学、IBM研究院、微软中国研究院等都有自己的研究队伍。而真正专业研究中文分词的商业公司除了海量科技以外,差点儿没有了。科研院校研究的技术,大部分不能非常快产品化。而一个专业公司的力量毕竟有限。看来中文分词技术要想更好的服务于很多其它的产品,还有非常长一段路。


  • 相关阅读:
    MATLAB画图之多个图以子图的形式合为一个图
    MATLAB画图之图中画局部放大的图中图
    MATLAB画图之自定义图片大小
    "廖雪峰的Git教程"学习笔记
    读书笔记之《程序员必读的职业规划书》
    Python初学者的资源总结
    时间管理去何方
    21天战拖记——Day21:《小强升职记》学习感受(2014-05-24)
    21天战拖记——Day20:整理自己的桌面(2014-05-23)
    21天战拖记——Day19:甘特图的使用(2014-05-22)
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7131317.html
Copyright © 2020-2023  润新知