【RAG 论文】SKR:Self-Knowledge 指导下的 RAG

论文:Self-Knowledge Guided Retrieval Augmentation for Large Language Models
⭐⭐⭐⭐
Tsinghua, arXiv:2310.05002

文章目录

    • 一、论文速读
    • 二、实现细节
      • 2.1 数据的收集
      • 2.2 引出 LLM 的 Self-Knowledge 的方法
        • 1)Direct Prompting
        • 2)In-Context Learning
        • 3)Training a Classifier
        • 4)KNN(k-nearest-neighbor)
    • 三、实验结果及分析

一、论文速读

传统 RAG 的思路是引入外部知识来增强 LLM 的生成,但是现在的研究发现,有时候引入检索到的文档反而会给 LLM 的生成产生消极影响。

为了更好利用 LLM 的内部参数化知识和外部世界知识,我们需要激发模型识别自己知道还是不知道的能力,也被称为 self-knowledge。因此,本工作提出了 SKR(Self-Knowledge guided Retrieval augmentation):当 LLM 面对一个 user query,先识别出 LLM 知不知道这个问题,如果知道的话就直接让 LLM 回复,如果不知道的话就调用 retriever 进行检索

二、实现细节

该工作在 QA 的场景下做的研究,首先收集了一批研究数据,然后提出了四个方法来激发 LLM 的 Self-Knowledge 的能力。

2.1 数据的收集

对于已有的 QA 数据集,我们希望把其中的所有 question 分成两类:LLM "知道"的和"不知道"的,即 D + D^+ D+ D − D^- D

给定一个 question q i q_i qi,我们先直接把它输入给 LLM 得到 answer α ( q i ) \alpha(q_i) α(qi),然后再把它调用 retriever 后以 RAG 的形式输入给 LLM 得到 answer α R ( q i ) \alpha^R(q_i) αR(qi),然后我们拿 ground-truth answer 来衡量两种方式得到的 LLM answer:

  • 如果 α ( q i ) \alpha(q_i) α(qi) α R ( q i ) \alpha^R(q_i) αR(qi) 都不正确,直接丢弃 question q i q_i qi
  • 如果 E [ α ( q i ) ] ≥ E [ α R ( q i ) ] E[\alpha(q_i)] \ge E[\alpha^R(q_i)] E[α(qi)]E[αR(qi)],那就把 question 归为 D + D^+ D+
  • 反之则归为 D − D^- D

其中 E [ ⋅ ] E[\cdot] E[] 是一个 evaluation metric,比如 accuracy。

2.2 引出 LLM 的 Self-Knowledge 的方法

论文提出了四种方法:direct prompting、in-context learning、classifier、KNN,下面分别介绍一下。

1)Direct Prompting

也就是设计 prompt template 然后填充 question 后,直接问 LLM 是否需要额外信息来辅助生成。prompt template 如下:

2)In-Context Learning

基于前面的 direct prompting,首先给 LLM 几个示例,教会它输出 Yes 或者 No,然后再问他是否需要更多信息来辅助增强,如下图所示:

3)Training a Classifier

使用之前的数据集,基于 BERT-base 训练一个二分类的 classifier,从而决定一个 question 要不要进行检索。

4)KNN(k-nearest-neighbor)

这里基于一个 motivation:如果两个 question 在语义嵌入空间中相近,那么 LLM 会倾向于对两个 question 展示出相似的 self-knowledge。

于是,可以使用一个 pre-trained fixed encoder 来对 question 做 KNN 从而推断出它的 label。

三、实验结果及分析

论文在 5 个 QA 数据集上进行了实验,最终,KNN 的方法在 5 个数据集上平均表现最好,而 direct prompting 的方法则表现较差。

论文还发现,无论是内部知识还是外部知识,都存在自己的限制:

  • 像 CoT 这样利用 LLM 内部知识的方法,并不总是能有效提升效果
  • 检索文档这样的利用外部知识的方法,也不总是有用的,有时甚至会让模型表现更差

论文还做了如下的分析:

  • 不同 template 的 self-knowledge 影响:发现所有设计的模板,都可以让 LLM 表达出自己的响应。论文发现,LLM 对于自己认为可以回答的问题,准确率可以达到 70%~73%,这也表明仍有 30% 的问题,模型是不知道自己“不知道”的。
  • 不同数据集的 self-knowledge 影响:发现不同的方法在不同的数据集上会有一定的差距,这可能与数据集的问题有关。
  • 训练数据大小的影响:随着训练数据的增加,性能逐渐提高,这说明从训练数据中收集的 self-knowledge 是有价值的。
  • 不同知识源的影响:整体来看,Wikipedia 作为外部知识源可以让 LLM 表现更好。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在uni-app开发的小程序中引入阿里的多色图标

uniapp不支持阿里多色图标,需要使用工具iconfont-tools进行处理 1.首先 在阿里图标库将 需要的图标添加到项目中 并下载压缩包,取出iconfont.js文件 2.安装iconfont-tools,安装完成会显示出安装到了电脑的那个目录 3,进入目录就会看到下面的…

60、郑州大学附属肿瘤医院 :用于预测胃癌患者术后生存的深度学习模型的开发和验证[同学,我们的人生应当是旷野]

馒头老师要说的话: 我近期看了一下北京的脑机公司,大概是我之前对这一行业太过于乐观,北京的BCI公司和研究所,比上海、深圳、杭州甚至是重庆都要少,门槛也要高很多。也有我自己的原因,有时站的太高&#x…

【智能算法】PID搜索算法(PSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2023年,Y Gao受到PID控制理论启发,提出了PID搜索算法(PID-based Search Algorithm, PSA)。 2.算法原理 2.1算法思想 PID算法是控制领域的…

16_Scala面向对象编程_函数

文章目录 1.声明Scala函数2.访问伴生对象3.空对象直接用的方法4.构造对象--通过object获取单例对象--直接new--scala独有apply()方式--scala有参构造--scala构造方法两大类使用辅构造如下上述代码主构造为辅助构造方法甚至可以多个多个辅助构造形参内容不能重不使用辅助构造和使…

数据结构——链表专题1

文章目录 一、移除链表元素二、反转链表三、合并两个有序链表四、链表的中间节点五、环形链表的约瑟夫问题六、分割链表 一、移除链表元素 原题链接:移除链表元素 一个解法是遍历原链表,将与val相等的结点抛弃,链接后一个结点 另一个解法是…

2010-2022年上市公司彭博ESG披露评分、分项得分数据

2010-2022年上市公司彭博ESG披露评分、分项得分数据 1、时间:2010-2022年 2、来源:Bloomberg ESG 指数 3、指标:股票代码、股票简称、年份、ESG披露评分、环境披露评分、社会信息披露评分、治理披露评分 4、范围:上市公司 5、…

详解xml-java语言

1.XML在线学习手册 XML 教程 2.XML可以做什么 1.给两个程序之间进行数据通信。现在用的最多的是JSON。 2.给服务器做配置文件。 3.存储复杂的数据关系。 4.还可以充当小型的数据库。 3.书写格式 <?xml version"1.0" encoding"UTF-8" ?> <…

Ansible 自动化运维工具 - 了解和模块应用

目录 一. Ansible 的相关知识 1.1 Ansible 工具的简介 1.2 Ansible的四大组件 1.3 运维自动化工具 1.4 Ansible 和其它自动化运维工具对比 1.5 Ansible 的优缺点 二. Ansible 环境安装部署 2.1 管理端安装 ansible 2.2 配置主机清单 三. ansible 命令行模块 3.1 comm…

JavaScript中Math函数与舍入

立方根 console.log(Math.sqrt(25)); //数学方式25平方根 console.log(25 ** (1 / 2)); //25的0.5次方 console.log(8 ** (1 / 3)); //8的1/3次方计算最大最小值 console.log(Math.max(1, 5, 88, 22, 132)); //返回最大值 console.log(Math.max(1, 5, 88, 22, 132)); //…

[Flutter]创建一个私有包并使用

在Flutter中创建一个自己的私有组件&#xff08;通常称为包或库&#xff09;&#xff0c;并通过Dart的包管理工具pub进行使用。 一、创建一个新的Flutter包 1.使用命令行创建 使用Flutter命令行工具来创建一个新的包&#xff1a; $ flutter create --templatepackage my_pri…

为什么很多人不推荐你用JWT?

为什么很多人不推荐你用JWT? 如果你经常看一些网上的带你做项目的教程&#xff0c;你就会发现 有很多的项目都用到了JWT。那么他到底安全吗&#xff1f;为什么那么多人不推荐你去使用。这个文章将会从全方面的带你了解JWT 以及他的优缺点。 什么是JWT? 这个是他的官网JSON…

React + 项目(从基础到实战) -- 第11期

目标 问卷编辑器的开发 设计UI - 拆分布局 水平垂直居中 画布 y方向滚动 自定义问卷组件 后端 返回组件数据 //获取单个问卷信息{url: /api/question/:id,method: get,response: () > {return {errno: 0,data: {id: Random.id(),title: Random.ctitle(),componentList:[//…