2024-04-23

场景分类() 关键问题 解决方案 论文连接 洞察人
该任务旨在根据自然语言要求生成整个代码仓库 * 面临的挑战:1. 自然语言描述和代码仓库之间存在巨大差距。自然语言描述通常更长更复杂,而代码仓库需要结构完整。1. 现有的代码生成方法更擅长生成简单的独立代码片段,难以生成具有良好结构的整个代码仓库。 根据上述内容,CODES 框架的三个模块实现如下:1. RepoSketcher 模块:* 输入为给定的自然语言需求文档(如 README.md)* 输出为代码仓库的目录结构草图,以树状形式表示各目录和文件1. FileSketcher 模块:* 输入为前一步生成的代码仓库目录结构草图,以及原始需求文档* 输出为每个代码文件的文件草图,包括引用关系和函数定义,但函数体用占位语句代替1. SketchFiller 模块:* 输入包括前两步生成的仓库草图和文件草图,以及相关依赖文件的草图,当前文件的草图以及目标函数签名* 输出为补充了函数体实现的完整代码文件在实际实现中,作者提出了两种方式:1. 提示工程(Prompt Engineering):直接使用现有的代码语言模型(如 CodeLlama、DeepSeekCoder 等)来担当 CODES 三个模块的角色。1. 监督精调(Supervised Fine-tuning):基于 100 个代码仓库数据对基础模型进行针对性训练,提高其生成整个代码仓库的能力。 https://arxiv.org/pdf/2403.16443.pdf 孙鹤
代码生成(函数) 使用CoT生成的代码,存在语法错误等代码执行问题,导致在HumanEval评测集上的通过率甚至低于Zero-Shot的结果。 将代码生成(主要是函数)流程,定义CodeCoT流水线,划分为:1.CoT Prompt, 明确2.Test Cases Generation3.Code Generation4.Self-Examination 评测集依靠HumanEval、MBPP,prompt模型依赖chatGPT。代码执行依赖Python interpreter。 主要启发是AI for Code 和AI for DT的结合。 https://arxiv.org/pdf/2308.08784.pdf 董剑
RAG(Embedding模型微调方法) 1. 现有知识增强语言模型需要设计专门的检索模块,或者是回合性地结合外部知识库,无法很好支撑下游任务。2. 单独微调语言模型与Embedding模型,各自学习的知识无法很好地整合应用到任务中。 第一轮调优将RAG检索出的top k语料放到指令模板中,进行微调,使得大语言模型能更好地利用相关背景知识进行预测;第二轮调优,使用LLM为检索器微调提供监督,可以帮助尽可能召回对LM推断最有帮助的文档。 主要观点:检索器微调属于端到端的微调,与大模型能力绑定,容易导致数据不准确 https://arxiv.org/abs/2310.01352 李超
RAG(迭代式检索) 1.现有知识增强模型直接将检索结果输入模型,难以保证知识质量和效果融合。2.检索质量受限,难以捕捉复杂查询信息。 通过迭代检索和生成协同作用来提高检索增强大型语言模型的性能。这种方法避免了中断生成过程,而是迭代地结合检索和生成,利用前一轮完整的生成结果来检索更多信息,从而提高性能并减少开销 主要启发:如果用户觉得生成效果不好,鼓励用户多次尝试,用上一次生成的较好的部分代码,检索新的相似代码,从而提升效果 https://arxiv.org/abs/2207.05987 李超
RAG(text to code) 现有的代码生成模型都是基于现有代码库训练的,无法涵盖不断更新增加的新函数或库。而开发者在实际工作中,面对未知功能时通过查询文档资料来了解。 基本假设是,对于大多数库和编程语言来说,代码文档是最详尽切最简洁的资源,并且文档允许有效地推广到看不见的库和函数;每个文档是描述库或函数的;文档简化了 NL 意图和代码之间的映射,因为文档同时包含 NL 描述和函数签名。检索方法包含以下两部分:1. 基于用户的输入检索相关文档资源,如代码注释和文档说明。1. 在生成代码的同时,利用检索出的文档作为参考知识。模型学习从中提取函数签名、参数等细节,辅助生成完整而正确的代码。主要启发:在text to code场景下,可以借鉴该论文构造语料集,直接通过自然语言搜索可能使用的API https://arxiv.org/abs/2207.05987 李超
LLM-based Agents(require to code) 现有基于LLM的多智能体系统大多采用自然语言对话的方式进行协作,容易产生信息丢失和失真,在处理复杂任务时,容易出现逻辑矛盾和误差积累,影响最终解决方案的质量。 MetaGPT通过引入软件开发中的标准工作流程(SOP)将复杂任务分解成需求分析、系统设计、编码、测试等有序的子任务,将Agents角色专业化,定义了产品经理、架构师、项目经理、工程师、测试工程师等不同角色,各角色按照既定流程协作完成。并且增加了结构化通信,Agents之间共享结构化的中间输出,如需求文档、设计文件等,提高沟通效率。1.主要启发:引入SOP标准工作流程进框架 https://arxiv.org/pdf/2308.00352.pdf 孟小威
Code to Code 现有的代码生成工具无法充分利用代码仓库中的信息 * * 局部知识检索:* 从当前代码文件中检索局部信息,如函数签名、变量等。* 全局知识检索:* 从函数知识库中检索与当前任务相关的全局函数信息。* 第三方库知识检索:1. 从第三方库知识库中检索当前任务可能用到的第三方库信息。将上述三类知识(局部、全局、第三方库)融合成一个综合的提示语(prompt),输入到基础语言模型进行代码生成。这样可以使语言模型生成的代码能够更好地融入到当前代码仓库的环境中,减少逻辑错误、重复代码和兼容性问题。 https://arxiv.org/abs/2306.03091 孙鹤
LLM-based Agents(代码生成性能提升) 当前大模型在复杂任务处理上严重依赖于人类的引导和输入,非常耗时且具有挑战性,性能不佳 提出了一种名为"角色扮演"的新型合作代理框架,框架设计一个任务指定agent、一个AI助手agent和一个AI用户agent,通过让AI助手和AI用户相互提示和交互,实现了代理的自主协作完成任务。使用角色扮演来生成对话数据,利用这些数据集,语言模型训练能力的显著提升。主要启发:通过对多智能进行角色赋予引导agent自主完成任务,提高模型性能,减少对人类输入的依赖。 https://arxiv.org/pdf/2303.17760.pdf 孟小威
多模态任务解决 大语言模型(LLM)局限于文本输入输出,无法处理视觉、语音等复杂信息,无法自主规划和协调多个子任务来完成复杂任务 使用 LLM 作为控制器,负责任务规划、模型选择和结果整合,通过语言描述连接 LLM 和专业模型(如 Hugging Face 平台上的模型),实现 LLM 与专业模型的协同,解决语言、视觉、语音等多领域跨模态的复杂任务。主要启发:通过LLM与专业模型的协同来处理复杂任务 https://arxiv.org/pdf/2303.17580.pdf 孟小威
模型推理 大模型在通用任务上的零样本推理能力还不够强,即便零样本链式思维(CoT),取得了一定进展,但仍有局限性 提出了一种名为"零样本Agent指导推理"(zero-shot AgentInstruct)的方法,构建一个自主agent来指导大型语言模型的推理过程。agent利用从网上获取的任务相关知识生成针对特定任务的指引说明。将这些任务特定的指引说明附加到输入中,引导语言模型按照指引进行分步推理,从而解决任务。与标准零样本和零样本链式思维(CoT)相比,零样本AgentInstruct在20个数据集上达到最先进的性能。主要启发:引入agent来进行任务指引,优化模型的推理能力 https://arxiv.org/pdf/2310.03710.pdf 孟小威
指令微调 1.要让模型能处理多种代码相关任务(解释、生成、重构),指令微调是重要的一环2.指令微调对数据集的质量和多样性要求高,现有数据集难以满足 1.通过Generator(GPT4)基于原有代码生成指令微调语料,并使用Discriminator(GPT4)采用CoT的方式对生成结果逐步分析Generator对代码生成采用Zero-Shot,其他任务采用Few-Shot,代码生成容易模仿导致多样性变差Discriminator鉴别的好/坏结果均可作为Few-Shot的例子存在2.实验结果来看,相同数据量情况下,通过上述方式的高质量数据集微调得出的模型效果更好可能问题:1. Generator基于的代码是否需要大量注释 2. GPT4使用的安全性问题 3. 基于领域代码的语料生成效果待检验 https://arxiv.org/pdf/2312.14187.pdf 汤逸凡
模型训练 此文的Domain-Specific是指面向AI的编程任务(模型的训练使用等) 1.构筑了微调所需的数据集AICoderEval,均由GPT4生成(基于开源网站的模型描述、使用示例等,结合适合的Prompt),包含函数定义、注释、实现、测试用例等,并提供实际可运行环境保证数据集可运行、可通过测试2.整体过程通过Agent框架,核心是提供可执行的环境,训练/推理阶段都将执行报错给到纠错模型(专门微调的另一个模型)提供修复建议,加入prompt并循环执行(CoT Fine-Tuning?)3.实验结果来看,使用AICoderEval数据集对模型效果有提升,修复建议(CoT?)对生成效果有提升结论:跟我们方向上不太一致,且注释/测试用例/执行环境的生成都有比较高的难度。纠错模型加入prompt循环生成可参考 https://openreview.net/pdf/cb12ac603a0547430a795f0e75ea03ed0e393dab.pdf 汤逸凡
模型训练 对于主流大模型,测试下来在特定领域代码生成(主要是web开发-Go/游戏开发-C++)能力比通用代码生成下降严重,如ChatGPT在CodeBLEU上下降51.48%,其中主要问题是使用的API错误或漏使用某些API。 文章提出了三种提升特定领域代码生成能力的方案:1.通过外部知识库检索可能使用的API并加入Prompt (类RAG?) —— CodeBLEU提升9.82%2.通过CoT,根据历史调用顺序预测可能的API并加入Prompt —— 效果一般3.通过CoT,将历史调用顺序形成语料进行微调 —— CodeBLEU提升4.20%结论:它这里关注的领域信息主要是API调用,方向上跟我们的思路也基本一致,没看到有什么亮点值得借鉴 https://arxiv.org/pdf/2312.01639.pdf 汤逸凡
模型训练 论文主要就想体现一点,代码语料的质量非常重要 1.从the stack中抽样100k数据使用GPT-4进行标注,质量好坏,这里使用可以学习的程度进行标注2.使用抽样数据训练随机森林进行二分类,用训练模型对数据进行过滤得到6b token数据3.使用GPT3.5生成代码的解释说明之前过滤的数据形成code textbook,以此为基础训练,并完成部分指令微调4.实验结果表明用高质量数据集的模型训练效果等同于一般训练集下10倍参数的模型训练效果结论:主要数据要有注释,有质检,且基本靠GPT完成。思路上跟我们一致,但问题是GPT/Pangu模型是否可以用于大批量的标注。 https://arxiv.org/pdf/2306.11644.pdf 汤逸凡
数据污染问题 1.由于越来越多的训练数据来源和合成数据的引入,当前许多模型(如ChatGPT)在一些公开测试集上存在透题的现象2.论文提出由于大模型的词表巨大,其中包含了大量具有类似语义的标记,所以对大模型采样的输出分布不应该显示尖峰 1.给出检测是否存在透题现象的方法CDD,核心思想是采样多次,看编辑距离分布是否存在尖峰2.给出削减透题对模型能力评估影响的方法TED,核心思想是采样多次,去掉重复结果/尖峰结果,用剩下采样结果评估模型结论:有借鉴意义,在确定性参数(消除随机性)没开的前提下,可以通过这个方式去检测模型对于评测集是否有透题现象 https://arxiv.org/pdf/2402.15938.pdf 汤逸凡
prompt (仓库级 prompt应用于单行代码生成场景) 在无法访问大模型权重的情况下,如何融入代码仓库级的上下文信息, 并在一组 prompts 中选择最优 prompt 1. 提出了RLPG框架:通过整合代码仓的结构和相关文件的上下文信息,引入一组 "prompt proposal " , 并通过一个Prompt Proposal Classifier (PPC)神经网络模型预测最佳的 prompt proposal,用来决定哪些Prompt Proposal对最终成功填出target hole有帮助2. 如何获取prompt proposal:的主要来源有64类(where 9类、what 7类) 结论:这篇文章提出的框架适用于无法访问权重的模型 (CodeX),无法通过训练引入领域知识的模型应用场景;与我们的领域知识引入方法有所区别;但其中基于多标签分类器的proposal 预测,可能对于代码补全(函数/多行/单行)不同应用场景的预测有一定借鉴意义 epository-Level Prompt Generation for Large Language Models of Code (arxiv.org) 胡鑫钰
prompt(仓库级prompt应用于代码生成场景) 在有限上下文长度的情况下如何选择最有效的上下文信息(prompt压缩),保证代码补全的高准确性和高效率 本文对于仓库级的 prompt 提出了两种技术:1. 提出将两种不同类型的上下文融合方法, 即类比上下文(analogy context)推理上下文(rationale context)融合。类比上下文来自于与当前代码片段类似的代码片段,而推理上下文提供了整个代码库中可用程序构造(如类、方法等)的语义信息。2. 提出一种新的排序截断生成(rank truncated generation, RTG)技术,用于有效地将两种上下文融合并缩减为可控大小的提示,以在保证准确性的同时提高推理效率。 结论:对于 prompt 发送给模型前的处理与我们的思路一致:在 token 数有限的情况下,需要对 prompt 采用压缩技术,保证 prompt 的质量;但本问题提及的方法对我们来说并不适用,原因在于prompt 关键字段不一致,非按照chunk进行上下文拆分、无法应用相似性进行rank排序; 其他启发:我们当前采用的 prompt 压缩策略,采用对prompt中已有模板的内容逐项验证(即验证当前这段对生成结果的有效性),暂时没有数据性的指标说明压缩策略的有效性 2305.17812.pdf (arxiv.org) 胡鑫钰
CoT 传统CoT提示方式的局限性:推理呈现为自然语言的序列形式,缺乏清晰的结构性; 主要技术:将自然语言prompt 替换为表格形式的prompt , 表头信息为“ step subquestion process result ", 通过表头信息规定了问题解决过程的结构,表格的每一行视为思维连的一个步骤,表格按照行生成的过程 视为通过思维连逐步推理的过程;每一行(步)包含多个列,每一列视为当前步骤的推理细节 实验结论:比较了standard-prompt (一次prompt)、zero-shot-CoT(后文简化为CoT)、 zero-shot-tab-CoT(Tab-CoT) 在文本LLM 和 代码LLM上的效果, CoT 偏向于 文本LLM, 而Tab-CoT 在code上具有更好的效果(猜想:表格生成类似于代码生成过程(都涉及结构化的过程) 结论/启发:Tab-CoT更能较好的解锁代码大模型的推理能力,但本文在Tab-CoT 的验证能力主要基于数学计算的验证,而非问题的验证,该CoT形式是否能够应用于代码场景有待进一步验证 2305.17812.pdf (arxiv.org) 胡鑫钰
CoT llm能否在没有prompt的情况下具备思维链推理 主要内容:1. 传统在模型推理阶段主要通过贪婪解码,每次选择当前最有可能的输出((概率值:top-1)作为 token, 直到生成完整的输出序列,优点是速度快、缺点,是当前最可能的输出而非全局最优解,结果偏向于直接回答问题;2. CoT-decoding 在模型解码推理阶段 对 token top-K采样,可能会在某些 step 开始出现CoT链式思维路径,从而在得到有CoT路径的回答 结论/启发:暂无借鉴意义。这篇文章通过改变模型输出的解码策略激发LLM 的推理能力,这种方式只能应对预训练任务中频繁出现的任务,对于复杂的任务还是需要设计prompt触发合理的推理过程。另外该方法的本质是基于概率原理提升模型推理效果、而非模型自身能力的提升, 且侧重点在模型推理侧(修改模型侧的推理脚本),非模型应用侧(prompt 发力) 2402.10200v1.pdf (arxiv.org) 胡鑫钰
CoT 针对CoT 在语义推理任务上表现出色、在涉及数字或符号推理的问题上表现不佳;提出了Chain of Code 主要技术:CoC分为两个步骤进行生成和执行(1) 生成:给定一个要解决的问题、CoC 生成代码结构中的推理子步骤。代码提供了通过问题进行推理的框架(显式代码、伪代码/自然语言形式)(2)执行:将(1)中的代码解释器逐步运行该代码,如果执行成功,程序状态更新并继续执行;若执行异常,会由LM模拟执行(LMulator、类似于打桩技术)直至程序状态执行完毕 结论:CoC主要对解释性语言 python 进行验证,并不适用与编译性语言例如Go, C++/C,无法通过解释器/LM仿真器逐步验证 2312.04474.pdf (arxiv.org) 胡鑫钰
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,347评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,435评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,509评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,611评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,837评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,987评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,730评论 0 267
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,194评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,525评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,664评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,334评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,944评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,764评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,997评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,389评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,554评论 2 349

推荐阅读更多精彩内容