Project Icon

RankGPT

利用大语言模型优化信息检索排序

RankGPT项目研究如何利用ChatGPT等大语言模型改进信息检索排序。该项目提出指令排列生成技术和滑动窗口策略,解决了长文本排序问题。实验表明,这种方法在多个基准测试中性能显著。项目还开发了模型蒸馏技术,将大语言模型能力迁移到小型模型,提高了实用性。

RankGPT:作为重排序代理的大型语言模型

通用标志 许可证

论文"ChatGPT在搜索方面表现如何?调查大型语言模型作为重排序代理"的代码

本项目旨在探索像ChatGPT和GPT-4这样的生成式大型语言模型在信息检索(IR)中的相关性排序应用。

新闻

  • [2023.12.10] 我们的RankGPT论文荣获EMNLP2023杰出论文奖!🎉🎉🎉
  • [2023.11.06] 引入指令蒸馏:简化复杂的排序指令以提高大型语言模型的效率。仅使用开源大型语言模型就达到了最先进的排序性能!
  • [2023.10.08] 我们的论文已被接受在EMNLP 2023主会议上展示。查看更新版本:https://arxiv.org/pdf/2304.09542.pdf!
  • [2023.08.05] 现在通过LiteLLM支持Azure、Claude、Cohere、Llama2!
  • [2023.07.11] 发布新的测试集NovelEval,包含未被最新大型语言模型(如GPT-4)污染的新颖搜索问题和段落。详情见NovelEval
  • [2023.04.23]这里分享10万个ChatGPT在MS MARCO训练集上预测的排列。
  • [2023.04.19] 我们的论文现已发布:https://arxiv.org/abs/2304.09542

快速示例

以下定义了一个查询和三个候选段落:

item = {
    'query': '口罩对预防COVID-19传播有多大影响?',
    'hits': [
        {'content': '标题:COVID-19大流行中普及戴口罩刻不容缓:SEIR和基于代理的模型、实证验证、政策建议 内容:我们提出两个模型预测普及戴口罩对SARS-CoV-2病毒传播的影响——一个采用随机动态网络的SEIR(易感-暴露-感染-康复)分区模型方法,另一个采用个体ABM(基于代理建模)蒙特卡罗模拟——表明(1)当至少80%的人口戴口罩时,(几乎)普及戴口罩有显著影响,而当只有50%或更少人口戴口罩时,影响微乎其微,(2)当在地区疫情爆发的第50天前采取普及戴口罩措施时,影响显著,而晚期采取则影响微小。即使是过滤率较低的自制口罩也存在这些效果。为验证这些理论模型,我们将其预测与我们收集的新实证数据集进行比较'},
        {'content': '标题:大众戴口罩可能减轻COVID-19疫情 内容:使用两种最先进的基于网络的软件,其中一种针对SARS-CoV-2病毒进行了校准,通过计算机模拟估计了大众戴口罩对COVID-19疫情的影响。所解决的问题如下:1. 大众戴口罩能否限制SARS-CoV-2在一个国家的传播?2. 存在哪些类型的口罩,对抗COVID-19需要多么精良的口罩才有效?3. 口罩是否必须在疫情早期使用?4. 简要讨论口罩及一些可能的未来研究问题。结果如下:(1)结果表明,任何类型的口罩,即使是简单的自制口罩,都可能有效。即使每个口罩的防护效果(这里称为"单个口罩防护")很低,戴口罩似乎也能降低新患者数量'},
        {'content': '标题:戴还是不戴:模拟大众使用口罩遏制COVID-19大流行的潜力 内容:大众使用口罩遏制COVID-19大流行的传播存在争议,尽管越来越多地被推荐,但这种干预措施的潜力尚未得到充分理解。我们开发了一个分区模型,用于评估无症状公众广泛使用口罩的社区影响,其中一部分人可能是无症状感染者。使用与美国纽约州和华盛顿州COVID-19动态相关的数据进行模型模拟表明,即使是相对低效的口罩,如果得到广泛采用,也可能显著减少COVID-19的社区传播,并降低住院高峰和死亡人数。此外,口罩使用降低有效传播率的程度与口罩效果(作为阻止潜在传染接触的比例)和覆盖率(作为'}
    ]
}

我们可以使用ChatGPT通过指令排列生成来重新排序段落:

from rank_gpt import permutation_pipeline
new_item = permutation_pipeline(item, rank_start=0, rank_end=3, model_name='gpt-3.5-turbo', api_key='您的OPENAI密钥!')
print(new_item)

我们得到以下结果:

{
    'query': '口罩对预防新冠病毒传播的影响有多大?',
    'hits': [
        {'content': '标题:新冠疫情中普及戴口罩的紧迫性:SEIR和基于代理的模型、实证验证、政策建议 内容:我们提出两个预测普及戴口罩对SARS-CoV-2病毒传播影响的新冠疫情模型——一个采用随机动态网络基于SEIR(易感-暴露-感染-康复)的分区模型,另一个采用个体ABM(基于代理建模)蒙特卡罗模拟——表明(1)当至少80%的人口戴口罩时,(接近)普及戴口罩有显著影响,而当只有50%或更少的人口戴口罩时,影响微乎其微,(2)在地区疫情爆发的第50天前采取普及戴口罩时影响显著,而晚期采取则影响微小。即使是过滤率较低的自制口罩,这些效果也成立。为验证这些理论模型,我们将其预测与我们收集的新实证数据集进行比较'},
        {'content': '标题:戴还是不戴:为遏制新冠疫情普及公众戴口罩的潜力建模 内容:公众普及戴口罩以限制新冠疫情传播虽然存在争议,但越来越多地被推荐,这种干预措施的潜力尚不清楚。我们开发了一个分区模型,用于评估普通无症状公众戴口罩的社区范围影响,其中一部分可能是无症状感染者。使用与美国纽约州和华盛顿州新冠动态相关的数据进行模型模拟表明,即使是相对低效的口罩,如果得到广泛采用,也可能显著减少新冠病毒在社区的传播,并降低住院和死亡高峰。此外,口罩使用几乎与口罩效果(作为阻断潜在传染接触的比例)和覆盖率(作为'},
        {'content': '标题:普及公众戴口罩可能会减轻新冠疫情 内容:使用两种独立的最先进网络软件,其中一种针对SARS-CoV-2病毒校准,通过计算机模拟估算了普及公众戴口罩对新冠疫情的影响。解决的问题包括:1. 普及公众戴口罩能否限制SARS-CoV-2在一个国家的传播?2. 存在哪些类型的口罩,口罩需要多复杂才能对抗新冠病毒有效?3. 口罩是否需要在疫情早期使用?4. 简要讨论口罩及一些关于口罩和SARS-CoV-2的可能未来研究问题。结果如下:(1) 结果表明任何类型的口罩,甚至简单的自制口罩,都可能有效。即使每个口罩的防护效果(这里称为"单口罩防护")很低,口罩使用似乎也能降低新患者数量'}
    ]
}
步骤示例
from rank_gpt import create_permutation_instruction, run_llm, receive_permutation

# (1) 创建排列生成指令
messages = create_permutation_instruction(item=item, rank_start=0, rank_end=3, model_name='gpt-3.5-turbo')
# (2) 获取ChatGPT预测的排列
permutation = run_llm(messages, api_key="你的OPENAI密钥!", model_name='gpt-3.5-turbo')
# (3) 使用排列重新排序段落
item = receive_permutation(item, permutation, rank_start=0, rank_end=3)

滑动窗口策略

我们引入了一种用于指令排列生成的滑动窗口策略,使大语言模型能够对超过其最大令牌限制的段落进行排序。

其思想是使用滑动窗口从后向前进行排序,每次只对窗口内的段落进行重新排序。

以下是使用窗口大小为2和步长为1重新排序3个段落的示例:

from rank_gpt import sliding_windows
api_key = "你的OPENAI密钥"
new_item = sliding_windows(item, rank_start=0, rank_end=3, window_size=2, step=1, model_name='gpt-3.5-turbo', api_key=api_key)
print(new_item)

基准测试评估

我们使用pyserini为每个查询检索100个段落,并使用指令排列生成对它们进行重新排序。

TREC-DL19评估示例:

from pyserini.search import LuceneSearcher, get_topics, get_qrels
from rank_gpt import run_retriever, sliding_windows
import tempfile
openai_key = None  # 你的openai密钥

# 使用pyserini BM25检索段落。
searcher = LuceneSearcher.from_prebuilt_index('msmarco-v1-passage')
topics = get_topics('dl19-passage')
qrels = get_qrels('dl19-passage')
rank_results = run_retriever(topics, searcher, qrels, k=100)

# 运行滑动窗口排列生成
new_results = []
for item in tqdm(rank_results):
    new_item = sliding_windows(item, rank_start=0, rank_end=100, window_size=20, step=10, model_name='gpt-3.5-turbo', api_key=openai_key)
    new_results.append(new_item)

# 评估nDCG@10
from trec_eval import EvalFunction
temp_file = tempfile.NamedTemporaryFile(delete=False).name
EvalFunction.write_file(new_results, temp_file)
EvalFunction.main('dl19-passage', temp_file)

运行所有基准测试的评估

python run_evaluation.py

以下是我们在TRECBEIRMr. TyDi上进行初步实验的结果(平均nDCG@10)。

基准测试结果

训练专业模型

下载数据和模型

文件说明链接
marco-train-10k.jsonl从MS MARCO中抽样的10K个查询Google云端硬盘
marco-train-10k-gpt3.5.jsonChatGPT预测的排列组合Google云端硬盘
deberta-10k-rank_net使用RankNet损失函数训练的专业Deberta模型Google云端硬盘
marco-train-100k.jsonl来自MS MARCO的100K个查询Google云端硬盘
marco-train-100k-gpt3.5.jsonChatGPT对100K个查询的排列组合Google云端硬盘

将大语言模型蒸馏为小型专业模型

python specialization.py \
--model microsoft/deberta-v3-base \
--loss rank_net \
--data data/marco-train-10k.jsonl \
--permutation marco-train-10k-gpt3.5.json \
--save_path out/deberta-10k-rank_net \
--do_train true \
--do_eval true

或者使用accelerate在多个GPU上运行:

accelerate launch --num_processes 4 specialization.py \
--model microsoft/deberta-v3-base \
--loss rank_net \
--data data/marco-train-10k.jsonl \
--permutation marco-train-10k-gpt3.5.json \
--save_path out/deberta-10k-rank_net \
--do_train true \
--do_eval true

在基准测试上评估蒸馏模型

python specialization.py \
--model out/deberta-10k-rank_net \
--do_train false \
--do_eval true

下图显示了不同模型大小和训练查询数量的蒸馏专业模型的结果。

专业化结果

引用

@article{Sun2023IsCG,
  title={Is ChatGPT Good at Search? Investigating Large Language Models as Re-Ranking Agent},
  author={Weiwei Sun and Lingyong Yan and Xinyu Ma and Pengjie Ren and Dawei Yin and Zhaochun Ren},
  journal={ArXiv},
  year={2023},
  volume={abs/2304.09542}
}
@article{Sun2023InstructionDM,
  title={Instruction Distillation Makes Large Language Models Efficient Zero-shot Rankers},
  author={Weiwei Sun and Zheng Chen and Xinyu Ma and Lingyong Yan and Shuaiqiang Wang and Pengjie Ren and Zhumin Chen and Dawei Yin and Zhaochun Ren},
  journal={ArXiv},
  year={2023},
  volume={abs/2311.01555},
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号