今天刚好看到李沐最近在交大演讲中提到的观点:大模型评估特别难,评估是你最重要的事情,先把评估做好,再去做别的事情。
下面是李沐的原话:
还有就是做评估特别难,模型在实际场景中的应用是一件非常复杂的事情,假如你用一个比较简单的评估,是无法评估模型的好坏。所以过去一年多,大家都在不停的刷新榜单,但实际用起来,就觉得模型不太行,因为评估没有到位,没有真的去把实际场景那么复杂的应用给评估进去。
所以很多时候,评估是你最重要的事情,先把评估做好,再去做别的事情。
我们现在是通过自然语言与模型进行交互,但自然语言有一定的二义性,自然语言很难评价其正确性、逻辑性和风格。通常我们不想让人来评估,因为比较昂贵,但使用模型评估会带来偏差。有一个好的评估可以解决 50% 的问题。因为一旦评估解决了,那你就能够进行优化。第二评估解决了,表示你拥有了一些数据。
抛砖引玉
很多模型都在标榜自己的上下文 Token 有多大,模型有多强。用一般的问题来测试评估确实很难。我突然想到我自己最近遇到的真实例子,非常有参考意义,因此想分享下。
背景介绍
我们的一个项目需要开发Android APP,团队中除了我没人会Android(我也是10年前左右开发过一段时间),但是团队其他成员有 uni-app 和前端的开发经验 。为了快速出DEMO,因此我们先尝试使用 uni-app 来开发,要用到Android原生功能的地方,使用 uni_modules 插件来写。uni_modules 插件使用的是 uni-typescript(uts) 语言,uts 采用了与 typescript 基本一致的语法规范,但为了跨端,uts进行了一些约束和特定平台的增补。
大概二个月的时间内,我们团队把这个DEMO完成了,但是我们发现 uni-app 来实现效率并没有提升多少,我们很多核心的功能都需要使用 uts 语言来写插件,还不如使用 Android Java 或者 Kotlin 写来得方便。另外官方的IDE HBuilderX 无法查看Android 源码,非常不方便!语法提示、重构等功能上也没有 Android Studio 那么强大!因此我决定还是使用 Android Studio 开发原生应用。最终我们决定使用 Android Kotlin 而不是Android Java 进行开发,因为 Kotlin 是趋势,虽然团队成员熟悉 Java ,没有 Kotlin 开发经验,而且 Kotlin 可以和 Java 等其它语言相互操作。
除了上面的原因外,我也评估了转Android Studio 开发的代价。我们现在代码不多,而且移植的时候,我们可以借助大模型来完成代码转换。如果要手工转换的话,显然费力又无聊!这种翻译的事情,不就是大模型最擅长的嘛!也是 Transformer 作者们发明 Transformer 时想要解决的问题!因此我自信满满, 大模型一定能快速帮助我们完成代码移植。
代码转换过程
借助大模型来完成代码的转换由另外一个同事在进行,比较顺利。但是在一个比较大的模块上转换出问题。这个模块(包括空格、空行、注释、导入)共有 900 多行,总共2万7千多个字符。我参与了进来。由于输入 Token 比较长,百度文心一言3.5免费版本,直接超出了它的输入Token 长度限制,放弃。
我先尝试 ChatGPT-4o (输入Token 长度限制为 128,000) ,输出 Token 长度比较短(官方文档有4,096和16,384 ),输出时ChatGPT 用户体验做得很好,一轮输出完成但还没全部完成前,它会自动出现继续按钮,只要点击继续就可以了。**翻译的前半部分代码没有问题,注释也保留了,但是后半部分出现幻觉,代码被修改的乱七八糟。**我尝试了几次提示修正,都无法完成。
注:我的提示词是:“uni-typescript 语言类似 typescript, 请把下面的 uni-typescript 转成 Android kotlin 代码。要保留注释。” 。
我再尝试字节豆包,没有超出 Token 长度限制。一开始我也是使用一样的提示,但是发现它会给出一些无关的解释。于是提示词修改为:“uni-typescript 语言类似 typescript, 请把下面的 uni-typescript 转成 Android kotlin 代码。要保留注释。不要增加其它解释。” 这一次豆包翻译的很好!只不过它没有按要求保留代码注释,另外它的体验没有ChatGPT 做得好,一轮输出完成但还没完成前,它不会出现继续按钮,可以再输入提示词“继续”,继续输出翻译代码。不足的是后面输出的代码没有美化输出,衔接的地方有点小问题,稍加修改便可。全部转换后,导入工程,根据IDE提示,手工再做些修改便可。
后面,我没有再尝试其它模型,主要原因是这个模块是我们的核心模块,实际上我并不太想把它喂给大模型,能少喂一个是一个。
不完美的地方
在 uts 以及 Java 语法中,函数的参数是可以重新赋值的,也不会改变外部的传参,因为只是改变了引用。但是 Kotlin 语法确明确规定,函数的参数不可以重新赋值,比如下面的 fun1 会报语法错误,绕过这个限制的一种方式,如 fun2 那样,增加一个 var 变量。但是豆包大模型无法正确转换这一部分的代码。
较为可靠的评估
前面已经提到评估非常难做,因为自然语言有一定的二义性。我想代码语言的转换评估是一个非常好的评估手段。它满足以下几点:
我相信大模型代码翻译能力的提升,也有助于其他领域的提升。
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。