本发明属于信息技术领域,具体涉及一种基于lstm-cnn的命名实体识别方法。
背景技术:
命名实体识别(namedentityrecognition,简称ner)指的是对于给定的数据集识别指定的具有特定意义的实体名词的过程。命名实体识别方法的实践场景包括:
场景1:事件检测。地点、时间、人物是时间的几个基本构成部分,在构建事件的摘要时,可以突出相关人物、地点、单位等。在事件搜索系统中,相关的人物、时间、地点可以作为索引关键词。事件的几个构成部分之间的关系,从语义层面更详细的描述了事件。
场景2:信息检索。命名实体可以用来提高和改进检索系统的效果,当用户输入“重大”时,可以发现用户更想检索的是“重庆大学”,而不是其对应的形容词含义。此外,在建立倒排索引的时候,如果把命名实体切成多个单词,将会导致查询效率降低。此外,搜索引擎正在向语义理解、计算答案的方向发展。
场景3:语义网络。语义网络中一般包括概念和实例及其对应的关系,例如“国家”是一个概念,中国是一个实例,“中国”是一个“国家”表达实体与概念之间的关系。语义网络中的实例有很大一部分是命名实体。
场景4:机器翻译。命名实体的翻译常会有一些特殊翻译规则,例如中国人民翻译成英文时要使用名字的拼音来表示,有名在前姓在后的规则,而普通的词语要翻译成对应的英文单词。准确识别出文本中的命名实体,对提高机器翻译的效果有重要的意义。
场景5:问答系统。准确的识别出问题的各个组成部分特别重要,问题的相关领域,相关概念。目前,大部分问答系统都只能搜索答案,而不能计算答案。搜索答案进行关键词的匹配,用户根据搜索结果人工提取答案,而更加友好的方式是把答案计算好呈现给用户。问答系统中有一部分问题需要考虑到实体之间的关系,例如“美国第四十五届总统”,目前的搜索引擎会以特殊的格式返回答案“特朗普”。
传统的命名实体识别方法可以分为基于词典的命名实体识别方法、基于词频统计的方法以及基于人工神经网络模型的方法。基于词典的命名实体识别方法,其原理是将尽量多的不同类别的实体词汇收入词典中,识别时将文本信息与词典中的词语进行匹配,匹配上的则标记为对应的实体类别。基于词频统计的方法,例如crf(条件随机场),其原理是学习到前后一个词的语义信息,然后做出分类判断。
基于词典的命名实体识别严重依赖于词典库,不能够识别未登录词。基于词频统计的hmm(隐马尔可夫)和crf(条件随机场)方法只能关联当前词的前一个词的语义,识别精度不够高,尤其是未登录词的识别率较低。基于人工神经网络模型的方法,在训练时存在梯度消失问题,并且在实际的应用中网络层数少,最终命名实体识别结果优势不明显。
技术实现要素:
本发明针对上述问题,提供一种基于lstm-cnn的命名实体识别方法,能够有效提高命名实体识别的精度。其中lstm为longshort-termmemory,即长短期记忆神经网络;cnn为convolutionneuralnetwork,即卷积神经网络。
本发明中,登录词指的是已经出现在词表中的词,未登录词指的是没有出现在词表中的词。
本发明采用的技术方案如下:
一种基于lstm-cnn的命名实体识别方法,其特征在于,包括以下步骤:
1)将原始语料数据orgdata转化为字符级的语料数据newdata;
2)统计newdata中的字符,得到字符集合charset,将每个字符进行编号,得到字符集合charset对应的字符编号集合charid;统计newdata中字符的标签,得到标签集合labelset,将每个标签进行编号,得到标签集合labelset对应的标签编号集合labelid;
3)将newdata按照句子长度对句子进行分组,得到包括n组句子的数据集合groupdata;
4)随机无放回的从groupdata的某组中抽取batchsize句数据w,以及对应的标签y,并将抽取的数据w通过charid转换为固定长度的数据batchdata,将对应的标签通过labelid转换为固定长度的标签yid;
5)将数据batchdata及标签yid送入基于lstm-cnn的深度学习模型,训练该深度学习模型的参数,当深度学习模型产生的损失值满足设定条件或者达到最大迭代次数n,则终止该深度学习模型的训练;否则采用步骤4)重新生成数据以训练该深度学习模型;
6)将待预测的数据predata转换成与该深度学习模型匹配的数据premdata,并将其送入训练好的该深度学习模型,得到命名实体识别结果orgresult。
进一步地,步骤1)采用bmeso的标记方式对每个字符进行标记:设某个词对应的标签为label,则位于该词语最开始的字符标记为label_b,位于该词语中间的字符标记为label_m,位于该词语末尾的词语标记为label_e,若该词语只有一个字符则标记为label_s,若该词语没有带标签或者不属于实体标签则标记为o。
进一步地,步骤3)中,设li表示第i句话的句子长度,则将|li-lj|<δ的句子归入一组,其中δ表示句子长度间隔。
进一步地,步骤4)包括:
4-1)将抽取到的数据w转换成数字,也即通过charset与charid的对应关系,将w中的每个字符转换成对应的数字;
4-2)将抽取的数据w对应的标签y转换成数字,也即通过labelset与labelid的对应关系,将y中的每个字符转换成对应的数字;
4-3)假设规定长度为maxlen,当抽取到的数据句子长度l<maxlen时,将句子后面补maxlen-l个0,得到batchdata,并将w对应的标签y后面补maxlen-l个0,得到yid。
进一步地,,步骤5)所述基于lstm-cnn的深度学习模型包括:
embedding层,用于将输入的字符数据转换为向量;
lstm层,包含若干lstm单元,用于提取字符间的语义关系;
第一个dropout层,用于防止模型过拟合;
conv层,用于将整句话与当前单个字符通过lstm提取得到的语义信息抽象出词特征;
第二个dropout层,用于防止模型过拟合;
softmax层,用于对每个字符进行分类。
本发明基于lstm-cnn的命名实体识别方法,采用字符级而不是词语级的向量,可以免受分词精度的影响,同时还可以规避未登录词的问题;另外采用长短期记忆神经网络lstm和卷积神经网络cnn的组合模型,相比传统的算法能够大幅提高命名实体识别的精度。
附图说明
图1.本发明方法的步骤流程图。
图2.深度学习模型示意图。
图3.lstm单元示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面通过具体实施例和附图,对本发明做进一步详细说明。
本发明公开了一种基于lstm-cnn的命名实体识别方法。例如识别人名、地名和组织机构名等命名实体。本发明要解决的核心问题包含三个:1.命名实体识别的效率,2.命名实体识别的精度,3.未登录词的识别精度。
为了解决未登录词问题,本发明放弃了传统的词表方法,而是采用基于词向量的思想,而且是基于字符的向量,而不是基于词语的向量。为了解决传统命名实体识别方法精度低的问题,本发明采用深度学习的思想,利用长短期记忆神经网络模型(lstm)和卷积神经网络(cnn)模型相结合来进行命名实体识别。为了解决命名实体识别效率低,本发明避开词频统计,避开字符串匹配,而是采用类似函数映射的方式进行实体识别。
本发明的命名实体识别方法流程如如1所示。该方法分为两个阶段:训练阶段,预测阶段。
(一)训练阶段:(流程图的左边虚线框)
步骤1:将带有标签的训练语料数据转换为字符级的语料数据。
步骤2:使用adam梯度下降算法训练深度学习模型。此外也可以采用其它算法训练深度学习模型,如sgd即随机梯度下降算法。
(二)预测阶段:(流程图的右边虚线框)
步骤1:将没有标签的测试语料数据转换为字符级的语料数据。
步骤2:使用训练阶段训练好的深度学习模型进行预测。
下面具体说明两个阶段的具体实现过程。
(一)训练阶段:
步骤1-1:将原始数据orgdata转化为字符级的数据newdata。
具体为:采用bmeso(begin,middle,end,single,other)的标记方式(也可以采用其它标记方式),将原始语料数据中的带有标签的每个词语进行字符级切分。设某个词对应的标签为label,则该位于该词语最开始的字符标记为label_b,位于该词语中间的字符标记为label_m,位于该词语末尾的词语标记为label_e,如果该词语只有一个字符则标记为label_s,若该词语没有带标签或者不属于实体标签则标记为o。
例如,原始数据为:“[张三]/pre[毕业]/o[于]/o[哈佛大学]/org[。]/o”,则转化为字符级的数据后为:“张/pre_b三/pre_e毕/o_b业/o_e于/o_s哈/org_b佛/org_m大/org_m学/org_e。/o_s”。
步骤1-2:统计newdata的字符集合charset,为了避免在预测时遇到未知字符,在charset中添加一个特殊的符号“null”。并将每个字符按照自然数增序编号,得到字符集合charset对应的字符编号集合charid。
例如步骤1-1中的例子,统计后的charset为:{null,张,三,毕,业,于,哈,佛,大,学,。},标点符号也会统计在里面;charid为:{null:0,张:1,三:2,毕:3,业:4,于:5,哈:6,佛:7,大:8,学:9,。:10}。
统计标签集合labelset,将每个标签进行编号,产生对应的标签编号集合labelid。
例如步骤1-1中的例子,统计后的labelset为:{pre_b,pre_e,o_b,o_e,o_s,org_b,org_m,org_e};labelid为:{pre_b:0,pre_e:1,o_b:2,o_e:3,o_s:4,org_b:5,org_m:6,org_e:7}。
步骤1-3:将newdata按照句子长度进行划分。
设li表示第i句话的句子长度,则将|li-lj|<δ的句子归入一组,其中δ表示句子长度间隔。设分组之后的数据为groupdata,一共设为n组。
步骤1-4:随机无放回的从groupdata的某组中抽取batchsize句数据w,以及对应的标签y,并将抽取的数据通过charid转换为固定长度的数据batchdata,以及把对应的标签通过labelid转换为固定长度的标签yid。
所述的将抽取的数据通过charid转换为固定长度的数据batchdata,以及把对应的标签通过labelid转换为固定长度的标签yid,具体为:
步骤1-4-1:将抽取到的数据w转换成数字,也即通过charset与charid的对应关系,将w中的每个字符转换成对应的数字。
例如步骤1-1中的数据转换为charid后为:[1,2,3,4,5,6,7,8,9,10]
步骤1-4-2:将抽取的数据w对应的标签y转换成数字,也即通过labelset与labelid的对应关系,将y中的每个字符转换成对应的数字。
例如步骤1-1中的标签转换为labelid后为:[0,1,2,3,4,5,6,6,7,4]
步骤1-4-3:假设规定长度为maxlen,当抽取到的数据句子长度l<maxlen时,将句子后面补maxlen-l个0,得到batchdata。并将w对应的标签y后面补maxlen-l个0,得到yid。
步骤1-5:将步骤1-4的数据batchdata送入深度学习模型,产生损失函数cost(y′,yid)。
本发明的命名实体识别方法中深度学习模型如图2所示。其中各部分的含义说明如下:
w1~wn:可以直观的理解为某句话中的各个字符,也就是步骤1-4中的数据w,不过在传入embedding层时,需要先完成步骤1-4。
y1~yn:可以直观的理解为某句话中各个字符对应预测标签,将用于和实际标签yid计算损失值。
embedding层:即嵌入层,也就是向量化的过程,用于将输入的字符数据转换为向量。
lstm层:包含若干lstm单元,用于提取字符间的语义关系。
第一个dropout层:即过滤层,用于防止模型过拟合。
conv层:即卷积层,用于将整句话与当前单个字符通过lstm提取得到的语义信息抽象出词特征。
第二个dropout层:即过滤层,用于防止模型过拟合。
softmax层:即分类层,用于最终对每个字符进行分类。
训练所述的深度学习模型的具体步骤为:
步骤1-5-1:将传入的数据batchdata在embedding层进行向量化,也即将数据batchdata中的每一条数据中的每个字符都通过一向量表char2vec转换成batchvec。
步骤1-5-2:将batchvec传入lstm层,详细为:将每条数据中的第一个向量传入第一个lstm单元,第二个向量传入第二个lstm单元,依次类推。同时第i个lstm单元的输入除了每条数据中的第i个向量外,还包含第i-1个lstm单元的输出hi-1。注意,每个lstm单元一次接收到的向量并不是只有一个,而是batchsize个。
更详细的lstm单元描述见图3。图3中各符号的含义说明如下:
w:输入数据(例如一句话)中的字符。
ci-1,ci:分别表示前i-1个字符累积得到的语义信息和前i个字符累积得到的语义信息。
hi-1,hi:分别表示第i-1个字符的特征信息和第i个字符的特征信息。
f:遗忘门,用于控制前i-1个字符的累积语义信息(ci-1)保留多少。
i:输入门,用于控制输入数据(w和hi-1)保留多少。
o:输出门,用于控制在输出第i个字符的特征时输出多少特征信息。
tanh:双曲正切函数
u:tanh:与输入门i一起控制第i个字符有多少特征信息保留在ci-1中。
*,+:分别表示按位进行乘法和按位进行加法。
步骤1-5-3:将每个lstm单元的输出hi传入dropout层,也即是随机的将hi中η(0≤η≤1)的数据隐藏掉,不让其继续向后传递。
步骤1-5-4:将dropout的输出传入conv卷积层进行卷积后,使用relu激活函数
步骤1-5-5:与步骤1-5-3类似,将conv层的输出ci传入dropout层,也即是随机的将ci中η(0≤η≤1)的数据隐藏掉,不让其继续向后传递。
步骤1-5-6:将dropout的输出传入softmax层,并产生最终的损失值cost(y′,yid)。具体的计算公式如下:
cost(y′,yid)=-yidlog(y′)+(1-yid)log(1-y′)(公式1)
其中y′表示batchdata经过深度学习模型分类层(softmax层)后的输出。对应于图2中的y1,y2,…,yn。yid表示对应的真实标签。
步骤1-6:使用adam梯度下降算法训练深度学习模型的参数。
步骤1-7:如果深度学习模型产生的cost(y′,yid)不再降低,或者达到最大迭代次数n,则终止深度学习模型的训练;否则跳到步骤1-4。
其中,cost′i(y′,yid)表示前i次迭代时的损失值,cost(y′,yid)表示当前迭代产生的损失值,该公式的含义是,如果当前的损失值与前m次损失值的平均值的差小于阈值θ,则认为不再降低。
(二)预测阶段:
步骤2-1:将待预测的数据predata转换成与深度学习模型匹配的数据格式premdata。具体为:将待预测的数据转换成字符级的数字数据。
步骤2-2:将premdata送入训练阶段训练好的深度学习模型,并得到预测结果orgresult。
预测阶段步骤2-2所述的深度学习模型,即为训练阶段训练好的深度学习模型,不过在预测时,其中涉及到的dropout层的参数η=1,表示不隐藏任何数据,全部都传递到下一层。
现有技术中,例如基于字典的方法,是完全没有办法解决未登录词的,也就是说未登录词的识别率是0,基于统计的方法或者基于传统人工神经网络的方法的正确率大概在90%。本发明对测试数据的正确率在98%左右,显著提高了正确率。
以上实施例仅用以说明本发明的技术方案而非对其进行限制,本领域的普通技术人员可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明的精神和范围,本发明的保护范围应以权利要求书所述为准。
PHP网站源码东莞设计公司网站民治外贸网站制作双龙模板网站建设福田网站设计模板大浪百度网站优化排名同乐标王宝安标王东莞网站改版大鹏网站推广工具沙井模板制作龙岗阿里店铺运营西乡网页设计盐田百度竞价包年推广坑梓网站关键词优化龙岗网站改版观澜网站改版大运企业网站设计平湖seo排名西乡网站优化排名东莞百度爱采购福田seo优化横岗企业网站制作布吉百搜标王民治模板制作木棉湾百度网站优化排名观澜网站定制大浪高端网站设计南联百度网站优化布吉外贸网站设计双龙网络推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运