LLM基底模型的记忆测试

2,380次阅读
没有评论

共计 1579 个字符,预计需要花费 4 分钟才能阅读完成。

LLM基底模型的记忆测试

最近开始研究Agent记忆这块,现在的大模型都是有指定的窗口限制,比如gpt3.5 8k token 的窗口。理论上在这个窗口内的聊天信息,gpt都应该了如指掌,现在gpt4-128k,那么在这128k内它真的是什么都记住了?基于此才有这篇文章的存在。

在 github上看到这个项目 https://github.com/gkamradt/LLMTest_NeedleInAHaystack 做了这样的一个测试。

LLM基底模型的记忆测试

测试

  1. 在一个长篇背景中(称为“needle”),将一个随机的事实或陈述(称为“haystack”)放在中间
  2. 请模型检索此陈述
  3. 迭代不同的文档深度(即放置haystack的位置)和上下文长度,以衡量性能

将 haystack放在不同的位置就是用来测试模型的记忆能力,比如放在最开始和最后LLM输出的结果就是不一样,那么就验证了首尾存在着差异。

目前代码只支持OpenAI和Anthropic分析的代码。

如果运行并且 save_results = True ,那么这个脚本将会生成一个 result/ 目录,并填充评估信息。由于可能存在并发请求,每个新的测试将会保存为多个文件。

我已经将原始测试结果放在 /original_results 中。由于我升级了脚本,所以数据格式可能与您的脚本结果不匹配。

关键参数:

  • - 将放置在您的上下文(“干草堆”)中的陈述或事实
  • haystack_dir – 包含要作为背景上下文加载的文本文件的目录。仅支持文本文件。
  • 在背景环境中找到您的答案的问题
  • 您可能希望对相同的长度/深度组合运行多次测试,如果是这样,请更改版本号
  • 迭代的上下文长度列表的起始点
  • 迭代上下文长度列表的结束点
  • - 在您的最小值和最大值之间迭代的间隔数量
  • - 文档深度的起始点。应为大于0的整数。
  • - 文档深度的结束点。应为整数 < 100。
  • - 在您的最小/最大点之间执行的迭代次数
  • - 确定要迭代的深度分布。可以选择’linear’(线性)或’sigmoid’(S型)。
  • model_provider – ‘OpenAI’ 或 ‘Anthropic’
  • model_name – 您想要测试的模型名称。应与需要传递给API的确切值匹配。例如: gpt-4-1106-preview
  • - 是否要将结果保存到文件中。无论如何,结果都将在对象中临时保存。是/否
  • 是否要将您的上下文保存到文件中。警告:这些文件会变得非常长。是/否

    其他参数:

  • context_lengths – 一组自定义的上下文长度。如果设置了,将覆盖 context_lengths_min 、最大值和间隔的设定值。

  • - 一个自定义的文档深度长度集合。如果设置了,它将覆盖 document_depth_percent_min 、最大值和间隔的设定值。
  • openai_api_key – 必须提供。用于评估的GPT-4。可以在创建对象时传递,也可以作为环境变量传递。
  • - 仅在测试人类模型时需要。可以在创建对象时传递,也可以作为环境变量传递。
  • - 默认值:1。如果您希望并行运行更多请求,请将其设置为更高的值。请注意速率限制。
  • - 每个输入中要减去的上下文量,以考虑系统消息和输出令牌。目前可以更智能地处理,但现在使用的是固定值。默认为200个令牌。
  • - 默认值:无,如果您希望减慢请求的速度,请设置以秒为单位的时间
  • - 默认值:True,是否打印测试完成时的状态信息

结果可视化

LLMNeedleInHaystackVisualization.ipynb 包含了生成数据透视表可视化的代码。然后将数据透视表转移到 Google 幻灯片中进行自定义注释和格式设置。请查看 Google 幻灯片版本。在此处查看创建此可视化的概述。

OpenAI的GPT-4-128K(2023年11月8日发布)

在64k以内可以确定全部记得所有的内容,在这之后其实都会存在部分位置无法记住的情况。

LLM基底模型的记忆测试

Anthropic的Claude 2.1(运行于2023年11月21日)

LLM基底模型的记忆测试

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2024-03-02发表,共计1579字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码