2023 年 11 月 11 日,掘金在北京举办了掘力计划第 27 期活动,集结了众多行业专家和学者,共同探讨大模型技术的最新发展和实际应用。北京大学知识计算实验室的谢睿博士作为特邀讲师,为开发者带来了一场关于《CodeShell:本地化轻量化的智能代码助手》的精彩演讲。
谢睿博士毕业于北京大学软件工程国家工程研究中心知识计算实验室(KCL),他的研究主要集中在软件工程与人工智能交叉领域,尤其关注大模型在软件开发中的训练与评估。作为 CodeShell 项目的核心贡献者,他在此次活动中详细介绍了 CodeShell 的创新理念、技术实现及其在实际软件开发中的应用。
本文旨在全面总结谢博士的演讲内容,深入探讨 CodeShell 这一代表性项目如何将大模型技术应用于软件工程领域,以及其对未来软件开发模式可能带来的影响和改变。通过本文,读者将能更加深入地理解大模型技术的实际应用,特别是在高度专业化的软件开发领域中的重要性和潜力。
视频回放地址:https://live.juejin.cn/4354/2899128
一、大模型背景简介
谢睿博士的演讲从大模型的发展背景开始。他以一张侯老师论文中的图为例,介绍了大模型的主要分类和发展历程。大模型主要分为三类:encoder-only、decoder-only、以及encoder-decoder。自 Bert 模型发布以来,大模型像雨后春笋般迅速发展,尤其在文本理解和生成方面取得了显著进步。
最初的 Bert 等模型采用的是 encoder-only 模式,这种模式的优势在于能够显著提升文本的语义理解能力,进而提高在下游任务中的性能。然而,由于缺乏 decoder 模块,即文本生成模块,在下游生成任务中的表现一般。因此,在 Bert 的基础上,后续研究逐渐探索了 encoder-decoder 和 decoder-only 模式,以提升模型在文本生成方面的能力。
除了技术架构上的分类,大模型还可以根据训练场景进行分类,主要分为底座模型和微调模型。底座模型通常从零开始,进行冷启动的预训练,而微调模型则在已经训练好的底座大模型的基础上,结合大量领域特定数据,进行热启动训练。微调模型的研究多种多样,包括有监督的奖励模型,以及 OpenAI 提出的基于人类反馈学习的微调方法。
谢博士指出,尽管大模型在预训练语料的加持下获得了强大的能力,但它们并非万能的解决方案。在许多下游任务上,原始的大模型预训练底座模型表现并不理想。例如,在软件工程的各个下游任务中,通过微调的方式可以充分激发大底座大模型的能力,从而显著提高性能。在此背景下,团队面向软件工程的应用场景研制了 CodeShell 系列大模型。 二、CodeShell代码大模型
随后,谢博士深入介绍了 CodeShell 项目。这个项目专注于解决软件工程中的关键问题,例如代码生成和缺陷检测。CodeShell 通过在大量代码相关语料上进行训练,显著提高了模型在软件工程任务中的性能。
CodeShell 模型的构建
CodeShell 项目的重点是改善大模型在软件工程任务上的表现。为此,北京大学知识计算实验室团队开发了CodeShell 底座模型,该模型通过在大量代码相关语料上训练,显示出在各种软件工程任务上的显著性能提升。CodeShell 大模型在多个主流数据集上取得了优异成绩,例如在 humaneval 和 MBPP 数据集上表现突出。谢博士特别强调了 CodeShell 模型在多种编程语言上的优势,即使与规模更大的模型如 Starcoder 15B 相比,CodeShell 在许多语言上也显示出明显的优势。
此外,团队还在 CodeShell 底座模型之上开发了 CodeShell-Chat,一个经过微调的模型,它进一步提升了模型对软件开发具体任务的适应性。
隐私保护和本地化部署
CodeShell 模型特别关注隐私保护问题。大多数现有的大模型服务都是基于云的,这意味着开发者需要将代码和数据上传到云端。为解决这一问题,CodeShell 团队针对团队 GPU、个人 GPU、个人 CPU 三种场景均提供了相应的本地化部署方案,从而更好地保护了用户的隐私。
面向开发者的解决方案
考虑到大多数开发者可能没有足够的大模型应用背景,CodeShell 团队还开发了一系列 IDE 插件作为解决方案,使得广大开发者可以更方便地使用这一工具。这些插件不仅简化了大模型的使用过程,还为开发者在实际工作中提供了实用的辅助功能。
三、CodeShell 预训练与微调
接下来谢博士详细阐述了 CodeShell 代码大模型的预训练和微调过程,这是理解其功能和效果的关键。
预训练的重要性与实现
谢博士强调了预训练在构建 CodeShell 模型中的重要性。在预训练阶段,团队对大量多样化的代码语料库进行学习和训练,旨在将丰富的编程知识和模式融入到大型模型的参数空间中,从而使模型能够有效地理解各种编程语言和场景。这个阶段的成功是建立在高质量、大规模的数据集上的。CodeShell 项目组织通过综合利用来自 GitHub 等平台的开源代码和自建的高质量数据集,创建了一个包含多种编程语言和风格的庞大数据库。
为了提高数据集的质量,团队采取了多种过滤和筛选技术,比如基于 MD5 的过滤、minhash 的文本相似度检测,以及基于深度学习的质量评估方法。这些技术帮助他们去除重复和低质量的代码片段,确保了训练数据集的高质量。
微调的策略与效果
在预训练的基础上,微调是 CodeShell 实现特定功能的关键步骤。谢博士介绍了他们如何利用特定的微调数据集来调整模型,以适应特定的软件工程任务,如代码生成、缺陷检测等。这些微调数据集主要基于实际的软件开发任务和问题构建,目的是使模型能够更好地理解和回应开发者的具体需求。
他还强调了微调过程中的一些挑战,比如如何处理大量的微调数据,以及如何平衡模型的普遍性和特定任务间的专业性。通过持续的实验和调整,团队成功地提升了 CodeShell 在各种软件工程任务中的表现,显著提高了代码生成的准确度和效率。 通过这个深入的预训练和微调过程,CodeShell 能够有效地支持软件开发者,提供高质量的代码建议和解决方案。谢博士的讲解不仅展示了 CodeShell 背后的复杂工作,也体现了大模型在实际应用中的巨大潜力。通过这些技术,CodeShell 成为了一个强大的工具,能够在各种软件开发场景中提供实时的支持和指导。 四、CodeShell代码智能助手
谢博士在演讲中重点介绍了 CodeShell 代码智能助手的创新与应用。CodeShell 智能助手的设计目标是为软件开发者提供一个本地化、轻量化的代码编写和维护工具。这一工具的推出,不仅意味着在代码生成和维护方面的技术进步,还体现了对隐私保护的高度重视。
本地化与隐私保护
在谢博士的讲解中,CodeShell 智能助手的一个重要特点是其本地化能力。这意味着,与传统依赖于云服务的代码助手不同,CodeShell 可以在用户的个人计算机或企业内部网络中运行。这一设计有效缓解了将代码上传到云端可能带来的隐私泄露风险。此外,本地化运行还允许用户根据个人需求定制化使用助手,增强了用户体验的灵活性和个性化。
功能丰富与易于部署
CodeShell 智能助手具备丰富的功能,包括代码生成、缺陷检测、自动编写测试用例等。更为关键的是,谢博士强调了其易于部署的特点。无论是在个人电脑上还是企业服务器中,CodeShell 都提供了简单快捷的部署方式。例如,通过 Docker 容器技术,可以实现一键部署,极大地简化了软件安装和配置过程。
IDE集成与用户体验
为了提高开发者的使用便捷性,CodeShell 智能助手还提供了与主流集成开发环境(IDE)如 Vscode 和 JetBrains 的深度集成。这一集成使得开发者能够在熟悉的开发环境中直接调用 CodeShell 的功能,例如代码补全、智能提示等。谢博士特别提到,为了提升用户体验,他们还考虑了智能助手在实际编码过程中的交互流畅性和响应速度。
五、结论与展望
谢博士对 CodeShell 项目的未来展望表达了乐观态度。他认为,随着技术的不断进步和开发者社区的积极参与,CodeShell 将继续演进,更好地满足软件工程的多样化需求。他特别提到了模型的可定制性和适应性,认为这将是推动模型在各种软件开发环境中广泛应用的关键。此外,他还提到了隐私保护的重要性,强调 CodeShell 在保证数据安全的同时,为开发者提供了强大的工具。
在演讲的结束阶段,谢博士特别强调了 CodeShell 项目与开发社区之间的互动。他指出,开源社区的参与是 CodeShell 成功的关键因素之一。他鼓励开发者参与到项目中来,通过反馈、共享经验和贡献代码来共同推动项目的发展。他还提到了北京大学知识计算实验室将持续支持 CodeShell 项目,并期待与更广泛的社区合作,共同探索大模型在软件工程中的新应用。 六、结语
在这场充满洞见的技术分享中,谢睿博士不仅向我们展示了 CodeShell 项目的深度和广度,还突显了大模型在软件开发和AI领域的潜力与前景。CodeShell 作为一个先进的代码助手,其本地化和轻量化的特性使其在实际应用中更加灵活高效。随着这样的创新技术的不断发展,我们期待在不久的将来见证 CodeShell 在软件工程和人工智能交叉领域中所带来的更多突破。 掘力计划 掘力计划由稀土掘金技术社区发起,致力于打造一个高品质的技术分享和交流的系列品牌。聚集国内外顶尖的技术专家、开发者和实践者,通过线下沙龙、闭门会、公开课等多种形式分享最前沿的技术动态。
工程技术期刊2016期刊投稿作者简介期刊的题录信息15种法学核心期刊交通类 核心期刊核心期刊主要特点小城镇建设 期刊国土资源科技管理期刊期刊封面和目录下载中文期刊投稿信模板剑桥期刊在线机器视觉 期刊医学图像处理 期刊植物保护核心期刊毒理学杂志期刊物流技术是核心期刊吗非核心期刊目录测控技术期刊推荐机械类好投的期刊中国公共卫生 核心期刊电机与控制应用 期刊sci收录的中国期刊2015期刊社 管理思政类好的期刊北大中文核心期刊查询ei期刊黑名单文学类期刊杂志minerals期刊中国民用航空期刊中国法学权威期刊社会工作的核心期刊浅谈期刊编辑意识北大中文核心期刊查询四类期刊有哪些jcp是什么期刊欧亚经济 期刊工艺技术期刊评价期刊的重要指标国家特级期刊岩土工程类sci期刊维普资讯网中文期刊商会 期刊公路与汽运期刊哪些sci期刊接收个案校园期刊板块国外期刊号查询冶金管理期刊cssci包括哪些期刊好发的ssci期刊discovery期刊地理学sci期刊德仁期刊期刊发行创新安徽论文发表期刊湖南农机期刊建筑科学期刊官方历史类学术期刊cscd期刊目录2016 医学应用数学进展期刊期刊出版可行性论证报告交通类sci期刊航空科学技术 期刊财务分析期刊文章福建医药杂志 核心期刊apex 期刊中国职工教育期刊期刊文献数据库有哪些sci学术期刊有哪些期刊起止页码体育二级期刊评职称发表期刊要求制冷压缩机英语期刊初中生期刊推荐新期刊 影响因子erooeroo液期刊合集安防技术 期刊国外期刊查询网站fuel cells期刊龙源期刊网免费阅读教育是什么期刊植物方面的期刊延边医学是核心期刊吗中国期刊全文资料库期刊论文基本形式北大中文期刊目录2015期刊市场的现状中国雷达的期刊期刊 速度催化类sci期刊英语优秀期刊cssci会计期刊分析化学 核心期刊外文期刊影响因子排名sci收录的中国医学期刊中国法律评论期刊地球物理核心期刊食品期刊有哪些农林类sci期刊北京大学学术期刊核心期刊发表要求教育心理学期刊水利期刊有哪些骨科杂志核心期刊城市住宅是核心期刊吗cssci期刊什么意思论文期刊的字母表示什么cssci期刊网址2004年北大核心期刊sci收录的中国医学期刊什么是cssci来源期刊期刊论文长度社会科学家期刊mdpi期刊 ei美国音乐期刊黑龙江气象 期刊买期刊发表素质教育期刊真假全面腐蚀控制期刊工程技术类核心期刊中文学术期刊等级药剂学顶级期刊城乡建设期刊官网建筑科学期刊审稿周期专题研讨 期刊世界地质 核心期刊期刊网投稿被骗教改论文 核心期刊期刊和学报的区别影响因子5以上的期刊电力与能源 核心期刊什么是非学术期刊护理核心期刊论文期刊印刷esprit sh国家一级b期刊核心期刊发表流程如何辨别期刊的级别中国科技期刊论坛期刊变更名称湖南农机期刊电科院期刊中心工程大期刊试行办法中文核心期刊分区档案期刊目录博看机构版期刊下载推理期刊应用力学与材料期刊大学学报是省级期刊吗广东工程造价期刊广西 省级期刊气象类期刊排名声学与振动 期刊职称期刊论文下载视频厦门大学权威期刊油气地质与采收率期刊ssci经济学期刊中国科技期刊研究 版面费外文期刊免费下载怎么发表法学期刊经济类中文核心期刊资源类 期刊黄梅戏艺术期刊计算机应用 期刊怎么样书爵期刊工程技术期刊 评职称中文物理期刊排名ei期刊有什么等离子体sci期刊期刊中析出的文献技术与经济管理期刊生态环境学报期刊kindle 订阅期刊经济类cssci期刊中国学术期刊综合引证中国成人教育核心期刊农业自动化期刊建筑施工技术期刊中国期刊引证报告 扩刊版一般期刊的重复率外语界 期刊国家一级b期刊控制理论与应用期刊产业经济研究期刊sci检索期刊目录民俗旅游外文期刊cssci期刊检索号怎么知道期刊是不是sci地球化学类期刊期刊论文 作者格式中国期刊交流网核心期刊遴选体系工业水处理技术期刊石油化工期刊影响因子食品方面的核心期刊重庆大学重要期刊围棋 期刊期刊论文 报道性文章中国核心期刊要目总揽中国职工教育期刊暖通专业核心期刊土木工程英语期刊