数据检索---分词算法

                 在Lucene索引的时候已经引出了分词(Analyser)这个慨念,分词也是信息检索的时候重要的一步。我们知道英文一个单词就是一个词,两者直接使用空格天然的隔开,分词就变得很容易了,而汉语的一个句子里面有很多个汉字组成,里面有基本意义的就是词语,单个汉字往往没有对句子有足够的信息,而词语可以说是最小的语义单位。在检索的时候我们一般都是根据词语来匹配的,词语在整片文字中扮演着重要的角色。

1、基于字符串匹配的分词方法(机械分词方法、基于字典的分词方法)

             它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行匹配。若在词典中找到某个字符串,则匹配成功(识别出一个词)。该方法有三个要素,即分词词典、文本扫描顺序和匹配原则。文本的扫描顺序有正向扫描、逆向扫描和双向扫描。匹配原则主要有最大匹配、最小匹配、逐词匹配和最佳匹配。
              最大匹配法(MM)。基本思想是:假设自动分词词典中的最长词条所含汉字的个数为i,则取被处理材料当前字符串序列中的前i 个字符作为匹配字段,查找分词词典,若词典中有这样一个i 字词,则匹配成功,匹配字段作为一个词被切分出来;若词典中找不到这样的一个i 字词,则匹配失败,匹配字段去掉最后一个汉字,剩下的字符作为新的匹配字段,再进行匹配,如此进行下去,直到匹配成功为止。统计结果表明,该方法的错误率为1/169。
逆向最大匹配法(RMM)。该方法的分词过程与MM 法相同,不同的是从句子(或文章)末尾开始处理,每次匹配不成功时去掉的是前面的一个汉字。统计结果表明,该方法的错误率为1/245。
逐词遍历法。把词典中的词按照由长到短递减的顺序逐字搜索整个待处理的材料,一直到把全部的词切分出来为止。不论分词词典多大,被处理的材料多么小,都得把这个分词词典匹配一遍。
            设立切分标志法。切分标志有自然和非自然之分。自然切分标志是指文章中出现的非文字符号,如标点符号等;非自然标志是利用词缀和不构成词的词(包括单音词、复音节词以及象声词等)。设立切分标志法首先收集众多的切分标志,分词时先找出切分标志,把句子切分为一些较短的字段,再用MM、RMM 或其它的方法进行细加工。这种方法并非真正意义上的分词方法,只是自动分词的一种前处理方式而已,它要额外消耗时间扫描切分标志,增加存储空间存放那些非自然切分标志。
            最佳匹配法(OM)。此法分为正向的最佳匹配法和逆向的最佳匹配法,其出发点是:在词典中按词频的大小顺序排列词条,以求缩短对分词词典的检索时间,达到最佳效果,从而降低分词的时间复杂度,加快分词速度。实质上,这种方法也不是一种纯粹意义上的分词方法,它只是一种对分词词典的组织方式。OM 法的分词词典每条词的前面必须有指明长度的数据项,所以其空间复杂度有所增加,对提高分词精度没有影响,分词处理的时间复杂度有所降低。
由上面的算法,不难看出基于字符串匹配的分词方法的优缺点:
优点:简单,易于实现。
缺点:1)匹配速度慢;2)存在交集型和组合型歧义切分问题;3)词本身没有一个标准的定义,没有统一标准的词集;4)不同词典产生的歧义也不同;5)缺乏自学习的智能性。
2、基于理解的分词方法
          该方法又称基于人工智能的分词方法,其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。它通常包括三个部分:分词子系统、句法语义子系统和总控部分。在总控部分的协调下,分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断,即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。目前基于理解的分词方法主要有专家系统分词法和神经网络分词法等。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式,因此目前基于理解的分词系统还处在试验阶段。
          专家系统分词法。从专家系统角度把分词的知识(包括常识性分词知识与消除歧义切分的启发性知识即歧义切分规则)从实现分词过程的推理机中独立出来,使知识库的维护与推理机的实现互不干扰,从而使知识库易于维护和管理。它还具有发现交集歧义字段和多义组合歧义字段的能力和一定的自学习功能。
神经网络分词法。该方法是模拟人脑并行,分布处理和建立数值计算模型工作的。它将分词知识所分散隐式的方法存入神经网络内部,通过自学习和训练修改内部权值,以达到正确的分词结果,最后给出神经网络自动分词结果。
神经网络专家系统集成式分词法。该方法首先启动神经网络进行分词,当神经网络对新出现的词不能给出准确切分时,激活专家系统进行分析判断,依据知识库进行推理,得出初步分析,并启动学习机制对神经网络进行训练。该方法可以较充分发挥神经网络与专家系统二者优势,进一步提高分词效率。
3、基于统计的分词方法
该方法的主要思想:词是稳定的组合,因此在上下文中,相邻的字同时出现的次数越多,就越有可能构成一个词。因此字与字相邻出现的概率或频率能较好反映成词的可信度。可以对训练文本中相邻出现的各个字的组合的频度进行统计,计算它们之间的互现信息。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时,便可以认为此字组可能构成了一个词。该方法又称为无字典分词。
该方法所应用的主要的统计模型有:N 元文法模型、隐Markov 模型和最大熵模型等。在实际应用中一般是将其与基于词典的分词方法结合起来,既发挥匹配分词切分速度快、效率高的特点,又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
4、基于语义的分词方法
         语义分词法引入了语义分析,对自然语言自身的语言信息进行更多的处理,如扩充转移网络法、知识分词语义分析法、邻接约束法、综合匹配法、后缀分词法、特征词库法、矩阵约束法、语法分析法等。
         扩充转移网络法。该方法以有限状态机概念为基础。有限状态机只能识别正则语言,对有限状态机作的第一次扩充使其具有递归能力,形成递归转移网络(RTN)。在RTN 中,弧线上的标志不仅可以是终极符(语言中的单词)或非终极符(词类),还可以调用另外的子网络名字分非终极符(如字或字串的成词条件)。这样,计算机在运行某个子网络时,就可以调用另外的子网络,还可以递归调用。词法扩充转移网络的使用, 使分词处理和语言理解的句法处理阶段交互成为可能,并且有效地解决了汉语分词的歧义。
矩阵约束法。其基本思想是:先建立一个语法约束矩阵和一个语义约束矩阵, 其中元素分别表明具有某词性的词和具有另一词性的词相邻是否符合语法规则, 属于某语义类的词和属于另一词义类的词相邻是否符合逻辑,机器在切分时以之约束分词结果。


        在分词的过程中有几个很困难的问题:
       1、歧义问题
        歧义切分字段处理一个汉语句子是以连续字串的形式书写的。由于可能存在歧义,分词并不是一个简单的从输入串中发现合法词的过程。一个句子经常对应几个合法词序列,因此,汉语分词中的一个重要问题就是在所有这些可能的序列中选出一个正确的结果。歧义切分是自动分词中不可避免的现象,是自动分词中一个比较棘手的问题。对歧义切分字段的处理能力,严重影响到汉语自动分词系统的精度。实践表明,只用机械匹配进行分词,其精度不可能高,虽然有时也能满足一些标准不高的需要,但不能满足中文信息处理高标准的要求。
      2、未登录词识别问题
      未登录词辨别未登录词包括中外人名、中国地名、机构组织名、事件名、货币名、缩略语、派生词、各种专业术语以及在不断发展和约定俗成的一些新词语。是种类繁多,形态组合各异,规模宏大的一个领域。对这些词语的自动辨识,是一件非常困难的事。

     3、同义词问题

      词语作为语义的重要单位,那么就不能仅仅根据字符来识别,而是应该当做有生命力的活体,有积极意义的对象即其真实的语言意义来看待。生活中很多词具有相同或者相似的意义,好的分词法应该也能把他们等同看待。例如,搜索“电脑”,我们也能找到“计算机”相关的东西。

    4、语境问题
     词语都有所处的语言环境,所谓狗嘴里吐不出象牙。

        作为衡量自动分词的评价准则,一般从下面几个方面来比较分词优劣:
       1、分词正确率
       2、切分速度
       3、功能完备性
       4、易扩充性和可维护性
       5、可移植性






发布了69 篇原创文章 · 获赞 8 · 访问量 15万+
展开阅读全文

spring-boot与elasticsearch整合时如何定义内嵌对象的分词策略

04-01

@Document(indexName = "logmodel", type = "logs", shards = 4, replicas = 1,indexStoreType="fs", refreshInterval = "-1") public class LogES { @Id private String id; private String itcode; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String ip; private String ad_type; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String telephone; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String mobile; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String email; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String firstname; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String firstnameen; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String boss; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String position; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String organization; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String country; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String cityname; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String givenname; private String employeeNumber; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String employeetype; private boolean ismanager; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String bossname; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String bigboss; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String bigbossname; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String enterprise; @JsonFormat (shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'hh:mm:ss.SSS'Z'") private Date dt; private String dev_platform; private String app_version; private String dev_version; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String dev_info; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String dev_imei; @Field(type = FieldType.String,index = FieldIndex.not_analyzed) private String func; @Field( type = FieldType.Auto) private Object content; private CochatResponseEntity cochatResponseEntity; 比如怎么设置content对象内部字段的分词策略,如:@Field(type = FieldType.String,index = FieldIndex.not_analyzed) 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览