具体实施方式
目前,缺失字词补全方法通常采用Seq2Seq生成模型,输入一个包含缺失错误的句子,通过训练数据自动生成一个补全后的正确句子。然而,使用生成模型的方法解码速度比较慢,需要从开头开始生成一完整的句子,而预测速度与句子长度相关,长句子预测比较慢。另外,使用生成模型的方法,是直接生成一个正确句子,无法方便地给出错误位置和类型,从而对错误的定位不直观,需要人为对比分析才能找到错误的位置和修改方式。例如,对于一个错误的句子,“人战胜了饥饿,才努力为了下一代更好的、更健康的东西。”,使用生成模型的方法,将直接给出正确的表述:“人战胜了饥饿,才能努力为了下一代做更好的、更健康的东西。”,而不会给出明确的错误位置和修改意见。此外,生成模型对训练数据要求比较高,而目前已标注的训练语料不充足,且获取真实数据成本较高。
为此,本申请提供了一种缺失字/词的补全方法,使用语言模型,识别缺失字词的位置,并确定所缺失的字词,从而实现缺失字词的补全,即实现快速准确地对文本中字、词缺失问题进行纠正补全,其中语言模型是以伪数据作为输入而进行预训练得到的,缓解训练数据不足。
为使本领域的技术人员更好地理解本申请的技术方案,下面结合附图和具体实施方式对本申请的技术方案做进一步详细描述。
请参阅图1,为本申请实施例的缺失字/词的补全方法的流程图。该方法包括:
步骤110:用语言模型识别缺失句中缺失位置。
其中,语言模型为以伪数据作为输入而进行预训练所得到的模型。
在一些示例中,语言模型可以为BERT(Bidirectional Encoder Representationsfrom Transformer,双向Transformer的Encoder)模型,具体地,使用BERT模型对应的Transformer Encoder结构作为基础模型,如图2所示,其包括embedding(嵌入)层和encoder(编码)层,输入文本inputs经过Input Embedding,即线性变换,得到wordembedding(词向量),随后,与Positional Encoding所输出的位置向量(positionembedding)进行相加,相加的结果作为encoder层的输入。本领域技术人员可理解,该encoder层采用基于注意力(Attention)机制,并且包括多次encoding过程,详细如图2所示,为了简洁,在此不进行详细描述。
伪数据为将预设数据经过随机操作而得到的数据,例如,某个正确语句经过随机修改,得到的随机修改后的语句即为伪数据。
在得到BERT模型的过程中,将伪数据输入到模型中,进行预训练,直到模型在验证集中效果收敛为止,也就是说,采用early stoping等技术,判断模型在验证集中已处于最好的效果,从而获得预训练后的模型,即BERT模型。
缺失句表征存在成分缺失错误的语句。成分缺失错误主要包括缺字和缺词两种类型。缺字类型是指语句中缺少某个字,例如,语句“人们战了饥饿”,“战”与“了”之间缺少“胜”一字。缺词类型是指语句中缺少某个词,例如,“人们了饥饿”,“们”与“了”之间缺少“战胜”一词。
步骤120:用语言模型生成缺失位置处所缺失的多个候选字/词。
使用语言模型生成缺失位置处所缺失的多个候选字/词,将缺失句及缺失位置输入到语言模型中进行预测,从而可获得缺失位置处所缺失的候选字/词。
步骤130:对多个候选字/词进行排序,以确定缺失位置处所缺失的缺失字/词。
对上述获得的候选字/词进行排序,将排序在前或在后的候选字/词确定为缺失位置处所缺失的缺失字/词。
本实施例中,通过用语言模型识别缺失句中缺失位置,生成缺失位置处所缺失的多个候选字/词,并对多个候选字/词进行排序,从而确定缺失位置处所缺失的缺失字/词,实现快速准确地对文本中字、词缺失问题进行纠正补全,其中语言模型是以伪数据作为输入而进行预训练得到的,缓解训练数据不足。
如上述,用语言模型识别缺失句中缺失位置,得到识别后的缺失句,在一些实施例中,识别后的缺失句由列表表征,列表包括至少一个内容元组和一个结束元组,每个内容元组表征缺失句中的一个字/词,结束元组表征缺失句结束。
例如,识别后的缺失句1,由列表1表征,其形式如下所示:
列表1:[内容元组1,内容元组2,内容元组3,内容元组4,内容元组5,结束元组],
其中,内容元组1、内容元组2、内容元组3、内容元组4和内容元组5分别表征缺失句1中的一个字,结束元组表征缺失句1的结束。
其中,每个内容元组包括每个字/词以及第一标签,第一标签表征每个字/词之前是否缺失及缺失字/词的数量。结束元组包括结束符以及第二标签,在结束元组中,该第一标签表征结束符之前是否缺失及缺失字/词的数量。可以看出,每个内容元组中均包括第一标签,结束元组中包括第二标签,该第一标签表征相应的字/词之前是否缺失及缺失字/词的数量,该第二标签表征结束符之前是否缺失及缺失字/词的数量。
继续以上述缺失句1为例进行说明,在缺失句1中,内容元组1为(**,第一标签)、内容元组2为(**,第一标签)…结束元组为(结束符,第二标签),其中**表示各个元组中相应的字。
第一标签的标签值可以设置为O和M,其中O表示在相应的字/词或结束符之前不存在缺失,M表示在相应的字/词或结束符之前存在缺失,此时,为了进一步表示缺失字/词的数量,第一标签的标签值可以设置为Mx,其中x表示缺失字/词的数量,取值为1,2,3…等,并且x的最大取值根据缺失句的实际情况来确定。例如,标签值为M2,则表示相应的字/词或结束符之前存在缺失,且缺失2个字。
第二标签的标签值也可以设置为O和M,其中O表示在结束符之前不存在缺失,M表示在结束符之前存在缺失,此时,为了进一步表示缺失字/词的数量,第二标签的标签值可以设置为Mx,其中x表示缺失字/词的数量,取值为1,2,3…等,并且x的最大取值根据缺失句的实际情况来确定。例如,标签值为M2,则表示相应的字/词或结束符之前存在缺失,且缺失2个字。
在一示例中,可以采用序列标注方法对每个元组的第一标签或第二标签的标签值进行预测。
结束符可以采用特殊符号或字符串来实现,在一示例中,该结束符可以为<EOS>。
继续以上述缺失句1为例进行说明,其列表1如下所示:
列表1:[(**,标签值1),(**,标签值2),(**,标签值3),(**,标签值4),(<EOS>,标签值5)]。
下面以实际语句为例进行说明,例如,上述语句“人们了饥饿”,用语言模型识别后,该语句如下表示:
列表:[(人,O),(们,O),(了,M2),(饥,O),(饿,O),(<EOS>,O)],或者[(“人”,“O”),(“们”,“O”),(“了”,“M2”),(“饥”,“O”),(“饿”,“O”),(“<EOS>”,“O”)]。
从该列表中,可以看出,该语句中,在“了”之前存在缺失,且缺失2个字(即“战胜”),其他字或结束符之前不存在缺失。
在另一些实施例中,每个内容元组进一步包括第三标签,表征每个字/词的词性,结束元组进一步包括第四标签,表征结束符的词性。可以看出,每个内容元组中均包括第三标签,该第二标签表征相应的字/词或结束符的词性,结束元组中包括第四标签,该第四标签表征结束符的词性。
继续以上述缺失句1为例进行说明,在缺失句1中,内容元组1为(**,第三标签,第一标签)、内容元组2为(**,第三标签,第一标签)…结束元组为(结束符,第四标签,第二标签),其中**表示各个元组中相应的字。
第三标签和第四标签的标签值可以根据相应的字/词或结束符在整个语句中的成分而设置,例如,标签值为n,表示相应的字/词为名词,标签值为u,表示相应的字/词为助词,标签值为v,表示相应的字/词为动词,标签值为None,表示没有词性,该标签值一般用于结束符,等等,在此不作限定。
下面以实际语句为例进行说明,例如,上述语句“人们了饥饿”,用语言模型识别后,该语句如下表示:
列表:[(人,n,O),(们,n,O),(了,u,M2),(饥,n,O),(饿,n,O),(<EOS>,None,O)],或者[(“人”,“n”,“O”),(“们”,“n”,“O”),(“了”,“u”,“M2”),(“饥”,“n”,“O”),(“饿”,“n”,“O”),(“<EOS>”,None,“O”)]。
从该列表中,可以看出,该语句中,在助词“了”之前存在缺失,且缺失2个字(即“战胜”),其他字或结束符之前不存在缺失。
如上述,使用语言模型生成缺失位置处所缺失的多个候选字/词,将缺失句及缺失位置输入到语言模型中进行预测,从而可获得缺失位置处所缺失的候选字/词。具体地,在一些实施例中,首先,在缺失位置处填充至少一个占位符,其中占位符的数量与缺失字/词的数量对应,也就是说,缺失了多少个字/词,就填充多少个占位符。然后,将填充后的缺失句输入到语言模型,预测至少一个占位符所对应的预测信息,从而获得多个候选字。
占位符可以为特殊符号或字符串,在一些示例中,占位符可以为[MASK]。
下面继续以实际语句为例进行说明,例如,上述语句“人们了饥饿”。如上述,该语句中,在“了”之前存在缺失,且缺失2个字(即“战胜”),其他字或结束符之前不存在缺失,即“了”之前存在缺失位置。首先,在该缺失位置处填充2个占位符,例如[MASK],经过填充后,该语句具体如下所示:
人们[MASK][MASK]了饥饿
随后,将上述填充后的语句输入到语言模型中,例如BERT模型中,预测上述语句中两个占位符[MASK]对应的预测信息,从而获得多个候选字/词,例如,“克服”、“战胜”、“克胜”或者“战服”等等。
在一些实施例中,至少一个占位符为两个占位符,例如上述的实际语句的示例中,“了”之前存在缺失位置,在该缺失位置处填充2个占位符。
此时,每个占位符所对应的预测信息包括字矩阵及概率向量,其中字矩阵中的字表征该占位符所对应的字,概率向量中的概率值表征该占位符所对应的字的预测概率。
下面继续以实际语句为例进行说明,例如,上述语句“人们了饥饿”,经过填充后的语句如上所示。
经过预测后,该语句中,第一个占位[MASK]对应的预测信息包括字矩阵W1可为[胜,战,服,克,的],以及概率向量x1为(0.1,0.4,0.02,0.47,0.01),也就是说,预测到第一个占位符[MASK]为“胜”的概率是0.1,为“战”的概率是0.4,为“服”的概率是0.02,为“克”的概率是0.47,为“的”字的概率是0.01。
该语句中,第二个占位符[MASK]对应的预测信息包括字矩阵W2可为[服,战,胜,克,的],以及概率向量x2可能是(0.4,0.02,0.5,0.07,0.01)。也就是说,预测到第二个占位符[MASK]为“服”的概率是0.4,为“战”的概率是0.02,为“胜”的概率是0.5,为“克”的概率是0.07,为“的”字的概率是0.01。
在至少一个占位符为两个占位符的实施例中,此时,使用语言模型生成缺失位置处所缺失的多个候选字/词。具体地,在一些实施例中,首先,将每个占位符用预测符进行替换,其中预测符表征每个占位符所对应的预测信息中字矩阵与概率向量的乘积,然后,将替换后的缺失句输入到语言模型,得到语言模型的输出,并将语言模型的输出以及替换后的缺失句输入到循环神经网络,预测缺失位置处所缺失的词,从而获得多个候选词。
预测符可以为特殊符号或字符串,在一些示例中,预测符可以为[SOFT],例如,[SOFT1]表示第一个预测符,[SOFT2]表示第二个预测符。预测符表征每个占位符所对应的预测信息中字矩阵与概率向量的乘积,即字矩阵*概率向量。
可以将语言模型的输出以及替换后的缺失句输入到循环神经网络LSTM(LongShort Term Memory,长短期记忆)模型。该LSTM模型其通过每个时刻都会把隐藏层的值保存下来以用于下一个时刻,从而保证每一个当前时刻都能记录上一时刻的信息。LSTM模型的每一个时刻的输入为预测符以及对应位置所预测的字表示,也就是说,LSTM模型的每一个时刻的输入为替换后的缺失句以及该替换后的缺失句经过语言模型后得到的语言模型的输出,即对应位置所预测的字表示为语言模型的输出。在LSTM模型中,这两个预测符所处的位置为生成模型,因此,可以采用beam search方式,得到多个候选词。
本实施例中,通过用预测符替换两个占位符,将替换后的缺失句输入到语言模型,得到其输出,从而将语言模型的输出以及替换后的缺失句输入到循环神经网络,解决了用语言模型直接一起预测两个占位符时可能会出现的Multi-modality问题。
下面继续以上述语句“人们了饥饿”为例进行说明,该语句经过填充后如上所示,经过预测后,每个占位符对应的预测信息如上所述。首先,将第一个占位符[MASK]替换为预测符[SOFT1],将第二个占位符[MASK]替换为预测符[SOFT2],其中,预测符[SOFT1]=W1*x1,预测符[SOFT2]=W2*x2,即替换后的语句具体如下所示:
人们[SOFT1][SOFT2]了饥饿
随后,将替换后的语句输入到语言模型中,例如,BERT模型中,得到语言模型的输出,即对应位置所预测的字表示,将语言模型的输出以及替换后的上述语句输入到循环神经网络,例如LSTM模型。在LSTM模型中,例如,第一个时刻,其输入为预测符SOFT1和“们”,输出的预测字为“战”;将预测符SOFT2和“战”送入LSTM模型的第二个输入位置,根据上一时刻的信息为“战”,预测出预测符SOFT2为“胜”,即预测出这两个预测符处所缺失的词“战胜”。依次类推,根据不同的输入,还可以预测缺失位置(即这两个预测符)处所缺失的词,例如“克服”,从而得到多个候选词,例如“战胜”、“克服”等。可以看出,避免了使用BERT模型直接预测这两个预测符处所缺失的词为“克胜”的情况,即解决了直接一起预测两个占位符可能会出现的Multi-modality问题。
如上述,在步骤130中,对多个候选字/词进行排序,以确定缺失位置处所缺失的缺失字/词。在一些实施例中,可以根据每个候选字/词的分数进行排序,也就是说,对预测所获得的多个候选词进行打分操作,从而根据相应的分数进行排序。具体地,如图3所示,上述步骤130可以包括:
步骤S131:将每个候选字/词填充到所述缺失句中所述缺失位置处,以构成完整句。
继续以上述语句“人们了饥饿”为例进行说明,如上所述,经过语言模型和循环神经网络后,预测得到多个候选词,例如“战胜”、“克服”等。将这些候选词填充到该语句“人们了饥饿”,分别得到了完整句1“人们战胜了饥饿”,以及完整句2“人们克服了饥饿”等。
步骤S132:使用语言模型,确定每个完整句的第一分数。
其中第一分数由完整句中每个字的概率值之和表征,完整句中每个字的概率值是使用预训练后的语言模型对填充后的候选字/词进行预测而得到的。
使用语言模型,例如BERT语言模型,确定每个完整句的第一分数,其由完整句中每个字的概率值之和表征,具体地,其计算公式如下:
scoreBERT=log(P(w1))+...+log(P(wn))
其中,P(wn)表示相应字的概率值,例如,P(w1)表示完整句中第一个字的概率。log(P(wn))表示对相应字的概率取log运算,可以看出,第一分数为完整句中每个字的概率值取log运算后的总和,即由完整句中每个字的概率值之和表征。
每个字的概率值是使用语言模型,例如BERT模型,对填充后的候选字/词进行预训练而得到的。
以上述语句“人们了饥饿”为例进行说明,如上所述,该语句经过上述操作,得到了完整句1和完整句2等,例如,完整句1的第一分数scoreBERT=log(P(w1))+log(P(w2))+log(P(w3))+log(P(w4))+log(P(w5))+log(P(w6))+log(P(w7)),其中P(w1)...P(w7)分别表示该完整句1中“人”、“们”...“饿”的概率。同样地,也可以得到完整句2等的第一分数。
步骤S133:使用另一语言模型,确定每个完整句的第二分数。
其中,另一语言模型为以五元组的词级别为训练对象的模型,第二分数为依据使用另一语言模型对所述缺失句及相应完整句进行训练而得到的概率值。
另一语言模型以五元组的词级别为训练对象,其中五元组的词级别,表示以某个语句中连续的5个字/词为单位,从而进行训练,例如,该语言模型可为N-Gram模型,确定每个完整句的第二分数,具体地,该语言模型对缺失句及相应的完整句进行训练,从而得到该完整句的第二分数,其计算公式具体如下:
scorengram=log(P(w1))+log(P(w2|w1)+...+log(P(wn|wn-4,wn-3,wn-2,wn-1))
其中,由于以五元组的词级别为训练对象,故n=5,P(w1)为第1个字的概率值,P(w2|w1)为在第1个字存在的基础上第二个字的条件概率值,P(wn|wn-4,wn-3,wn-2,wn-1)为在第1个字、第2个字、第3个字、第4个字存在的基础上第5个字的条件概率值。上述概率值通过N-Gram模型进行训练即可得到。
以上述语句“人们了饥饿”为例进行说明,如上所述,该语句经过上述操作,得到了完整句1和完整句2等,例如,完整句1的第二分数可以由上述计算公式得到。
步骤S134:根据第一分数和第二分数,得到每个候选字/词对应的分数,从而根据每个候选字/词对应的分数进行排序。
根据第一分数和第二分数,得到每个候选字/词对应的分数,例如,将第一分数和第二分数进行运算,例如相加、平均、加权平均等,得到每个候选字/词对应的分数,从而根据得到的每个候选字/词对应的分数进行排序。
在一示例中,第一分数和第二分数进行加权平均操作,例如,第一分数的加权为a,第二分数的加权为(1-a),其中a为0-1之间的一个超参数。具体地,完整句的分数的计算公式如下:
score=α*scoreBERT+(1-α)*scorengram
在一些示例中,a可以为0.5。
经过上述步骤,可以得到每个完整句的分数,从而将分数最大的完整句中的候选字/词作为缺失句中所需补全的字/词。例如,在上述以上述语句“人们了饥饿”为例进行说明的示例中,可以得到,完整句1的分数大于完整句2的分数,从而,“战胜”为上述缺失语句“人们了饥饿”中所需的补全的词。
如上述,语言模型为以伪数据作为输入而进行预训练所得到的模型。下面以BERT模型为例进行说明。
在一些实施例中,伪数据的生成包括:生成均匀分布于预设区间的第一随机数,以对预设集合中每个正确语句进行随机修改,从而得到每个正确语句的伪数据。其中预设集合为预采集的包括多个正确语句的正确文本。在一些示例中,该预设集合可以为***文本、新闻文本对应的集合。
每个正确语句的伪数据由预设列表表征,预设列表包括至少一个二元组和/或至少一个三元组,每个二元组包括一个字以及表征字之前未缺失的第一标签值,每个三元组包括一个字、表征字之前缺失及缺失字数量的第二标签值以及字之前所缺失的缺失字/词。
其中,第一标签值和第二标签值与上述实施例中识别后的缺失句中的第一标签的标签值的设置是一致的,详见上述实施例的描述,为了简洁,在此不再进行说明。
以正确语句“人们战胜了饥饿”为例进行说明,其伪数据可以为“人们了饥饿”、“人们战了饥饿”等等。
伪数据“人们了饥饿”可由预设列表表征,具体如下:
预设列表1:[(“人”,“O”),(“们”,“O”),(“了”,“M2”,“战胜”),(“饥”,“O”),(“饿”,“O”),(“<EOS>”,“O”)]
其中,(“人”,“O”),(“们”,“O”),(“饥”,“O”),(“饿”,“O”),(“<EOS>”,“O”)分别为二元组,包括相应的字以及表征该字之前未缺失的第一标签值“O”,(“了”,“M2”,“战胜”)为三元组,包括“了”字,表征“了”字之前缺失及缺失数量的第二标签值“M2”,以及“了”字之前所缺失的词“战胜”。
本实施例中,通过生成均匀分布于预设区间的第一随机数,以对预设集合中每个正确语句进行随机修改,从而得到每个正确语句的伪数据,进而,将生成的伪数据输入到诸如BERT模型的语言模型,进行预训练,可以极大地加快收敛速度,使得需要重新学习的参数量就会比较小,从而缓解训练数据不足的问题。
进一步地,在一些实施例中,可对预设集合中每个正确语句进行随机修改,具体地,当第一随机数小于第一预设值时,对正确语句生成相应的缺失伪数据。当第一随机数大于或等于所述第一预设值时,保持正确语句不变。
缺失伪数据为正确语句中缺字或缺词操作所产生的,例如,“人们了饥饿”和“人们战了饥饿”均为正确语句“人们战胜了饥饿”的缺失伪数据。
第一随机数为均匀分布在0-1之间的随机数r1,假设第一预设值为0.05,当r1<0.05时,则生成缺失伪数据,对该正确语句进行随机修改,即执行缺字操作或缺词操作。当r1>=0.05时,则保持该正确语句不变。
进一步地,在一些实施例中,对正确语句生成相应的缺失伪数据包括:随机生成均匀分布于所述预设区间的第二随机数,以对正确语句执行缺字操作或缺词操作。
其中,若第二随机数小于第二预设值,则对正确语句执行所述缺字操作,若第二随机数大于或等于第二预设值,则对正确语句执行所述缺词操作。
第二随机数为从(0,1)均匀分布中随机生成的概率r2,假设第二预设值为0.7,当r2<0.7时,执行缺字操作,当r2>=0.7时,执行缺词操作。
执行缺字操作的过程如下:对正确语句中的每个字随机生成均匀分布于预设区间(即0-1)内的第一概率值(即第一随机数),若相应的字的第一概率值小于第一预设值,例如0.05,则删除句中相应的字。
以正确语句“人们战胜了饥饿”为例进行说明,其中,对“人”、“们”、“战”、“胜”、“了”、“饥”、“饿”所随机生成的第一概率值分别为0.2、0.5、0.1、0.8、0.33、0.6、0.02,第一预设值为0.05,可以看出,“饿”字的概率为0.02<0.05,则删除“饿”字,生成相应的缺失伪数据“人们战胜了饥”。
执行缺词操作的过程如下:对正确语句中的每个词随机生成均匀分布于预设区间(即0-1)内的第二概率值(即第一随机数),若相应的词的第二概率值小于第一预设值,例如0.05,则删除正确语句中相应的词。
以正确语句“人们战胜了饥饿”为例进行说明,其中,对“人们”、“战胜”、“了”、“饥饿”所随机生成的第二概率值分别为0.2、0.01、0.5、0.3,第一预设值为0.05,可以看出,“战胜”字的概率为0.01<0.05,则删除其中的“战胜”,生成相应的缺失伪数据“人们了饥饿”。
如图4所示,为本申请实施例的电子设备的结构示意图。电子设备包括存储器210和处理器220,存储器210和处理器220相互连接。
存储器210可以包括只读存储器和/或随机存取存储器等,并向处理器220提供指令和数据。存储器210的一部分还可以包括非易失性随机存取存储器(NVRAM)。存储器210存储有指令,该指令被处理器220执行时,实现本申请上述实施例中任一个以及任意不冲突的组合所提供的补全方法。
处理器220可以是一种集成电路芯片,具有信号处理能力。在实现过程中,上述方法的各步骤可以通过处理器220中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器220可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。
本发明还提供一种非易失性存储介质的实施例,如图5所示,该非易失性存储介质500存储有处理器可运行的指令501,该指令501用于执行上述实施例中的方法。具体地,该存储介质500具体可如图4所示的存储器210或为存储器210的一部分。
所属领域的技术人员易知,可在保持本申请的教示内容的同时对装置及方法作出诸多修改及变动。因此,以上公开内容应被视为仅受随附权利要求书的范围的限制。