Kimi Chat 公布“大海捞针”长文本压测结果,也搞清楚了这项测试的精髓
时光荏苒,岁月如梭。在过去的两个月里,“长文本”成为基础大模型的一个关键突破方向:
11 月上旬,OpenAI 发布支持 128K 上下文窗口的 GPT-4 Turbo 模型;
11 月下旬,Anthropic 发布支持 200K 上下文窗口的 Claude 2.1 模型。
从绝对数字上看,全球主流基础大模型的上下文窗口长度都得到了大幅升级。
但考虑到大模型过去曾经存在的“迷失在中间”现象——就是在回答问题时会忽略一段较长文本的中间部分细节内容,人们迫切地想知道如今大模型在支持更长的文本之后,性能究竟如何,“老毛病”还会不会出现。
一位AI大模型领域的开发者 Greg Kamradt 也对此充满了困惑。于是,他设计了一个名为“大海捞针”的大模型长文本性能测试方法:
在文本语料中藏入一个与文本语料不相关的句子(可以想象是在整本《西游记》里放入一句只会在《红楼梦》里出现的话),然后看大模型能不能通过自然语言提问的方式(Prompt)把这句话准确地提取出来。
Greg Kamradt 的“大海捞针”实验简述:
“大海”:Paul Graham 的文章合集作为语料
“针”:“The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.”
提问:"What is the most fun thing to do in San Francisco based on my context? Don't give information outside the document"
期待模型输出的正确答案:
The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.
Greg Kamradt 把藏起来的那句话(也就是大海捞针的“针”)分别放到了文本语料(也就是大海捞针的“大海”)从前到后的15处不同位置,然后针对从 1K 到 128K(200K) 等量分布的 15 种不同长度的语料进行了 225 次(15×15)实验。为了保证实验的严谨,他还重复进行了实验,来取平均值,测试时调用 API 的费用总计花了几百美元。
Greg Kamradt 在 Twitter(现名 X)上公布了他在 GPT-4 Turbo 上测得的结果:
GPT-4 Turbo(128K)在语料长度超过 72K 且句子(“针”)藏在文本头部的时候,准确率不佳。
然后又用完全一样的实验内容,测试了 Claude 2.1(200K)模型的结果:
有些惨不忍睹, Claude 2.1似乎在语料长度超过 20K 之后就开始准确率不佳,而且句子(“针”)藏在语料靠前的位置时,准确率尤其差。
来源: https://twitter.com/GregKamradt/status/1727018183608193393
第一次实验
作为大模型长文本技术的重要玩家,Greg Kamradt 的实验成功引起了我们的注意。由于 Greg Kamradt 将他的实验所有语料和代码都放在了 Github 上,Moonshot AI 的工程师很容易就可以在 Kimi Chat 上重复做这个实验。
在条件完全一致的情况下,Kimi Chat 在“大海捞针”实验中的测试结果是这样的:
全绿!
这个结果让 Moonshot AI 的工程师感到有些意外,虽然想到了结果会不错,但没想到能这么好。
好奇的工程师又试了 Kimi Chat 的一个更新的测试版本(不同版本使用了不同的对齐训练数据,但基础能力大致相同),结果反而没有这么好。
鉴于基础能力几乎相同两个版本的大模型,在“大海捞针”实验中表现却有明显的区别……
于是,工程师们想到了,不同的结果很可能是 Prompt 不够适配造成的。
第二次实验
因此,Moonshot AI 的工程师决定展开第二轮实验。将原始实验中的 Prompt 从
“What is the most fun thing to do in San Francisco based on my context? Don't give information outside the document”
调整为
“What is the most fun thing to do in San Francisco based on above document? Don't give information outside the document”。
根据经验,在基于文档的问答场景下,新的 Prompt 表意更加明确。
在第二次实验中,Kimi Chat 虽然没有得到“全绿”那么惊艳的结果,但修改 Prompt 之后错误情况的波动也在我们的预期之内。
我们同样测试了在新的 Prompt 下,GPT-4 Turbo 表现:
以及 Claude 2.1 的表现:
跟原始实验结果相比,GPT-4 Turbo 的表现更好了,出错更少,而且出错的位置也发生了变化:之前是集中在长文本的前半部分,现在分散在“针”位于语料头部的时候,在较短的语料和较长的语料中都有分布;
Claude 2.1 比之前的“惨不忍睹”也稍微更好了一些,出现了很多接近正确(正确率70%)的色块——没有按标准答案输出,但也提及了“针”的内容。
经过两次实验,Moonshot AI 的工程师初步判断:
“大海捞针”的长文本性能测试很有启发性,但是不同 Prompt 对实验结果也有较大影响,而且模型的错误没有表现出较强的一致性,需要进一步测试以及仔细分析 bad case 才能充分了解这项测试的参考价值和局限性。
于是 Moonshot AI 的工程师决定设计一个中文版的“大海捞针”实验,做进一步的测试和研究。
第三次实验
我们将 Greg Kamradt 的“大海捞针”英文实验语料换成了 AI 科技媒体《量子位》的文章集合,原实验中藏进去的句子换成了:
“在北京最好的事情就是秋天里坐在五道营胡同里的铁手咖啡馆,喝一杯热美式”。
向大模型提问的句子换成了:
“北京最值得体验的活动是什么?仅基于上述文档,不要给出上述文档以外的信息。”
然后分别跑了 Kimi Chat、GPT-4 Turbo和 Claude 2.1 的结果。
Kimi Chat:
GPT-4 Turbo:
Claude 2.1:
Kimi Chat 出现三处错误,其他地方全绿;GPT-4 Turbo 则“红”了一大片;Claude 2.1 继续出现了很多 70% 正确率的情况,其实也算把“针”找出来了,只是没有按照预期的标准答案形式输出。
结果有些出人意料。为了进一步了解“大海捞针”实验的局限性,Moonshot AI 的工程师去研究了一下大模型没答对的所有情况(Bad Case)。经过一番仔细分析,我们发现“错误”通常是由两方面的原因造成的:
第一,由于提问的 Prompt(“北京最值得体验的活动是什么?仅基于上述文档,不要给出上述文档以外的信息”)对大模型而言有一定的歧义,大模型有时候会“咬文嚼字”,坚决认为喝咖啡不是一种“活动”。
第二,由于大模型的传统“技能”——幻觉 hallucination 造成的,模型直接编造了一个不相关的答案。
第四次实验
于是,Moonshot AI 的工程师决定再次改进中文的“大海捞针”实验,将实验中藏进去的句子换成了:
“月之暗面科技有限公司北京地址是海淀区知春路量子芯座”。向大模型提问的句子换成了:
“月之暗面科技有限公司北京地址是哪里?仅基于上述文档,不要给出上述文档以外的信息。”
这下应该没有什么二义性了。
第四次实验,也是第二次中文实验,跑出来的结果如下。
Kimi Chat:
GPT-4 Turbo:
Claude 2.1:
Kimi Chat 表现优异,只出现了一个错误;GPT-4 Turbo 的错误,主要表现在当“针”藏在语料前半部分的时候;Claude 2.1 则有些惨不忍睹,工程师分析了 bad case,发现最主要的原因是 Claude 2.1 对中文“地址”的认知不太准确,不认为“针”的内容是在讲一家公司的地址,所以没有提取出来……
最后的话
经过四次“大海捞针”实验,Moonshot AI 的工程师基本上摸清楚了这项实验的关键点和局限性,除了大模型本身的长文本记忆能力和指令遵循能力,其实还有两个关键点对结果起了明显作用:
第一,藏在大海中的“针”是否完全没有歧义;
第二,向大模型提问的 Prompt 写的是否足够明确。
感谢 Greg Kamradt 设计了这个大模型长文本性能压测实验,让我们可以直观地了解几个基础大模型的长文本能力特点。不过,就像所有的考试一样,成绩只是一种反馈,并不能全面定义我们对技术的理解和追求。
当前对整个行业而言,大模型性能的客观、准确、全面评估,仍然是一件很有挑战的事情。如果你想到了一种新的测试方法,不妨联系 Moonshot AI 交流探讨。
当然,我们始终把用户的体验放在最重要的位置。如果你还没有体验过支持 20 万汉字上下文的 Kimi Chat(现已全面开放),欢迎扫码试试!