【LLM问答】两阶段的对话式问答模型ChatQA思路和兼看两阶段的RAG知识问答引擎QAnything

news2024/11/28 10:53:11

一、ChatQA

1.1 微调

如下图,ChatQA微调包含两个阶段,Supervised Fine-tuningContext-Enhanced Instruction Tuning

1.1.1 阶段一:SFT(Supervised Fine-tuning)

这个阶段的目标是基于LLM,通过SFT,提高模型对话的能力,使其能够更好地遵循指令并进行对话。

  1. 数据集构建:为了进行有监督微调,作者们收集了128K个样本,这些样本来自于多个高质量的指令遵循和对话数据集。这些数据集包括:
    • Soda:一个社交对话数据集。
    • ELI5:包含详细答案的长形式问答数据集。
    • FLAN和链式思维数据集:用于训练模型生成连贯的思维链。
    • Self-Instruct和Unnatural Instructions:用于指令调整。
    • 私有众包对话数据集,以及两个公开的人工编写对话数据集:OpenAssistant和Dolly。
  2. 无法回答的案例:为了减少在无法回答的情况下产生的幻觉答案,在数据集中加入了无法回答的样本。这些样本是通过让标注者提供所有上下文位置给用户问题,然后删除相关文本来构建的。对于无法回答的问题,使用“对不起,我无法根据上下文找到答案”作为响应。
  3. 数据统一格式:为了微调,所有的SFT数据都被统一为对话格式。在数据中添加了一个“系统”角色来设置一般指令,指导LLM提供有礼貌和有帮助的答案。同时,添加了“用户”和“助手”角色来整合来自指令调整数据集的指令和响应对。
  4. 微调过程:使用统一的格式对LLM基础模型进行微调。这个过程旨在提高模型在遵循指令和生成对话方面的性能。

第一阶段LLM的输入输出

输入:格式模版如下

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
User: {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

输出:Assistant的最新回答。

小结:通过这个阶段的微调,模型能够更好地理解对话的上下文,并在对话中提供有帮助和准确的回答。这为后续的上下文增强指令调整阶段奠定了基础,使得模型能够在对话式问答任务中更好地利用上下文信息。

1.1.2 阶段二:上下文增强指令调整(Context-Enhanced Instruction Tuning)

该阶段旨在进一步的增强模型在对话式问答中对上下文的敏感性和处理检索增强生成的能力。这个阶段的训练数据集由上下文化单轮问答和对话式问答数据集混合而成,具体包括:

  1. Human Annotated Data
    • HumanAnnotatedConvQA数据集:这是一个人工注释的对话式问答数据集,包含7k个对话。这些对话是通过让标注者扮演好奇的用户提出问题(以及后续问题)和作为代理给出答案来构建的。每个文档都会生成一个多轮对话,平均每个对话有5个用户-代理回合。
  2. 合成数据生成(Synthetic Data Generation)
    • SyntheticConvQA数据集:这是一个通过GPT-3.5-turbo生成的中等大小的高质量合成数据集。这个数据集是通过从公共爬取(common crawl)中收集的7k篇文档构建的,每篇文档用于生成一个单轮对话式问答样本,总共产生了7k个多轮对话,平均每个对话有4.4个用户-代理回合。
  3. 训练混合(Training Blends)
    • 对话式问答数据集:HumanAnnotatedConvQA 或 SyntheticConvQA。
    • 单轮问答数据集:DROP、NarrativeQA、Quoref、ROPES、SQuAD1.1、SQuAD2.0、NewsQA、TAT-QA(了增强问答模型处理表格文档和算术计算的能力)。
    • 阶段一的SFT数据集:这些数据集在第二阶段的指令调整中仍然被使用,以保持模型的指令遵循能力。

第二阶段的输入输出

输入:格式模版

System: This is a chat between a user and an artificial intelligence assistant.
The assistant gives helpful, detailed, and polite answers to the user’s questions
based on the context. The assistant should also indicate when the answer cannot be
found in the context.
{Context for Latest Question}
User: {Instruction} + {Question 1}
Assistant: {Answer 1}
...
User: {Latest Question}
Assistant:

输出:与第一阶段一样,输出Assistant的最新回答。

小结:通过第二阶段的上下文增强指令调整,模型能够更好地理解和利用对话中的上下文信息,从而在对话式问答任务中提供更准确和相关的回答。这一阶段的训练特别强调了模型在处理检索增强生成任务时的能力,这对于对话式问答中处理长文档或需要检索的上下文尤为重要。

1.2 ChatQA(检索增强对话式问答(Retrieval for Multi-Turn QA))

在对话式问答中,当提供的文档内容过长,无法直接输入到大型语言模型(LLM)时,检索器(Retriever)变得尤为重要。RAG(检索器的作用是从文档中检索出与当前对话历史和用户问题相关的上下文片段。然后,这些相关的上下文片段被用作LLM的输入,以生成对话式问答的答案。)因此微调检索器,有助于提高其在对话式问答任务中的性能。

1.2.1 微调检索器(Fine-tuning Retriever)

为了构建高质量的微调数据集,作者们利用了对话式问答数据集(HumanAnnotatedConvQA或SyntheticConvQA)来构建对话式查询和上下文对。这些对话式查询和上下文对用于进一步微调一个单轮检索器,使其能够更好地处理对话式输入。

1.2.2 对话式查询重写(Conversational Query Rewriting)

使用查询重写器(Query Rewriter)根据对话历史重写当前问题。重写后的问题可以直接用作单轮查询检索器的输入,以检索相关上下文。然而,这种方法需要额外的计算时间来生成重写后的查询,并且可能还需要使用像GPT-3.5-turbo这样的强大模型,这可能会增加API成本。

1.2.3 对比(Comparisons)

表中发现与仅使用重写的query作为输入(Dragon + 重写(仅使用单个查询))相比,提供额外的对话历史(Dragon + 重写(带有对话历史))会使得平均分数显著下降。这是因为 Dragon 最初是在单轮查询上进行预训练的,因此当提供单轮重写的查询而不是多轮对话时,它自然会具有更好的泛化能力。而且重写的query已经包含了来自对话历史的足够信息。此外,我们观察到“Dragon + 微调”与“Dragon + 微调 + 重写”表现相当。换句话说,对于多轮微调方法,用重写的查询替换原始查询作为输入能够取得相当的结果。这是因为重写的查询对于模型来说并不会提供太多额外信息,因为对话历史已经提供,甚至可能会产生负面效果(例如,在 TopiOCQA 数据集上的结果),因为它使整个对话输入不够自然。说明了微调方法在使模型具备理解多轮上下文能力方面的有效性

二、QAnything

2.1 架构

在这里插入图片描述

知识库数据量大的场景下两阶段优势非常明显,如果只用一阶段embedding检索(传统RAG),随着数据量增大会出现检索退化的问题,如下图中绿线所示,二阶段rerank重排后能实现准确率稳定增长,即数据越多,效果越好
在这里插入图片描述

因此步骤很简单:

  1. 各种格式的文档通过各种解析工具(

    )进行解析,并向量化;

  2. 基于BCE向量表征模型的1阶段检索(embedding);

  3. 基于BCE向量表征模型的2阶段检索(rerank);

  4. LLM理解,输出答案

2.2 BCE向量表征模型

两阶段的检索都使用了BCE向量表征模型,其在两个阶段的性能都优于其他向量表征模型;

2.2.1 一阶段检索(embedding)

2.2.2 二阶段检索(rerank)

2.2.3 基于LlamaIndex的RAG评测(embedding and rerank)

在这里插入图片描述

总结

ChatQA:这篇文章的两阶段微调的ChatQA模型,对于对话式问答任务,特别是处理长文档和需要检索的上下文时对话时,能够达到或超过GPT-4的性能水平。

QAnything:介绍了基于微调的Qwen-7b,两阶段的RAG知识库问答引擎 QAnything,支撑任意格式的文档数据私有化进行知识问答。

参考文献

【1】ChatQA: Building GPT-4 Level Conversational QA Models,https://arxiv.org/pdf/2401.10225.pdf

【2】https://github.com/netease-youdao/BCEmbedding

【3】https://github.com/netease-youdao/QAnything/blob/master/README_zh.md

【4】QAnything:https://github.com/netease-youdao/QAnything/tree/master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1399233.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟歌姬学习:DiffSinger,让GitHub下载快的方法!

《三分钟上手DiffSinger》系列 ——基础篇https://www.bilibili.com/video/BV1ug4y1S7Dk/?spm_id_from333.337.search-card.all.click&vd_source124076d7d88eee393a1d8bf6fc787efa 下载DiffSinger 建议用edge浏览器还有steam,有时只是慢,但是还是…

Harmony Ble蓝牙App(四)描述符

Harmony Ble蓝牙App(四)描述符 前言正文一、优化二、描述① 概念② 描述提供者③ 显示描述符 三、源码 前言 上一篇中了解了特性和属性,同时显示设备蓝牙服务下的特性和属性,本文中就需要来使用这些特性和属性来完成一些功能。 正…

VS+QT编译环境中字符乱码问题详解

字符乱码问题详解 1 编码字符集与字符编码方式2 字符乱码原因3 字符乱码解决方案 在解释字符乱码问题之前,我们需要先理清一些基本概念 1 编码字符集与字符编码方式 编码字符集 编码字符集是所有字符以及对应代码值的集合。编码字符集中的每个字符都对应一个唯一的…

一步一步写线程之五线程池的模型之一领导者追随者模型

一、线程池的模型 在学习过相关的多线程知识后,从更抽象的角度来看待多线程解决问题的方向,其实仍然是典型的生产和消费者的模型。无论是数据计算、存储、分发和任务处理等都是通过多线程这种手段来解决生产者和消费者不匹配的情况。所以,得…

MySQL主从集群

MySQL主从集群 主从模式、集群模式,都是在一个项目中使用多个mysql节点进行存储和读取数据。 当单机模式部署,不满足安全性、高可用、高并发等需求的时候,就需要考虑主从模式或者集群模式部署。 什么是主从模式? 主从模式&…

commvault学习(5):在linux上安装cv客户端

我的环境: 服务器(同时装有CS、MA):windows server2008r2 客户端:两台centos7 1.为两台centos7配置静态ip 使得2者可以与服务器ping通 2.在两台centos7上预留出足够大的磁盘空间以存放安装文件 我是在/mnt下创建了…

十本你不容错过的Docker入门到精通书籍推荐

前言: 最近有许多小伙伴私信让我推荐几本关于Docker学习的书籍,今天花了一下午的时间在网上查阅了一些资料和结合自己平时工作中的一些学习参考资料书籍写下了这篇文章。注意以下书籍都是十分优秀的Docker学习书籍(因此排名不分先后&#xff…

tritonserver学习之三:tritonserver运行流程

tritonserver学习之一:triton使用流程 tritonserver学习之二:tritonserver编译 tritonserver学习之四:命令行解析 1、triton启动运行流程 triton功能设计全面,而且复杂,下面是triton(2.41.0)启动的整个流程&#x…

从函数角度看品牌网络推广:短期与长期的博弈

在数字营销的世界里,品牌网络推广无疑是一个复杂而多维度的领域。它不仅仅是一个简单的“投入-产出”关系,而是一个涉及到多种因素、时间和空间的动态过程。当我们尝试从函数的角度去解读品牌网络推广时,会发现它其实是一个不断变化的函数关系…

我在人工智能技术方面的发展规划

人工智能(AI)是当今科技领域最具前景和影响力的技术之一,它已经渗透到各行各业,为社会和经济发展带来了巨大的机遇和挑战。作为一名从事人工智能研究和开发的专业人士,我有必要制定一个合理的人工智能技术发展规划,以指导我的学习和工作,提高我的专业水平和竞争力,为人…

009 Linux_文件系统 | 软硬链接

前言 本文将会向你介绍文件系统与软硬链接 文章重点 本文将会先向你介绍文件是如何在磁盘上进行管理的,关于文件的管理将会从管理属性和管理内容两方面来谈,最后会向你介绍软硬链接的概念 文件在磁盘中的管理 首先,假设一个磁盘200GB&#…

softmax回实战

1.数据集 MNIST数据集 (LeCun et al., 1998) 是图像分类中广泛使用的数据集之一,但作为基准数据集过于简单。 我们将使用类似但更复杂的Fashion-MNIST数据集 (Xiao et al., 2017)。 import torch import torchvision from torch.utils import data from torchvisi…

25计算机考研408专业课复习计划

点击蓝字,关注我们 今天要分享的是25计算机考研408专业课复习计划。 以下内容供大家参考,大家要根据自己的复习情况进行适当调整。 统考与自命题 统考科目是指计算机学科专业基础综合(408),满分150分,试…

用MATLAB函数在图表中建立模型

本节介绍如何使用Stateflow图表创建模型,该图表调用两个MATLAB函数meanstats和stdevstats。meanstats计算平均值,stdevstats计算vals中值的标准偏差,并将它们分别输出到Stateflow数据平均值和stdev。 请遵循以下步骤: 1.使用以下…

医保移动支付加密解密请求工具封装【国密SM2SM4】

文章目录 医保移动支付加密解密请求工具封装一、项目背景二、使用方法三、接口调用四、源码介绍五、下载地址 医保移动支付加密解密请求工具封装 定点医药机构向地方移动支付中心发起费用明细上传、支付下单、医保退费等交易时需要发送密文,由于各大医疗机构厂商的开…

揭秘AI换脸技术:从原理到应用

随着人工智能技术的不断发展,AI换脸技术逐渐成为人们关注的焦点。这项神奇的技术能够将一张图像或视频中的人脸替换成另一张人脸,让人不禁惊叹科技的神奇。那么,AI换脸技术究竟是如何实现的呢?本文将带您深入了解AI换脸技术的原理…

python系列-输入输出关系运算符算术运算符

🌈个人主页: 会编程的果子君​💫个人格言:“成为自己未来的主人~” 目录 注释的语法 注释的规范 输入输出 通过控制台输出 通过控制台输入 运算符 算术运算符 关系运算符 注释的语法 python中有两种注释风格: 1.注释行:…

无人机打击激光器

激光器的应用非常广泛,涵盖了多个领域。以下是一些主要的激光器应用: 医疗领域:激光器在医疗行业中有着重要应用,比如用于激光手术(如眼科手术)、皮肤治疗、牙科治疗、肿瘤治疗等。 工业制造:在…

(菜鸟自学)初学脚本编程

(菜鸟自学)初学脚本编程 Bash脚本概述编写一个测试在线主机的脚本程序 Python脚本概述编写一个与Netcat功能类似的脚本程序 C语言脚本概述编写C语言脚本程序(Hello World) Bash脚本概述 Bash脚本是一种基于Bash(Bourn…

图片批量建码怎么用?每张图片快速生成二维码

当我们需要给每个人分别下发对应的个人证件类图片信息,比如制作工牌、荣誉展示或者负责人信息展示时,现在都开始使用二维码的方法来展示员工信息。那么如何快速将每个人员的信息图片分别制作成二维码图片呢,最简单的方法就是使用图片批量建码…