利用基于词上下文的字嵌入与神经网络的中文分词方法与流程

文档序号:11250873阅读:496来源:国知局

本发明涉及一种利用计算机进行中文分词的方法,特别是一种利用基于词上下文的字嵌入与神经网络相结合的方式进行自动中文分词的方法。



背景技术:

中文分词是自然语言处理的一项基本任务,其广泛的应用需求吸引了大量相关研究从而促进了其相关技术的快速发展。中文这样的黏着语与西方语言不同,中文句子的词与词之间并没有明显的间隔。而一般自然语言处理任务的最小单元是“词”,所以对于中文来说,首要的问题是先识别词串。目前处理中文分词的手段大体可以分为两类,基于规则的方法与基于统计方法。基于词典的规则方法需要构建一个大规模的词典。切词时会根据预先设计好的匹配规则来匹配词典中的词,从而完成对文本的切分。在计算资源相对受限和紧缺的时期,机器学习方法需要占用大量的计算资源和耗费很大内存开销,并不具有实用性,所以规则方法在相当长的一段时期内成为了处理中文分词问题的主流方法。而随着计算资源的不断增长,基于机器学习的方法慢慢成为了解决中文分词的主要手段。

在sighan2003举行的首届中文分词评测中,基于字标注的方法首次被提出,该方法的性能虽然不是最高的,但是其未登录词的识别率位居榜首。对于中文分词任务来说,主要有两大难点,歧义切分和未登录词的识别,实验证明这两类问题并不是平等的,未登录词的影响要远远大于歧义切分。基于字的序列化标注的方法慢慢的被大家接受,成为了处理分词问题的主流方法。

在建模分词任务的方式,将其看成序列化标注任务是一种常见的手段。其工作过程是:针对待分词的句子,以字为单位,从左至右对每个字进行标注(即打标签),一般采用的标注体系是包括b、m、e、s四个标记的四词位标注集,其中b代表当前字占据一个多字词的词首,m代表当前字占据一个多字词的词中e代表当前字占据一个多字词的词尾,s代表当前字是一个单字词。得到标注序列之后,可以转换成分词的结果。本发明在建模中文分词任务是也将其看成序列化标注任务并采用了上述的标注集。

神经网络是一种常用的机器学习方法,它具有从一些基本原子特征自动学习特征组合方式的能力,这区别于需要使用者根据语言学相关等先验知识来设计大量任务相关的模板的传统方法。神经网络的使用,可以省去人工定制大量组合特征模板的工作,同时可以借助神经网络强大的表达能力来自动地学习特征之间的组合。在本发明使用了双向长短记忆神经网络来对句子的字序列进行计算,从而更多地捕获远距离特征。

对于基于神经网络的模型方法而言,一个重要的问题就是如何使用词嵌入。如果拥有足够多的训练数据,那么可以首先随机初始化词嵌入,然后把词嵌入的学习融合到模型的训练中来,从而得到高质量的词嵌入。但是对于分词这样的任务,标注数据集的规模非常有限,一般在几万条左右。首先很难训练好字嵌入,其次由于数据规模有限,遇到测试数据时,经常会遇到未登录词这样的问题。一种方法是利用无监督数据学习字嵌入,典型的方法有word2vec、glove,这些的方法的基本依据是根据分布式假设,相似的词会出现在相似的上下文中。相似的词之间会具有相似或相近的词嵌入。但“相似”这一特性又依赖于具体的任务,对于不同的任务,“相似”这一概念是不同的。



技术实现要素:

发明目的:本发明针对目前中文分词技术中现有基于字标注的模型不能充分利用词信息的缺点,提出了了一种基于词上下文的字嵌入学习方法来间接的融合词级别的信息,从而提升中文分词任务的准确度。

为了解决上述技术问题,本发明公开了一种利用基于词上下文的字嵌入与神经网络的中文分词方法以及关于分析过程中所使用模型参数训练方法的附加说明。

本发明所述的利用基于词上下文的字嵌入与神经网络的中文分词方法包括以下步骤:

步骤1,计算机读取大规模自动切分的数据,利用基于词上下文的字嵌入学习方法得到字嵌入和双字嵌入;

步骤2,利用基于神经网络的方法对待分词句子进行句子切分。

其中步骤1包含如下步骤:

步骤1-1,根据四词位标注体系,一句切分好的句子可以表示成字序列{c1,c2,…,cn}和{l1,l2,…,ln}。n是句子的长度,li∈{b,m,e,s}。在四词位标注体系中共有b、m、e、s四个标记,其中b代表当前字占据一个多字词的词首,m代表当前字占据一个多字词的词中e代表当前字占据一个多字词的词尾,s代表当前字是一个单字词。下面给出一个例子说明四词位标注体系的含义。首先给出一句已经分好词的句子:

(1)自然科学的研究不断深入

该句子在用四词位标注体系进行标注后的形式如下:

(2)自/b然/m科/m学/e的/s研/b究/e不/b断/e深/b入/e

在四词位标注体系中(1)和(2)是两种等价的形式,可以相互转换,如在自标注方法中会先得到如(2)中的形式,然后转换成(1)中的形式即是分词的结果。

步骤1-2,利用基于词上下文的字嵌入学习方法在大规模自动切分的数据上学习得到字嵌入和双字嵌入。

步骤1-2中整个大规模自动切分数据中的所有句子拼接成一个长句形成数据集,整个数据集表示为字序列{c1,c2,…,ct}和相对应的标记序列{l1,l2,…,lt},其中t是数据集中字的个数,ct表示数据集中的第t个字,lt表示数据集中的第t个字对应的标记。

步骤1-2包括如下步骤:

步骤1-2-1,字嵌入的学习目标定义为:

其中,logp(ct+j|ct)和logp(lt+j|ct)按如下公式计算,

其中,σ表示sigmoid函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量,euni表示输入端的字嵌入矩阵,表示输出端的字嵌入矩阵,euni(x)表示从输入端的字嵌入矩阵中取出字x对应的字嵌入,表示从输出端的字嵌入矩阵中取出字x对应的字嵌入,k表示负采样的个数,pn(c)表示采样的分布,a表示上下文窗口的大小;

步骤1-2-2,按照随机梯度下降法学习得到字嵌入矩阵euni;

步骤1-2-3,双字嵌入的学习目标定义为:

其中,logp(ct+jct+j+1|ctct+1)和logp(lt+j|ctct+1)按如下公式计算,

其中ebi表示输入端的双字嵌入矩阵,表示输出端的字嵌入矩阵,ebi(x)表示从输入端的双字嵌入矩阵中取出双字x对应的双字嵌入,表示从输出端的双字嵌入矩阵中取出字x对应的的双字嵌入,ctct+1表示第t个字和第t+1个字连接在一起得到的双字;

步骤1-2-4,在定义完双字嵌入的学习目标后,按照随机梯度下降法学习得到双字嵌入矩阵ebi。

在整个步骤2中w1,w2,…,wn表示待分词的句子,n表示待分词句子的长度,wn表示句子中的第n个字,步骤2包括如下步骤:

步骤2-1,在处理第t*字时利用神经网络对所有标注类型进行打分,其中1≤tt≤n;

步骤2-2,对t*=1,2,…,n迭代执行步骤2-1,按照贪心算法每步选择得分最高的标记作为当前标记,n表示待分词句子的长度;

步骤2-3,得到整个句子的词位标注序列后,转换成句子切分的结果,即为句子分析的最终结果。

步骤2-1包括如下步骤:

步骤2-1-1,生成特征向量,特征向量包括字特征和双字特征;

步骤2-1-2,利用神经网络针对步骤2-1-1中生成的特征向量进行计算得到所有候选标记的得分。

步骤2-1-1包括如步骤:

步骤2-1-1-1,根据步骤1-2中学习得到的字嵌入和双字嵌入得到字特征向量和双字特征向量其中下标t代表当前位置;

步骤2-1-1-2,将字特征向量和双字特征向量拼接在一起得到当前位置的特征表示

步骤2-1-2包括以下步骤:

步骤2-1-2-1,使用双向长短期记忆神经网络模型计算生成当前位置的中间表示,其中网络的输入为前向过程计算如下:

其中,是已经训练好的模型参数矩阵,矩阵中每个元素的值均为实数值,这组参数与t无关;为第t*个计算单元的输出的隐层向量和记忆单元向量;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量和输入向量的转换矩阵;公式中所用的tanh是双曲函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量;σ是sigmod函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量;⊙是点乘运算,即将两个维度相同的向量按位做乘法得到一个相同维度的结果向量;

后向网络的计算过程如下:

其中,是已经训练好的模型参数矩阵,矩阵中每个元素的值均为实数值,这组参数与t*无关;hb(wt)、为第t*个计算单元的输出的隐层向量和记忆单元向量;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量和输入向量的转换矩阵;

和hb(wt)拼接即得到最终的中间层表示

步骤2-1-2-2,使用前向神经网络计算所有标注类型的得分,整个前向网络的计算过程如下公式:

o=w2h+b2,

其中,w1,w2,b1,b2是已经训练好的模型参数,h是神经网络的隐层向量;o是计算输出,是一个实值向量,其维度对应词位标记的个数,其中第i个值就对应时刻t*时,标记i的得分,该得分是一个实数值。

有益效果:本发明针对目前中文分词技术中现有基于字标注的模型不能充分利用词信息的缺点,提出了了一种基于词上下文的字嵌入学习方法来间接的融合词级别的信息,在不增加模型复杂程度的前提下,提升了中文分词任务的准确度。

附图说明

下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。

图1是本发明的流程图。

具体实施方式

本发明提出了一种利用基于词上下文的字嵌入与神经网络的中文分词方法,在大规模的自动切分数据上学习字嵌入,将学习得到的字嵌入作为神经网络分词模型的输入,可以有效帮助模型学习。

如图1所示,本发明公开了一种利用基于词上下文的字嵌入与神经网络的中文分词方法,它既能够运用字级别的特征,而且可以通过引入基于词向量的字嵌入来间接融合词信息,提升了中文分词任务的准确度。

本发明所述的利用基于词上下文的字嵌入与神经网络的中文分词方法包括如下步骤:

步骤1,计算机读取大规模自动切分的数据,利用基于词上下文的字嵌入学习方法得到字嵌入和双字嵌入;

步骤2,利用基于神经网络的方法对待分词句子进行句子切分。

其中步骤1包含如下步骤:

步骤1-1,根据四词位标注体系,一句切分好的句子可以表示成字序列{c1,c2,…,cn}和{l1,l2,…,ln}。n是句子的长度,li∈{b,m,e,s}。在四词位标注体系中共有b、m、e、s四个标记,其中b代表当前字占据一个多字词的词首,m代表当前字占据一个多字词的词中e代表当前字占据一个多字词的词尾,s代表当前字是一个单字词。下面给出一个例子说明四词位标注体系的含义。首先给出一句已经分好词的句子:

(1)自然科学的研究不断深入

该句子在用四词位标注体系进行标注后的形式如下:

(2)自/b然/m科/m学/e的/s研/b究/e不/b断/e深/b入/e

在四词位标注体系中(1)和(2)是两种等价的形式,可以相互转换,如在自标注方法中会先得到如(2)中的形式,然后转换成(1)中的形式即是分词的结果。

步骤1-2,利用基于词上下文的字嵌入学习方法在大规模自动切分的数据上学习得到字嵌入和双字嵌入。

步骤1-2中整个大规模自动切分数据中的所有句子拼接成一个长句形成数据集,整个数据集表示为字序列{c1,c2,…,ct}和相对应的标记序列{l1,l2,…,lt},其中t是数据集中字的个数,ct表示数据集中的第t个字,lt表示数据集中的第t个字对应的标记。

步骤1-2包括如下步骤:

步骤1-2-1,字嵌入的学习目标定义为:

其中,logp(ct+j|ct)和logp(lt+j|ct)按如下公式计算,

其中,σ表示sigmoid函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量,euni表示输入端的字嵌入矩阵,表示输出端的字嵌入矩阵,euni(x)表示从输入端的字嵌入矩阵中取出字x对应的字嵌入,表示从输出端的字嵌入矩阵中取出字x对应的字嵌入,k表示负采样的个数,pn(c)表示采样的分布,a表示上下文窗口的大小;

步骤1-2-2,按照随机梯度下降法学习得到字嵌入矩阵euni;

步骤1-2-3,双字嵌入的学习目标定义为:

其中,logp(ct+jct+j+1|ctct+1)和logp(lt+j|ctct+1)按如下公式计算,

其中ebi表示输入端的双字嵌入矩阵,表示输出端的字嵌入矩阵,ebi(x)表示从输入端的双字嵌入矩阵中取出双字x对应的双字嵌入,表示从输出端的双字嵌入矩阵中取出字x对应的的双字嵌入,ctct+1表示第t个字和第t+1个字连接在一起得到的双字;

步骤1-2-4,在定义完双字嵌入的学习目标后,按照随机梯度下降法学习得到双字嵌入矩阵ebi。

在整个步骤2中w1,w2,…,wn表示待分词的句子,n表示待分词句子的长度,wn表示句子中的第n个字,步骤2包括如下步骤:

步骤2-1,在处理第t*字时利用神经网络对所有标注类型进行打分,其中1≤t*≤n;

步骤2-2,对t*=1,2,…,n迭代执行步骤2-1,按照贪心算法每步选择得分最高的标记作为当前标记,n表示待分词句子的长度;

步骤2-3,得到整个句子的词位标注序列后,转换成句子切分的结果,即为句子分析的最终结果。

步骤2-1包括如下步骤:

步骤2-1-1,生成特征向量,特征向量包括字特征和双字特征;

步骤2-1-2,利用神经网络针对步骤2-1-1中生成的特征向量进行计算得到所有候选标记的得分。

特征在于,步骤2-1-1包括如步骤:

步骤2-1-1-1,根据步骤1-2中学习得到的字嵌入和双字嵌入得到字特征向量和双字特征向量其中下标t代表当前位置;

步骤2-1-1-2,将字特征向量和双字特征向量拼接在一起得到当前位置的特征表示

步骤2-1-2包括以下步骤:

步骤2-1-2-1,使用双向长短期记忆神经网络模型计算生成当前位置的中间表示,其中网络的输入为前向过程计算如下:

其中,是已经训练好的模型参数矩阵,矩阵中每个元素的值均为实数值,这组参数与t*无关;为第t*个计算单元的输出的隐层向量和记忆单元向量;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量和输入向量的转换矩阵;公式中所用的tanh是双曲函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量;σ是sigmod函数,为一个实值函数,其作用在一个向量上表示对向量中的每个元素都做此操作,得到一个与输入向量维度相同的目标向量;⊙是点乘运算,即将两个维度相同的向量按位做乘法得到一个相同维度的结果向量;

后向网络的计算过程如下:

其中,是已经训练好的模型参数矩阵,矩阵中每个元素的值均为实数值,这组参数与t无关;hb(wt)、为第t*个计算单元的输出的隐层向量和记忆单元向量;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量,输入向量和记忆单元向量的转换矩阵;分别是计算时隐层向量和输入向量的转换矩阵;

拼接即得到最终的中间层表示

步骤2-1-2-2,使用前向神经网络计算所有标注类型的得分,整个前向网络的计算过程如下公式:

o=w2h+b2,

其中,w1,w2,b1,b2是已经训练好的模型参数,h是神经网络的隐层向量;o是计算输出,是一个实值向量,其维度对应词位标记的个数,其中第i个值就对应时刻t*时,标记i的得分,该得分是一个实数值。

本发明所述的分析过程中所使用的模型参数训练方法的附加说明如下:

从分析过程中的步骤1可以知道,本发明中所述的基于词上下文的字嵌入学习中所用的参数包括:

1、学习字嵌入的参数

2、学习双字嵌入的参数

在字嵌入的学习中,对输入端参数euni,按随机取值进行初始化,输出端参数按零取值进行初始化。整个训练的目标就是最小化步骤1-2-1中的目标函数,在学习词嵌入的方法中通常使用随机梯度下降法求解参数。在本实施例中也采取了随机梯度下降法求解得到参数

在双字字嵌入的学习中,对输入端参数ebi,按随机取值进行初始化,输出端参数按零取值进行初始化。整个训练的目标就是最小化步骤1-2-3中的目标函数,在学习词嵌入的方法中通常使用随机梯度下降法求解参数。在本实施例中也采取了随机梯度下降法求解得到参数

从分析过程中的步骤2可以知道,本发明中所述的分词过程中所用的的参数包括如下几个部分(后面叫这些参数为模型参数组):

1、对应输入的特征向量字嵌入和双字嵌入其中为单字,为双字;

2、步骤2-1-2-1中计算前向特征所用的神经网络参数

3、步骤2-1-2-1中计算后向特征所用的神经网络参数

4、步骤2-1-2-2中前向神经网络所用的网络参数w1,w2。

训练过程采用极大似然训练数据集中的正确标注序列的、使用迭代方式实现。在训练开始之前,可以根据步骤1得到参数euni和ebi。2、3、4中的参数按随机取值进行初始化。然后使用已标注数据集(假设数据集大小为d)dataest={sent1,sent2,…,sentd}对参数进行训练:首先定义一个训练目标,该目标定义在整个数据集上,又称为损失函数,它是整个模型参数组中所有参数的函数,假设为l(dataset),针对每一个句子sentr的损失函数表示为loss(sentr)两者的定义与计算过程按下述方式进行:

根据步骤2-2,可以得到sentr中任意时刻t*的关于标记i的得分score(sentr,t*,i),其中时刻t*的正确标记为gold,那么关于句子的损失函数可以定义为:

其中的ex表示指数函数,e表示自然对数的常量。

定义针对整个训练数据集的损失函数为:

其中的θ,e表示该损失函数为模型参数组中参数的函数。

整个训练过程的目标就是最小化以上损失函数,最小化以上损失函数并求得参数的方法有多种且为业界从业人员熟知,如实施例其中采用了随机梯度下降法来对其进行求解2,3,4中的参数。

实施例1

首先,本实施例中所采用的标注数据是滨州树库中文版ctb6.0,其中训练集23401句,开发集2078句,测试集2795句。自动切分数据是在中文gigaword(ldc2011t13)得到的共41071242句。

本实施例利用本发明中的利用基于词上下文的字嵌入与神经网络的中文分词方法的完整过程如下:

步骤1-1,确定字标注模型的标注体系,定义了四种类型b,m,e,s,具体含义见说明书中的1-1;

步骤1-2,再gigaword中文自动切分数据上训练得到字嵌入euni矩阵和双字嵌入ebi;

步骤2-1,读取一个中文句子“你马上过来”,并计算出每个位置关于标记的得分:

1.你score(b)=1.01score(m)=0.32score(e)=0.13score(s)=2.34

2.马score(b)=1.82score(m)=0.46score(e)=0.39score(s)=0.42

3.上score(b)=0.25score(m)=0.23score(e)=2.26score(s)=0.47

4.过score(b)=2.37score(m)=0.74score(e)=0.29score(s)=0.56

5.来score(b)=0.27score(m)=0.10score(e)=3.26score(s)=0.24

步骤2-2,根据贪心策略可以得到标记序列:你/s马/b上/e过/b来/e

步骤2-3,通过标记序列可以转换得到分词结果:你马上过来

实施例2

本发明所用的算法全部使用c++语言编写实现。该实施例实验所采用的机型为:intel(r)core(tm)i7-4790k处理器,主频为4.0ghz,内存为24g。本实施例中所采用的标注数据是滨州树库中文版ctb6.0,其中训练集23401句,开发集2078句,测试集2795句。自动切分数据是在中文gigaword(ldc2011t13)得到的共41071242句。模型参数在gigaword数据和ctb6.0数据上训练得到,实验结果如表1所示:

表1实验结果说明

其中xuandsun(2016)采用了为基于依存递归神经网络的分词模型,liu(2016)为利用切分的表示的分词模型,zhang(2016)为基于转换的神经网络分词模型,zhang(2016)comb是将传统特征与神经网络特征相结合的基于转换的分词模型,这几种模型代表了目前基于神经网络的分词模型的前沿水平。需要说明的是,在该数据集上进行评测是评价中文分词的一个常用方式。可以看出,本发明中的方法在该数据集上取得了较高的f1-score值,说明了该方法的有效性。

此处对f1-score的计算方式进行说明:因为该测试集是已标注数据集,所以是知道正确标注结果的,假设对整个数据集而言,所有正确的词组成的集合s(gold),其大小为count(gold);在对数据集中的每个句子按实施例1中的方式进行分词以后,取出所有分析结果中的分词结果组成预测集合s(predict),假设其大小为count(predict);s(gold)和s(predict)中切分相同的部分组成的集合为s(correct),其大小为count(correct);假设预测准确度表示为precision,预测召回率表示为recall,则各个值的计算按如下公式进行:

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1