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,请引用我们的分析论文:
# 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 任务
- 轻量级任务创建和评估
- 手动执行 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.json
或task.py
文件。在本节中,我们将介绍创建基于JSON的任务,其中任务数据在task.json
文件中指定。
设置
首先,在GitHub上分叉仓库!:fork_and_knife:
您的分叉将有自己的位置,我们将其称为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.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
最后,提交拉取请求。
最后的git push
命令会打印一个URL,可以将其复制到浏览器中以发起这样的拉取请求。
或者,您可以从GitHub网站上进行操作。
创建编程任务
编程任务是通过代码定义的,可以与被评估的语言模型进行更复杂的交互。例如,使用编程任务可以对模型进行多轮查询,每次使用模型的响应来指导下一次查询。
对于编程任务,我们建议从模板任务simple_arithmetic开始。
与JSON任务类似,编程任务包含在一个文件夹bigbench/benchmark_tasks/TASK_NAME
中,其中有一个描述任务的README.md
或README.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
方法返回任务元数据。根据你的任务适当更改返回的值,包括name
、description
、keywords
、max_input_length_per_query
和max_queries
。这里有建议的关键词列表。 -
任务的核心是
evaluate_model
方法,它在你的任务上评估给定的模型。可以使用传递给evaluate_model
的model
参数的两种方法来查询模型: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感兴趣,这是一项大规模的协作努力,旨在开发处理自然语言的数据集转换。