面向源代码摘要的快速学习框架

互联不一般哥 2024-05-30 21:31:00

A Prompt Learning Framework for Source Code Summarization

WEISONG SUN, CHUNRONG FANG∗ , YUDU YOU, YUCHEN CHEN, YI LIU, CHONG WANG,JIAN ZHANG,QUANJUN ZHANG,HANWEI QIAN,WEI ZHAO,YANG LIU, ZHENYU CHEN

引用

Sun W, Fang C, You Y, et al. A Prompt Learning Framework for Source Code Summarization[J]. arXiv preprint arXiv:2312.16066, 2023.

论文:https://arxiv.org/abs/2312.16066

摘要

代码摘要自动生成是软件开发的关键任务。近年来,大型语言模型(LLM)被引入该领域。现有方法如指令提示和任务导向微调存在局限。本文提出PromptCS框架,通过训练提示代理生成连续提示来释放LLM在代码摘要中的潜力。PromptCS无需用户设计提示,对LLM非侵入性,训练效率高,并在多个指标上优于传统方法。实验表明,PromptCS在CodeSearchNet数据集上表现优异,特别是在大型LLM上,且能生成更好的摘要。

1 引言

源代码注释在促进程序理解和软件维护方面起着至关重要的作用。然而,现有研究表明,缺乏高质量的代码注释是软件行业普遍存在的问题。此外,在软件演化过程中,注释往往是缺位的、不匹配的、过时的。这些现实问题驱动了源代码摘要的研究。源代码摘要(code summarization,简称代码摘要)是自动生成代码摘要(即注释)的任务。近十年来,一直是软件工程领域的研究热点之一。

最近,随着大型语言模型(llm)在自然语言处理(NLP)中的成功,越来越多的软件工程(SE)研究人员开始将它们集成到各种SE任务的解析过程中。与NLP任务的llm(例如ChatGPT和LLaMA)类似,SE任务的代码也有许多llm,例如Codex、StarCoder、CodeGen和PolyCoder。在本文中,我们更关注llm在代码摘要任务中的应用。现有的研究表明,在大量文本语料库上训练的llm已经显示出他们特别令人兴奋的能力,可以从文本指令(即在零次学习设置中)或从几个例子(即在少次学习设置中)执行新任务。因此,最近有几项研究调查了零次和少次学习的教学提示在使llm适应代码摘要任务中的有效性。例如,孙伟松等人评估了ChatGPT在零射击代码摘要任务上的性能。他们设计了几个启发式问题/指令来收集ChatGPT的反馈,从而找到一个合适的提示来指导ChatGPT生成分布内代码摘要。然而,他们在大规模CSN-Python数据集上的实验结果表明,该提示无法诱导ChatGPT生成令人满意的摘要。我们也在CSN-Java数据集上尝试了这个提示,并得到了类似的结果,详情见后文。这些结果表明,手工制作有效的提示是一项具有挑战性的任务,要求用户不仅具有专业领域知识,而且对正在使用的llm有深刻的理解。Ahmed等人研究了少射学习的指令提示在使llm适应代码总结任务中的有效性。为了发现适合小样本学习的样例数量,他们在小规模测试数据集上尝试了多组不同数量的样本(包括5、10和15)。然后,他们利用10个样本在商业LLM法典上进行指令提示,并发现它可以优于微调基础模型(例如,CodeT5)。我们利用相同的10个样本对开源llm(例如,StarCoderBase-3B)进行指令提示,发现它们的性能仍然比微调的llm差得多。这一现象表明,对于少样本学习,选择哪些样本和选择多少样本,需要用户根据专业知识和不断的试验做出决策。

另一种使llm更好地完成下游任务的直接方案是通过面向任务的微调。面向任务的微调通过训练特定于所需任务的数千个监督标签来更新llm的权重。微调的主要优势是在任务基准上的强大性能。例如,Jin等人在有监督的bug修复数据上微调了120亿(B)的法典。虽然微调显著增强了模型的bug修复能力,但随之而来的是高额的训练成本。例如,为了进行全模型微调(更新法典的所有权值),Jin等人构建了一个由64块32GB V100 gpu组成的训练环境,这是许多研究团队无法实现的。在本文中,我们还在代码摘要任务上进行了面向任务的微调方案的实验,这些任务同样产生了很高的训练成本。随着llm的规模不断扩大,微调的成本可能相当可观。

在本文中,我们提出了一种新的代码摘要提示学习框架,称为PromptCS。PromptCS的关键特性是它能够将开发人员从手动设计复杂提示的需要中解放出来。具体来说,PromptCS设计了两个协作组件来实现此功能,包括一个提示代理和一个LLM。提示代理负责生成可以诱导LLM执行代码摘要任务的能力的连续提示。提示代理的核心是一个基于深度学习(DL)的提示编码器,它将由nlearnabletoken组成的伪提示作为输入,并产生提示嵌入(即连续提示)。提示代理在LLM的指导下进行训练。因此,经过良好训练的prompt agent可以产生一个比人类编写的离散提示更适合LLM的连续提示。更重要的是,与改变llm参数的面向任务的微调方案不同,PromptCS对llm是非侵入性的。PromptCS在培训过程中冻结llm的参数,只更新提示代理的参数,可以大大减少对培训资源的需求。

综上所述,我们做出了以下贡献。

我们提出了一种新的代码总结提示学习框架,称为PromptCS。PromptCS能够为输入代码片段生成高质量的摘要。此外,PromptCS是一个通用框架,可以与多个llm结合使用。我们开放了PromptCS的代码,以方便未来的研究和应用。我们在广泛使用的基准数据集上进行了广泛的实验,以评估PromptCS。实验结果表明,在BLEU、METEOR、ROUGE-L和SentenceBERT四个指标上,PromptCS显著优于零镜头和少镜头学习的指令提示方案,与面向任务的微调方案相当。在一些llm上,例如StarCoderBase-1B和StarCoderBase-3B, PromptCS甚至优于面向任务的微调方案。在培训成本方面,PromptCS是明显低于以任务为导向的微调方案。例如,当使用StarCoderBase-7B模型作为基础LLM时,PromptCS训练提示代理大约需要67小时,而面向任务的微调方案一个epoch训练大约需要211小时。我们对PromptCS和基线生成的总结(包括零次和少次学习的指令提示方案以及面向任务的微调方案)进行了定性的人工评估。人类得分的统计结果表明,与基线相比,PromptCS生成的摘要更接近于ground-truth摘要。

2 方法

2.1 概述

图1展示了PromptCS的概述。顶部显示PromptCS的培训过程,底部显示PromptCS的部署/使用,以支持代码摘要服务。PromptCS由两个核心组件组成:提示代理和LLM。提示代理负责生成提示,诱导LLM为代码片段生成自然语言摘要。PromptCS对llm具有非侵入性,即在训练过程中,llm的参数始终被冻结,保持不变。因此,在PromptCS的训练过程中,我们的目标是获得一个训练有素的提示代理。PromptCS利用⟨代码片段,ground-truth摘要⟩对组成的训练数据来训练提示代理。具体来说,PromptCS将提示员的培训分解为五个步骤。在步骤1中,PromptCS将代码片段提供给LLM,利用其输入嵌入层生成相应的代码嵌入,表示为eC。在步骤2中,PromptCS向提示编码器提供一个伪提示,以生成表示为eP的提示嵌入。伪提示由nlearnable没有实际意义的token组成。提示编码器是一个DL模型,与提示代理一起训练。在步骤3中,PromptCS连接eCandPtogether以产生表示为eF的融合嵌入。与人类编写的离散提示类似,我们的PromptCS对输入代码片段是非侵入性的,也就是说,提示嵌入不会破坏代码嵌入的完整性。因此,ePwill只被拼接到eC的正面/背面。eFare然后馈送到LLM的模块块中以生成预测的摘要(步骤4)。在步骤5中,基于预测摘要和ground-truth摘要,PromptCS计算损失并迭代更新提示agent的模型参数。一旦训练阶段完成,就得到了训练良好的prompt agent。当部署PromptCS以供使用时,提示代理将自动为用户给出的代码片段生成一个提示嵌入,以指导LLM生成预测的摘要。对于用户来说,所有这一切都是无缝进行的,并且是不可察觉的。

图1 PromptCS概述

2.2 代码嵌入生成

每个LLM都有三个核心组件,即tokenizer,输入嵌入层和模块块。PromptCS直接使用LLM的前两个组件来完成代码嵌入生成的任务。具体来说,给定一个代码片段,我们的提示代理首先利用相应LLM提供的标记赋予器将代码片段中的各种元素,如标识符和符号,转换为索引表示。每个索引表示对应于LLM词汇表中的一个标记。然后,提示代理将索引表示提供给LLM的输入嵌入层。输入嵌入层可以将索引表示编码为嵌入(即eC),以便模块块可以更好地理解其内部信息。

2.3 提示嵌入生成

提示嵌入的功能是指示LLM生成代码摘要。如图1(1)所示,通过提示编码器生成的提示嵌入ePis。提示编码器的输入是一个由nlearnabletoken组成的伪提示,表示为p={t0,t1,…,tn},其中tirefers指向i-th伪令牌。伪token的作用是仅作为占位符,不携带任何实际意义,并指示提示编码器用于生成提示嵌入的提示长度。提示编码器是一个DL模型,能够映射pto一个连续的数字序列,然后将其输入到嵌入层中生成T={t0,t1,…,tn},其中tiis是一个可训练的嵌入张量。这使我们能够发现更有效的连续提示,超越了LLM的原始词汇。然后,提示编码器应用双向长短期记忆网络(BiLSTM),与ReLU激活的两层多层感知器(MLP)来产生真正的提示嵌入eP={e0,e1,…,en}。值eiatePis的i-th位置计算如下:

wherehfi表示正向LSTM的隐藏状态,hbirepresents表示反向LSTM的隐藏状态。

2.4 融合嵌入生成

类似于人类如何将离散的提示与代码片段连接起来,PromptCS也可以以各种方式将提示代理生成的连续提示(即提示嵌入)与代码片段的嵌入连接起来。为了不破坏代码本身的完整性,人类的一种常见做法是将离散提示符连接在代码片段的前面或后面[59,61]。图3左侧展示了一个离散提示符和代码片段(记为<code>)拼接的例子,其中(a)和(b)分别代表两种模式:前端模式,拼接代码片段前面的离散提示符;和后端模式,连接代码片段前面的离散提示符。在本文中,除了遵循上述两种模式,我们还尝试了一种新的模式,称为双端模式。在双端模式中,提示嵌入被拆分为两个部分,分别在代码嵌入的正面和背面进行串联。这种拆分很容易实现。比如我们可以拆分eP={e0,??1,…,en}分成e1P={e0,e1,…,ei}和e2P={e??+1,…,en}。

图2显示了一个连接提示嵌入和代码嵌入的示例,其中(e)、(f)和(g)分别展示了三种连接模式。

图2:提示符和代码拼接的例子

2.5 模型训练

预测摘要生成。在PromptCS中,预测的摘要由第二个组件(即LLM)生成。如图1(1)所示,PromptCS直接将融合嵌入(即eF))提供给能够生成自然语言摘要的LLM模块块。如2.2节所述,在本文中,我们更关注自回归llm如何适应代码汇总任务。对于自回归llm,预测代码摘要可以看作是一个条件生成任务,其中输入是一个上下文,输出是一个令牌序列。形式上,让z=[eF,eS],其中eSis通过将已经生成的摘要馈送到LLM的输入嵌入层而获得的摘要嵌入。以及zidenotesz中的i-th值。时间步长的LLM生成的激活向量iisai=[ai(1),…],ai(n)],它是在这个时间步长的所有激活层的输出的串联。而ai(j)则是j-th层在时间步i处的激活向量。自回归LLM在其左侧上下文中计算aibased在ziand上的过去激活a<i,如下:ai=LLM(zi,a<i)。然后,它利用矩阵Wto映射aitologitsli的最后一层,这是与下一个单词相关联的概率向量,即li=W·ai(n)。最后,基于li,它进一步使用函数P·)来选择LLM词汇表中概率最高的token作为已经生成摘要的下一个tokensi+1,即si+1=P(li)。

训练的过程。在PromptCS的训练过程中,LLM的参数被冻结,只有prompt编码器的参数被更新。设yˆ为预测摘要对应的概率向量,ybe为ground-truth摘要。损失函数可以建模为以下分类交叉熵损失函数:

其中representing模型的可训练参数;Cis词汇表中token的数量。yˆiandyirepresent预测token和ground-truth token的概率分别为i∈C。

3 实验评估

我们进行了一系列的实验来回答以下研究问题(RQs):

RQ1。PromptCS在使llm适应代码摘要方面有多有效?RQ2。关键配置(即提示符长度和代码与提示符嵌入的连接方式)如何影响PromptCS?RQ3。提示编码器中网络架构的选择如何影响PromptCS?RQ4。训练数据大小如何影响PromptCS?RQ5。PromptCS如何在其他编程语言中执行代码汇总任务?RQ6: PromptCS在人工评估中的表现如何?

3.1 实验设置

评估数据集。我们在CodeSearchNet (CSN)语料库上对PromptCS进行了评估,该语料库是一个广泛的代码片段集合,包括用六种编程语言(包括Go、Java、JavaScript、PHP、Python和Ruby)编写的注释。这个语料库最常用于研究代码摘要。考虑到原始CSN语料库包含一些低质量的数据,我们使用CodeXGLUE中的代码到文本文档字符串生成任务的数据集,该任务建立在CSN语料库之上,并排除了有缺陷的数据样本。

评价指标。我们在评估中使用了四个指标,包括BLEU、ME-TEOR、ROUGE和SentenceBERT。这些指标广泛应用于代码摘要。

BLEU是双语评估Understudy的缩写,是精度度量的一种变体,它通过计算生成的摘要与ground-truth摘要的n-gram精度来计算相似度,并对长度过短进行惩罚。在本文中,我们遵循并展示了标准BLEU评分。METEOR的引入是为了解决使用BLEU的问题。METEOR通过取n-gram精度和n-gram召回率的调和平均值来计算相似度。

ROUGE-L是ROUGE (Recall-oriented Understudy for Gisting Evaluation)的变体。ROUGE-L是基于最长公共子序列(LCS)计算的。

SentenceBERT。与上述三个度量主要计算真实摘要与生成摘要之间的文本相似度不同,SentenceBERT度量的是语义相似度。SentenceBERT首先将两个比较摘要转换为统一向量空间中的嵌入,然后使用余弦相似度表示它们之间的语义相似度。

BLEU、ROUGE-L、METEOR、SentenceBERT评分范围为,以百分比报告。分数越高,生成的摘要越接近ground-truth摘要,代码摘要性能越好。

基础LLM。我们对四种流行的自回归LLM进行了实验,包括三个开源LLM: PolyCoder、CodeGen-Multi、StarCoderBase和一个商业LLM: ChatGPT。

PolyCoder是由卡内基梅隆大学的研究人员发布的。它使用GPT NeoX工具包在来自12种编程语言的249GB代码上进行训练,有三种尺寸:160M、0.4B和2.7B。

CodeGen-Multi是由Salesforce发布的,它是用于程序合成的自回归语言模型家族的一员。在我们的实验中,我们使用了三种尺寸的CodeGen-Multi: 350M, 2B和6B。

StarCoderBase将于2023年由hug Face和ServiceNow联合发布。它使用来自堆栈的80+种编程语言进行训练。而著名的StarCoder是StarCoderBase的微调版本,经过额外350亿个Python令牌的训练。考虑到StarCoder只是以16B版本提供,可能不适合进行全面的对比实验。在我们的实验中,我们使用了三种大小的StarCoderBase: 1B、3B和7B。

ChatGPT可能是最强大的LLM。为了在它的帮助下进行实验,我们利用了OpenAI API,该API由一系列具有不同功能的模型提供支持,例如GPT-3.5, DALL·E和Whisper。在我们的实验中,我们使用的是GPT-3.5涡轮模型,它是GPT-3.5家族中最强大、最具成本效益的选择。

实验设置。在训练阶段,我们将小批量大小设置为16,学习率设置为5e-5。我们使用AdamW优化器和线性学习率调度程序,遵循hug Face推荐的默认设置。为了保证训练的全面性,我们采用了基于最佳验证BLEU的早期停止策略来控制模型的训练epoch数。早期停止耐心被设置为4。输入序列用特殊标记填充到最大长度,这些标记是根据LLM的词汇表选择的。为了在单个A800上微调StarCoderBase-7B和CodeGen-Multi-6B,我们使用DeepSpeed 0.12.2。我们将零冗余优化器(Zero)设置为0 -3,并使优化器计算卸载到CPU。所有模型都是在Python 3.8中使用PyTorch 2.1.0框架实现的。所有实验都在一台服务器上进行,服务器配备了一块Nvidia A800 GPU, 80gb内存,运行Ubuntu 20.04.4。

3.2 实验结果

RQ1。表1显示了我们的PromptCS和基线在BLEU、METEOR、ROUGE-L和句子伯特四个评估指标方面的表现。观察到,就四个指标的得分而言,面向任务的微调在LLM PolyCoder上表现最好,其次是PromptCS、指令提示(短指令)和指令提示(零射门)。在llm CodeGen-Multi和StarCoderBase上,PromptCS总体上与面向任务的微调相当,并且都明显优于这两种指令提示方案。PromptCS甚至在一些llm上优于面向任务的微调,例如CodeGen-Multi-2B(第7行)、StarCoderBase-1B(第9行)和-3B(第10行)。我们还对商用LLM ChatGPT进行了指令提示方案,其性能如表2最后一行所示。观察一下,ChatGPT上的两种指令提示方案的性能在所有四个指标上都优于其他三个llm,但与面向任务的微调和PromptCS相比,也不令人满意。虽然这种比较是不合理的,但我们有理由相信,如果ChatGPT是开源的,面向任务的微调方案和PromptCS与指令提示方案相比,将显著提高其代码汇总能力。

表1 PromptCS在CSN-Java数据集上的有效性。零射击:零射击学习的教学提示;短镜头:短镜头学习的教学提示;B:BLEU;M:METEOR;R:ROUGE-L;S:SentenceBERT。

此外,我们还比较了任务导向方案和PromptCS在培训时间方面的培训成本。表2列出了三个llm在培训期间的时间成本。可以看到,与面向任务的方案相比,PromptCS对所有llm所需的时间明显减少,这可以归功于PromptCS对llm的非侵入性,并且在训练过程中不会更新llm的参数。需要注意的是,当模型LLM的大小非常大(例如,StarCoderBase-7B),面向任务的微调将非常耗时,并且如果可用的训练资源(例如,GPU设备的性能和数量)很少,则变得不可接受。

表2 微调和PromptCS培训时间

RQ2。如图1所示,提示代理中的两个关键配置可能会影响PromptCS的性能,即由伪提示决定的提示长度和代码嵌入与提示嵌入的连接方式。为了揭示它们的效果,我们进行了全面的实验,涉及五种不同的提示长度(包括10、20、50、100和200)和三种拼接模式(包括前端模式、后端模式和两端模式)。我们统一使用StarCoderBase-1B作为基础LLM。实验结果如表3所示。从表3中可以看出,采用前端模式时,PromptCS在提示长度为50(即20.41)时BLEU得分最佳,而在提示长度为200时ME-TEOR、ROUGE-L和SentenceBERT得分最佳(分别为14.40、39.68和0.6206)。如果使用后端模式,PromptCS在提示长度为100时获得最佳BLEU和SentenceBERT分数,在提示长度为20和200时获得最佳METEOR和ROUGE-L分数。如果使用两端模式,PromptCS在提示长度为50时获得最佳BLEU和ROUGE-L分数,在提示长度为100和20时获得最佳METEOR和SentenceBERT分数。这些观察结果表明,不同的组合两种关键配置确实对PromptCS的有效性有不同的影响。值得注意的是,虽然不同的组合对PromptCS有不同的影响,但在数值上,这些影响的差异是很小的。以BLEU为例,最佳组合为后端模式,提示长度为100,得分为20.50;最差组合为两端模式,提示长度为10,得分为20.03。两组BLEU评分差异小于0.5。

但是,需要注意的是,随着提示长度的增加,需要训练的伪token数量也会增加,从而会提升模型的训练成本。图3显示了在不同提示长度设置下为一个epoch训练PromptCS所需的时间。从这张图中可以直观地观察到,随着提示长度的增加,训练所需的时间成本明显增加。

表3 提示语长度和连接方式对PromptCS的影响。B:BLEU;M:METEOR;R:ROUGE-L;S:句子伯特。

图3 不同提示长度的训练成本

RQ3。提示代理包含一个基于BiLSTM的基于dl的提示编码器。在实践中,我们还尝试在一个更高级的网络(即Transformer)上构建提示编码器,以验证不同的选择对PromptCS的影响。在这个实验中,我们统一将提示符长度设置为100,并将拼接模式设置为后端模式。表4给出了实验结果。

观察到,与在BiLSTM上构建提示编码器相比,1)在PolyCoder-160M上构建提示编码器,在Transformer上构建提示编码器在所有四个指标上都提高了PromptCS的性能;2)在CodeGen-Multi-350M上,在Transformer上构建提示编码器增强了METEOR和SentenceBERT中的PromptCS的性能改善,但导致BLEU和ROUGE-L的减少;3)在StarCoderBase-1B上,在Transformer上构建提示编码器不仅不能提高PromptCS的性能,而且还会导致四个指标的性能下降。总体而言,随着LLM模型规模的增大,基于BiLSTM构建提示编码器的PromptCS性能有提高的趋势,而基于Transformer构建提示编码器的PromptCS性能则呈现相反的趋势。

表4 在不同的网络架构上构建提示编码器时PromptCS的性能。我们将基于BiLSTM/Transformer构建的提示编码器的性能更好的指标分数加粗。

RQ4。在本文中,我们还分析了训练数据大小对PromptCS有效性的影响。为了揭示这种影响,我们从一个小规模的训练集开始,并系统地增加训练样本的数量。较小的训练集是从完整的训练数据中随机采样的。所考虑的训练集大小包括100、1000、10000和164923(完整的训练数据)。在这个实验中,我们还统一使用StarCoderBase-1B作为基础LLM,并将提示长度和拼接模式分别设置为100和后端模式。

图4展示了实验结果,其中x轴表示训练集大小,y轴表示BLEU、METEOR和ROUGE-L在左侧,SentenceBERT在右侧。观察到,随着训练集规模的增加,PromptCS在这四个指标上的得分都会增加,但增加并不明显。使用100个样本训练的PromptCS的性能与使用164,923个样本训练的PromptCS相当。这强调了PromptCS在小规模数据集上优越的适应性和泛化能力。它对于降低训练成本、提高训练效率、在数据有限的环境中获得令人满意的性能具有深远的现实意义。它对于在数据有限的环境中降低训练成本、提高训练效率、获得令人满意的绩效具有深刻的现实意义。

图4 训练集大小对PromptCS的影响

RQ5。为了验证PromptCS的泛化能力,我们还在其他两种编程语言(包括JavaScript和Python)中进行了实验。在这些实验中,我们还将提示符长度和拼接模式分别统一设置为100和后端模式。实验结果如表5所示。

从表5的CSN-JavaScript专栏中可以观察到,面向任务的微调方案在大多数指标和llm上优于PromptCS。尽管如此,值得注意的是,在三个llm上,PromptCS平均可以达到面向任务的微调方案的98%的性能,这是令人鼓舞的。从表5的CSN-Python专栏中可以观察到,在所有三个llm上,PromptCS在所有四个指标上的表现始终优于面向任务的微调方案。

表5 PromptCS在不同编程语言中的有效性。B:BLEU;M:METEOR;R:ROUGE-L;S:SentenceBERT。我们使用了面向任务的微调/PromptCS表现更好的指标分数。

RQ6。除了自动评估之外,我们还按照之前的工作进行人工评估,以评估由三个基线和PromptCS生成的摘要。具体来说,我们邀请了5位具有4年以上软件开发经验、英语能力优秀的志愿者进行评估。我们从CSN-Java数据集、相应的真值摘要以及基线和PromptCS生成的摘要中随机选择100个代码片段。要求每位志愿者根据生成的摘要与相应的地面真值摘要的相似程度,为其分配1到5的分数,其中1表示“完全不相似”,5表示“高度相似/相同”。为了保证实验结果的公正性和客观性,每个摘要由5名志愿者进行评估,最终得分为他们得分的中位数。

表8展示了生成的摘要的得分分布。观察到PromptCS获得了最好的分数,并将平均分数从2.31(零次学习的指令提示)、3.31(少次学习的指令提示)和3.60(面向任务的微调)提高到3.64。具体而言,在随机选择的100个代码片段中,PromptCS可以生成15个与基本事实高度相似甚至完全相同的摘要(得分= 5),56个良好的摘要(得分≥4)和93个不差的摘要(得分≥3)。PromptCS的阴性结果也较少(得分≤2)。根据每个基线和PromptCS的100个最终分数,我们遵循[76]并进行Wilcoxon符号秩检验[72]并计算Cliff 's delta效应大小[41]。PromptCS与零次学习的指令提示、少次学习的指令提示和任务导向的微调相比,Wilcoxon符号秩检验在95%置信水平下的p值分别为5.46E-16、0.016和0.722,这意味着PromptCS与零次和少次学习的指令提示相比,取得的改善具有统计学意义。此外,Cliff的delta效应值分别为0.5669(大)、0.1478(小)和0.0314(可忽略不计)。

表6 人工评价结果

转述:拓紫苑

0 阅读:17

互联不一般哥

简介:感谢大家的关注