超越模仿游戏基准测试(BIG-bench)是一个协作性基准测试,旨在探测大型语言模型并推断其未来能力。
BIG-bench包含的超过200个任务按关键词总结在此,按任务名称总结在此。介绍该基准测试的论文(包括对大型语言模型的评估结果)目前正在审核中,可作为预印本获取。
可通过bigbench@googlegroups.com联系基准测试组织者。
目录
有关基准测试的更多详情,请参阅我们的详细说明。
BIG-bench Lite (BBL) 是 BIG-bench 中24个多样化 JSON 任务的一个小子集。 它旨在提供模型性能的规范衡量,同时比 BIG-bench 中完整的200多个编程和 JSON 任务便宜得多。 下面展示了当前模型在 BBL 上的性能排行榜。 要将新模型结果添加到完整的 BIG-bench 排行榜、BBL 排行榜和各个任务的性能图表中,请提交一个包含评估您的模型时 生成的分数文件的 PR。
<div style="text-align:center"><img src="https://yellow-cdn.veclightyear.com/835a84d5/e651310a-bb9a-48b3-ba07-46b70b75fe1b.png" alt="BIG-bench lite 性能排行榜图" width="500"/></div>如果您在出版物中使用 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={} }
使用 SeqIO 检查和评估 BIG-bench json 任务:
创建新的 BIG-bench 任务
!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。
要求
说明 首先,克隆仓库并设置环境。
# 创建新任务时,将此替换为您的分叉仓库(见下文) 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.json
或task.py
文件。在本节中,我们将介绍创建基于JSON的任务,其中任务数据在task.json
文件中指定。
首先,在GitHub上分叉仓库!:fork_and_knife: <a href="https://docs.github.com/en/get-started/quickstart/fork-a-repo">
<div style="text-align:center"><img src="https://docs.github.com/assets/images/help/repository/fork_button.png" alt="fork button" width="500"/></div> </a>您的分叉将有自己的位置,我们将其称为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模板任务开始。如上一节所述,simple_arithmetic_json是一个不错的选择。
任务由两个文件组成:README.md
描述任务,task.json
包含任务数据。
现在我们将编辑这两个文件,填入新的任务信息。
:warning: 所有任务文件(包括README.md
和task.json
)都包含一个"金丝雀"字符串,不应被编辑。这是为了防止基准测试任务泄漏到网络抓取的训练数据中。:warning:
首先,编辑README.md
以包含正确的作者和任务信息。
其次,编辑task.json
并更新以下字段。有关更多详细信息,请参阅JSON模式。
字段 | 描述 |
---|---|
name | 一个简短的、人类可读的任务名称。在这个例子中,我们使用"My awesome task" 。 |
description | 对您的任务的简短人类可读描述。 |
keywords | 描述任务的关键词。参见此处获取建议的关键词。 |
metrics | 用于评估的指标,如"exact_str_match" 。参见此处获取可用指标的描述。 |
preferred_score | 从metrics 中选择在报告任务评估结果时优先使用的指标。 |
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