中文分词综述

来源:互联网 发布:淘宝发货人信息怎么改 编辑:程序博客网 时间:2024/06/06 16:37

目录

  1. 中文分词研究背景及意义
  2. 传统中文分词方法介绍
    字符匹配有称机械分词
    基于理解的分词
    基于统计的分词
  3. 最近几年中文分词研究进展
    基于字符的中文分词
    基于词的中文分词

中文分词研究背景及意义

和大部分西方语言不同,书面汉语的词语之间没有明显的空格标记,句子是以字串的形式出现。因此对中文进行处理的第一步就是进行自动分词,即将字串转变成词串。
比如“中国建筑业呈现新格局”分词后的词串是 中国/建筑业/呈现/新/格局。
为什么中文分词如此重要呢,是因为它是处理中文的语义分析,文本分类,信息检索,机器翻译,机器问答等问题的基础。如果分词效果不好,很有可能会严重影响到后续的研究。
因为中文存在交集歧义,组合歧义,无法在句子中解决的歧义,具有未登录词等等特征,使得中文分词很难。下面举几个例子说明一下。

歧义类型 分词结果1 分词结果2 交集歧义 研究 / 生命 / 的 / 起源 研究生 / 命 / 的 / 起源 组合歧义 他 / 从 / 马 / 上 / 下来 他 / 从 / 马上 / 下来 无法在句子中解决的歧义 乒乓球 / 拍卖 / 完 / 了 乒乓 / 球拍 / 卖完了 未登录词 蔡英文 / 和 / 特朗普 / 通话 蔡英文 / 和 / 特朗 / 普通话 颗粒选择 联想公司 联想 / 公司

补充一下最后一个例子,如何选择分词颗粒大小也是一个研究难点。通常颗粒度大翻译效果好。比如”联想公司”作为一个整体时,很容易找到它对应的英文翻译Lenovo,如果分词时将其分开,可能翻译失败。

传统中文分词方法介绍

传统的中文分词方法可以分为以下几类

  • 字符匹配法分词
    1)正向最大匹配法(由左到右的方向)
    2)逆向最大匹配法(由右到左的方向)
    3)最少切分(使每一句中切出的词数最小)
    4)双向最大匹配法(进行由左到右、由右到左两次扫描)
    5)复杂最大匹配法
  • 理解分词
  • 统计分词方法

最大匹配法的基本思想是先建立一个最长词条字数为6的词典, 然后取句子前6个字查词典,如查不到, 则去掉最后一个字继续查, 一直到找着一个词为止。最大匹配算法以及其改进方案是基于词典和规则的。其优点是实现简单,算法运行速度快,缺点是严重依赖词典,无法很好的处理分词歧义和未登录词。因此,如何设计专门的未登录词识别模块是该方法需要考虑的问题。

理解性分词的基本思想是分词同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象,理解分词方法需要大量语言知识和信息。
基于统计的中文分词方法有:

  • HMM(HiddenMarkov Model)
  • MEMM(Maximum Entropy Markov Model)
  • CRF(Conditionalrandom field)

隐马尔科夫模型(HMM)应用非常广泛,基本的思想就是根据观测值序列找到真正的隐藏状态值序列。在中文分词中,一段文字的每个字符可以看作是一个观测值,而这个字符的词位置label(BEMS)可以看作是隐藏的状态。使用HMM的分词,通过对切分语料库进行统计,可以得到模型中5大要要素:起始概率矩阵,转移概率矩阵,发射概率矩阵,观察值集合,状态值集合。有了三个矩阵和两个集合后,HMM问题最终转化成求解隐藏状态序列最大值的问题,求解这个问题最长使用的是Viterbi算法。

最大熵马尔可夫模型(MEMM)把HMM模型和maximum-entropy模型的优点集合程一个产生式模型,这个模型允许状态转移概率依赖于序列中彼此之间非独立的特征上,从而将上下文信息引入到模型的学习和识别过程中,提高了识别的精确度,召回率也大大的提高,

条件随机场(CRF)是用来标注和划分结构数据的概率化结构模型。和HMM类似,当对于给定的输入观测序列X和输出序列Y,CRF通过定义条件概率P(Y|X),而不是联合概率分布P(X,Y)来描述模型。运用在分词中的基本思路是对汉字进行标注即由字构词(组词),不仅考虑了文字词语出现的频率信息,同时考虑上下文语境,具备较好的学习能力,因此对歧义词和未登录词的识别都具有良好的效果。其不足之处是训练周期较长,运营时计算量较大,性能不如词典统计分词。

这三个基于统计的分词方法有缺点如下:
首先,CRF,HMM(隐马模型),MEMM(最大熵隐马模型)都常用来做序列标注的建模,像分词、词性标注,以及命名实体标注。
隐马尔可夫模型一个最大的缺点就是由于其输出独立性假设,导致其不能考虑上下文的特征,限制了特征的选择,不能选择复杂的特征。
最大熵隐马尔可夫模型则解决了隐马尔可夫的问题,可以任意选择特征,但由于其在每一节点都要进行归一化,所以只能找到局部的最优值,同时也带来了标记偏见的问题,即凡是训练语料中未出现的情况全都忽略掉。
条件随机场则很好的解决了这一问题,它并不在每一个节点进行归一化,而是所有特征进行全局归一化,因此可以求得全局的最优值。

基于统计的分词方法是基于字符的分词,其主要的优势在于能够平衡地看待词表词和未登录词的识别问题。其缺点是学习算法的复杂度往往较高,计算代价较大,依赖手工定义的特征工程。现在的计算机的计算能力相较于以前有很大提升,所以目前最主流的方法好多都是深度神经网络的。

最近几年中文分词研究进展

接下来我将重点讲一下近几年的中文分词有方法,近些年很多学者都用深度网络模型来对中文进行分词,以下就是较新分词方法的文献列表,它主要分为两类,一个是基于字符的中文分词,一类是基于词的中文分词。近些年很多学者致力于中文分词,对中文分词的方法进行了改进,其中运用到了RNN,CNN,GNN等深度神经网络来自动地获取特征,从而代替传统方法中手工定义的特征。从句子中获取简单的特征改为获取复杂的特征,从单一语料库单一标准的模型改进为可以使用多预料进行分词等等。接下来我将详细一一介绍。
第一类:基于字符的分词方法:基本思想是根据字所在词的位置,对每个字打上标签
No.1 Deep Learning for Chinese Word Segmentation and POS Tagging
No.2 Long Short-Term Memory Neural Networks for Chinese Word Segmentation
No.3 Gated Recursive Neural Network for Chinese Word Segmentation
No.4 Adversarial Multi-Criteria Learning for Chinese Word Segmentation
No.5 Bi-directional LSTM Recurrent Neural Network for Chinese Word Segmentation
No.6 A Feature-Enriched Neural Model for Joint Chinese Word Segmentation and Part-of-Speech Tagging
第二类:基于词的分词方法
No.7 Neural Word Segmentation Learning for Chinese
No.8 Fast and Accurate Neural Word Segmentation for Chinese
No.9 Chinese Parsing Exploiting Characters
No.10 Transition-based: Transition-based Neural Word Segmentation
No.11 Segmenting Chinese Microtext: Joint Informal-Word Detection and Segmentation with Neural Networks
方法1:
Method 1

这篇作者是第一批使用神经网络来做中文分词和词性标注的,作者通过深层网络来自动获取任务相关的特征,从而避免使用了特定任务或是手工设计的特征工程,这种方法利用大规模非标注数据来改善中文字符的内在表示,然后使用这些改善后的表示来提高有监督的分词模型和词性标注模型的性能。本次的分词方式本质上是对输入的句子中的字进行标注。对于输入句子中的每一个字,神经网络架构将为其可能的每一个TAG进行评分,为了解决不同句子对应的字序列长短不一的问题,本文中采用的是窗口方法。窗口方法假定一个字的tag主要依赖于与其相邻的字。
接下来给大家讲一下这个模型的结构:首先通过lookup层得到窗口中每个字的字向量。之后将每个固定长度的字向量首尾相连得到一个新的特征。接下来的3层为一个标准的神经网络层。这个神经网络层的输出是一个包含每个标签得分的矩阵。最后使用Viterbi算法完成标注的推断。这个模型虽然具有不错的分词效果,但是它只利用了固定窗口大小的上下文信息,而忽略了一些长距离的文本信息。
方法2:
Method 2
所以接下来这篇文章的作者使用了LSTM来代替神经网络的隐层。改进了传统神经网络不能解决的长期依存关系的问题。作者认为上下文对分词很重要,比如右上图的例子,冬天,能穿多少穿多少,夏天,能穿多少穿多少。‘多少’这两个字是要通过‘冬天’,‘夏天’来协助分词的。但是按照之前那个方法,冬天和夏天两个词,或是类似这样的情况中的关键词,是不在窗口范围内,这样就会影响到分词的效果。所以把上下文考虑进来增强分词的性能。作者采用的方法就是将上篇文章中3层普通的神经网络层改为LSTM。使用输入门,输出门,遗忘门来决定如何利用和更新信息,明确地利用上文中的特征进行建模。所以,当LSTM的一个单元探测出比较重要的信息时,LSTM的单元能将这个信息一直保留到距离较远的下文中。比如例子中的,可以将冬天这个词带到多少这个词上,一同做推断。
但是LSTM只有上文,但作者认为上下文对分词效果都有影响。所以在这一点上,这个方式是存在缺陷的。虽然文中引入窗口来带入下文,但是不能获取长距离的上文。此外文中对中文习语的替换也存在争议。很多学者认为这样的做法是不可取的。后来有学者使用这篇文的方法,但未对习语进行替换,实验结果在每个数据集上确实都有所降低。
方法3:
Mehtod3
为了解决上文不能充分利用下文信息来分词的问题,此文提出使用了双向LSTM。这样可以充分的利用上下文。输入的字向量是D维的,但是经过双层LSTM,向量会变成是2D维,最后通过压缩,仍然输出为D维向量。由于用来中文分词的网络结构越来越复杂,模型的参数也越来越多,所以文中再训练过程中使用dropout来防止过拟合。
方法4:
Mehtod4
以往的分词方法是针对一个预料用一个种分割标准进行分词,但是在一般情况下一个预料遵循一种分割标准。比如在两个语料对句子‘姚明进入总决赛’的分割标准就不同。所以此文作者提出同时利用多个分词标准的语料集来进行分词。如何利用多个分词标准的语料集是这种分词方法的一个重要组成部分。此文同时用八个预料用八种分词标准对句子进行分词,并在八份语料中都提升了准确率。在多份语料上的模型训练可以堪称一个多任务学习问题。这些任务之间显然存在很大的共性,但也存在一些差异。文中具体采取的方案是拿出8个特定于具体任务的私有LSTM模块,跟原来共享的LSTM网络模块一同构成左图的特征抽取层,这一块的具体的结构如右图。两个灰色的私有LSTM模型负责捕捉TaskA和TaskB的任务私有特征,中间黄色的共享LSTM模块负责捕捉任务共享特征,然后再把私有特征与共享特征拼接到一起,输入每个任务私有的CRF模块。
如果共享特征中混入了任务私有特征时,那么会导致分词准确率下降,所以文中利用了对抗网络来将私有特征从共享的LSTM模块中剥离出去。所以作者加了一个判别器,就是右图中的左半部分。这个判别器的主要负责检查共享特征中是否混入了特定于某个任务的特征。
具体来说,每当一个样本经过字向量层、共享 LSTM 层之后,我们会得到一个特征向量序列,该序列的长度与输入样本的字符长度相等。为了检查这些特征向量是否“纯净”,所以对它们求平均,得到一个固定长度的特征向量,再输入判别器网络模块,要求判别器预测该特征向量来源于 8 个语料中的哪一个。这就是判别器设定的目标。
假如判别器能够准确预测每一个共享特征向量的来源语料,则说明这些共享特征中混入了太多私有信息。所以给共享 LSTM 模块设定一个目标是,让它跟判别器对抗,想办法让判别器预测不准。假如共享 LSTM 模块成功让判别器分不清特征向量来自哪个语料,意味着已经把私有特征剥离出去了,从而保证了共享特征向量的纯净性。
这样的做法既能充分享受到数据量增大带来的好处,又避免了不同语料之间相互掣肘,做到了“求同存异,共创双赢”。
方法5:
Method5
之前的神经网络模型非常专注于其最小化特征工程对模型的影响,通过神经网络自动生成句子的特征。之前的做法只是将字符向量连接起来作为输入,这样的拼接方式过于简单,不能像传统方法一样提取出复杂的特征。所以此文的作者提出了Gate Recursive神经网络的方法,它包含reset和update门以融合上下文字符的复杂组合。此文采用分层的训练方法,避免了梯度扩散问题,使用了dropout策略避免了过度拟合问题。
如左上图所示,在给定上下文的情况下,为了预测字符‘地’的标签,本文使用有向无回路图来结合左右子节点的信息给父节点,如右图所示。GRNN从底层到顶端递归地检测组合,通过reset和update门来判断神经元是活跃的,还是被抑制的,其中固体节点表示活跃的神经元,而空心的则表示被抑制的神经元。每一个神经元都可以看作是一个复杂的特征。最后通过把所有组合信息输入到网络后,得到标签的分数向量。GRNN可以通过重置门和更新门来选择和保存有用的组合。这些组合和传统方法中的离散的特征工程起着同样的作用。但是它们之间的区别在于,神经系统会自动地学习复杂的组合,而传统的方法则需要人工设计它们。
方法6:
Meothod6
这个模型是另外一个引入复杂特征的CNN-LSTM的网络模型,这种方法的目的是在不增加模型复杂性的基础上提高对上下文长距离的依赖并提取出相对复杂的特征进行建模。
在模型中有几个关键部分:
1.用卷积层来模拟组合特征,这些特征可以代替复杂的人工定义的特征:这个卷积层为每个字符模拟了n-gram特征。每个字符的特征就是所有不同特征映射集合对应列的连接。
2.用一个Pooling层来挑选出最价值的特征
3.加入一个highway层,在提高模型的深度,获取更显著的特征。同时可以加快模型收敛速度,减轻梯度消失的问题。
4.用一个双向LSTM层来获取上下文的信息。
方法7:
Method7
以上几种方法都是基于字符的中文分词,这种分词方式的本质就是对句子中的字进行标注。接下来我将给大家介绍一些基于词的分词方法。此篇文章提出来一种新的神经网络框架,它彻底地消除了上下文的窗口,它是利用完整的分割历史,直接对分词结果建模。分词结果的好坏主要由每个单词成词的分数和单词连续的分数来衡量。
此方法的框架是用一个神经网络网络评分模型来评估分词方式的可能性。其结构如左图所示。第一层通过映射得到每个字的特征,第二层是枚举定长L=4之内的所有单词,用GCNN组合,得到词语向量。之后将其与一个参数向量内积得到词语分数。第三层用LSTM将分词历史集合起来。其中分词结果的得分就是单词得分与句子得分之和。在这个评分模型基础上,建立一个译码器,如右图所示,用来获得最高分数的分词句子。
但是作者的进行数据预处理的时候将长度大于4的单词都处理为了字母L,这一点是由一些争议的。
方法8:
Method8
虽然之前的方法在分词上取得了不错的效果,但是其训练过程和工作过程的非常低效的,这篇文章基于上篇文章做了改进,将其中的Beam search改为了贪婪算法,在训练过程中采用了两种策略:Early Update和LaSO Update。提高了模型训练和测试的效率。此外在字向量转为词向量的部分也做出了改进,作者列出了一个包含最有可能连续的词列表,如果词在列表中则链接到平均池,如果不在列表中,则单独处理。
方法9:
Mehtod9
此篇文章也是基于词的中文分词。文本使用Transition-Based模型从左到右,递增地对句子进行解码,使用字符级和词级的特征来给分词结果进行打分。此文使用卷积神经网络实现局部特征组合,使用LSTM分别地学习全局语句级特征,这个模型可以利用丰富的嵌入特性。
左图是此文的baseline,它使用Transition system递增地去分词。它把已经做过部分分词的句子放在buffer s中,将接下来要进行分词句子中的字符放在quene q中。其中action包括Append(APP),Separate(SEP)。APP代表从序列 q中除去第一个字符,把这个字符加到buffer中最后一个词的后面。SEP代表将第一个字符从序列中去除掉,把它放在buffer中作为一个单独的词。举个例子:中国外企业务发展迅速。基于这个框架,使用一个编码器来寻找一组最优的action sequence。这个框架中的基本的特征包含三方面的信息。这三方面的信息后面也用到了作者的模型中,第一个信息是序列q中第一个字符和buffer中的最后一个字符用来给SEP和APP动作来打分。第二个信息是通过已经被识别的词来指导SEPaction。第三个信息是已识别的词的相关信息,比如它们的长度,这个词中的第一给字符或是最后一个字符可以作为额外的特征。
右图就是此文的方法,如图所示,作者使用的方式是使用CNN,并且窗口为2的方式来获取到词特征向量。同样也是通过使用CNN来获取动作特征向量。使用BI-LSTM来获取字符特征向量。
根据得到三个不同的向量作为输入向量,输入到LSTM中计算Rw,Rc,Ra。
作者利用字符特征Rc,词特征Rw,动作特征Ra这三个特征来给SEP动作打分,使用字符特征Rc和动作特征Rw来给APP动作打分。
方法10:
Mehtod10
现在先进的中文分词系统在手动标注语料库上训练得出的模型,在类似的标准测试语料库中正确率可以达到95%以上。但是当这些模型运用于像微信、微博、SMS这类数据时,正确率会下降很多。因为之前的模型都是使用标准语料库进行训练的,它们的词都是正规的,但像微博一类的数据中,包含很多不正规的用词,比如,人艰不拆,累感不爱。这样的词会大大降低模型的性能。本文在transition-based的神经网络模型的基础上增加对非正规词的处理。对于非正规词,此文的处理方法是1.我们在外部字典的帮助下,自动构建训练示例。2.将规范化作为未来的一个步骤,使我们的模型能够通过低质量的字典检测非正式词汇。
此文是在上文的基础上进行改进的,之前转移动作只有:APP,SEP。次文针对于非正规词,增加一个转移动作SEPif,就是当非正规词以一个与前文分开的单个词进入stack时,转移动作标为SEPif。在transition-based的神经网络模型的改进时在state representation层增加一个隐层来处理非正规词。目标函数从Max-margin改为max-entropy. 因为作者通过实验发现Max-margin方法对对模型参数的初始化比较敏感。

原创粉丝点击