0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

大模型颠覆研发模式:字节跳动是如何在单元测试中落地大模型的?

jf_WZTOguxH 来源:AI前线 2023-08-16 14:48 次阅读

大模型的出现引发了一场软件工程革命,它根本性地改变了软件开发的流程和方式。当下,越来越多的企业开始在实际的研发工作中,结合大模型增强软件开发在设计、需求、测试、发布和运维等各个环节中的能力,提高质量和效率。

在接受 InfoQ 采访时,字节跳动算法专家张树波表示,大语言模型是一项人工智能基础技术的突破,必然会带来多个行业的变革。2023 年初,字节跳动智能服务团队开始启动大模型 X 智能单测项目。目前,大模型生成单元测试已经在实际业务中落地。

单元测试是保障项目可靠性的重要手段。传统的智能单测生成依赖静态分析、动态分析等工具,对不同的语言需要重新适配。随着模型参数规模的提升,模型的代码理解、代码生成能力也大幅提升,使用模型端到端的生成单元测试,可以低成本地将单元测试覆盖到多种编程语言。然而大模型在单测生成任务上仍存在模型幻觉(随机生成不存在变量名、方法名)和测试分支覆盖不全的问题。

为解决以上问题,字节跳动智能服务团队发现通过任务微调、强化学习等技术可以提升语言模型的单元测试生成语法正确率和分支覆盖率。经过测试,他们的基于 Bloom 70 亿参数模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端显卡上的推理时延只有 ChatGPT 的 25%。且目前大模型单元测试生成分支覆盖率在实际项目中达到 56%,同时在抖音的 AndroidiOS 双端落地,问题有效性达到 80%,修复率 65%。

在今年 9 月 3-5 日举办的 QCon 全球软件开发大会·北京站中,张树波将把以上经验分享给大家。张树波硕士毕业于清华大学,先后就职于 vivo、字节跳动,从事 NLP 算法多年,在智能单测、智能客服、语音助手等业务场景有丰富的落地经验。

在大会开始前,InfoQ 对张树波进行了专访,探索字节跳动是如何在单元测试中落地大模型的,以及大模型对软件研发工作流的改变。以下为对话实录,经编辑。

InfoQ:您在今年 9⽉举办的 QCon 全球软件开发⼤会·北京站上的演讲主题是《⼤模型助⼒智能单测⽣成》,为什么会选择这⼀主题?

张树波:2022 年底 OpenAI 发布 ChatGPT,其效果令人大为震撼,曾经让 NLPer 困扰的自然语言处理问题,例如歧义、长程依赖、知识缺失、推理能力不足等,都得到了很大程度的缓解和解决。大语言模型是一项人工智能基础技术的突破,必然会带来多个行业的变革。2023 年初,我们字节跳动智能服务团队启动了大模型 X 智能单测项目,探索至今,大模型生成单元测试已经在实际业务中落地。这其中我们总结出了一些经验,希望能够帮助听众。

InfoQ:对于这波⼤模型结合软件开发应⽤热潮,您观察到哪些有趣的趋势?

张树波:大模型会让开发更轻松。大模型代码生成会降低开发者编写重复性代码,但是不意味者开发门槛降低,开发者需要具备辨识模型生成是否正确,以及对最终上线负责。当前大模型生成的代码还不能保证绝对正确,甚至有些隐蔽的错误,不容易被新手开发者发现。从这个角度来看,大模型对有经验的开发者助益更大。

大模型如何改变传统单测生成? InfoQ:在⼤模型出现以前,传统的智能单测⽣成⽅法是什么样的?存在哪些痛点?

张树波:传统的单测生成应用最广、最成功的是基于搜索的单测生成,也就是很多场景都会提到的(search based software testing - SBST),其中集成了非常多的程序分析技术,包括各种各样的静态分析、动态分析以及遗传算法甚至 constrain solving。但因为语言的特性不同,同样的分析技术对不同的语言是需要重新实现的。虽然测试生成的原理在不同语言是通用的,但是强依赖于软件分析技术,那么每新增一种新的语言支持,就需要适配一整套分析技术,成本较大。另外,精确的分析可能会依赖于编译产物,例如动态分析,因此要求目标项目进行编译后才能进行测试生成,提高了生成所需的前置准备要求。

而基于模型的生成可以直接分析源码,无需编译,降低生成的要求,大大扩大适应场景。近几年来应用 repository mining 提升 test generation 甚至 program repair 效果的工作也在逐渐的增加,说明 NLP 中的一些假设在软工领域也是成立的,比如现有 repository 中包含了 test generation 甚至 program repair 中需要的知识,大家也做了相应的尝试,学习历史知识并应用到新的任务中在软工领域也是大家认可的思路。

InfoQ:应⽤⼤模型后,智能单测⽣成⽅法发⽣了哪些变化?实际效果如何?能完全替代传统的智能单测⽣成⽅法吗?

张树波:这里先补充一个业务应用背景,智能单测一般在开发者代码编写过程中 (IDE) 和在代码提交后 (CI) 发挥作用,前者要求可读性、正确性,后者要求正确性、覆盖率指标。应用大模型后,智能单测由传统模版生成 + 遗传算法的方式向端到端的模型生成方式演化。传统单测在正确性和覆盖率指标上仍然比大模型生成的要高,在 CI 过程中,仍占主导位置,大模型在其中作为补充。而在 IDE 中,大模型生成单测的可读性更好,便于开发者修改,因此在 IDE 中单测更倾向使用大模型生成的结果。

我们智能服务团队的主要基于 Bloom、starcoder 等开源模型做了测试以及微调,经过测试,其中基于 Bloom 的 70 亿参数模型的生成效果不弱于通用版 ChatGPT 的水平,并且在低端显卡(A30)上的推理时延只有 ChatGPT 的 25%。目前,我们的大型模型单元测试生成分支覆盖率在实际项目中达到 56%,同时在抖音的 Android、iOS 双端落地, 问题有效性达到 80%,修复率 65%。同时我们也正在试用火山方舟上大模型的单测生成能力,效果正在评估中。

整体来看,大模型仍有一定局限,发展有个过程,各有千秋,取长补短,可以融合应用 1+1>2,不同场景可以有不同的应用方式。

InfoQ:⼤模型在智能单测⽣成中的应⽤原理是什么?

张树波:大模型单测生成属于代码生成、文本生成的范畴,旨在通过大模型完成端到端的单测代码生成。大模型单测生成输入是待测方法、以及上下文,输出为单元测试函数。随着模型规模的提升,模型的代码理解、单测生成能力也大幅提升。

目前智能服务团队内使用的大模型基座主要是开源模型,例如 Bloom、Starcoder,基于以上大模型,我们对裸模型以及使用单测训练数据微调之后模型,分别做了评估,当前选择了基于 Bloom7B 的微调模型落地。同时我们团队在 Java、Swift、Go 等多种编程语言的大模型落地计划,广泛收集了公开数据集、业务数据集用于微调。

如何提升⼤模型单测⽣成准确性? InfoQ:您提到⼤模型在单测⽣成任务上仍存在模型幻觉和测试分⽀覆盖不全的问题,对于这两个问题,字节有哪些解决思路?如何提升⼤模型单测⽣成准确性?

张树波:当前我们使用单测生成任务数据在大模型做了微调,让大模型专注单测生成。实验表明,通过构建高质量的训练数据,可以显著提升大模型单测分支覆盖率指标。基于微调后的大模型,通过引入以编译器、静态分析结果作为奖励的强化学习,可以进一步缓解模型幻觉的问题。微调和强化学习的基本假设是模型在预训练阶段学习到了代码相关知识,通过微调或强化学习,可以激发模型的潜力,或让模型跟随特定偏好,输出更好结果。如果预训练阶段没有过多的对应任务领域的语料,通过继续预训练的方式可以让模型适配这一领域,然后进行后面的微调和强化学习,可以取得更好的结果。

除了以上方式,另外一种简单粗暴的方式是提升模型规模,规模越大,能力上限越高。

InfoQ:除此之外,⼤模型在单测⽣成中还有那些局限性?是否会遇到数据质量问题?是否需要考虑隐私和安全问题?有哪些措施可以确保数据安全?

张树波:大模型在单测生成瓶颈在能给大模型提供多少背景信息,如果是一个简单的函数,没有涉及任何其他自定义的类,大模型未来可以完美解决,但是涉及其他的类的,甚至是多层的,外层信息稀疏性,会提高输入的上下文输入长度,在实际落地中会在输入长度和生成效果之间做一个取舍。微调数据质量非常重要,决定模型是否可用的关键因素。关于数据安全问题,火山方舟提出了全方位的大模型安全架构,为模型训练方和使用者提供安全可信环境。

InfoQ:在⼤模型助⼒智能单测⽣成的过程中,字节团队内还积累了哪些经验和教训?对于希望在项⽬中应⽤⼤模型进⾏智能单测⽣成的团队,您会给他们提供哪些建议?

张树波: 不仅是在大模型助力智能单测生成这个方向,所有大模型 X 某某类似的应用落地都是一项系统工程。在大模型落地过程中,其他兄弟团队给予了大量的经验和技术支持。

InfoQ:您认为在⼤模型助⼒智能单测⽣成⽅⾯,还有哪些需要进⼀步研究和探索的领域 / 挑战?⼤模型在智能单测⽣成领域的未来发展趋势是什么样的?

张树波:目前,我们对于 LLM 的应用仍比较初级,所以首先是最基础的研究,如何正确激发大模型在单测任务上的潜力,让大模型发挥全部的效果。目前我们探索的手段包括但不限于任务微调、prompt engineering、RL,然后是下一个阶段,如何让模型不断地增强在特定场景中的效果。另外,大模型的能力和发展让原本一些无法通过自动化解决的问题有了新的可能性,比如经典的 oracle problem,不仅仅是困扰单测生成,GUI 的测试、program repair 的落地都受限于这个经典问题。如果大模型能够解决 oracle problem,刚才提到的多种软工技术,会迎来又一个落地的春天,而我们对于这个趋势充满信心。

“大模型将对研发模式产生颠覆性改变” InfoQ:⼤模型在软件研发⼯作流中最⼤的价值是什么?⼤模型对软件研发⼯作流的改变,将会如何影响软件开发⾏业的未来发展趋势?

张树波:毫无疑问,大模型将对研发的模式产生颠覆性的改变,但这个改变并不会在一夜之间就发生,会是一个持续渐进的过程,三年五年甚至十年。随着大模型的不断发展和进化,对于研发工作流的影响程度会逐渐加深加强。副驾驶 Copilot 是一种比较可能的切入和演进方式,一开始会在一些比较合适的小场景,Copilot 以半自动化的方式对特定任务进行赋能和提效(比如单测的生成),然后随着模型对代码的理解能力和推理能力增强,推理结果置信度提升,模型在任务中的重要程度逐步增加,在一些任务上达到和人类同等重要的参与程度。

同时,能力可以泛化推广到其他相似或者相关的任务,比如 defect detection、fault localization、program repair 等等,成为开发者的“强化外骨骼”或者最佳搭档。甚至有可能在不远的将来,实现通过 prompt 研发和调试软件,就像《西部世界》中的场景一样。

InfoQ:⽬前市⾯上存在很多结合⼤模型的研发效能⼯具,但在⼀些企业的端到端落地过程中并不理想,也没有实现提效的突破,这背后可能存在哪些问题?不同规模的企业如何通过⼤模型实现最优的研发效率和质量?

张树波:大模型适合做推理任务,这是之前单体小模型不具备的能力。在这个基础上,可以反观大模型是否在做这类事情。另外当前市面上的开源大模型或者大模型 API 都是通用大模型接口,如果直接在某个领域应用可能存在领域的 gap。大模型本身也存在问题,例如大模型生成内容是有偏的,而且存在模型幻觉、推理错误等问题。同时研发效能工具的需要结合具体业务落地,我们智能服务团队,在抖音、直播、剪映做了很多开创性的研发效能实践,欢迎大家与我们合作。

大模型应用可以分为几个层次,API 调用、模型微调、模型继续预训练、模型预训练,成本依次呈几何级数递增,不同规模企业可以简单衡量下投入产出比,来确定在哪个层面应用大模型。

InfoQ:⼤模型会对程序员带来哪些冲击?程序员和⼤模型如何更好地共⽣,实现 1+1>2 的效果?

张树波:我不认为大模型会减少对程序员的需求量,因为现在大模型还不能替代程序员,也不能为最终结果负责。在我们智能服务团队的实际业务中,我们把程序员当成客户,模型生成的单测为程序员服务,自动化单测检测出来的问题需程序员解决,大模型和程序本身是共生的关系。

大模型生成代码能力增强的同时,需要程序员提升自己的专业能力,能快速判断大模型生成的代码是否正确以及生成质量的高低。程序员能力越强,使用大模型生成代码的质量也会越高,因为通过使用不同的 prompt,可以生成不同质量的代码。程序员应该拥抱大模型,它可以提高代码编写效率,对于一些常识性的问题,它也能做到有问必答,省去网上搜索的时间。

嘉宾简介

张树波,字节跳动算法专家,清华大学硕士毕业,先后就职于 vivo、字节跳动。从事 NLP 算法多年,在智能单测、智能客服、语音助手等业务场景有丰富的落地经验。将在 QCon 北京 2023 分享题为《大模型助力智能单测生成》的演讲。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230605
  • 字节跳动
    +关注

    关注

    0

    文章

    266

    浏览量

    8726
  • 大模型
    +关注

    关注

    2

    文章

    1516

    浏览量

    1115

原文标题:大模型颠覆研发模式:字节跳动是如何在单元测试中落地大模型的?

文章出处:【微信号:AI前线,微信公众号:AI前线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    字节跳动发布AI角色互动应用“话炉”,涉足AI社交赛道

     值得注意的是,字节跳动CEO梁汝波在2024年度全体会议上指出,尽管字节跳动在2023年才初步涉足GPT领域,然而同期众多先进的大模型创业
    的头像 发表于 03-25 16:40 585次阅读

    字节跳动被曝正秘密研发多个AI产品

    据多位知情人士透露,科技巨头字节跳动正在人工智能(AI)大模型领域秘密研发多个创新产品。其中,多模态数字人产品备受瞩目,该产品将结合先进的AI技术与虚拟形象,为用户提供全新的交互体验。
    的头像 发表于 03-05 11:22 439次阅读

    字节跳动澄清未推出中文版Sora

    近日,有传闻称字节跳动在Sora文生视频模型发布之前,已经推出了一款名为Boximator的颠覆性视频模型。传闻还指出,这款
    的头像 发表于 02-20 13:58 321次阅读

    字节跳动推出一款颠覆性视频模型—Boximator

    在 Sora 引爆文生视频赛道之前,国内的字节跳动也推出了一款颠覆性视频模型——Boximator。
    的头像 发表于 02-20 13:44 466次阅读
    <b class='flag-5'>字节</b><b class='flag-5'>跳动</b>推出一款<b class='flag-5'>颠覆</b>性视频<b class='flag-5'>模型</b>—Boximator

    字节跳动否认借助OpenAI技术研发模型,已删除GPT生成数据

    据悉,有媒体曝光,字节跳动可能涉足未公开地使用OpenAI技术来开发自家的大规模语言模型,这与OpenAI的服务条款相悖。因此,该公司的账户现已经被OpenAI暂时禁用。
    的头像 发表于 12-18 10:39 224次阅读

    字节跳动否认使用OpenAI技术开发大语言模型,并正与后者进行沟通 

    回顾过去,字节跳动早在 4月份就明文规定,严禁将 GPT 模型生成的数据添加到大模型的训练数据集中,并且指导工程师们在使用 GPT 时遵循服务条款。更值得关注是,9 月时,
    的头像 发表于 12-18 09:53 216次阅读

    AI如何在数以百亿的MCU嵌入式应用中落地

    AI如何在数以百亿的MCU嵌入式应用中落地?海思正在给出自己的答案。
    的头像 发表于 12-12 15:53 619次阅读
    AI如<b class='flag-5'>何在</b>数以百亿的MCU嵌入式应用<b class='flag-5'>中落地</b>?

    软件单元测试真的有必要吗?(下)

    本篇将深入讨论单元测试过程中,如何在保质保量完成测试任务的同时,缩减时间成本、提高测试效率,并分享目前行业内的实践经验以及相关自动化测试工具
    的头像 发表于 11-17 15:18 297次阅读
    软件<b class='flag-5'>单元测试</b>真的有必要吗?(下)

    软件单元测试真的有必要吗?(上)

    本文着重探讨单元测试的重要性及其正面临的困境,并介绍功能安全标准中罗列的单元测试方法。
    的头像 发表于 11-03 14:58 314次阅读
    软件<b class='flag-5'>单元测试</b>真的有必要吗?(上)

    如何提高嵌入式软件单元测试效率

    在本指南中,您将学习如何通过在更短的时间内运行更多的测试来增加您的单元测试吞吐量。 这种效率的提高来自于使用虚拟平台而不是物理硬件作为开发平台。 本指南对任何开发或运行嵌入式软件单元测试的人都很
    发表于 08-28 06:31

    字节跳动AI开启测试 代号“Grace”

    字节跳动AI开启测试 代号“Grace” 字节跳动AI开启测试;目前在内测阶段,需要邀请或授权的
    的头像 发表于 08-07 16:58 916次阅读

    AI大模型颠覆手机吗?AI大模型会如何颠覆手机?

    导语:大模型在手机端的落地,不仅仅是AI进入人类生活的开始,也是行业发生颠覆,新老巨头进行更替的时刻。
    的头像 发表于 07-24 17:36 1069次阅读

    如何利用Simulink Test工具箱对模型进行单元测试

    创建完模型后,我们需要验证模型的行为,即仿真结果,是否跟我们预期的一致,这样才能保证由模型生成的代码在嵌入式系统中执行得到结果跟我们预期的一致。单元测试主要是以
    的头像 发表于 07-22 10:25 2632次阅读
    如何利用Simulink Test工具箱对<b class='flag-5'>模型</b>进行<b class='flag-5'>单元测试</b>?

    083. 单元测试和案例:15.6 fixture

    单元测试
    充八万
    发布于 :2023年07月11日 21:31:03

    嵌入式代码单元测试如何完成?

    软件开发中,每次需求的变更基本都需要改写代码,而代码变更后就需要进行功能测试,当然在功能测试之前需要代码的单元测试,避免代码改动后部分场景没有验证,最后出现各种问题。
    发表于 06-05 12:28 585次阅读