掌桥专利:专业的专利平台
掌桥专利
首页

一种最大逆向匹配分词算法与GPT结合的文本生成方法

文献发布时间:2023-06-19 18:37:28



技术领域

本发明属于自然语言处理技术领域。具体涉及一种最大逆向匹配分词算法与GPT结合的文本生成方法。

背景技术

文本生成任务是自然语言处理任务中最具有挑战性的任务之一,当前的文本生成任务正在朝着大模型、大数据集的思路前进,通常需要耗费大量的计算资源,在当计算资源有限,不能有效支撑大模型、大数据的思路进行后续尝试时,使用现有的模型和数据如何能够提高文本生成任务的效果成为了当下所要解决的问题。

发明内容

本发明实现了一种最大逆向匹配分词算法与GPT结合的文本生成方法,其中,逆向最大匹配分词算法能够融入用户的常用词汇、句子信息,而GPT网络模型却可以在海量数据中学习字、词汇、句子之间的统计规律和内在联系。通过两者的有效结合,可以使得GPT模型在海量数据中通过模型训练学习字粒度、词汇粒度、句子粒度之间的信息,从而改善生成文本的连贯性。

一种基于逆向最大匹配分词算法和GPT模型结合的文本生成方法,所述中文文本生成方法主要包括如下步骤:

S1.构造字符库:针对开源BERT模型公开的词表进行整理,保留特殊字符四个,分别为:文本起始符[CLS],补全字符 [PAD],句子间分隔符[SEP],未在词表中出现字符[UNK],将BERT词表中所有长度超过1的词表全部删除,然后将这些字符放到vocab.txt,针对项目project中提供的数据统计所有字符,然后将这些字符添加到vocab.txt,得到最终的字符库;

S2.构造高频词库:针对project的文本语料,通过jieba工具进行分词后,统计高频词,其具体操作为:建立词频统计字典Word_freq = {key1: value1, key2: value2,…},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,针对每一条文本数据通过jieba工具进行分词,如果该词不在Word_freq中,则将该词放到Word_freq中作为key;如果该词出现,则对应key的词频value加一;默认高频词是项目中出现频次大于20次的词汇,如果出现频次大于20次的超过5000,则只保留前5000个,将5000个高频词放到words_f.txt中,得到最终的高频词库;

S3.构造关键词词库:针对项目project的文本语料,建立词频统计字典Word_key= {key1: value1, key2: value2, …},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,通过jieba工具中基于tf-idf关键词抽取模块抽取每条文本的前三个关键词。如果当前文本的关键词不在Word_key中,则将该词放到Word_key中作为key;如果该词出现,则对应key的词频value加一;默认关键词频率是项目中出现频次大于10次的词汇,如果出现频次大于10次的超过5000,则只保留前5000个,将5000个关键词放到words_k.txt中,最终得到关键词词库;

S4.构造高频句库:针对项目project的文本语料,通过标点符号对文本进行分句,建立句频统计字典Sent_freq = {key1: value1, key2: value2, …},其中,key为字典键,取值为句子,value为key所对应的键值,取值为句子所对应的句频,统计高频句,如果当前文本的句子不在Sent_freq中,则将该句子放到Sent_freq中作为key;如果该句子出现,则key对应的句频value加一;默认句子频率是项目中出现句频大于10次的句子,如果出现频次大于10次的超过5000,则只保留前5000个句子,将5000个高频句放到sents_f.txt中,最终得到高频句库;

S5.建立映射词典:根据步骤S1、S2、S3所得到的字符库、高频词库、关键词词库、高频句库,建立映射词典,其具体为:将字符库,关键词库,高频词库,高频句库汇总到一个txt文件中并去重,文件记为keys_sum.txt,通过该txt文件建立映射词典Dict,Dict的前项key为字符索引编号,Dict的后项value为具体的领域字、关键词、高频词、高频句,即Dict={0:‘[CLS]’,1:”[PAD]”,2:”[SEP]“,.......},其中[CLS]为文本起始符,[PAD]代表当文本长度不够最大长度max_len时,采用“[PAD]”字符填充到max_len长度,最终得到映射词典Dict;

S6.数据和模型适配:项目project的文本语料中提取某条文本样本,逆向最大匹配分词算法从该文本末端开始匹配扫描,每次取i个字符,i为步骤S5中映射词典表中value最长的词或者句子进行匹配,如果在映射词典表中未匹配成功,则去掉匹配字段的最前面一个字,继续匹配,如果匹配成功,则该词为分词的一个字、词或句,然后从输入文本中扣除该词,从剩下的文本中继续执行上述操作,从而完成最终分词结果记为列表A,本条文本不够最大长度max_len, max_len设定为100,则将列表A通过“[PAD]”字符填充到该文本最大长度100,然后通过步骤S5中的映射词典Dict,映射成索引编号列表,成为GPT模型的输入张量X,对应的输出Y为缺少起始符通过映射词典Dict映射后的张量,将其它文本语料中的文本执行同样的操作,得到整个训练数据集,作为模型输入,通过最大逆向最大匹配分词算法,最终得到后续GPT网络的数据输入;

S7.构建GPT网络模型结构:约定模型最大文本长度max_len为100,嵌入维度为256,针对在步骤S6中的每条模型输入,先经过token_embedding、postional_embedding将文本进行嵌入表示,此时文本嵌入表示的矩阵形状为[100,256],将该文本嵌入表示输入到GPT网络模型,具有遮掩mask的多头注意力机制Multi_Head_Attention、前馈全连接神经网络Feed_forward作为一个单元,重复6次,即6层相同的网络,GPT网络的最后一层为[256,25856]的全连接,25856为步骤S5中所提到的keys_sum.txt中字、词、库总数量;最终得到GPT网络模型结构;

S8.训练模型:根据步骤S7中已设定好的模型结构,并加入模型Adam优化器和交叉熵损失函数进行模型训练;具体训练过程为:将步骤S6得到的模型输入,喂入步骤S7中得到的整体网络模型结构,对应模型张量为优化目标Y,模型最终目标即最小化X经过模型的输出和优化目标Y的交叉熵损失函数,先根据网络结构进行前向传播,根据预测输出与真实输出计算损失,然后进行反向传播,通过Adam优化器不断更新网络模型参数,以此往复运行,直到损失函数值降低到趋于稳定,针对模型训练的连续100个反向传播的损失函数loss值取平均记录为loss1,然后在5小时后记录连续100个反向传播的loss值取平均记录为loss2,如果模型损失值loss1-loss2<0.01,即可以停止训练保存模型,得到最优网络模型;

S9.模型预测:通过步骤S5中提及的映射词典Dict,映射成索引编号张量,将其作为模型输入,使用步骤S8中得到的最优网络模型,进入步骤S7中的网络结构,进行前向传播,得到logits值,再使用softmax计算模型输出的第len_List个位置概率最大值对应的字符,即此时模型预测下一个位置输出的索引为”30“,然后再次通过’[PAD]’填充到最大长度max_len,再通过步骤S2中提及的字典Dict,映射成索引编号张量,将其作为模型输入喂入步骤S5中得到的最优网络模型,此时计算模型输出的第len_List+1个位置概率最大值对应的字符;如此反复操作依次输出对应文本生成内容,最后将所有预测的字或者词或者句拼接在一起,作为文本生成最终输出结果。

所述步骤S1中将BERT词表中所有长度超过1的词表全部删除,同时删除项目中不常用字符。

文本生成任务是自然语言处理任务中最具有挑战性的任务之一,当前的文本生成任务正在朝着大模型、大数据集的思路前进,通常需要耗费大量的计算资源,本专利提出了一种基于逆向最大匹配分词算法的文本生成技术,通过添加可控的高频词,关键词,高频句,然后结合GPT这种深度学习文本生成模型架构,有效的改善了文本生成结果对于词汇的连贯性和句子的连贯性,可以在现有神经网络结构的基础上,不使用更深更大的网络结构和更大的数据集来提升文本生成任务的效果。

附图说明

图1为本发明GPT网络架构流程示意图。

具体实施方式

一种基于逆向最大匹配分词算法和GPT模型结合的文本生成方法,所述中文文本生成方法主要包括如下步骤:

S1.构造字符库:针对开源BERT模型公开的词表进行整理,保留特殊字符四个,分别为:文本起始符[CLS],补全字符 [PAD],句子间分隔符[SEP],未在词表中出现字符[UNK],将BERT词表中所有长度超过1的词表全部删除,然后将这些字符放到vocab.txt,针对项目project中提供的数据统计所有字符,然后将这些字符添加到vocab.txt,得到最终的字符库;

S2.构造高频词库:针对project的文本语料,通过jieba工具进行分词后,统计高频词,其具体操作为:建立词频统计字典Word_freq = {key1: value1, key2: value2,…},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,针对每一条文本数据通过jieba工具进行分词,如果该词不在Word_freq中,则将该词放到Word_freq中作为key;如果该词出现,则对应key的词频value加一;默认高频词是项目中出现频次大于20次的词汇,如果出现频次大于20次的超过5000,则只保留前5000个,将5000个高频词放到words_f.txt中,得到最终的高频词库;

S3.构造关键词词库:针对项目project的文本语料,建立词频统计字典Word_key= {key1: value1, key2: value2, …},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,通过jieba工具中基于tf-idf关键词抽取模块抽取每条文本的前三个关键词。如果当前文本的关键词不在Word_key中,则将该词放到Word_key中作为key;如果该词出现,则对应key的词频value加一;默认关键词频率是项目中出现频次大于10次的词汇,如果出现频次大于10次的超过5000,则只保留前5000个,将5000个关键词放到words_k.txt中,最终得到关键词词库;

S4.构造高频句库:针对项目project的文本语料,通过标点符号对文本进行分句,建立句频统计字典Sent_freq = {key1: value1, key2: value2, …},其中,key为字典键,取值为句子,value为key所对应的键值,取值为句子所对应的句频,统计高频句,如果当前文本的句子不在Sent_freq中,则将该句子放到Sent_freq中作为key;如果该句子出现,则key对应的句频value加一;默认句子频率是项目中出现句频大于10次的句子,如果出现频次大于10次的超过5000,则只保留前5000个句子,将5000个高频句放到sents_f.txt中,最终得到高频句库;

S5.建立映射词典:根据步骤S1、S2、S3所得到的字符库、高频词库、关键词词库、高频句库,建立映射词典,其具体为:将字符库,关键词库,高频词库,高频句库汇总到一个txt文件中并去重,文件记为keys_sum.txt,通过该txt文件建立映射词典Dict,Dict的前项key为字符索引编号,Dict的后项value为具体的领域字、关键词、高频词、高频句,即Dict={0:‘[CLS]’,1:”[PAD]”,2:”[SEP]“,.......},其中[CLS]为文本起始符,[PAD]代表当文本长度不够最大长度max_len时,采用“[PAD]”字符填充到max_len长度,最终得到映射词典Dict;

S6.数据和模型适配:项目project的文本语料中提取某条文本样本,逆向最大匹配分词算法从该文本末端开始匹配扫描,每次取i个字符,i为步骤S5中映射词典表中value最长的词或者句子进行匹配,如果在映射词典表中未匹配成功,则去掉匹配字段的最前面一个字,继续匹配,如果匹配成功,则该词为分词的一个字、词或句,然后从输入文本中扣除该词,从剩下的文本中继续执行上述操作,从而完成最终分词结果记为列表A,本条文本不够最大长度max_len, max_len设定为100,则将列表A通过“[PAD]”字符填充到该文本最大长度100,然后通过步骤S5中的映射词典Dict,映射成索引编号列表,成为GPT模型的输入张量X,对应的输出Y为缺少起始符通过映射词典Dict映射后的张量,将其它文本语料中的文本执行同样的操作,得到整个训练数据集,作为模型输入,通过最大逆向最大匹配分词算法,最终得到后续GPT网络的数据输入;

S7.构建GPT网络模型结构:约定模型最大文本长度max_len为100,嵌入维度为256,针对在步骤S6中的每条模型输入,先经过token_embedding、postional_embedding将文本进行嵌入表示,此时文本嵌入表示的矩阵形状为[100,256],将该文本嵌入表示输入到GPT网络模型,具有遮掩mask的多头注意力机制Multi_Head_Attention、前馈全连接神经网络Feed_forward作为一个单元,重复6次,即6层相同的网络,GPT网络的最后一层为[256,25856]的全连接,25856为步骤S5中所提到的keys_sum.txt中字、词、库总数量;最终得到GPT网络模型结构;

S8.训练模型:根据步骤S7中已设定好的模型结构,并加入模型Adam优化器和交叉熵损失函数进行模型训练;具体训练过程为:将步骤S6得到的模型输入,喂入步骤S7中得到的整体网络模型结构,对应模型张量为优化目标Y,模型最终目标即最小化X经过模型的输出和优化目标Y的交叉熵损失函数,先根据网络结构进行前向传播,根据预测输出与真实输出计算损失,然后进行反向传播,通过Adam优化器不断更新网络模型参数,以此往复运行,直到损失函数值降低到趋于稳定,针对模型训练的连续100个反向传播的损失函数loss值取平均记录为loss1,然后在5小时后记录连续100个反向传播的loss值取平均记录为loss2,如果模型损失值loss1-loss2<0.01,即可以停止训练保存模型,得到最优网络模型;

S9.模型预测:通过步骤S5中提及的映射词典Dict,映射成索引编号张量,将其作为模型输入,使用步骤S8中得到的最优网络模型,进入步骤S7中的网络结构,进行前向传播,得到logits值,再使用softmax计算模型输出的第len_List个位置概率最大值对应的字符,即此时模型预测下一个位置输出的索引为”30“,然后再次通过’[PAD]’填充到最大长度max_len,再通过步骤S2中提及的字典Dict,映射成索引编号张量,将其作为模型输入喂入步骤S5中得到的最优网络模型,此时计算模型输出的第len_List+1个位置概率最大值对应的字符;如此反复操作依次输出对应文本生成内容,最后将所有预测的字或者词或者句拼接在一起,作为文本生成最终输出结果。

所述步骤S1中将BERT词表中所有长度超过1的词表全部删除,同时删除项目中不常用字符。

结合实例具体说明如下:

1. 一种基于逆向最大匹配分词算法和GPT模型结合的文本生成方法,其特征在于:所述中文文本生成方案主要包括:

S1.构造字符库:针对开源BERT模型公开的词表进行整理,保留特殊字符四个,分别为:文本起始符[CLS],补全字符 [PAD],句子间分隔符[SEP],未在词表中出现字符[UNK],将BERT词表中所有长度超过1的词表全部删除,同时删除项目中不常用字符,然后将这些字符放到vocab.txt。针对项目project中提供的数据统计所有字符,然后将这些字符添加到vocab.txt(词表中最前面四个为四个特殊字符,所有字符在vocab.txt的形式为一行只有一个字符),得到最终的字符库。

S2.构造高频词库:针对project的文本语料,通过jieba工具进行分词后,统计高频词,其具体操作为:建立词频统计字典Word_freq = {key1: value1, key2: value2,…},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,针对每一条文本数据通过jieba工具进行分词,如果该词不在Word_freq中,则将该词放到Word_freq中作为key;如果该词出现,则对应key的词频value加一。本专利默认高频词是项目中出现频次大于20次的词汇,如果出现频次大于20次的超过5000,则只保留前5000个(具体在应用本专利时可以根据实际计算资源适当增加或减少),高频词通常是项目中最常用的词汇信息,具有一定的普遍规律,不能在文本生成中破坏,将5000个高频词放到words_f.txt中(所有高频词在words_f.txt的形式为一行只有一个高频词),得到最终的高频词库。

S3.构造关键词词库:针对项目project的文本语料,建立词频统计字典Word_key= {key1: value1, key2: value2, …},其中,key为字典键,取值为词,value为key所对应的键值,取值为词所对应的词频,通过jieba工具中基于tf-idf关键词抽取模块抽取每条文本的前三个关键词。如果当前文本的关键词不在Word_key中,则将该词放到Word_key中作为key;如果该词出现,则对应key的词频value加一。本专利默认关键词频率是项目中出现频次大于10次的词汇,如果出现频次大于10次的超过5000,则只保留前5000个(在具体应用本专利时可以根据实际计算资源适当增加或减少)。关键词通常是项目中比较重要的词汇信息,具有一定的实际含义,不能在文本生成中破坏,将5000个关键词放到words_k.txt中(所有关键词在words_k.txt的形式为一行只有一个关键词),最终得到关键词词库。

S4.构造高频句库:针对项目project的文本语料,通过标点符号对文本进行分句,建立句频统计字典Sent_freq = {key1: value1, key2: value2, …},其中,key为字典键,取值为句子,value为key所对应的键值,取值为句子所对应的句频,统计高频句,如果当前文本的句子不在Sent_freq中,则将该句子放到Sent_freq中作为key;如果该句子出现,则key对应的句频value加一。本专利默认句子频率是项目中出现句频大于10次的句子,如果出现频次大于10次的超过5000,则只保留前5000个句子(在具体应用本专利方案时可以根据实际计算资源适当增加或减少)。高频句子通常为该领域经常涉及的一些常用信息,在文本生成任务中不能破坏,将5000个高频句放到sents_f.txt中(所有高频句放在sents_f.txt的形式为一行只有一个高频句),最终得到高频句库。

S5.建立映射词典:根据步骤S1、S2、S3所得到的字符库、高频词库、关键词词库、高频句库,建立映射词典,其具体为:将字符库,关键词库,高频词库,高频句库汇总到一个txt文件中并去重,文件记为keys_sum.txt,通过该txt文件建立映射词典Dict,Dict的前项key为字符索引编号,Dict的后项value为具体的领域字、关键词、高频词、高频句,即Dict={0:‘[CLS]’,1:”[PAD]”,2:”[SEP]“,3:”我”, 4:”考上了大学”, 5:”心里很高兴”,.......},其中[CLS]为文本起始符,[PAD]代表当文本长度不够最大长度max_len时,采用“[PAD]”字符填充到max_len长度,最终得到映射词典Dict。

S6.数据和模型适配:假如项目project的文本语料中的某条文本样本为”经过我持续的努力学习,我终于考上了大学,心里很高兴。“,逆向最大匹配分词算法可以从该文本末端开始匹配扫描,每次取i个字符(i为步骤S5中映射词典表中value最长的词或者句子)进行匹配,如果在映射词典表中未匹配成功,则去掉匹配字段的最前面一个字,继续匹配,如果匹配成功,则该词为分词的一个字、词或句,然后从输入文本中扣除该词,从剩下的文本中继续执行上述操作,从而完成最终分词结果。通过上述方法,用户输入的数据分词结果为['[CLS]', '经过', '我', '持续', '的', '努力学习', ',', '我', '终于', '考上了大学', ',', '心里很高兴', '。'],记为列表A,本条文本不够最大长度max_len,在本专利中max_len设定为100,则将列表A通过“[PAD]”字符填充到该文本最大长度100,然后通过步骤S5中的映射词典Dict,映射成索引编号列表,成为GPT模型的输入张量X,对应的输出Y为缺少起始符的['经过', '我', '持续', '的', '努力学习', ',', '我', '终于', '考上了大学', ',', '心里很高兴', '。']通过映射词典Dict映射后的张量。将其它文本语料中的文本执行同样的操作,得到整个训练数据集,作为模型输入,通过上述可以知道,通过最大逆向最大匹配分词算法,可以有效的将传统的分词算法融入到GPT模型中。最终得到后续GPT网络的数据输入。

S7.构建GPT网络模型结构:其具体操作如下:本专利约定模型最大文本长度max_len为100,嵌入维度为256,针对在步骤S6中的每条模型输入,先经过token_embedding+postional_embedding将文本进行嵌入表示,此时文本嵌入表示的矩阵形状为[100,256],将该文本嵌入表示输入到GPT网络模型,即:具有遮掩mask的多头注意力机制Multi_Head_Attention+前馈全连接神经网络Feed_forward作为一个单元,重复6次,即6层相同的网络,GPT网络的最后一层为[256,25856]的全连接(25856为步骤S5中所提到的keys_sum.txt中字、词、库总数量)。最终得到GPT网络模型结构,模型结构如附图1。

S8.训练模型:根据步骤S7中已设定好的模型结构,并加入模型Adam优化器和交叉熵损失函数进行模型训练;具体训练过程为:将步骤S6得到的模型输入,喂入步骤S7中得到的整体网络模型结构。例如:['[CLS]', '经过', '我', '持续', '的', '努力学习',',', '我', '终于', '考上了大学', ',', '心里很高兴', '。']的对应模型张量记为X,['经过', '我', '持续', '的', '努力学习', ',', '我', '终于', '考上了大学',',', '心里很高兴', '。']对应模型张量为优化目标Y。模型最终目标即最小化X经过模型的输出和优化目标Y的交叉熵损失函数。先根据网络结构进行前向传播,根据预测输出与真实输出计算损失,然后进行反向传播,通过Adam优化器不断更新网络模型参数,直到损失函数值降低到趋于稳定(针对模型训练的连续100个反向传播的损失函数loss值取平均记录为loss1,然后在5小时后记录连续100个反向传播的loss值取平均记录为loss2。如果模型损失值loss1-loss2<0.01,即可以停止训练,保存模型)。将此时的参数矩阵进行保存,即可得到最优网络模型。GPT模型的训练参数如下:

S9.模型预测:假如用户输入的文本内容为”经过“,则通过逆向匹配分词算法将其变成序列[’[CLS]’,'经过']记为List_input,其长度为len_List,然后通过’[PAD]’填充到最大长度max_len,然后(再)通过步骤S5中提及的映射词典Dict,映射成索引编号张量,将其作为模型输入,使用步骤S8中得到的最优网络模型,进入步骤S7中的网络结构,进行前向传播,得到logits值,再使用softmax计算模型输出的第len_List个位置概率最大值对应的字符,即此时模型预测下一个位置输出的索引为”30“,然后通过映射词典Dict取出该索引对应的信息为“我”和输入拼接为['[CLS]','经过', '我'],然后再次通过’[PAD]’填充到最大长度max_len,再通过步骤S2中提及的字典Dict,映射成索引编号张量,将其作为模型输入喂入步骤S5中得到的最优网络模型,此时计算模型输出的第len_List+1个位置概率最大值对应的字符。如此反复操作依次输出对应文本生成内容,最后将所有预测的字或者词或者句拼接在一起,作为文本生成最终输出结果。

上面模型效果如下:

实用性如下:

通过不断的提升关键词词库,高频词库,高频句库的质量,将逆向最大匹配分词算法融入到GPT深度学习模型中,因为句子,词汇信息采用分词算法得到了保护,即没有破坏,则可以有效提高文本生成的连贯性。

技术分类

06120115632661