基于预训练模型T5的编程问答帖子标题自动补全方法

未命名 09-13 阅读:89 评论:0

基于预训练模型t5的编程问答帖子标题自动补全方法
技术领域
1.本发明涉及计算机技术领域,尤其涉及基于预训练模型t5的编程问答帖子标题自动补全方法。


背景技术:

2.作为一个供开发人员解决编程问题的共享问答网站,stack overflow吸引了数以百万计的编程爱好者和开发人员。开发人员可以通过发布或浏览高质量的问题帖来寻求问题的解决方案,提升编程能力。虽然stack overflow中问题帖的数量一直在快速增长,但研究人员发现,有相当数量的问题贴质量很低,无法及时吸引stack overflow中其他开发人员的注意。这些低质量的问题帖子不仅阻碍了潜在的回答者及时对帖子进行回复,也阻碍了知识生成和分享的过程。
3.然而已有研究表明产生低质量问题贴的主要原因之一是开发人员没有创建信息丰富的问题标题。一个简洁、准确的标题可以提高帖子的质量,从而帮助开发人员快速了解问题帖的关键信息。然而实际开发过程中由于缺乏领域知识或表达写作能力较差,开发人员不能很好的总结提炼问题标题。因此,为这些问题贴生成高质量的标题成为一个有价值的研究课题。
4.在之前的研究中,研究人员主要通过分析问题贴的内容,如问题描述和代码片段直接生成问题标题,尽管这些技术在解决标题生成问题方面带来了实质性的进展,但最近的实证研究报告也表明,这种完全依赖“机器”的技术对软件开发人员来说仍然不能成为有用的工具。通过观察分析stack overflow上的高分问题帖,发现许多标题包含的不仅仅是对帖子内容的总结和概括,想要生成更具启发性和全面性的标题,更有效的方法是考虑开发人员的意图,在他们编写标题时提供准确的补全建议。


技术实现要素:

5.本发明的目的在于提供一种基于预训练模型t5的编程问答帖子标题自动补全方法,当开发人员在编程问答网站(例如stack overflow)上编写问题贴标题时,该方法可以根据问题贴的内容(包括问题描述和代码片段),和不完整的标题自动生成补全建议来支持开发人员编写标题。
6.本发明的思想为:本发明提出基于预训练模型t5的编程问答帖子标题自动补全方法,首先使用编程语言标签从stack overflow中搜集相关问题贴,本发明主要关注八种流行的编程语言(即java、python、c#、javascript、php、ruby、go和html);然后设计四条启发式规则过滤低质量问题贴,搜集高质量问题贴;其次从上述问题帖中提取出有效信息,组成《问题标题,问题描述,代码片段》三元组,形成初始语料库;为了使语料库适应标题补全任务,对其进行预处理操作,每个完整标题的结尾都有不同数量的单词被屏蔽,形成残缺标题;接着对多模态输入进行建模,微调基于transformer的t5模型,得到问题帖标题补全模型。本发明的方法在相同的语料库中取得了比基准方法更好的性能。
7.本发明是通过如下措施实现的:基于预训练模型t5的编程问答帖子标题自动补全方法,其中,包括以下步骤:
8.(1)搜集高质量问题贴:首先使用编程语言标签(java、python、c#、javascript、php、ruby、go和html)从stack overflow搜集相关问题贴,其次设计四条启发式规则过滤低质量问题帖:
9.(1-1)启发式规则一,提取的问题帖的分数必须大于等于10;
10.(1-2)启发式规则二,提取的问题帖必须包含代码片段;
11.(1-3)启发式规则三,提取的问题帖中必须具有一个被接受的回答作为最终答案;
12.(1-4)启发式规则四,提取的问题贴的标题长度必须大于等于4。
13.(2)语料库的构建及预处理:从上述问题帖中提取出问题标题、问题描述、代码片段以组成《问题标题,问题描述,代码片段》三元组,形成初始语料库。为了使语料库适应标题补全任务,对其进行预处理操作,对每个实例的完整标题创建n个变体,每个变体的结尾都有不同数量的单词被屏蔽,形成残缺标题。
14.(3)标题补全模型的构建:为了充分利用互补和共享知识,提高训练模型的性能和泛化能力,首先将每种编程语言的标题补全形式化为独立但相关的任务,并采用多任务学习,其次对多模态输入进行建模,微调基于transformer的t5模型,得到问题帖标题补全模型。具体包括如下步骤:
15.(3-1)通过添加前缀prefix来区分不同编程语言的标题补全任务(例如,前缀“js:”代表编程语言javascript);
16.(3-2)建模多模态输入:通过将不完整的标题x
incomp
与问题帖子的内容(其中包含问题描述x
desc
和代码片段x
code
)连接起来表示多模态输入,使用一个特殊的标识符<body>来区分x
incomp
和x
desc
,使用<code>标识符来区分x
desc
和x
code
,并且在不完整的标题后添加一个[mask]标签,以表示标题缺失的部分。模型的最终输入x表示如下:
[0017][0018]
(3-3)为了缓解词汇表之外的问题,使用sentencepiece方法来分割输入x;
[0019]
(3-4)预训练的t5模型:它是一个统一的预训练编码器-解码器transformer模型,可以将所有基于文本的语言问题转换为文本到文本的格式,并允许迁移学习和多任务学习。具体包括如下步骤:
[0020]
(3-4-1)首先,将输入序列x映射到嵌入向量,然后将该向量传递到编码器层。
[0021]
(3-4-2)编码器的每个模块由两个子组件组成:自注意力层和前馈网络,并且利用残差连接和层归一化使矩阵运算维度一致,加快模型的训练和收敛速度。
[0022]
(3-4-3)在解码器部分采用了自回归机制,将已生成序列的嵌入向量和编码器输出的隐藏向量输入到解码器中,模型将根据波束搜索算法返回m个最可能的输出序列。
[0023]
(3-5)微调基于transformer的t5模型:使用上述搜集的语料库在多任务设置中对t5模型进行微调,通过最小化8种编程语言的损失函数来训练模型的参数θ,为了缓解过拟合问题,使用早期停止策略,即在连续10次迭代中,当验证集上的损失没有减少时,模型停止训练,并从性能最好的模型中收集参数值。
[0024]
[0025]
其中,l(
·
)表示求损失函数,xi为模型输入,f(
·
)为模型的预测值,yi为真实值,θ为模型参数值,θ
*
为更新后的模型参数值,argmin表示使目标函数取最小值时的参数值。
[0026]
(4)标题补全模型的应用:通过分析开发人员提供的问题帖子的内容(即问题描述和代码片段)和提示信息(即不完整的标题),经过训练的模型可以在开发人员编写问题标题时提供完整的补全建议。
[0027]
该基于预训练模型t5的编程问答帖子标题自动补全方法的参数设置如下:
[0028]
超参数值编码器层数12解码器层数12隐藏层大小768波束搜索大小10最大的输入长度512最大的输出长度48长度惩罚1.2
[0029]
与现有技术相比,本发明的有益效果为:
[0030]
(1)本发明提出了一种基于t5模型的问题帖标题自动补全方法,当开发人员在编程问答网站(例如stack overflow)上编写问题贴标题时,经过训练的模型可以根据问题贴的内容和不完整的标题自动生成补全建议来支持开发人员编写标题。该方法同时在代码片段和问题描述中提取有效信息来捕获问题帖的关键思想,考虑了java、python、c#、javascript、php、ruby、go、html八种编程语言的问题帖标题补全,模型具有较强的通用性和广泛性。
[0031]
(2)本发明聚焦于标题自动补全任务,不是从头开始为给定的问题帖生成标题,而是通过提供神经语言模型生成的补全建议来支持开发人员编写标题,该方法能有效减少开发人员编写标题时所需的时间和精力,帮助开发人员编写更高质量的标题,从而解决问题帖标题质量低而不能及时得到有效回复的问题。
附图说明
[0032]
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。
[0033]
图1为本发明提供的基于t5模型的问题帖标题自动补全方法的系统框架图。
具体实施方式
[0034]
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。当然,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
[0035]
实施例1
[0036]
参见图1所示,本发明提供了基于t5模型的问题帖标题自动补全方法,具体包括以下内容:
[0037]
(1)搜集高质量问题贴:首先使用编程语言标签(java、python、c#、javascript、
php、ruby、go和html)从stack overflow搜集相关问题贴,其次设计四条启发式规则过滤低质量问题帖,最终根据以下启发式规则从stack overflow中收集了总共164,748个问题帖,然后将收集到的初始语料库按照80%:10%:10%的比例分割为训练集、验证集和测试集。表1显示了不同编程语言语料库的统计信息。
[0038]
(1-1)启发式规则一,提取的问题帖的分数必须大于等于10;
[0039]
(1-2)启发式规则二,提取的问题帖必须包含代码片段;
[0040]
(1-3)启发式规则三,提取的问题帖中必须具有一个被接受的回答作为最终答案;
[0041]
(1-4)启发式规则四,提取的问题贴的标题长度必须大于等于4。
[0042]
表1
[0043]
编程语言训练集验证集测试集python3040438013801java2513631423143c#2533231673167javascript2721934023403php1057313221322ruby4521565566go1742218218html6867858859总计1317941647516479
[0044]
(2)语料库的构建及预处理:从上述问题帖中提取出问题标题、问题描述、代码片段以组成《问题标题,问题描述,代码片段》三元组,形成初始语料库,为了使语料库适应标题补全任务,对其进行预处理操作,对每个实例的完整标题创建3个变体,每个变体的结尾都有不同数量的单词被屏蔽,形成残缺标题。
[0045]
(3)标题补全模型的构建:为了充分利用互补和共享知识,提高训练模型的性能和泛化能力,首先将每种编程语言的标题补全形式化为独立但相关的任务,并采用多任务学习,其次对多模态输入进行建模,微调基于transformer的t5模型,得到问题帖标题补全模型。具体包括如下步骤:
[0046]
(3-1)通过添加前缀prefix来区分不同编程语言的标题补全任务(例如,前缀“js:”代表编程语言javascript);
[0047]
(3-2)建模多模态输入:通过将不完整的标题x
incomp
与问题帖子的内容(其中包含问题描述x
desc
和代码片段x
code
)连接起来表示多模态输入,使用一个特殊的标识符<body>来区分x
incomp
和x
desc
,使用<code>标识符来区分x
desc
和x
code
,并且在不完整的标题后添加一个[mask]标签,以表示标题缺失的部分。模型的最终输入x表示如下:
[0048][0049]
(3-3)为了缓解词汇表之外的问题,使用sentencepiece方法来分割输入x;
[0050]
(3-4)预训练的t5模型:它是一个统一的预训练编码器-解码器transformer模型,可以将所有基于文本的语言问题转换为文本到文本的格式,并允许迁移学习和多任务学习。具体包括如下步骤:
[0051]
(3-4-1)首先,将输入序列x映射到嵌入向量,然后将该向量传递到编码器层。
[0052]
(3-4-2)编码器的每个模块由两个子组件组成:自注意力层和前馈网络,并且利用残差连接和层归一化使矩阵运算维度一致,加快模型的训练和收敛速度。
[0053]
(3-4-3)在解码器部分采用了自回归机制,将已生成序列的嵌入向量和编码器输出的隐藏向量输入到解码器中,模型将根据波束搜索算法返回10个最可能的输出序列。
[0054]
(3-5)微调基于transformer的t5模型:使用上述搜集的语料库在多任务设置中对t5模型进行微调,通过最小化8种编程语言的损失函数来训练模型的参数θ,为了缓解过拟合问题,使用早期停止策略,即在连续10次迭代中,当验证集上的损失没有减少时,模型停止训练,并从性能最好的模型中收集参数值。
[0055][0056]
其中,l(
·
)表示求损失函数,xi为模型输入,f(
·
)为模型的预测值,yi为真实值,θ为模型参数值,θ
*
为更新后的模型参数值,argmin表示使目标函数取最小值时的参数值。
[0057]
(4)标题补全模型的应用:通过分析开发人员提供的问题帖子的内容(即问题描述和代码片段)和提示信息(即不完整的标题),经过训练的模型可以在开发人员编写问题标题时提供完整的补全建议。
[0058]
(5)该基于预训练模型t5的编程问答帖子标题自动补全方法的参数设置如表2所示:
[0059]
表2
[0060]
超参数值编码器层数12解码器层数12隐藏层大小768波束搜索大小10最大的输入长度512最大的输出长度48长度惩罚1.2
[0061]
(5)在相同的语料库上将本发明方法与传统的n-gram文本补全模型以及现有的标题直接生成方法进行比较,使用神经机器翻译和文本补全研究中被广泛使用的五个评测指标(即rouge、bleu、gleu、perfect predictions(pp)和levenshtein distance(ld))来自动评估上述标题生成任务。除了ld指标外,指标值越高,方法性能越好。表3显示了本发明所提方法在八种编程语言的标题补全任务中与基准方法的比较结果。
[0062]
表3
[0063][0064]
经实验表明,本发明提出的基于预训练模型t5的编程问答帖子标题自动补全方法相较于传统的n-gram文本补全模型以及现有的标题直接生成方法而言,在所有指标上都取得了更好的性能,从而验证了本发明所提方法的可行性。具体来看,以c#编程语言为例,与标题直接生成方法相比,本发明所提标题补全方法对于rouge_l、gleu、bleu_4、pp_1和ld_1的性能分别提高了16.39%、42.06%、25.88%、88.83%和32.20%。性能的较大提升表明了本发明所提方法有较强的竞争力。
[0065]
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

技术特征:
1.基于预训练模型t5的编程问答帖子标题自动补全方法,其特征在于,包括以下步骤:(1)搜集高质量问题贴:使用编程语言标签从stack overflow中搜集相关问题贴,并设计四条启发式规则过滤低质量问题贴;(2)语料库的构建及预处理:从上述问题帖中提取有效信息组成<问题标题,问题描述,代码片段>三元组,形成初始语料库,并对每个实例的完整标题进行变体操作,每个变体的结尾都有不同数量的单词被屏蔽,形成残缺标题;(3)标题补全模型的构建:通过连接残缺标题和帖子内容,即问题描述和代码片段对多模态输入进行建模,采用多任务学习,微调基于transformer的t5模型,得到标题自动补全模型;(4)标题补全模型的应用:通过分析开发人员提供的问题帖子的内容和提示信息,经过训练的模型在开发人员编写问题标题时提供完整的补全建议。2.根据权利要求1所述的基于预训练模型t5的编程问答帖子标题自动补全方法,其特征在于,所述步骤(1)中设计四条启发式规则过滤低质量问题贴,具体包括如下步骤:(1-1)启发式规则一,提取的问题帖的分数必须大于等于10;(1-2)启发式规则二,提取的问题帖必须包含代码片段;(1-3)启发式规则三,提取的问题帖中必须具有一个被接受的回答作为最终答案;(1-4)启发式规则四,提取的问题贴的标题长度必须大于等于4。3.根据权利要求1所述的基于预训练模型t5的编程问答帖子标题自动补全方法,其特征在于,所述步骤(3)中构建标题自动补全模型,包括如下步骤:(3-1)通过添加前缀prefix来区分不同编程语言的标题补全任务;(3-2)建模多模态输入:通过将不完整的标题x
incomp
与问题帖子的内容连接起来表示多模态输入,其中包含问题描述x
desc
和代码片段x
code
,使用一个特殊的标识符<body>来区分x
incomp
和x
desc
,使用<code>标识符来区分x
desc
和x
code
,并且在不完整的标题后添加一个[mask]标签,以表示标题缺失的部分,模型的最终输入x表示如下:(3-3)为了缓解词汇表之外的问题,使用sentencepiece方法来分割输入x;(3-4)预训练的t5模型:它是一个统一的预训练编码器-解码器transformer模型,将所有基于文本的语言问题转换为文本到文本的格式,并允许迁移学习和多任务学习;具体包括如下步骤:(3-4-1)首先,将输入序列x映射到嵌入向量,然后将该向量传递到编码器层;(3-4-2)编码器的每个模块由两个子组件组成:自注意力层和前馈网络,并且利用残差连接和层归一化使矩阵运算维度一致,加快模型的训练和收敛速度;(3-4-3)在解码器部分采用了自回归机制,将已生成序列的嵌入向量和编码器输出的隐藏向量输入到解码器中,模型将根据波束搜索算法返回m个最可能的输出序列;(3-5)微调基于transformer的t5模型:使用上述搜集的语料库在多任务设置中对t5模型进行微调,通过最小化8种编程语言的损失函数来训练模型的参数θ,为了缓解过拟合问题,使用早期停止策略,即在连续10次迭代中,当验证集上的损失没有减少时,模型停止训练,并从性能最好的模型中收集参数值;
其中,l()表示求损失函数,x
i
为模型输入,f()为模型的预测值,y
i
为真实值,θ为模型参数值,θ
*
为更新后的模型参数值,argmin表示使目标函数取最小值时的参数值。

技术总结
本发明提供了一种基于预训练模型T5的编程问答帖子标题自动补全方法,属于计算机技术领域,解决了开发人员不能很好的总结提炼问题帖标题,导致标题质量低而不能及时得到有效回复的问题。其技术方案为:包括以下步骤:(1)搜集高质量问题贴;(2)语料库的构建及预处理;(3)标题补全模型的构建;(4)标题补全模型的应用。本发明的有益效果为:减少开发人员编写标题时所需的时间和精力,帮助他们编写更高质量的标题。的标题。的标题。


技术研发人员:周彦琳 陈翔 杨少宇 裴加华 张子晨 黄一麟
受保护的技术使用者:南通大学
技术研发日:2023.02.01
技术公布日:2023/9/11
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐