🤗 HF Repo • 📃 Paper coming soon!
Read this in English.
LongBench是第一个多任务、中英双语、针对大语言模型长文本理解能力的评测基准。在目前大模型多语言能力引起广泛关注的背景下,LongBench涵盖了不同的语言(中文和英文),以此来对大模型在长文本下的多语言能力进行更全面的评估。同时,LongBench由六大类、二十个不同的任务组成,覆盖了单文档QA、多文档QA、摘要、Few-shot学习、代码补全和合成任务等关键的长文本应用场景。
我们深知模型评测过程中可能产生的高昂成本,尤其是长文本场景下(如人工标注成本或API调用成本)。因此,我们采用了一种全自动的评测方式,旨在以最低的成本,最有效地衡量和评估模型的长文本理解能力。
LongBench包含13个英文任务、5个中文任务和2个代码任务,多数任务的平均长度在5k-15k之间,共包含约4500条测试数据。关于LongBench数据集的具体统计及任务构造方式请参考这里。
任务类型 | 英文任务数 | 中文任务数 | 代码任务数 |
---|---|---|---|
单文档QA | 3 | 1 | - |
多文档QA | 3 | 1 | - |
摘要 | 2 | 1 | - |
Few-shot学习 | 3 | 1 | - |
合成任务 | 2 | 1 | - |
代码补全 | - | - | 2 |
我们在这里展示了所有模型在Zero-shot场景下,在中文和英文各大类任务上得分的平均值(%),各任务评估所用指标请参考这里。
注:对于超出模型处理长度能力的文本,参考Lost in the Middle的观察,我们从文本中间进行截断,保持前后部分的信息。实验表明,这种截断方式对模型性能影响最小。
Avg | 单文档QA | 多文档QA | 摘要 | Few-shot学习 | 代码补全 | 合成任务 | |
---|---|---|---|---|---|---|---|
GPT-3.5-Turbo-16k | 45.5 | 39.8 | 38.7 | 26.5 | 76.0 | 54.5 | 37.8 |
Llama2-7B-chat-4k | 29.0 | 24.8 | 21.4 | 23.9 | 50.5 | 47.3 | 5.9 |
LongChat-7B-16k | 33.7 | 29.3 | 16.1 | 25.8 | 59.9 | 57.0 | 14.2 |
XGen-7B-8k | 28.7 | 24.5 | 20.4 | 24.8 | 58.7 | 38.0 | 5.6 |
InternLM-7B-8k | 24.7 | 17.1 | 20.8 | 13.3 | 52.7 | 39.7 | 4.7 |
ChatGLM2-6B | 26.0 | 23.1 | 15.0 | 22.9 | 46.1 | 46.1 | 2.7 |
ChatGLM2-6B-32k | 42.7 | 32.8 | 34.0 | 28.6 | 68.1 | 52.7 | 39.8 |
Avg | 单文档QA | 多文档QA | 摘要 | Few-shot学习 | 代码补全 | 合成任务 | |
---|---|---|---|---|---|---|---|
GPT-3.5-Turbo-16k | 44.5 | 61.2 | 28.7 | 16.0 | 29.2 | 54.5 | 77.5 |
Llama2-7B-chat-4k | 13.5 | 11.6 | 1.9 | 0.2 | 19.8 | 47.3 | 0.5 |
LongChat-7B-16k | 23.7 | 26.6 | 19.1 | 14.0 | 20.8 | 57.0 | 4.8 |
XGen-7B-8k | 14.5 | 14.2 | 9.1 | 1.5 | 20.0 | 38.0 | 4.2 |
InternLM-7B-8k | 18.6 | 33.3 | 8.9 | 13.0 | 15.5 | 39.7 | 0.9 |
ChatGLM2-6B | 22.5 | 33.0 | 15.2 | 14.6 | 20.5 | 46.1 | 5.5 |
ChatGLM2-6B-32k | 41.3 | 52.0 | 34.3 | 16.3 | 29.9 | 52.7 | 62.5 |
为了更有针对性地分析模型在不同文本长度下的相对表现,下图展示了模型在不同文本长度区间上,所有任务上的平均相对分数。
注:假设模型在某个任务的特定长度范围内数据上得分为x,在该任务所有数据上得分为y,则模型在该长度范围的相对分数为(x/y-1)。为了更好比较不同模型的变化趋势,我们在0-4k将所有折线平移至0。
你可以通过Hugging Face datasets来下载并载入LongBench的数据(🤗 HF Repo):
from datasets import load_dataset
datasets = ["hotpotqa", "2wikimqa", "musique", "dureader", "narrativeqa", "qasper", "multifieldqa_en", \
"multifieldqa_zh", "gov_report", "qmsum", "vcsum", "trec", "nq", "triviaqa", "lsht", "passage_count", \
"passage_retrieval_en", "passage_retrieval_zh", "lcc", "repobench-p"]
for dataset in datasets:
data = load_dataset('THUDM/LongBench', dataset, split='test')
同样地,你也可以直接用这个链接下载所有的评测数据。
LongBench中所有数据都统一为以下格式:
{
"input": "任务的输入/指令,通常较短,比如QA中的问题、Few-shot任务中的提问等",
"context": "任务所需的长语境文本,比如文档、跨文件代码、Few-shot任务中的few-shot样本",
"answers": "由所有标准答案组成的列表",
"length": "前三项文本的总长度(中、英文分别用字、词数统计)",
"dataset": "本条数据所属数据集名称",
"language": "本条数据的语言",
"all_classes": "分类任务中的所有类别,非分类任务则为null",
"_id": "每条数据的随机id"
}
通过pip安装依赖:pip install -r requirements.txt
。我们以ChatGLM2-6B为例提供了一份评测代码。首先,运行仓库下的pred.py
CUDA_VISIBLE_DEVICES=0 python pred.py
可以在pred/
文件夹下得到模型在所有数据集下的输出,此后运行eval.py的评测代码:
python eval.py
可以在result.json
中得到在各数据集上的评测结果。请注意,我们在config/
下提供了我们总结出来的在各数据集上适合的输入格式和最大输出长度限制,在评测的时候可以进行修改以更好地适用你要评测的模型,修改后在pred.py评测时会自动按照新的格式去整理数据并得到对应的模型输出。
下面的几张表格展示了模型在所有子任务数据集上的Zero-shot评测结果(%),其中的中文数据集以“zh”标示(各任务评估所用指标请参考这里)。
NarrativeQA | Qasper | MultiFieldQA-en | MultiFieldQA-zh | |
---|---|---|---|---|
GPT-3.5-Turbo-16k | 23.6 | 43.3 | 52.3 | 61.2 |
Llama2-7B-chat-4k | 19.1 | 19.6 | 35.8 | 11.6 |
LongChat-7B-16k | 21.6 | 21.6 | 44.6 | 26.6 |
XGen-7B-8k | 17.9 | 18.3 | 37.2 | 14.2 |
InternLM-7B-8k | 12.4 | 16.8 | 22.3 | 33.3 |
ChatGLM2-6B | 11.2 | 23.7 | 34.2 | 33.0 |
ChatGLM2-6B-32k | 20.4 | 32.2 | 45.7 | 52.0 |
HotpotQA | 2WikiMQA | Musique | DuReader (zh) | |
---|---|---|---|---|
GPT-3.5-Turbo-16k | 51.6 | 37.7 | 26.9 | 28.7 |
Llama2-7B-chat-4k | 24.3 | 31.4 | 8.6 | 1.9 |
LongChat-7B-16k | 22.4 | 16.8 | 9.1 | 19.1 |
XGen-7B-8k | 28.3 | 21.5 | 11.5 | 9.1 |
InternLM-7B-8k | 27.9 | 24.0 | 10.3 | 8.9 |
ChatGLM2-6B | 20.2 | 19.6 | 5.3 | 15.2 |
ChatGLM2-6B-32k | 44.9 | 34.9 | 22.2 | 34.3 |
GovReport | QMSum | VCSUM (zh) | |
---|---|---|---|
GPT-3.5-Turbo-16k | 29.5 | 23.4 | 16.0 |
Llama2-7B-chat-4k | 27.3 | 20.6 | 0.2 |
LongChat-7B-16k | 28.4 | 23.2 | 14.0 |
XGen-7B-8k | 27.8 | 21.7 | 1.5 |
InternLM-7B-8k | 9.8 | 16.8 | 13.0 |
ChatGLM2-6B | 23.7 | 22.2 | 14.6 |
ChatGLM2-6B-32k | 33.3 | 23.9 | 16.3 |
TREC | NQ | TriviaQA | LSHT (zh) | |
---|---|---|---|---|
GPT-3.5-Turbo-16k | 68.0 | 73.0 | 87.1 | 29.2 |
Llama2-7B-chat-4k | 60.5 | 31.4 | 59.7 | 19.8 |
LongChat-7B-16k | 61.5 | 44.8 | 73.5 | 20.8 |
XGen-7B-8k | 66.0 | 43.2 | 67.0 | 20.0 |
InternLM-7B-8k | 49.0 | 47.6 | 61.6 | 15.5 |
ChatGLM2-6B | 44.0 | 34.5 | 59.8 | 20.5 |
ChatGLM2-6B-32k | 62.0 | 64.9 | 77.6 | 29.9 |
LCC | RepoBench-P | |
---|---|---|
GPT-3.5-Turbo-16k | 54.7 | 54.3 |
Llama2-7B-chat-4k | 52.3 | 42.4 |
LongChat-7B-16k | 59.2 | 54.7 |
XGen-7B-8k | 38.8 | 37.3 |
InternLM-7B-8k | 45.5 | 34.0 |
ChatGLM2-6B | 48.4 | 43.7 |
ChatGLM2-6B-32k | 55.4 | 50.0 |
PassageRetrieval-en | Passage Count | PassageRetrieval-zh | |
---|---|---|---|
GPT-3.5-Turbo-16k | 71.0 | 4.5 | 77.5 |
Llama2-7B-chat-4k | 9.2 | 2.5 | 0.5 |
LongChat-7B-16k | 24.0 | 4.5 | 4.8 |
XGen-7B-8k | 9.0 | 2.2 | 4.2 |
InternLM-7B-8k | 6.5 | 2.9 | 0.9 |
ChatGLM2-6B | 3.2 | 2.1 | 5.5 |
ChatGLM2-6B-32k | 77.5 | 2.0 | 62.5 |
- LongBench的部分任务基于之前的研究者提出的数据集构建,包括HotpotQA,2WikiMultihopQA,Musique,DuReader,NarrativeQA,Qasper,GovReport,QMSum,VCSUM,TriviaQA,NQ,TREC,LSHT,LCC和RepoBench-P。
本工作由THU-KEG和Zhipu AI共同完成,相关论文正在撰写中,届时将更新引用信息,敬请关注~
如果您使用Longbench,请一并引用LongBench所基于的数据集对应的论文,相关引用信息在这里。