Skip to main content

用于评估自回归语言模型的框架

项目描述

语言模型评估工具

编解码器

概述

该项目提供了一个统一的框架来在大量不同的评估任务上测试自回归语言模型(GPT-2、GPT-3、GPTNeo 等)。

特征:

  • 已实施 200 多项任务
  • 支持 GPT-2、GPT-3、GPT-Neo、GPT-NeoX 和 GPT-J,具有灵活的标记化无关接口
  • 任务版本控制以确保可重复性

安装

pip install lm-eval

基本用法

要在 NLU 任务(例如 LAMBADA、HellaSwag)上评估模型(例如 GPT-2),您可以运行以下命令。在报告评估工具的结果时,请包括任务版本(显示在 中results["versions"])以实现可重复性。这允许对任务进行错误修复,同时还确保以前报告的分数是可重现的。有关详细信息,请参阅任务版本控制部分。

python main.py \
	--model gpt2 \
	--device cuda:0 \
	--tasks lambada,hellaswag

(这默认使用 gpt2-117M 根据 HF 默认值,使用 --model_args 指定其他 gpt2 大小)

可以使用--model_args标志向模型构造函数提供其他参数。最重要的是,该gpt2模型可用于加载任意 HuggingFace 模型。例如,要运行 GPTNeo,请使用以下命令:

python main.py \
	--model gpt2 \
	--model_args pretrained=EleutherAI/gpt-neo-2.7B \
	--device cuda:0 \
	--tasks lambada,hellaswag

如果您有权访问 OpenAI API,您还可以评估 GPT-3:

export OPENAI_API_SECRET_KEY=YOUR_KEY_HERE
python main.py \
	--model gpt3 \
	--model_args engine=davinci \
	--tasks lambada,hellaswag

如果除了运行任务本身之外,您还想验证正在执行的任务的数据完整性,您可以使用以下--check_integrity标志:

python main.py \
	--model gpt3 \
	--model_args engine=davinci \
	--tasks lambada,hellaswag \
	--check_integrity

要评估 HF 上不可用的 mesh-transformer-jax 模型,请通过此脚本调用 eval 工具。

实施新任务

要在 eval 工具中实施新任务,请参阅本指南

引用为

@software{eval-harness,
  author       = {Gao, Leo and
                  Tow, Jonathan and
                  Biderman, Stella and
                  Black, Sid and
                  DiPofi, Anthony and
                  Foster, Charles and
                  Golding, Laurence and
                  Hsu, Jeffrey and
                  McDonell, Kyle and
                  Muennighoff, Niklas and
                  Phang, Jason and
                  Reynolds, Laria and
                  Tang, Eric and
                  Thite, Anish and
                  Wang, Ben and
                  Wang, Kevin and
                  Zou, Andy},
  title        = {A framework for few-shot language model evaluation},
  month        = sep,
  year         = 2021,
  publisher    = {Zenodo},
  version      = {v0.0.1},
  doi          = {10.5281/zenodo.5371628},
  url          = {https://doi.org/10.5281/zenodo.5371628}
}

完整的任务列表

任务名称 火车 瓦尔 测试 验证/测试文件 指标
可乐 1043 微控制器
万里 9815 ACC
mnli_mismatched 9832 ACC
MRPC 408 加速,f1
rte 277 ACC
qnli 5463 ACC
QQ 40430 加速,f1
sst 872 ACC
万里 71 ACC
布尔克 3270 ACC
CB 56 加速,f1
美洲杯 100 ACC
多路 4848 ACC
记录 10000 f1, 时间
威克 638 ACC
wsc 104 ACC
可乐 500 f1, 时间
降低 9536 时间,f1
兰巴达 5153 人,ACC
lambada_cloze 5153 人,ACC
lambada_mt_en 5153 人,ACC
lambada_mt_fr 5153 人,ACC
lambada_mt_de 5153 人,ACC
兰巴达山 5153 人,ACC
lambada_mt_es 5153 人,ACC
维基文本 62 word_perplexity、byte_perplexity、bits_per_byte
皮卡 1838年 acc, acc_norm
前列腺素 18736 acc, acc_norm
mc_taco 9442 f1, 时间
公开媒体 1000 ACC
sciq 1000 acc, acc_norm
qa4mre_2011 120 acc, acc_norm
qa4mre_2012 160 acc, acc_norm
qa4mre_2013 284 acc, acc_norm
琐事 11313 ACC
arc_easy 2376 acc, acc_norm
arc_challenge 1172 acc, acc_norm
逻辑卡 651 acc, acc_norm
地狱犬 10042 acc, acc_norm
openbookqa 500 acc, acc_norm
小队2 11873 精确,f1,HasAns_exact,HasAns_f1,NoAns_exact,NoAns_f1,best_exact,best_f1
种族 1045 ACC
头条 2742 acc, acc_norm
headqa_es 2742 acc, acc_norm
headqa_en 2742 acc, acc_norm
数学 2985 acc, acc_norm
网页qs 2032 ACC
wsc273 273 ACC
威诺格兰德 1267 ACC
anli_r1 1000 ACC
anli_r2 1000 ACC
anli_r3 1200 ACC
伦理_cm 3885 ACC
伦理道义论 3596 ac, em
伦理正义 2704 ac, em
伦理_功利主义_原创 4808 ACC
伦理功利主义 4808 ACC
道德美德 4975 ac, em
真实的qa_mc 817 mc1, mc2
真实的qa_gen 817 bleurt_max,bleurt_acc,bleurt_diff,bleu_max,bleu_acc,bleu_diff,rouge1_max,rouge1_acc,rouge1_diff,rouge2_max,rouge2_acc,rouge2_diff,rougeL_max,rougeL_acc,rougeL_diff
相互的 886 r@1, r@2, 先生
相互加 886 r@1, r@2, 先生
数学代数 1187 ACC
math_counting_and_prob 474 ACC
数学几何 479 ACC
math_intermediate_algebra 903 ACC
math_num_theory 540 ACC
math_prealgebra 871 ACC
math_precalc 546 ACC
math_asdiv 2305 ACC
算术_2da 2000 ACC
算术_2ds 2000 ACC
算术_3da 2000 ACC
算术_3ds 2000 ACC
算术_4da 2000 ACC
算术_4ds 2000 ACC
算术_5da 2000 ACC
算术_5ds 2000 ACC
算术_2dm 2000 ACC
算术_1dc 2000 ACC
hendrycksTest-abstract_algebra 100 acc, acc_norm
hendrycks测试解剖学 135 acc, acc_norm
亨德里克斯天文学 152 acc, acc_norm
hendrycksTest-business_ethics 100 acc, acc_norm
hendrycksTest-clinical_knowledge 265 acc, acc_norm
hendrycksTest-college_biology 144 acc, acc_norm
hendrycksTest-college_chemistry 100 acc, acc_norm
hendrycksTest-college_computer_science 100 acc, acc_norm
hendrycksTest-college_mathematics 100 acc, acc_norm
hendrycksTest-college_medicine 173 acc, acc_norm
hendrycksTest-college_physics 102 acc, acc_norm
hendrycksTest-computer_security 100 acc, acc_norm
hendrycksTest-conceptual_physics 235 acc, acc_norm
亨德里克斯计量经济学 114 acc, acc_norm
hendrycksTest-electrical_engineering 145 acc, acc_norm
hendrycksTest-elementary_mathematics 378 acc, acc_norm
hendrycksTest-formal_logic 126 acc, acc_norm
hendrycksTest-global_facts 100 acc, acc_norm
hendrycksTest-high_school_biology 310 acc, acc_norm
hendrycksTest-high_school_chemistry 203 acc, acc_norm
hendrycksTest-high_school_computer_science 100 acc, acc_norm
hendrycksTest-high_school_european_history 165 acc, acc_norm
hendrycksTest-high_school_geography 198 acc, acc_norm
hendrycksTest-high_school_government_and_politics 193 acc, acc_norm
hendrycksTest-high_school_macroeconomics 390 acc, acc_norm
hendrycksTest-high_school_mathematics 270 acc, acc_norm
hendrycksTest-high_school_microeconomics 238 acc, acc_norm
hendrycksTest-high_school_physics 151 acc, acc_norm
hendrycksTest-high_school_psychology 545 acc, acc_norm
hendrycksTest-high_school_statistics 216 acc, acc_norm
hendrycksTest-high_school_us_history 204 acc, acc_norm
hendrycksTest-high_school_world_history 237 acc, acc_norm
hendrycksTest-human_aging 223 acc, acc_norm
hendrycksTest-human_sexuality 131 acc, acc_norm
hendrycksTest-international_law 121 acc, acc_norm
亨德里克斯测试法学 108 acc, acc_norm
hendrycksTest-logical_fallacies 163 acc, acc_norm
hendrycksTest-machine_learning 112 acc, acc_norm
hendrycks测试管理 103 acc, acc_norm
hendrycks测试营销 234 acc, acc_norm
hendrycksTest-medical_genetics 100 acc, acc_norm
hendrycks测试杂项 783 acc, acc_norm
hendrycksTest-moral_disputes 346 acc, acc_norm
hendrycksTest-moral_scenarios 895 acc, acc_norm
hendrycksTest-nutrition 306 acc, acc_norm
亨德里克斯测试哲学 311 acc, acc_norm
亨德里克斯史前史 324 acc, acc_norm
hendrycksTest-professional_accounting 282 acc, acc_norm
hendrycksTest-professional_law 1534 acc, acc_norm
hendrycksTest-professional_medicine 272 acc, acc_norm
hendrycksTest-professional_psychology 612 acc, acc_norm
hendrycksTest-public_relations 110 acc, acc_norm
hendrycksTest-security_studies 245 acc, acc_norm
hendrycks测试社会学 201 acc, acc_norm
hendrycksTest-us_foreign_policy 100 acc, acc_norm
hendrycks测试病毒学 166 acc, acc_norm
hendrycksTest-world_religions 171 acc, acc_norm
wmt14-en-fr 3003 bleu、chrf、ter
wmt14-fr-en 3003 bleu、chrf、ter
wmt16-en-ro 1999 bleu、chrf、ter
wmt16-ro-en 1999 bleu、chrf、ter
wmt16-de-en 2999 bleu、chrf、ter
wmt16-en-de 2999 bleu、chrf、ter
wmt20-cs-en 664 bleu、chrf、ter
wmt20-de-en 785 bleu、chrf、ter
wmt20-de-fr 1619 bleu、chrf、ter
wmt20-en-cs 1418 bleu、chrf、ter
wmt20-en-de 1418 bleu、chrf、ter
wmt20-en-iu 2971 bleu、chrf、ter
wmt20-en-ja 1000 bleu、chrf、ter
wmt20-en-km 2320 bleu、chrf、ter
wmt20-en-pl 1000 bleu、chrf、ter
wmt20-en-ps 2719 bleu、chrf、ter
wmt20-en-ru 2002年 bleu、chrf、ter
wmt20-en-ta 1000 bleu、chrf、ter
wmt20-en-zh 1418 bleu、chrf、ter
wmt20-fr-de 1619 bleu、chrf、ter
wmt20-iu-en 2971 bleu、chrf、ter
wmt20-ja-en 993 bleu、chrf、ter
wmt20-km-en 2320 bleu、chrf、ter
wmt20-pl-en 1001 bleu、chrf、ter
wmt20-ps-en 2719 bleu、chrf、ter
wmt20-ru-en 991 bleu、chrf、ter
wmt20-ta-en 997 bleu、chrf、ter
wmt20-zh-cn 2000 bleu、chrf、ter
iwslt17-en-ar 1460 bleu、chrf、ter
iwslt17-ar-en 1460 bleu、chrf、ter
字谜1 10000 ACC
字谜2 10000 ACC
循环字母 10000 ACC
随机插入 10000 ACC
reversed_words 10000 ACC
桩_arxiv 2407 word_perplexity、byte_perplexity、bits_per_byte
堆书3 269 word_perplexity、byte_perplexity、bits_per_byte
堆书语料库2 28 word_perplexity、byte_perplexity、bits_per_byte
pile_dm-数学 1922年 word_perplexity、byte_perplexity、bits_per_byte
桩安然 1010 word_perplexity、byte_perplexity、bits_per_byte
pile_europarl 157 word_perplexity、byte_perplexity、bits_per_byte
桩自由法 5101 word_perplexity、byte_perplexity、bits_per_byte
堆_github 18195 word_perplexity、byte_perplexity、bits_per_byte
桩古腾堡 80 word_perplexity、byte_perplexity、bits_per_byte
桩黑客新闻 1632 word_perplexity、byte_perplexity、bits_per_byte
pile_nih-exporter 1884年 word_perplexity、byte_perplexity、bits_per_byte
pile_opensubtitles 642 word_perplexity、byte_perplexity、bits_per_byte
堆_openwebtext2 32925 word_perplexity、byte_perplexity、bits_per_byte
pile_philpapers 68 word_perplexity、byte_perplexity、bits_per_byte
pile_pile-cc 52790 word_perplexity、byte_perplexity、bits_per_byte
pile_pubmed-摘要 29895 word_perplexity、byte_perplexity、bits_per_byte
pile_pubmed-中央 5911 word_perplexity、byte_perplexity、bits_per_byte
桩堆栈交换 30378 word_perplexity、byte_perplexity、bits_per_byte
pile_uspto 11415 word_perplexity、byte_perplexity、bits_per_byte
pile_ubuntu-irc 22 word_perplexity、byte_perplexity、bits_per_byte
桩维基百科 17511 word_perplexity、byte_perplexity、bits_per_byte
桩_youtube字幕 342 word_perplexity、byte_perplexity、bits_per_byte
blimp_adjunct_island 1000 ACC
blimp_anaphor_gender_agreement 1000 ACC
blimp_anaphor_number_agreement 1000 ACC
blimp_animate_subject_passive 1000 ACC
blimp_animate_subject_trans 1000 ACC
blimp_causative 1000 ACC
blimp_complex_NP_island 1000 ACC
blimp_coordinate_structure_constraint_complex_left_branch 1000 ACC
blimp_coordinate_structure_constraint_object_extraction 1000 ACC
blimp_determiner_noun_agreement_1 1000 ACC
blimp_determiner_noun_agreement_2 1000 ACC
blimp_determiner_noun_agreement_irregular_1 1000 ACC
blimp_determiner_noun_agreement_irregular_2 1000 ACC
blimp_determiner_noun_agreement_with_adj_2 1000 ACC
blimp_determiner_noun_agreement_with_adj_irregular_1 1000 ACC
blimp_determiner_noun_agreement_with_adj_irregular_2 1000 ACC
blimp_determiner_noun_agreement_with_adjective_1 1000 ACC
blimp_distractor_agreement_relational_noun 1000 ACC
blimp_distractor_agreement_relative_clause 1000 ACC
blimp_drop_argument 1000 ACC
blimp_ellipsis_n_bar_1 1000 ACC
blimp_ellipsis_n_bar_2 1000 ACC
blimp_existential_there_object_raising 1000 ACC
blimp_existential_there_quantifiers_1 1000 ACC
blimp_existential_there_quantifiers_2 1000 ACC
blimp_existential_there_subject_raising 1000 ACC
blimp_expletive_it_object_raise 1000 ACC
blimp_inchoative 1000 ACC
blimp_intransitive 1000 ACC
blimp_irregular_past_participle_adjectives 1000 ACC
blimp_irregular_past_participle_verbs 1000 ACC
blimp_irregular_plural_subject_verb_agreement_1 1000 ACC
blimp_irregular_plural_subject_verb_agreement_2 1000 ACC
blimp_left_branch_island_echo_question 1000 ACC
blimp_left_branch_island_simple_question 1000 ACC
blimp_matrix_question_npi_licensor_present 1000 ACC
blimp_npi_present_1 1000 ACC
blimp_npi_present_2 1000 ACC
blimp_only_npi_licensor_present 1000 ACC
blimp_only_npi_scope 1000 ACC
blimp_passive_1 1000 ACC
blimp_passive_2 1000 ACC
blimp_principle_A_c_command 1000 ACC
blimp_principle_A_case_1 1000 ACC
blimp_principle_A_case_2 1000 ACC
blimp_principle_A_domain_1 1000 ACC
blimp_principle_A_domain_2 1000 ACC
blimp_principle_A_domain_3 1000 ACC
blimp_principle_A_reconstruction 1000 ACC
blimp_regular_plural_subject_verb_agreement_1 1000 ACC
blimp_regular_plural_subject_verb_agreement_2 1000 ACC
blimp_sentential_negation_npi_licensor_present 1000 ACC
blimp_sentential_negation_npi_scope 1000 ACC
blimp_sentential_subject_island 1000 ACC
blimp_superlative_quantifiers_1 1000 ACC
blimp_superlative_quantifiers_2 1000 ACC
blimp_tough_vs_raising_1 1000 ACC
blimp_tough_vs_raising_2 1000 ACC
blimp_transitive 1000 ACC
blimp_wh_island 1000 ACC
blimp_wh_questions_object_gap 1000 ACC
blimp_wh_questions_subject_gap 1000 ACC
blimp_wh_questions_subject_gap_long_distance 1000 ACC
blimp_wh_vs_that_no_gap 1000 ACC
blimp_wh_vs_that_no_gap_long_distance 1000 ACC
blimp_wh_vs_that_with_gap 1000 ACC
blimp_wh_vs_that_with_gap_long_distance 1000 ACC

用法

评估任务

可以使用--model_args标志向模型构造函数提供其他参数。最重要的是,该gpt2模型可用于加载任意 HuggingFace 模型,如下所示:

python main.py \
	--model gpt2 \
	--model_args pretrained=EleutherAI/gpt-neo-1.3B \
	--device cuda:0 \
	--tasks lambada,hellaswag \
	--num_fewshot 2

要检查 LM 输入的样子,您可以运行以下命令:

python write_out.py \
	--tasks all_tasks \
	--num_fewshot 5 \
	--num_examples 10 \
	--output_base_path /path/to/output/folder

这将为每个任务写出一个文本文件。

代码结构

该库有两个主要组件:

  1. LMs(语言模型),例如 GPT-2、GPT-3
  2. 任务,例如 MNLI、RTE、SQuAD(即将推出)

LMs ( lm_eval.models) 和 Tasks ( lm_eval.tasks) 都保存在注册表数据结构中,以便于 CLI 实例化。

如果您想扩展模型或任务,只需添加一个新的 LM 或 Task 子类,并使用注册表装饰器进行装饰

GPT-3 评估项目跟踪我们实施新任务的进度。现在,我们专注于加载所有数据集,以便我们可以对训练数据进行重复数据删除。实施实际评估很好,但目前没有必要。

任务版本控制

为了帮助提高可重复性,所有任务都有一个 VERSION 字段。从命令行运行时,这会在表中的列中报告,或者在评估器返回字典的“版本”字段中报告。该版本的目的是,如果任务定义发生变化(即修复错误),那么我们可以准确地知道哪些指标是使用旧的错误实现计算的,以避免不公平的比较。为了强制执行这一点,有一些单元测试可以确保所有测试的行为与首次实施时保持一致。任务版本从 0 开始,每次进行重大更改时,版本都会增加 1。

报告评估工具结果时,请同时报告每个任务的版本。这可以通过表格中的单独列来完成,也可以通过报告任务名称并附加版本来完成:taskname-v0。

描述

1. LM 评估

给定一个 LM,我们希望在广泛的 NLU 任务上对其进行评估。我们至少应该涵盖 GPT-3 论文中的一组任务,以及任何其他相关的任务/基准。我们将遵循 GPT-3 格式的 a) 零样本,b) 单样本,c) 少样本评估。

为此,我们需要 3 个组件:

  • 数据下载器(与后面的部分共享,可能需要直接链接到后两个组件)
  • 任务格式化程序
  • 任务评估器

数据下载器应下载相关任务的数据。

  • 为此,我们应该严重依赖 Hugging Face 的 NLP。他们已经在处理数据脚本/缓存方面完成了大部分工作。
  • 或者,我们可以直接依赖 HF-NLP 的缓存,但这使得处理非 HF-NLP 数据集变得很尴尬。否则,我们可以将它们写到 .jsonl 中。我的感觉是,NLU 数据存储与 LM 数据相比将是杯水车薪。
  • 在我们不使用 HF-NLP 的地方,我们可以将数据保留为原始格式(.jsonl、tsv 等),并让其他组件处理它的转换。

任务格式化程序将任务输入数据格式化为 LM 可用格式。

  • 对于给定的任务,我们应该潜在地支持多种格式,例如,某些格式可能更好或更适合 LM 评估。另请参阅:即时工程
  • 任务格式化程序还应该支持将训练示例零/一次/几次打包到输入中。这可能需要与标记器进行奇怪的交互来处理最大标记问题。

任务评估员对任务进行评分。

  • 从本质上讲,我们希望为所有输入示例生成输出预测,并将它们输入到一些弹出分数(或分数)的函数中。另一种方法是收集输出 logits 并根据预期的输出集对它们进行评分。
  • 有些任务有奇怪的评估方案,所以我们应该尽可能地通用。
  • 因此可能必须与格式化程序密切相关。
  • 同样,我们应该利用 HF-NLP 的指标。我们不妨为模型提供足够通用的 API 来支持 OpenAI API。这可以加倍努力重现 OpenAI NLU 结果。

2.从LM训练集中去除val/test数据

有了数据下载器,我们只需要 (1) 公开验证/测试示例,(2) 从训练集中删除它们。

  • 可以说,(2) 应该由 LM 预处理以更一般的方式处理。可能存在我们想要从训练中删除一些特定数据的非 NLU 评估案例。
  • 根据我们如何准确地执行 val/test 删除,我们可能希望以多种方式格式化相同的示例,以确保它们不会以稍微调整的格式泄漏到训练集中。
  • 思想实验:SQuAD 主要基于维基百科。我们到底想从 LM 中删除什么?
  • [GPT-3]:在 GPT-3 中,他们试图从他们的 LM 集合中删除 val/test,但有一个导致泄漏的错误。所以他们最终做了相反的事情:从 val/test 中删除 LM 集中的重叠。时髦。
  • [GPT-3]:详见第 30 页和附录 C。他们做了一些基于 n-gram 的时髦搜索和删除。我们应该考虑是否要完全遵循他们的协议

3. 将任务训练数据加入LM训练集

这部分是最简单的。我想我们只是写出一些包含训练数据的文本文件?我们可以让通常的 LM 预处理管道从那里处理它。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

lm_eval-0.2.0.tar.gz (121.3 kB 查看哈希

已上传 source

内置分布

lm_eval-0.2.0-py3-none-any.whl (143.1 kB 查看哈希

已上传 py3