INTERS:通过指令微调释放大型语言模型在搜索中的力量
作者: Yutao Zhu, Peitian Zhang, Chenghao Zhang, Yifei Chen, Binyu Xie, Zhicheng Dou, Zheng Liu, 和 Ji-Rong Wen
🤗 HuggingFace 模型列表
模型 | 基础模型 |
---|---|
INTERS-LLaMA-7b-Chat | LLaMA-2-7b-chat |
INTERS-LLaMA-7b-Base | LLaMA-2-7b |
INTERS-Mistral-7b | Mistral-7b |
INTERS-Minima-3b | Minima-2-3b |
INTERS-Falcon-1b | Falcon-rw-1b |
新闻
- 2024年5月:我们很高兴地宣布INTERS已被ACL 2024主会议接收!
- 2024年2月:我们已发布数据集、指令模板、微调模型和评估脚本。
介绍
大型语言模型(LLMs)在各种自然语言处理任务中展现出了令人印象深刻的能力。尽管如此,它们在信息检索(IR)任务中的应用仍然具有挑战性,这是因为许多IR特定概念在自然语言中出现的频率较低。虽然基于提示的方法可以为LLMs提供任务描述,但它们往往无法促进对IR任务的全面理解和执行,从而限制了LLMs的适用性。为了解决这一差距,在本研究中,我们探索了指令微调来增强LLMs在IR任务中的熟练程度的潜力。我们引入了一个新的指令微调数据集INTERS,涵盖了三个基本IR类别中的20个任务:查询理解、文档理解和查询-文档关系理解。数据来源于43个不同的数据集,并配有手动编写的模板。我们的实证结果显示,INTERS显著提升了各种公开可用LLMs(如LLaMA、Mistral和Phi)在IR任务中的表现。此外,我们还进行了广泛的实验,分析了指令设计、模板多样性、少样本示例和指令数量对性能的影响。
任务与数据集
我们考虑了查询理解、文档理解和查询-文档理解类别下的任务。我们的数据集包含从43个数据集衍生出的20个任务。下图展示了我们使用的所有任务和数据集。
数据集构建
总体性能
零样本评估
评估脚本位于evaluation
目录下。
所需包
torch 2.0.0
transformers 4.36.2
numpy 1.26.3
tqdm 4.66.1
scikit-learn 1.4.0
rouge_score 0.1.2
nltk 3.8.1
accelerate 0.26.1
对于查询理解任务和文档理解任务(qu-du-tasks)
此评估脚本使用pytorch DDP进行文本生成。
- 下载测试数据并保存到
data/in-domain/zero_shot/
目录。目录结构如下:
qu-du-tasks
├── eval_sampling.py
├── inference_dataset.py
├── inference_qu_du.py
├── inference_tasks
│ ├── conversational_qa.py
│ ├── fact_verification.py
│ └── ...
└── data
└── in-domain
└── zero-shot
├── conversational_qa_coqa.zero_shot.test.jsonl
├── conversational_qa_quac.zero_shot.test.jsonl
├── fact_verification_climate_fever.zero_shot.test.jsonl
├── fact_verification_fever.zero_shot.test.jsonl
├── fact_verification_scifact.zero_shot.test.jsonl
└── ...
-
如果您选择将测试文件放在其他目录中,可以在
inference_tasks
目录下的每个任务文件中修改路径(在get_path()
函数中)。 -
运行评估:
TOKENIZERS_PARALLELISM=True python3 inference_qu_du.py \
--model_name_or_path 你的/模型/路径 \
--tokenizer_name 你的/分词器/路径 \
--setting in-domain \
--n_shots zero_shot
针对查询-文档关系理解任务(qdu-tasks)
- 下载测试数据并保存到
data/
目录。目录结构如下:
qdu-tasks
├── cqa.sh
├── eval_rank.py
├── postprocess_cqa.py
├── run_eval.sh
└── data
├── cqadupstack
│ ├── android
│ │ └── test.pt.key.do-not-overwrite.json
│ ├── english
│ │ └── test.pt.key.do-not-overwrite.json
│ └── ...
├── arguana.bm25.100.jsonl
├── climate_fever.bm25.100.jsonl
└── ...
- 对于cqadupstack以外的数据集,修改
run_eval.sh
中的路径,然后运行脚本
MODEL_PATH="你的/模型/路径"
TOKENIZER_PATH="你的/分词器/路径"
RESULT_PATH="你的/结果/路径"
EVAL_DATA_PATH="data"
-----------------------
bash run_eval.sh
- 对于cqadupstack数据集,修改
cqa.sh
中的路径,然后运行脚本
MODEL_PATH="你的/模型/路径"
TOKENIZER_PATH="你的/分词器/路径"
RESULT_PATH="你的/结果/路径"
-----------------------
bash cqa.sh
- 此脚本支持测试逐点式/成对式/列表式方法进行重排序。修改
run_eval.sh
或cqa.sh
中eval_rerank.py
的参数
# 逐点式:(默认)
--rerank_method pointwise
# 成对式:
--rerank_method pairwise
# 列表式:
--rerank_method listwise \
--listwise_window 5 \
--listwise_stride 5
引用
如果我们的论文对您的研究有帮助,请kindly引用:
@article{INTERS,
author = {Yutao Zhu and
Peitian Zhang and
Chenghao Zhang and
Yifei Chen and
Binyu Xie and
Zhicheng Dou and
Zheng Liu and
Ji{-}Rong Wen},
title = {{INTERS:} Unlocking the Power of Large Language Models in Search with
Instruction Tuning},
journal = {CoRR},
volume = {abs/2401.06532},
year = {2024},
url = {https://doi.org/10.48550/arXiv.2401.06532},
doi = {10.48550/ARXIV.2401.06532},
eprinttype = {arXiv},
eprint = {2401.06532}
}