RankGPT

RankGPT

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

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

RankGPT大语言模型信息检索重排序排序指令蒸馏Github开源项目

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) 结果表明任何类型的口罩,甚至简单的自制口罩,都可能有效。即使每个口罩的防护效果(这里称为"单口罩防护")很低,口罩使用似乎也能降低新患者数量'} ] }
<details> <summary>步骤示例</summary>
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)
</details>

滑动窗口策略

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

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

以下是使用窗口大小为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},
}

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多