语言:
- 英文
标签:
- 龙模型
- 检索器
- 对话系统
- 多轮对话
- 会话查询
许可证:
- 其他
模型描述
我们推出Dragon-multiturn,这是一款专为对话式问答场景设计的检索器。它能处理将会话历史与当前查询相结合的对话式查询。该模型基于Dragon检索器构建,详细技术细节请参阅论文。请注意,Dragon-multiturn是由查询编码器和上下文编码器组成的双编码器架构。本仓库仅包含用于获取查询嵌入的查询编码器部分,您还需配合上下文编码器获取上下文嵌入。查询编码器与上下文编码器共享相同的分词器。
相关资源
Llama3-ChatQA-1.5-8B Llama3-ChatQA-1.5-70B 评估数据 训练数据 项目网站 论文
基准测试结果
|
平均表现 |
Doc2Dial |
QuAC |
QReCC |
TopiOCQA |
INSCIT |
top-1 |
top-5 |
top-1 |
top-5 |
top-1 |
top-5 |
top-1 |
top-5 |
top-5* |
top-20* |
top-5* |
top-20* |
Dragon |
46.3 |
73.1 |
43.3 |
75.6 |
56.8 |
82.9 |
46.2 |
82.0 |
57.7 |
78.8 |
27.5 |
46.2 |
Dragon-multiturn |
53.0 |
81.2 |
48.6 |
83.5 |
54.8 |
83.2 |
49.6 |
86.7 |
64.5 |
85.2 |
47.4 |
67.1 |
五个多轮问答数据集(Doc2Dial、QuAC、QReCC、TopiOCQA和INSCIT)的检索结果,展示平均top-1和top-5召回率。*由于TopiOCQA和INSCIT数据集的平均上下文长度较短,我们报告top-5和top-20以近似匹配其他数据集中top-1和top-5对应的上下文长度。
使用方法
import torch
from transformers import AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained('nvidia/dragon-multiturn-query-encoder')
query_encoder = AutoModel.from_pretrained('nvidia/dragon-multiturn-query-encoder')
context_encoder = AutoModel.from_pretrained('nvidia/dragon-multiturn-context-encoder')
query = [
{"role": "user", "content": "我需要为我的遗属规划社会保障福利。"},
{"role": "agent", "content": "您目前是在为未来做规划吗?"},
{"role": "user", "content": "是的,我正在规划。"}
]
contexts = [
"福利规划师:遗属福利 | 为您的遗属做规划\n在规划未来时,您需要考虑如果您现在去世,家人将需要什么。如果您通过工作积累了足够的社会保障积分,社会保障可以为您的家人提供帮助。每年最多可获得四个积分。例如在2019年,每1,360美元的工资或自营收入可获得一个积分。当您赚取5,440美元时,您就获得了该年度的四个积分。为遗属提供福利所需的积分数量取决于您去世时的年龄。任何人获得社会保障福利最多需要40个积分(相当于10年工作)。但是,年龄越小,其家庭成员获得遗属福利所需的积分就越少。即使您没有达到要求的积分数量,您的子女和照顾子女的配偶也可以获得福利。只要您在去世前三年内有一年半的工作积分(6个积分),他们就能获得福利。\n关于寡妇或鳏夫\n目前约有五百万寡妇和鳏夫根据已故配偶的收入记录领取每月社会保障福利。",
"福利规划师:退休\n其他注意事项\n何时开始领取福利最合适?答案是没有适用于所有人的\"最佳年龄\",最终这是您的选择。您应根据个人和家庭情况做出明智决定。根据开始领取福利时的年龄,您的月福利金额可能会有很大差异。如果您决定在以下时间开始领取福利:在达到完全退休年龄之前,您的福利金额会较小,但领取时间更长;在达到或超过完全退休年龄时,您将获得更高的月福利,但领取时间更短。首次领取福利时确定的金额将作为您余生领取福利的基础。在做决定时,您可能需要考虑以下因素:如果您计划继续工作,在62岁至完全退休年龄之间,每年收入有一定限制,超出限制可能会影响您的全部福利。根据您的福利金额和年收入,您可能需要放弃部分福利。"
]
formatted_query = '\n'.join([turn['role'] + ": " + turn['content'] for turn in query]).strip()
query_input = tokenizer(formatted_query, return_tensors='pt')
ctx_input = tokenizer(contexts, padding=True, truncation=True, max_length=512, return_tensors='pt')
query_emb = query_encoder(**query_input).last_hidden_state[:, 0, :]
ctx_emb = context_encoder(**ctx_input).last_hidden_state[:, 0, :]
similarities = query_emb.matmul(ctx_emb.transpose(0, 1))
ranked_results = torch.argsort(similarities, dim=-1, descending=True)
多轮问答检索基准评估
(最新更新!) 我们在五个数据集上评估多轮问答检索性能:Doc2Dial、QuAC、QReCC、TopiOCQA和INSCIT,这些数据集可在ChatRAG Bench获取。评估脚本详见此处。
许可证
Dragon-multiturn基于Dragon构建,用户需遵守原始Dragon模型的许可条款。同时,Dragon-multiturn也受OpenAI使用条款约束。
联系方式
刘子涵 (zihanl@nvidia.com), 魏平 (wping@nvidia.com)
引用文献
@article{liu2024chatqa,
title={ChatQA:对话式问答与RAG超越GPT-4},
author={刘子涵 and 魏平 and 罗伊·拉杰希 and 徐鹏 and 李昌奎 and 穆罕默德·舒艾比 and 布莱恩·卡坦扎罗},
journal={arXiv预印本 arXiv:2401.10225},
year={2024}}