作者 | Alistair Pullen
译者 | 平川
策划 | 刘燕
本文最初发布于 Buildt 官方博客。
Buildt 使用 OpenAI 基础模型已经有一段时间了。这些模型非常强大,关于这一点,互联网上已经有了大量的记录,特别是随着 ChatGPT 的出现,它的关注度超过了之前 GPT-3 的 100 倍。然而,在应用这些模型解决相应问题(代码库搜索、理解和增强)的过程中,我们发现了一个明显的障碍:延迟和成本。比较大的模型(特别是 davinci 家族)无疑能产生最高质量的输出,但运行起来也最慢、最昂贵。
要获得良好的搜索体验,显然速度就得快。你看谷歌,100 毫秒就可以索引数百万个网页,代码库搜索也是如此。我们发现,在单个搜索中,其中一个最耗时的点就是生成输出的 LLM 层(我们使用 LLM 来增强搜索,让你可以搜索代码是什么,而不是它做什么,例如“找出最慢的递归函数”)。Alex grave 是 Github Copilot 的创建者之一。据他说,每增加 10 毫秒的延迟,完成率就会下降 1%。这一逻辑也适用于搜索。所以,当务之急是从 davinci 这样的大型模型转向 ada 和 babbage 这样的小型模型。
我们的解决方案很简单,对于给定的任务,由 davinci 生成一个中等大小的语料库,并精心优化像 babbage 这样的模型来完成相同的任务。如果操作得当,你可以以低 40 倍的成本、低 4-5 倍的延迟获得几乎相同的完成率(或至少 90% 的相似性)。
如果你愿意花点时间,则还可以在循环中加一个人:我们最近就做了这样的事情来优化 babbage 模型,以便能够识别代码的特征,所以我让 ChatGPT 帮我创建了一个基本的 Web UI,让我们可以轻松地审核和改进 davinci 所的识别结果;从根本上说,你永远无法从一个更小的模型那里获得类似的性能,所以让完成率胜过你试图模仿的模型,意味着你至少在训练完成时就比较接近。
关于这种技术,我想的最多的一个问题是:我需要多少样本?答案恐怕是“视情况而定”。
根据经验,如果你只是想标准化平淡无奇的输出格式,那么你可以用几百个样本;如果你是在做逻辑推理,那么你至少需要 1000 个样本;如果你在做 DSL 工作,那么你需要几千个样本。样本大小通常会是一个障碍,但有了用更大的模型来生成合成数据集的方法,那突然变得比较容易处理了,特别是当这些模型变得越来越好时。
这种方法有很多应用场景;如果你有一个提示符,它可以重复做同样的工作,那么你就可以使用这项技术来加快速度,降低成本。
有人问过我这种方法的维护问题,特别是如果想要更改输出结构时会出现什么情况。我们内部构建了一个经过精心优化的管道来自动化整个过程,其底层是 davinci-003 提示符,然后我们用它来生成 n 个合成样本,格式化后传递给 OpenAI 调优 API,它会吐出一个调优过的模型。这样,如果你想更改提示符的输出,只需一次单击就可以更新一个调优过的模型。
声明:本文为 InfoQ 翻译,未经许可禁止转载。
https://www.buildt.ai/blog/incorrectusage
领取专属 10元无门槛券
私享最新 技术干货