Project Icon

BIG-bench

评估大型语言模型能力的开放基准

BIG-bench是一个开放的基准测试项目,致力于评估大型语言模型的能力并预测其未来发展。该项目包含200多个多样化任务,涉及算术、推理等多个领域。研究人员可通过JSON或编程方式贡献新任务,并利用公开模型进行评估。BIG-bench Lite作为24个精选任务的子集,提供了高效的模型性能评估方法。这一平台为深入研究语言模型能力提供了宝贵资源。

BIG-bench :chair:

超越模仿游戏基准测试(BIG-bench)是一个协作性基准测试,旨在探测大型语言模型并推断其未来能力。

BIG-bench包含的超过200个任务按关键词总结在此,按任务名称总结在此。介绍该基准测试的论文(包括对大型语言模型的评估结果)目前正在审核中,可作为预印本获取。

可通过bigbench@googlegroups.com联系基准测试组织者。

目录

有关基准测试的更多详情,请参阅我们的详细说明

BIG-bench Lite 排行榜

BIG-bench Lite (BBL) 是 BIG-bench 中24个多样化 JSON 任务的一个小子集。 它旨在提供模型性能的规范衡量,同时比 BIG-bench 中完整的200多个编程和 JSON 任务便宜得多。 下面展示了当前模型在 BBL 上的性能排行榜。 要将新模型结果添加到完整的 BIG-bench 排行榜、BBL 排行榜和各个任务的性能图表中,请提交一个包含评估您的模型时生成的分数文件的 PR。

BIG-bench lite 性能排行榜图

引用

如果您在出版物中使用 BIG-bench,请引用我们的分析论文:

# TMLR
@article{srivastava2023beyond,
  title={Beyond the Imitation Game: Quantifying and extrapolating the capabilities of language models},
  author={BIG-bench authors},
  journal={Transactions on Machine Learning Research},
  issn={2835-8856},
  year={2023},
  url={https://openreview.net/forum?id=uyTL5Bvosj},
  note={}
}

快速入门 Colab 笔记本

使用 SeqIO 检查和评估 BIG-bench json 任务

创建新的 BIG-bench 任务

使用 SeqIO 加载 BIG-bench json 任务的快速入门说明 :chair:+:telescope:

!pip install git+https://github.com/google/BIG-bench.git # 这可能需要几分钟

import seqio
from bigbench.bbseqio import tasks

# 查看所有子任务
bb_mix = seqio.get_mixture_or_task("bigbench:all_json.mix.t5_default_vocab.0_shot.all_examples")
all_subtasks = [t.name for t in bb_mix.tasks]
print("\n".join(all_subtasks[:7]) + "\n...")

# 检查示例任务
task = seqio.get_mixture_or_task("bigbench:simple_arithmetic_json.gen.t5_default_vocab.0_shot.all_examples")
ds = task.get_dataset(split="all", sequence_length={"inputs": 32, "targets": 32})
print(next(iter(ds)))

注意:SeqIO 目前仅支持加载通过 JSON 定义的 BIG-bench 任务,不支持编程任务。

有关更多详细信息,请参阅 BIG-bench SeqIO README

BIG-bench 安装

要求

  • Python 3.5-3.8
  • pytest(用于运行自动测试)

说明 首先,克隆仓库并设置环境。

# 创建新任务时,将此替换为您的分叉仓库(见下文)
git clone https://github.com/google/BIG-bench.git
cd BIG-bench
python setup.py sdist
pip install -e .

接下来,运行自动测试以确保一切正常。

pytest -s

如何创建任务?

基准测试包含两种类型的任务:由JSON文件定义的简化任务,以及可以以更复杂方式与语言模型交互的程序化任务。在本节和下一节中,我们将介绍如何创建这两种类型的任务。更多详细信息可在docs/doc.md中找到。在创建任务之前,我们强烈建议阅读接受任务提交的审查标准

每个任务都包含在一个文件夹bigbench/benchmark_tasks/TASK_NAME中,其中有一个描述任务的README.md(或README.pdf)文件,以及定义任务的task.jsontask.py文件。在本节中,我们将介绍创建基于JSON的任务,其中任务数据在task.json文件中指定。

设置

首先,在GitHub上分叉仓库!:fork_and_knife:

fork button

您的分叉将有自己的位置,我们将其称为PATH_TO_YOUR_FORK。 接下来,克隆分叉的仓库并为您的新任务创建一个分支,这里我们将其称为my_awesome_json_task

git clone $PATH_TO_YOUR_FORK
cd BIG-bench
git checkout -b my_awesome_json_task

我们将基于现有示例创建我们的任务。 通过复制示例任务创建一个新的任务目录:

cd bigbench/benchmark_tasks
cp -r simple_arithmetic_json my_awesome_json_task
cd my_awesome_json_task

创建JSON任务

我们建议从一个JSON模板任务开始。如上一节所述,simple_arithmetic_json是一个不错的选择。

任务由两个文件组成:README.md描述任务,task.json包含任务数据。 现在我们将编辑这两个文件,填入新的任务信息。

:warning: 所有任务文件(包括README.mdtask.json)都包含一个"金丝雀"字符串,不应被编辑。这是为了防止基准测试任务泄漏到网络抓取的训练数据中。:warning:

首先,编辑README.md以包含正确的作者和任务信息。 其次,编辑task.json并更新以下字段。有关更多详细信息,请参阅JSON模式

字段描述
name一个简短的、人类可读的任务名称。在这个例子中,我们使用"My awesome task"
description对您的任务的简短人类可读描述。
keywords描述任务的关键词。参见此处获取建议的关键词。
metrics用于评估的指标,如"exact_str_match"。参见此处获取可用指标的描述。
preferred_scoremetrics中选择在报告任务评估结果时优先使用的指标。
examples在这里添加您任务的输入/输出示例!

任务示例可以通过以下两种方式之一指定:

  • 作为单个输入/目标输出对,其中目标输出将与模型输出进行比较。 例如:{"input": "1 + 1 = ", "target": "2"}。对于所有指标,允许多个有效目标(指定为列表),例如{"input": "1 + 1 = ", "target": ["two","2"]}

  • 作为输入和多项选择目标,其中目标分数将与模型预测的概率进行比较。 例如:{"input": "1 + 1 = ", "target_scores": { "1": 0, "2": 1, "3": 0, "4": 0 }}

这个示例所基于的任务使用输入/输出格式。 有关多项选择任务的示例,请参见simple_arithmetic_json_multiple_choice。 有关JSON任务支持的格式和指标的完整描述,请参见此处

标准化样式 我们使用black代码格式化工具通过预提交钩子在您的任务提交中强制执行标准化样式。要使用此钩子,请使用pip install pre-commit安装pre-commit(如果您按照上述说明操作,默认已安装)。然后运行pre-commit install安装钩子。在未来的提交中,您应该看到black代码格式化工具在所有您已暂存提交的Python文件上运行。

测试和评估

一旦任务数据准备就绪,对其进行测试:

cd ../../..  # 回到BIG-bench/
pytest -s bigbench/api/test_tasks.py --tasks my_awesome_json_task

要查看一些公开可用的模型在您的任务上的表现,运行以下评估脚本。根据您的硬件和任务大小,这可能需要很长时间!

scripts/evaluate_task.sh --task my_awesome_json_task --output_dir results

提交

一旦测试通过并且您对任务满意,就提交您的任务进行审核。 首先,提交并推送您的更改:

git add bigbench/benchmark_tasks/my_awesome_json_task/*
git commit -m "Added my_awesome_json_task"
git push --set-upstream origin my_awesome_json_task

最后,提交拉取请求。 最后的git push命令会打印一个URL,可以将其复制到浏览器中以发起这样的拉取请求。 或者,您可以从GitHub网站上进行操作。

pull request button
:sparkles: 恭喜你,你已经向BIG-bench提交了一项任务! :sparkles:

创建编程任务

编程任务是通过代码定义的,可以与被评估的语言模型进行更复杂的交互。例如,使用编程任务可以对模型进行多轮查询,每次使用模型的响应来指导下一次查询。

对于编程任务,我们建议从模板任务simple_arithmetic开始。

与JSON任务类似,编程任务包含在一个文件夹bigbench/benchmark_tasks/TASK_NAME中,其中有一个描述任务的README.mdREADME.pdf文件。与JSON任务不同,编程任务是由一个task.py Python文件定义的,而不是task.json文件。在本节中,我们将创建一个名为my_awesome_task的编程任务,基于benchmark_tasks/simple_arithmetic中的示例任务。

首先分叉存储库 :fork_and_knife:,克隆它 :dancers:,并创建一个分支 :herb:,如上文所述。 然后,从bigbench/benchmark_tasks目录复制示例任务:

cp -r simple_arithmetic my_awesome_task
cd my_awesome_task

创建任务

编辑README.md以包含正确的作者和任务信息。 然后,按照下面的说明编辑task.py。有关更多详细信息,请参阅API文档
⚠️⚠️⚠️ 注意:编程任务的函数签名即将发生变化。查看此拉取请求了解更多详情。如果你正在开发编程任务,请确保在你的任务中包含对该拉取请求中新功能的支持。⚠️⚠️⚠️

  • 将主任务类从ArithmeticTask重命名为MyAwesomeTask

  • get_task_details方法返回任务元数据。根据你的任务适当更改返回的值,包括namedescriptionkeywordsmax_input_length_per_querymax_queries这里有建议的关键词列表。

  • 任务的核心是evaluate_model方法,它在你的任务上评估给定的模型。可以使用传递给evaluate_modelmodel参数的两种方法来查询模型:

    • model.generate_text():为给定输入生成文本。
    • model.cond_log_prob():计算给定输入的提供模型输出的概率。
  • 为你的任务实现evaluate_model,返回一个包含评估分数的ScoreData对象(或此类对象的列表)。如果你需要标准的NLP指标,请使用这里找到的T5实现。运行时将提供T5包。

:warning: 不要编辑"canary"注释。这些是为了防止BIG-bench任务泄露到网络抓取的训练数据中。:warning:

测试和评估

测试你的新任务:

cd ../../..  # 进入BIG-bench/目录
pytest -s bigbench/api/test_tasks.py --tasks my_awesome_task

你可以使用以下脚本在几个公开可用的模型上评估你的任务。 评估结果将写入JSON文件。

scripts/evaluate_task.sh --task my_awesome_task --output_dir results

:warning: 根据你的硬件和任务的大小,这可能需要很长时间! :warning:

提交

一旦测试通过并且你准备好提交你的任务,提交并推送你的更改:

git add bigbench/benchmark_tasks/my_awesome_task/*
git commit -m "Added my_awesome_task"
git push --set-upstream origin my_awesome_task

最后,通过创建拉取请求来提交你的任务以供审核,如上文所述。

:sparkles: 恭喜你,你已经向BIG-bench提交了一项任务! :sparkles:

提交模型评估

你可以向存储库提交你的模型的BIG-bench评估。然后,你的模型结果将出现在性能图中,并可供其他研究人员使用。要提交你的评估结果,请按照这里的详细说明操作。

常见问题

我可以提交非英语任务吗?

可以!挑战语言模型在不同语言上表现良好完全在这个基准的范围之内。

我可以使用外部包X吗?

我们已经支持的包列在这里。我们愿意支持能够实现新类型任务的其他包,但我们需要逐案评估以确保与我们的内部工具兼容。如果你有一个上面未列出的包想要我们支持,给我们发邮件

我已经签署了CLA,但Google机器人仍然在抱怨!

一个常见问题是使用一个电子邮件地址签署CLA,而使用另一个与同一用户关联的电子邮件地址提交更改。请参阅这些说明以解决此问题。

关于版权问题我应该联系谁?

有关版权和许可的问题,请联系big-bench-copyright@google.com

NL-augmenter 🦎 → 🐍

如果你对BIG-bench感兴趣,你可能也会对NL-Augmenter感兴趣,这是一项大规模的协作努力,旨在开发处理自然语言的数据集转换。

艾伦·图灵坐在长凳上

Sackville公园纪念碑上的艾伦·图灵雕像坐在长凳上
Hamish MacPherson在Sackville公园艾伦·图灵纪念碑拍摄的照片,https://commons.wikimedia.org/wiki/File:Alan_Turing_Memorial_Sackville_Park.jpg
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号