一、简介
在实际应用中,针对任务的具体需求,我们会对大模型进行微调使其能更好适应专门的任务和场景。然而,在具体任务实现时,即使是对较小的大模型(如7B)进行微调也需要大量的算力资源,并且在没有大量的数据的基础上,微调得出的效果也不一定理想。由于大模型推理所需的资源远低于微调所需资源,因此,在算力以及数据并不富裕的情况下,使用提示工程和RAG技术代替微调技术,并且直接将较小的大模型(如7B)换成较大的大模型(如32B)将会在实际应用中展现出更好的效果。本文也将介绍两篇分别将提示工程与RAG技术使用在实际应用的论文。
二、提示工程
论文:ResumeFlow: An LLM-facilitated Pipeline for Personalized Resume Generation and Refinement
论文链接:
https://arxiv.org/pdf/2402.06221
代码链接:
https://github.com/Ztrimus/job-llm
引言
大模型的提示工程(Prompt Engineering)是一种通过精心设计的输入提示来引导大型语言模型(LLMs)产生特定输出的技术。这种技术可以使模型在各种任务中表现得更加精准和高效,如文本生成、问题回答、代码编写等。提示工程的核心在于理解如何与模型进行有效沟通,使其能够理解并执行用户的指令。
对于求职者来说,在就业市场上最重要的步骤之一就是制作一份高质量的、有影响力的简历。将多年的教育背景、项目和独特的经历浓缩成简短的1到2页文档,同时还要突出求职者的独特性和个性,是一项相当具有挑战性的任务。鉴于申请工作的候选人数量不断增加,雇主们经常依赖自动化的应聘者跟踪系统(ATS)和简历筛选系统,这些系统会根据与职位空缺的匹配程度来筛选候选人。为了应对这些自动化系统,求职者现在需要花费时间和精力来定制他们的简历,以适应特定的职位发布,例如只保留相关的经验和技能,突出与工作相关的项目,强调成就等。这是一个具有挑战性和极其耗时的步骤,许多求职者在识别和使用有影响力的关键词、保持简历简洁等方面都感到困难。为了解决这个问题,该论文提出了一个名为ResumeFlow的工具,它允许用户使用他们的通用简历,利用大型语言模型在检索、文档处理和文本生成方面的强大能力,将其定制为用户感兴趣的特定职业简历,从而可能为求职者节省数小时的努力。
方法
图1展示了ResumeFlow的概览,这是论文提出的由大型语言模型(LLM)促进的个性化简历生成流程。该系统包括三个核心组件:
-
User Date Extractor:该组件将用户提供的基础简历(以PDF文档的形式)转换为适合后续处理的结构化JSON格式。 -
Job Details Extractor:该组件分析职位描述,只需简单复制粘贴职位发布的字符串内容,就能提取关键字、要求等信息,并以JSON的形式呈现,并将在下一步中用于指导生成简历的内容和定制。 -
Resume Generator:该组件是处理的核心部分。利用结构化的用户提供数据和提取的工作要求内容,生成个性化的简历。
User Date Extractor
该组件允许用户以PDF格式输入他们的(结构化或非结构化)简历,以及他们申请的工作的职位描述。用户还可以选择用于整个流程的LLM。在这个组件中,首先将简历PDF转换为文本字符串,然后使用用户选择的LLM作为信息提取模型,从用户的简历文本中提取关键部分和重要信息。为此,只需以现成的方式使用所选的LLM,无需额外训练,使用精心设计的问题提示来促进信息提取。为执行此步骤,我们使用如下提示(为简洁起见,整个提示已截断):“您是一名软件开发人员,正在开发简历解析应用程序。您的任务是设计一个系统,它接受文本格式的简历作为输入,并将其转换为结构化的JSON格式。。
这使我们能够拥有由LLM提取的用户信息的结构化字典。在后续部分中,为了方便理解,将这个字典称为UserData。
Job Details Extractor
“Job Details Extractor”接受文本格式的职位描述:它将指示用户将所需职位列表中的职位描述复制粘贴到我们工具上的文本框中。流程中的这个组件旨在从职位描述中提取关键点,例如:职位名称、需求和首选资格等。为了通过LLM实现这一点,论文使用了两个精心设计的提示:系统提示,旨在将经验丰富的简历撰写者的“角色”引入LLM,其次是任务提示,用于提取重要的职位细节。更具体地说,对于系统提示,专门模仿了一位简历撰写者的角色,并描述了他的语气、风格和重点,例如:“你是一位经验丰富的职业顾问专家,擅长制作简历和求职信,拥有15年致力于掌握这项技能的丰富历史......”。通过实验可以得出,这个提示使LLM大大提高了结果系统的性能,因为它使输出能够遵守上下文和特定于任务的约定和语言。
然后,任务提示旨在指导LLM从提供的职位描述中提取重要的职位详细信息,并将这些详细信息输出为结构化JSON。通过结合这些提示,LLM能够准确地提取和构建关键信息,并以结构化的JSON格式呈现。准确提取这些数据对于流程的下一步,即简历定制步骤至关重要。这些提取的数据通常包括标题、关键字、目的、职责、资格(必需和首选)、公司名称和公司信息等基本元素。在本文中的剩余部分,将此职位详细信息的JSON称为JobDetails。
Resume Generator
这是框架的主要组件,在这里处理简历并生成针对特定工作的定制版本此组件的两个输入是前两个步骤中的UserData和JobDetails。现在,UserData按部分处理:假设一份典型的简历有以下部分:{Personal Details,Education,work experience,Skills,Achievements,Projects}等。论文选择通过将简历分成几个部分来处理简历,因为它遵循标准简历的格式和组织方式的自然结构。此外,LLMs对它们可以处理的上下文长度有限制,一次性提供整个简历文本将会超出上下文窗口。
此外,由于LLMs已被证明难以从很长的上下文中提取信息,并且经常忽略处于长上下文中间的信息。因此,一次处理单个部分可以缓解这些问题。论文按如下方式遍历每个UserData部分:首先,不加更改地提取Personal details部分,因为我们不希望LLM更改此部分中的任何事实信息,例如电话号码、地址或姓名。接下来,我们遍历UserData中的各个部分,使用特定于部分的提示以及UserData部分数据和JobDetails提示所选定的LLM。对于每个部分,LLM的任务是在分析用户的简历后,通过保留、强调或删除要点等操作重新创建该部分,以使该部分更符合特定工作的要求。在处理完每个部分后,我们会收集LLM的响应。最后,这些响应被组合成一个JSON。
在此处使用的系统提示包含有关如何根据JobDetails中的职位描述制作简历的指令。为此,采用了职业顾问和专业简历撰写者强调的最佳实践。更具体地说,我们仔细指导LLM遵循以下原则:
-
重点:制定与职位描述相符的相关成就。
-
诚实:优先考虑真实和客观的语言。
-
特异性:优先考虑与特定工作的相关性,而不是一般成就。
-
风格:
-
语态:尽可能使用主动语态。
-
校对:确保拼写和语法无可挑剔。
这些精心定制的指令式提示利用了最先进的LLMs的理解指令的能力,并努力模仿在这项任务方面经验丰富的专业简历撰写者的技能和风格。
工具为用户提供了选择在流程中使用哪个LLM的选项。目前,支持OpenAI模型(默认是gpt-4-1106-preview)和Google Deepmind的Gemini(Team等人.,2023)(默认版本是gemini-pro)。对于gpt-4模型,使用ChatCompletion后端,并使用json_object输出格式,以便通过简单地将这些JSON输出转换为Python字典来轻松地以编程方式处理LLM输出。对于gemini,使用定义的解析函数将生成的输出解析成JSON格式。最后,使用一个LaTeX引擎将这个JSON转换为具有视觉吸引力且格式专业的PDF文档,从而允许根据各种简历模板进行定制。除了生成简历外,工具还为用户提供了生成与工作相符的求职信的选项。
评估
根据生成的简历的质量来评估系统。与具有明确定义的基准和评估指标的标准自然语言处理任务不同,对解决这一新颖任务的系统进行自动评估非常具有挑战性。然而,我们引入了两个指标来在两个维度上评估生成的简历:job_alignment(职位对齐度)和content_preservation(内容保留度)。这些指标定义如下:
job_alignment:这个指标衡量生成的简历与职位细节之间的对齐程度。理想情况下,希望获得更高的分数,因为这意味着工具生成的简历非常适合用户所申请的特定工作。我们在词元空间和潜在空间中对此进行测量。在令牌空间中,将job_alignment_token定义为生成的简历中的独特单词与职位描述中的独特单词之间的重叠系数。在潜在空间中,将job_alignment_latent定义为生成简历文本和职位描述文本的向量嵌入之间的余弦相似度。我们使用Gemini和OpenAI的嵌入技术来嵌入这两段文本。我们将其表述为:
其中指的是工具生成的简历,指的是职位描述,指的是中的独特单词集。
其中指的是余弦相似度,指的是用于嵌入文本的编码。
content_preservation:由于幻觉(Hallucination)即使是在最先进的LLMs中也是一个已知问题,因此需要验证ResumeFlow流程在用户提供的简历和生成的简历之间保留内容的效果如何。理想情况下,希望得到较高的数值,因为低的内容保留度可能意味着出现了LLM的幻觉。与job_alignment指标类似,在词元空间和潜在空间中进行测量。在词元空间中,将其表示为用户的原始简历和ResumeFlow生成的简历之间的重叠系数:
其中指用户输入到ResumeFlow工具的原始简历。
类似地,在潜在空间中,考虑生成的简历与原始简历之间的余弦相似度:
指标主要受来自于自然语言处理(NLP)中常用的摘要评估指标的启发,如ROUGE分数(Lin, 2004),并且与最近提出的幻觉检测指标(Forbes et al., 2023)也有相似之处,例如AlignScore(Zha et al., 2023)。
这两个指标的组合:job_alignment和content_preservation提供了生成简历质量的概念。低的内容保留度加上高的职位对齐度是特别不可取的,因为这意味着LLM可能已经幻觉了生成简历的主要部分,以便使其非常适合职位描述。这种特殊情况可能被认为是不道德的,因为从用户的角度来看,它可能看起来不诚实。系统也在用户界面上报告这些分数,以便最终用户在直接使用生成的简历之前了解其效果如何。
总结
该论文引入了一个易于使用的流程ResumeFlow,只需将简历和相应的职位描述提供给我们的LLM辅助流程,即可帮助求职者根据特定的职位发布内容定制他们的简历。虽然工具目前支持两种最先进的模型:GPT-4和Gemini,但未来对该工具的改进可能会纳入更多的LLMs,最好是开源的。对于任何由LLM驱动的系统,系统用户都需要意识到幻觉现象以及如何减轻幻觉的情况。为此,未来的工作可能会利用如RAG和使用知识图谱生成等新兴概念。
三、RAG(检索增强生成)
论文:Vul-RAG: Enhancing LLM-based Vulnerability Detection via Knowledge-level RAG
论文链接:https://arxiv.org/pdf/2406.11147
引言
检索增强生成(Retrieval-Augmented Generation,简称 RAG)是一种结合了信息检索技术和语言生成模型的人工智能技术。它通过从外部知识库中检索相关信息,并将其作为提示(Prompt)输入给大型语言模型(LLMs),以增强模型处理知识密集型任务的能力,如问答、文本摘要、内容生成等。RAG的核心在于它能够解决大型语言模型在实际应用中遇到的一些问题,例如知识的局限性、幻觉问题和数据安全性问题。通过检索和生成的结合,RAG能够提供更加准确、及时且相关的信息,同时保持了数据的安全性。RAG的优势在于它可以有效地利用外部知识库,提供及时更新的知识,回复具有强解释性,并且可以根据特定领域进行定制。此外,RAG还能够减少训练成本,因为它不需要对模型进行昂贵的重新训练或微调。
漏洞检测对于软件质量保证至关重要。该提出了一种新颖的基于 LLM 的漏洞检测技术 Vul-RAG,它利用知识级检索增强生成 (RAG) 框架分三个阶段检测给定代码的漏洞。首先,Vul-RAG 通过LLM从已有的CVE实例中提取多维度知识,构建漏洞知识库;其次,对于给定的代码片段,Vul-RAG 基于函数语义从构建的知识库中检索相关的漏洞知识;第三,Vul-RAG 利用 LLM 来检查给定代码片段的漏洞,通过推理漏洞原因的存在并修复检索到的漏洞知识的解决方法。
方法
论文提出了一种新型的基于LLM的漏洞检测技术Vul-RAG,它利用知识级RAG框架来检测给定代码中的漏洞。Vul-RAG的核心思想是利用LLM根据现有漏洞的相似漏洞知识来进行漏洞检测的推理。图4显示了方法概述,其中包括以下三个阶段。
Vul-RAG 的工作流程包括三个主要阶段:
-
第一阶段:离线漏洞知识库构建:Vul-RAG 首先通过LLM从现有的CVE实例中提取多维度知识,构建漏洞知识库。 -
第二阶段:在线漏洞知识检索。对于给定的代码片段,Vul-RAG会根据函数语义从构建的知识库中检索相关的漏洞知识。 -
第三阶段:在线知识增强漏洞检测。Vul-RAG利用LLM通过检索到的漏洞知识库中存在的漏洞原因来检查给定代码片段的漏洞并修复检索到的漏洞知识的解决方法。
漏洞知识库构建
为了全面总结漏洞,论文提出了漏洞知识的三维表示。基于这种知识表示,Vul-RAG利用LLM从现有CVE实例中提取相关的漏洞知识,从而进一步形成知识库。
漏洞知识表示
Vul-RAG从功能语义、漏洞原因和修复方案等三个维度表示CVE实例的漏洞知识。
-
功能语义:总结易受攻击代码的高级功能(即此代码正在做什么),包括:
-
抽象目的:代码意图的简要总结。
-
详细行为:代码行为的详细说明。
-
漏洞原因:通过比较易受攻击的代码及其对应的补丁,描述触发漏洞行为的原因。论文考虑从不同角度描述的原因,包括:
-
漏洞抽象描述:原因的简要总结。
-
漏洞详细描述:更具体的原因描述。
-
触发动作:触发漏洞的直接动作。
-
修复方案:通过比较易受攻击的代码及其对应的补丁,总结漏洞的修复过程。
知识提取
对于每个现有的漏洞实例(即易受攻击的代码及其补丁),Vul-RAG会提示LLM提取三维知识,然后对提取的知识进行抽象以得到更通用的表示。
-
功能语义提取:给定易受攻击的代码片段,Vul-RAG 会使用以下说明提示LLM,分别总结抽象目的和详细行为,其中“[Vulnerable Code]”表示易受攻击的代码片段。
-
抽象目的提取的提示:[Vulnerable Code]上述代码片段中的功能是什么?请用以下格式用一句话总结答案:“代码功能:”。
-
详细行为提取的提示:[Vulnerable Code]请将上述代码片段的功能以列表形式进行总结,无需任何其他解释:“代码片段的功能是:1. 2.3...”
-
漏洞原因和修复解决方案提取:由于原因和修复解决方案通常在逻辑上是相互关联的,因此Vul-RAG将它们提取在一起,以便更好地利用LLM的推理能力。特别值得一提的是,Vul-RAG包含了两轮提取,即第一轮要求LLM解释为什么需要修改易受攻击的代码片段,第二轮要求LLM根据第一轮生成的解释进一步总结原因和修复方案。这样的两步策略基于CoT (Chain of Thought) 范式,它通过逐步思考来激发LLM推理能力,从而实现更好的提取效果。此外,为了使LLM能够以正确的格式总结原因和解决方案,Vul-RAG使用包括两个漏洞原因和修复解决方案的示例,进行了小样本学习(这是因为 GPT 模型的输入长度有限)。这两个示例是通过手动构建。详细的提示如下,其中占位符“[Vulnerable Code]”、“[Patched Code]” 和 “[Patch Diff]” 分别表示给定漏洞的易受攻击代码、补丁代码和代码差异,而 [CVE ID] 和 [CVE Description] 表示给定漏洞的详细信息。
-
第一轮提取提示:这是一个带有漏洞的代码片段 [CVE ID]:[Vulnerable Code] 该漏洞描述如下:[CVE Description]。正确的修复方法是通过[Patch Diff]。修改后的代码如下:[Patched Code]。上述修改为何是必要的?
-
第二轮提取提示:我想让你扮演漏洞检测专家的角色,并根据上述漏洞修复信息总结漏洞知识。请总结导致漏洞的代码的一般特定行为以及修复它的具体解决方案。请将你的总结转化为JSON格式。这里有一些示例来指导你在提取中预期的细节程度:[Vulnerability Causes and Fixing Solution Example 1] [Vulnerability Causes and Fixing Solution Example 2]。
-
知识抽象:不同漏洞实例可能共享常见的高级知识(例如,相似的原因和修复解决方案),因此抽象出提取的漏洞知识之间的高级共性可以进一步提炼出更多的常识表示,而不是与具体代码实现细节的联系。为此,Vul-RAG利用LLM通过抽象提取的漏洞原因和修复方案中的以下具体代码元素(即方法调用、变量名称和类型)来抽象高级知识。论文不会抽象函数语义,因为它仅在检索阶段使用,而不是在漏洞检测过程中作为增强知识提供给LLM。然后,我们描述了知识抽象指南和示例,如下所示。
-
抽象方法调用。提取的知识可能包含具有详细函数标识符(例如,io_worker_handle_work function)和参数(例如,mutex_lock(&dmxdev->mutex))的具体方法调用,这可以抽象为通用描述(例如,“在处理IO工作进程期间”和“采用类似于mutex_lock()的锁定机制”)。
-
抽象变量名称和类型。提取的知识可能包含具体的变量名称或类型(例如,“without &dev->ref initialization”),这些变量可以抽象为更一般的描述(例如,“没有适当的引用计数器初始化”)。
Vul-RAG合并了以下提示,以利用LLM进行知识提取,该提示查询LLM以抽象方法调用和变量名称。
知识抽象提示:在上一阶段提取的详细漏洞知识基础上,你的任务是抽象和概括这些知识,以增强其在不同场景下的适用性。请遵循以下提供的指导方针和示例:[Knowledge Abstraction Guidelines and Examples]...
漏洞知识检索
对于给定的漏洞检测代码片段,Vul-RAG通过三步检索过程从构建的漏洞知识库中检索相关的漏洞知识项:查询生成、候选知识检索和候选知识重新排序。
-
查询生成。Vul-RAG不是仅仅依赖代码作为检索查询,而是将代码及其功能语义合并为多维查询。首先,Vul-RAG提示LLM提取给定代码的功能语义,如知识库构建中所述。抽象目的、详细行为和代码本身构成了后续检索的查询。
-
候选知识检索。Vul-RAG使用三个查询元素进行基于相似性的检索:代码、抽象目的和详细行为。它分别检索每个查询元素的前n个知识项(论文实验中n=10)。因此,Vul-RAG总共检索10到30个候选知识项目(考虑到在不同查询元素中检索的项目之间可能存在重复项)。检索基于每个查询元素与知识项的相应元素之间的相似性。Vul-RAG采用BM25进行相似度计算。给定一个查询q和文档d,对于检索,BM25会计算和之间的相似度得分,其中是词在查询q中的词频,是词w的逆文档频率。超参数k和b(其中k=1.2,b=0.75)用于归一化词频和控制文档长度的影响。在计算BM25相似度之前,查询和检索文档都会经过标准的预处理程序,包括分词、词形还原和停用词去除等。
-
候选知识重新排名。论文使用倒数排序融合(RRF)策略对候选知识项进行重新排名。对于每个检索到的知识项k,我们通过聚合它在所有三个查询元素中的排名的倒数来计算它的重新排名得分。如果知识项k没有被特定的查询元素检索到,我们将它的排名视为无穷大。知识项k的重新排名得分是使用以下公式2计算的。表示所有查询元素的集合(即代码、抽象目的和详细行为),表示基于查询元素t的知识项k的排名。
知识增强漏洞检测
基于检索到的知识项,Vul-RAG利用LLM推理给定代码是否易受攻击。然而,直接将所有检索到的知识项直接合并到一个提示中可能会影响模型的有效性,因为LLM在通常在处理长文本时表现不佳。因此,Vul-RAG通过依次检查给定代码是否表现出相同的漏洞原因或相同的修复方案,迭代增强检索到的各个知识项的LLM。
如果给定代码表现出与知识项相同的漏洞原因,但缺少相关的修复解决方案,则会将其标识为易受攻击。否则,Vul-RAG无法使用当前被识别代码为易受攻击的知识项,并继续进行下一次迭代(即,使用下一个检索到的知识项)。如果无法通过检索到的任何知识项将代码识别为易受攻击,则最终会将其识别为非易受攻击。当代码被识别为易受攻击或所有检索到的知识项都已被考虑时,迭代过程终止。
具体来说,用于识别漏洞原因和修复解决方案的提示如下。
-
寻找漏洞原因的提示:给定以下代码及相关的漏洞原因,请检测代码中是否存在漏洞原因。[Code Snippet]。在类似的代码场景中,已发现以下漏洞:[Vulnerability causes]、[fixing solutions]。请使用你自己对漏洞的了解以及上述漏洞知识来检测代码中是否存在漏洞。
-
寻找修复解决方案的提示:给定以下代码及相关的漏洞修复解决方案,请检测代码中是否存在漏洞。[Code Snippet]。在类似的代码场景中,已发现以下漏洞:[Vulnerability causes]、[fixing solutions]。请使用你自己对漏洞的了解以及上述漏洞知识来检测代码中是否存在相应的修复解决方案。
评估
论文构建了一个新的基准测试 PairVul对结果进行评估。鉴于Linux 内核在现代复杂软件系统中的代表性,使用Linux内核CVE作为基准测试的数据源。具体的基准构建过程包括以下两个步骤:
-
漏洞和修补代码收集。首先从Linux Kernel CVEs收集与Linux内核相关的所有CVE。根据收集到的CVE ID列表,进一步从国家漏洞数据库(NVD)提取相应的CWE ID和CVE描述。基于CVE ID列表,解析每个CVE 的提交信息,提取函数级别的漏洞和修补代码对。提交差异之前的漏洞代码片段被标记为正样本,修补后的代码片段被标记为负样本。通过这种方式,获得了一个包含4,667个函数对的漏洞和修补代码的数据集,涵盖2,174个CVE。
-
修补代码验证。修补代码并不总是无误的,因此重新检查修补代码的正确性非常重要。为此,我们通过确保修补代码没有被其他提交后续撤销或修改,进一步实施了修补代码的过滤过程。
作为结果,论文获得了一个新的基准测试PairVul,包含2,073个CVE的4,314对漏洞和修补代码函数。由于这项工作侧重于通常需要训练数据集的基于学习的技术,我们进一步将基准测试分为训练集和测试集。对于每个CVE,随机选择一个实例进入测试集,其余实例(如果有的话)进入训练集。我们排除了代码长度超过当前GPT-3.5-turbo令牌限制(即16,384个token)的案例。最终的训练集包括896个CVE,带有1,462对漏洞和修补代码函数,而测试集包括373个CVE,带有592对漏洞和修补代码函数。基准测试中每个CWE类别的统计数据如表 1所示。
为了进一步评估在区分具有高度词汇相似性的脆弱代码对和非脆弱代码对方面的能力,论文设计了一种新的度量标准——成对准确率(pairwise accuracy),它计算的是同时正确识别出漏洞代码和修补代码的比例。此外,论文还使用了漏洞检测任务中常用的六种度量标准,即假阴性(FN)、假阳性(FP)、准确率、精确度、召回率和F1分数。假阴性是错误阴性的比率;假阳性是错误阳性的比率;准确率是正确检测到的实例的比例;精确度是在所有正确预测中真正阳性预测的比例;召回率是在所有实例中真正阳性预测的比例;F1分数是精确度和召回率的调和平均值,它平衡了这两个值。
论文用以下技术进行PairVul测试,结果如表2
-
LLMAO:一种基于大型语言模型(LLM)的故障定位方法,对大型语言模型(例如CodeGen)进行了微调,该模型还针对Devign数据集进行了漏洞检测的微调。
-
LineVul:一个基于PLM(编程语言模型)的漏洞检测模型,提供函数级别和代码行级别的检测粒度。
-
DeepDFA:一种基于图神经网络(GNN)的检测技术,配备了数据流分析引导的图学习框架,专为函数级别的漏洞检测而设计。
-
Cppcheck:一个广泛使用的开源静态分析工具。
通过比较 VUL-RAG 与两种基于GPT-4的基线来评估知识级RAG框架的有用性,结果如表3。
结合表2和表3可以得出,Vul-RAG 在所有Baseline中实现了最高的准确率(即 0.61)和成对准确率(0.21),这显著优于最佳基线 LLMAO,相对提高了 12.96% 和 110%。成对准确性的显著改进表明 Vul-RAG 在区分漏洞代码和相似但正确的代码方面具有优势。
表3展现了了Vul-RAG与两个基于GPT-4的Baseline之间的比较。总体而言,Vul-RAG在所有指标方面的表现始终优于两个Baseline,证明了我们知识级RAG框架的有效性。具体来说,使用Vul-RAG可以成功检测到漏洞但两个Baseline无法检测到的示例来解释Vul-RAG在这两个Baseline上的优势。
总结
该论文提出了一种新颖的基于 LLM 的漏洞检测技术 Vul-RAG,它利用知识级检索增强生成 (RAG) 框架来检测给定代码的漏洞。总体而言,Vul-RAG 显示出显著的改进(准确率提高了 12.96%,成对准确率提高了 110%)。
参考文献
[1] Grant C Forbes, Parth Katlana, and Zeydy Ortiz. 2023. Metric Ensembles For
Hallucination Detection. arXiv preprint arXiv:2310.10495 (2023).
[2] Chin-Yew Lin. 2004. Rouge: A package for automatic evaluation of summaries.
In Text summarization branches out. 74–81.
[3] Gemini Team, Rohan Anil, Sebastian Borgeaud, Yonghui Wu, Jean-Baptiste
Alayrac, Jiahui Yu, Radu Soricut, Johan Schalkwyk, Andrew M Dai, Anja Hauth, et al. 2023. Gemini: a family of highly capable multimodal models. arXiv preprint arXiv:2312.11805 (2023).
[4] MK Vijaymeena and K Kavitha. 2016. A survey on similarity measures in text
mining. Machine Learning and Applications: An International Journal 3, 2 (2016),
19–28.
[5] Yuheng Zha, Yichi Yang, Ruichen Li, and Zhiting Hu. 2023. AlignScore: Evalu
ating Factual Consistency with a Unified Alignment Function. arXiv preprint arXiv:2305.16739 (2023).
原文始发于微信公众号(北邮 GAMMA Lab):微调之外的大模型应用技术
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论