自然语言处理03

1、1.1分次的概念(分词的正向最大、逆向最大、双向最大的匹配法)
1、正向最大匹配算法

  • 正向最大匹配算法(MM)的思想是假设自动分词中最长词条所含汉字的个数为n,
    则截取需要分词文本中当前字符串序列中的前n个字符作为匹配字段,查找分词词典,若词典中有这样一个n字词那么就匹配成功,匹配字段作为一个词被切分出来;若词典中找不到这样的一个n字词那么匹配失败, 匹配字段去掉最后一个汉字,
    剩下的字符作为新的匹配字段再进行匹配,如此进行下去,直到匹配成功为止。因为停用词对后续文本处理可能会造成干扰,所以在用正向最大匹配算法分词的过程中直接去除了停用词。具体步骤如下:

  • S1、导入分词词典words.txt,存储为字典形式dic、导入停用词词典stoplis.txt
    ,存储为字典形式stoplis、需要分词的文本文件 test.txt,存储为字符串chars

  • S2、遍历分词词典,找出最长的词,其长度为此算法中的最大分词长度max_chars

  • S3、创建空列表words存储分词结果

  • S4、初始化字符串chars的分词起点n=0

  • S5、判断分词点n是否在字符串chars内,即n < len(chars) 如果成立,则进入下一步骤,否则进入S9

  • S6、根据分词长度i(初始值为max_chars)截取相应的需分词文本chars的字符串s

  • S7、判断s是否存在于分词词典中,若存在,则分两种情况讨论,一是s是停用词,那么直接删除,分词起点n后移i位,转到步骤5;二是s不是停用词,那么直接添加到分词结果words中,分词起点n后移i位,转到步骤5;若不存在,则分两种情况讨论,一是s是停用词,那么直接删除,分词起点后移i位,转到步骤5;二是s不是停用词,分词长度i>1时,分词长度i减少1,转到步骤6
    ,若是此时s是单字,则转入步骤8;

  • S8、将s添加到分词结果words中,分词起点n后移1位,转到步骤5

  • S9、将需分词文本chars的分词结果words输出到文本文件result.txt中

逆向最大匹配法和正向匹配法原理一样,区别在于截取方向是从右向左。双向最大匹配法是同时考虑正向和逆向最大匹配法,然后进行比较,最后取最优的一种方法。

2.1 语言模型中unigram、bigram、trigram的概念:
通俗理解:
unigram 一元分词,把句子分成一个一个的汉字
bigram 二元分词,把句子从头到尾每两个字组成一个词语
trigram 三元分词,把句子从头到尾每三个字组成一个词语.

N元文法模型(N-gram)模型,该模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。我们给定一个词,然后猜测下一个词是什么。当我说“艳照门”这个词时,你想到下一个词是什么呢?我想大家很有可能会想到“陈冠希”,N-gram模型的主要思想就是这样的。

在这里插入图片描述

其中,w值是指用全切分方法切分出来的词语。基于全切分最大概率路径的切分算法也是需要依赖词典,全切分在实际使用过程,一般会通过词典将所有成词的切分方式找出来构成有向无环图。第一阶段的中文分词相比,它也是无法完成识别新词,但是歧义词识别的问题基本被解决。在实际使用的工业分词系统中,词典中的词一般会带有词频属性。同时,还会有一份词与词之间的跳转频率表,最大概率的计算往往是基于词频和词之间的跳转频率进行的。

全切分算法能取得所有可能的切分形式,它的句子覆盖率和分词覆盖率均为100%,但全切分分词并没有在文本处理中广泛地采用,原因有以下几点:

  • 全切分算法只是能获得正确分词的前提,因为全切分不具有歧义检测功能,最终分词结果的正确性和完全性依赖于独立的歧义处理方法,如果评测有误,也会造成错误的结果。
  • 全切分的切分结果个数随句子长度的增长呈指数增长,一方面将导致庞大的无用数据充斥于存储数据库;另一方面当句长达到一定长度后,由于切分形式过多,造成分词效率严重下降。

基于规则的分词法
从03年至今,中文分词由基于词的方法开始向基于字的方法转变。当前的方法都是首先根据语料训练分词模型,然后对每一个字进行标注,最后根据标注结果来进行分词。其实就是根据语料训练分类模型,对每一个字进行类别标注,最后根据类别进行分词。这类分词基于人工标注的词性和统计特征,对中文进行建模,即根据观测到的数据(标注好的语料)对模型参数进行估计,即训练。在分词阶段再通过模型计算各种分词出现的概率,将概率最大的分词结果作为最终结果。这类分词算法能很好处理歧义和未登录词问题,效果比前一类效果好,但是需要大量的人工标注数据,以及较慢的分词速度。最典型的方法就是HMM和CRF,其中,CRF比HMM有更弱的上下文无关性假设,当然效果要好一些。

隐马尔科夫模型(Hidden Markov Model, HMM)
全切分这种方法存在两个致命的缺陷:一个缺陷是参数空间过大,不可能实用化;另外一个缺陷是数据稀疏严重。为了解决这个问题,我们引入了马尔科夫假设:一个词的出现仅仅依赖于它前面出现的有限的一个或者几个词。如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为bigram。即

P(T) =P(W1W2W3…Wn)=P(W1)P(W2|W1)P(W3|W1W2)…P(Wn|W1W2…Wn-1)≈P(W1)P(W2|W1)P(W3|W2)…P(Wn|Wn-1)

如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为trigram。在实践中用的最多的就是bigram和trigram了,而且效果很不错。高于四元的用的很少,因为训练它需要更庞大的语料,而且数据稀疏严重,时间复杂度高,精度却提高的不多。一般的小公司,用到二元的模型就够了,像Google这种巨头,也只是用到了大约四元的程度,它对计算能力和空间的需求都太大了。

设w1,w2,w3,…,wn是长度为n的字符串,规定任意词wi只与它的前两个相关,得到三元概率模型。以此类推,N元模型就是假设当前词的出现概率只同它前面的N-1个词有关。这是一种全切分方法。它不依靠词典,而是将文章中任意两个字同时出现的频率进行统计,次数越高的就可能是一个词。它首先切分出与词表匹配的所有可能的词,运用统计语言模型和决策算法决定最优的切分结果。它的优点在于可以发现所有的切分歧义并且容易将新词提取出来。

结巴中文分词采用的算法

基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)
采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法
目前结巴分词支持三种分词模式:

精确模式,试图将句子最精确地切开,适合文本分析;
全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
项目地址:

Python版本:https://github.com/fxsjy/jieba

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值