NLP | 基于字符匹配的中文分词

Posted BBIT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP | 基于字符匹配的中文分词相关的知识,希望对你有一定的参考价值。

本讲主要介绍基于字符匹配的中文分词,包括以下三个算法:

  • 正项最大匹配
  • 逆向最大匹配
  • 双向最大匹配

1.词法分析

首先介绍一下词法分析。语言有两种形式,一种是有空格分割,一种没有空格分割英语是一种有空格分割的语言,而中文是没有空格分割的。

2.词性标注:

在nlp中,需要对词进行许多的研究、处理,比如说分词,比若说词性标注(为分出来的每一个词标注正确的词性:名词,动词,形容词,诸如此类)。这些都是比较基础的处理,为的是之后的更复杂的任务打下基础,方便处理。另外一点要说明的是,在中文中,对于一个词而言,在大多数情况下,他只有一个词性或是它的某一个词性出现的频率要比其他词性出现的频率大得多。但也有例外,比若说:"命令",他的名词或是动词出现的频率都比较高。不过总的来说,利用这种性质,我们使用分词的算法来处理种类词性标注的任务,也是未尝不可的。

3.汉语分词

分词来说,汉语分词比英语分词要麻烦一些,主要是因为类似汉语这一类的语言他们是没有空格分割的。再就是对于词的定义当下并不是十分的明确,准确,这无疑对我们分词造成了很大的困扰(对于这种主观事物来说,本就人为造成,人为影响也会一定程度上影响它的客观性,科学性)。但不管怎么定义,我们学计算机的都希望能有个对计算机友好的定义。

4.算法思想:

一). 正向最大匹配:

正向指的是搜索时从文本串的0下标搜到末尾,最大是指优先搜索最长的词。

首先我们建立了一个词库,里面放了好多词,并且按照词的长度由大到小排列。我们设最长词长度(所含汉字个数) = L

然后在文本串中从头开始,复制一段长为l(初始化为L)的字串w,在词库中进行匹配,如果匹配失败,就讲l -= 1,同时删掉w末尾的字,重新进行该过程。如果匹配成功,则该词从文本串的开头中删掉,作为一个词被划分了出来,对I赋值L重复此过程;

最后如果字段只剩一个字,那么该字作为一个词被划分出来,重新对I赋值,并从上一个步骤接着搜,直到分词结束。

下面举个例子:文本串 ---------> 研究生研究生命的起源 词库 ------------> 研究生 研究 生命 起源

  • 首先,我们的I = 3,取出”研究生”作为字段,一匹配,刚好上来就匹配成功了!NICE!---------> 分词结果 研究生|研究生命的起源
  • 再,我们回复I的值为max = 3;取出下一字段:”研究生”,又是刚好就匹配成功了!NI…CE? ----------> 分词结果 研究生|研究生|命的起源
  • 再,我们回复I的值为max = 3;取出下一字段:“命的起”,失配!I–(2),字段也变成了”命的”,依旧是失配!I–(1),字段变成”命”,作为一个词划分了出来。----------> 分词结果 研究生|研究生|命|的起源
  • 再,过程不说了,直接结果:----------> 分词结果 研究生|研究生|命|的|起源
  • 最后只剩一个”起源”,I就直接射程2即可,已匹配,成功,于是结果就是:----------> 分词结果 研究生|研究生|命|的|起源

二). 逆向最大匹配:

逆向最大匹配算法和正向的极其类似,知识搜索方向变成了从文本串的末尾倒着向文本串的开头搜,具体过程参考上面。

例子:文本串 ---------> 研究生研究生命的起源 词库 ------------> 研究生 研究 生命 起源

  • 首先,我们的I = 3,取出”的起源”作为字段,失配;I变成2,字段变成”起源”,匹配后成功---------> 分词结果 研究生研究生命的|起源
  • 再,我们回复I的值为max = 3;取出下一字段:”生命的”,失配,I变成2,字段变成”命的”,失配,字段变成”的”,作为词划分了出来!----------> 分词结果 研究生|研究生命|的|起源
  • 再,我们回复I的值为max = 3;取出下一字段:“究生命”,失配!I–(2),字段也变成了”生命”,成功----------> 分词结果 研究生研究|生命|的|起源
  • 再,结果:----------> 分词结果 研究生|研究|生命|的|起源
  • 最后----------> 分词结果 研究生|研究|生命|的|起源

和上一个比较了一下,可以看出貌似这个比较理想。其实大量的实验也表明,确实是这个能强一点。

三). 双向最大匹配:

不仅从正向划分了一次,还从逆向划分了一次,得到了两组结果,比较一下:一样?那好办,意见统一了那就决定是你了。不一样,按照一种规则来选取一个我们认为可能是较优的,常常我们会这么选:词数较少的。此数相同就选单字较少的。还一样?Emmm…如果真有这样的例子,那么我可能会随机选取?

稍微总结一下: (别人的)大量实验表明,你相比正向更加有效;双向匹配中,九成以上的结果都是正反相同且分词正确,9%的是两种结果不同但必有一个正确,只有1%的是两个方向匹配结果相同但错误,或是两种方向匹配不同且都错误。

5.分词质量评价:

这是本文最后一部分,在这里列出几个公式以供参考:

1)准确率:

2)召回率:

3)F-评价:综合准确率和召回率的评价指标



/好好学习

/天天向上

以上是关于NLP | 基于字符匹配的中文分词的主要内容,如果未能解决你的问题,请参考以下文章

NLP预备:jieba 中文分词入门(上)

seg:NLP之前向最大匹配分词

中文分词算法

中文分词及其应用

NLP常用术语解析

中文分词原理