一种基于LSTM的分词方法与流程

文档序号:14011458阅读:638来源:国知局

本发明属于计算机软件技术领域,涉及一种基于lstm的分词方法。



背景技术:

自然语言处理问题中亚洲类型的文字并非像西文具有天然的空格分隔符,很多西文处理方法并不能直接用于亚洲类型(中文、韩文和日文)文字的处理,这是因为亚洲类型(中文、韩文和日文)必须经过分词的这道工序才能保持和西文一致。因此,分词在亚洲类型文字的处理中是信息处理的基础,其应用场景包括:

1.搜索引擎:搜索引擎中一个重要的功能就是做文档的全文索引,其内容是将文字进行分词,然后将文档的分词结果和文档形成一个倒排索引,用户在查询的时候也是先将查询的输入语句进行分词,而后将分词的结果和索引数据库进行对比,从而找出与当前输入最为相似的文档。

2.自动摘要生成:自动摘要是指将一篇较长的文档用一段较短的语言文字去总结。而在总结的过程中,就需要计算一篇文档中关键词,因此在计算关键词之前必须先对文档做分词处理。

3.自动校对:自动校对是指对一段文字作语法错误的检查,其检查的粒度还是基于词的方式做的检查,因此需要将用户输入的连续文字做分词处理。

传统的分词方法可以分为基于词典的分词,基于词频统计的方法以及基于知识的方法;基于词典的分词严重依赖于词典库,词频统计的hmm(隐马尔可夫)和crf(条件随机场)其只能关联当前词的前一个词的语义。基于知识的人工神经网络模型因模型训练时的梯度消失问题,在实际的应用中网络层数少,最终分词结果优势不明显。

基于词典的分词方法严重依赖于词典库,效率比较低,且不能够识别未登录词;本发明中登录词指的是已经出现在语料词表中的词,未登录词指的是没有出现在语料词表中的词。

基于词频统计分词方法(例如n-gram),其只能关联当前词的前n-1个词的语义,识别精度不够高,当n增加的时,效率非常低。而且对未登录的识别率偏低。



技术实现要素:

针对现有技术中存在的技术问题,本发明的目的在于提供一种基于lstm(longshort-termmemory,长短期记忆神经网络)的分词方法。本发明通过自然语言处理中的序列标注(sequentiallabeling)将一个序列作为输入,并训练一个模型使其为每一序列片段数据产生正确的输出。

针对与中文类似(英文天然带有空格作为词之间的分割符)的语言进行分词的方法。本发明的核心问题包含三个:1分词的效率,2分词的精度,3未登录词的识别精度。

本发明的技术方案为:

一种基于lstm的分词方法,其步骤包括:

1)将训练语料数据original转化为字符级的语料数据new_data;

2)将该语料数据new_data按照句子长度划分,得到若干句子;然后根据句子长度对得到的句子进行分组,得到包括n组句子的数据集合groupdata;

3)从该数据集合groupdata中抽取若干数据作为迭代数据;

4)将每次的迭代数据转换为固定长度的向量送入深度学习模型lstm,训练该深度学习模型lstm的参数,当深度学习模型产生的损失值迭代变化小于设定阈值不再降低或者达到最大迭代次数,则终止深度学习模型的训练,得到训练后的深度学习模型lstm;

5)将待预测的语料数据转换成转化为字符级的语料数据,并将其送入训练好的深度学习模型lstm,得到分词结果。

进一步的,该固定长度等于该深度学习模型lstm中的第一层lstm层的lstm单元个数。

进一步的,产生该损失值的方法为:

31)将迭代数据在深度学习模型lstm的字符向量量化层进行向量化,将迭代数据中的每个字符转换成一向量;

32)将该迭代数据中的每一字符对应的向量分别传入该深度学习模型lstm中第一lstm层的一lstm单元,获得分词中字符的特征,且将第一层lstm第i个lstm单元的输出同时作为第一层lstm第i+1个lstm单元的输入;然后将该第一层lstm的输出输入到该深度学习模型lstm中第二lstm层,获得分词中词的特征,且将第二层lstm第i个lstm单元的输出同时作为第二层lstm第i+1个lstm单元的输入;

33)将第二层lstm每一lstm单元的输出输入到该深度学习模型lstm的dropout层;

35)将每一dropout层的输出经一分类模型处理后,根据得到的输出利用基于熵的损失函

数计算损失值。

进一步的,所述损失值其中,yi为字符xi通过深度学习模型lstm的输出结果,为字符xi的实际标记结果。

进一步的,所述步骤4)中,当损失值迭代变化|li-li+1|<ε时终止深度学习模型的训练。

进一步的,所述步骤3)中,每次随机无放回的从该数据集合groupdata中选取一句子分组,从该句子分组中抽取若干句子作为模型单次的迭代数据。

进一步的,所述步骤2)中,将|li-lj|<δ的句子归入一组;其中,li表示第i句话的句子长度、lj表示第j句话的句子长度,δ表示句子长度间隔。

进一步的,所述步骤1)中,按照bmes的标记方式将原始训练语料数据字符切分标记new_data;设一词语对应的标签为label,则位于该词语最开始的字符标记为labelb,位于该词语中间的字符标记为labelm,位于该词语末尾的字符标记为labele,如果该字符独立构成一个词则标记为labels。

进一步的,使用adam梯度下降算法训练该深度学习模型lstm的参数。

本发明方法的流程如图1,分两个阶段:训练阶段,预测阶段。

(一)训练阶段:(参考图1的训练流程)

步骤1:将带有标签的训练语料数据转换为字符级的语料数据。

步骤2:使用adam梯度下降算法训练lstm分词深度学习模型。

(二)预测阶段:(参考图1的预测流程)

步骤1:将没有标签的测试语料数据转换为字符级的语料数据。

步骤2:使用训练阶段训练好的lstm分词深度学习模型进行预测。

本发明主要具有以下优点:

优点1:统计模型提高了未登录词识别识别率。这是因为传统的基于词(词典)的方式而采用的最长和最短等字符匹配的方式,倘若待分词并不存在于字典中,也就不能在字典中匹配到相应的结果,其一定不能正确的切分。而统计模型是预测所有词组合的最大可能性的一组分词方法,其带有预测的功能,因而能提高对未登录词的识别。另外在本模型中,发明者在输入分词序列标注的分类模型前面加入两层lstm单元,第一层主要是提取字符之间的特征,这是因为由字符到词,比如中国的姓氏(赵钱孙李…)来表示一个人的姓名的时候,这些词一般都与后面的词有紧密的关系的特征,应该分为一个词。第二层lstm主要是来提取词与词之间的特征,这又是因为分词的结果不仅仅与字符特征有关系,并且与语句所处的上下文语境是非常相关的。相比较与纯粹的tf-idf特征输入到统计分类模型,该模型吸收了字符与词之间的特征。因此能进一步的提升未登录词的识别。

优点2:两层的lstm模型,同时吸收了字符之间和词之间的特征,因此其对比传统的统计分词方法其分词的准确度有进一步的提升。

附图说明

图1为本发明方法流程图。

图2为本发明lstm分词的模型架构图。

具体实施方式

为使本发明的上述特征和优点能更明显易懂,下文特举实施例,并配合所附图作详细说明如下。

本发明的流程图如图1所示,其实施方式可以分为2个阶段:1)训练阶段和2)预测阶段。

(一)训练阶段:

步骤1:如果存在多个分词的语料数据,将多个整合为一个训练语料数据orgdata,其格式为每一个分词结果占用一行;然后将训练语料数据original转化为字符级的语料数据。具体为:按照bmes(begin,middle,end,single)的标记方式将原始训练语料数据字符切分标记new_data。设某个词对应的标签为label,则位于该词语最开始的字符标记为labelb,位于该词语中间的字符标记为labelm,位于该词语末尾的字符标记为labele,如果该字符独立构成一个词则标记为labels。

比如“我是中国人,我爱中国”的格式如下:

中国人

中国

标记后的结果为:

我s

是s

中b

国m

人e

,s

我s

爱s

中b

国e

。s

步骤2:字符向量化。因计算机仅能对数值型的类型进行计算,而输入的字符w是字符型,计算机不能直接计算,因此需要将字符转化为数值向量。此处采用公知技术word2vec,仅仅把输入的word换成char,用skip-gram模型将字符转换为一个固定长度维度的向量(固定长度等于该深度学习模型lstm中的第一层lstm层的lstm单元个数),在本发明中字符向量的维度设置为64。

步骤3:建立模型。按照图2的lstm分词模型的架构搭建分词模型,将步骤2转化的字符向量输入到第一层lstm单元,获得分词中字符特征;同时,为了获得前一个字符对后一个字符影响的特征,同时第一层lstm第i个lstm单元的输出同时作为第一层lstm第i+1个lstm单元的输入。而后将第一层lstm的输出输入到第二层lstm单元,获得分词中词的特征,同时为了获得前一个词对后一个词的实体结果的影响,也同时第二层lstm第i个lstm单元的输出同时作为第二层lstm第i+1个lstm单元的输入。而后将第二层lstm的输出输入到dropout层,dropout层的作用是为了防止模型过拟合,本发明专利中dropout的值设置为η=0.5。最后将dropout的输出输入到序列分类模型crf中,从而计算出每输入字符xi通过上述模型计算出的yi。并设定语料中实际标记的结果为从而构造一个基于熵的损失函数l:

而后,本发明将这个损失函数l转化为一个优化问题,求解:

步骤4:模型参数求解。为了求解优化函数l中的参数w,本发明中采用公知的adam梯度下降算法训练l中的参数。在训练参数的过程中,包含有以下的几个关键问题:

■分句:将newdata按照句子长度划分。设li表示第i句话的句子长度,则将的句子归入一组,其中|li-lj|<δ表示句子长度间隔。设分组之后的数据为groupdata,一共设为n组。

■输入数据的填充:因为图2的lstm分词结构模型其输入数据的神经元单元是固定长度的,对分句后字符长度小于分词结构神经元个数的语句需要用数据0填充。

■迭代批量数据的选取batchsize:在adam梯度下降算法的迭代中本发明每次随机无放回的从该数据集合groupdata中选取一句子分组,从该句子分组中抽取batchsize个句子作为模型单次的迭代数据。

■迭代终止条件:在adam梯度下降算法训练l中的参数的模型终止条件的选择上,本发明设置了两个终止条件:1)最大的迭代次数max_iteration和2)损失值迭代变化|li-li+1|<ε。

步骤5:保存模型。最后将步骤1-4步中训练好的模型参数保存,以供预测阶段使用这些参数。

(二)预测阶段:

步骤1:将待预测数据按照(一)训练阶段步骤1数据预处理过程将其转化为字符级别的格式,和训练阶段的区别是其没有标记数据。比如“我是美国人,我也爱中国。”,且其格式为每一个分词结果占用一行。

步骤2:同样按照(一)训练阶段步骤2将预测阶段的步骤1的字符用公知的word2vec将其转化为字符向量。

步骤3:将步骤2得到的字符向量数据输入到(一)训练阶段步骤5保存的模型中。得到每一个输入数据的预测结果。在预测的过程中同样需要对输入的句子分句和输入数据填充的操作,到此就完成了实体的预测过程。

以上实施仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。

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