大模型外挂知识库-RAG

大模型为何需要外挂知识?

大模型(LLM, large language model)在实际使用时,存在以下几点缺陷:
1、领域信息不足
虽然 LLM 仅基于公开数据集进行训练,但这也意味着它缺乏领域特定或专有等非公开的信息。这可能导致在某些情况下, LLM 无法提供更准确或更全面的回答。

2、有可能产生误导
尽管 LLM 尽力根据已有的数据提供信息和答案,但在超出其范围的情况下,它可能会给出不正确或是虚构的信息。这是因为 LLM 无法直接获取新的信息或与实时数据同步。

3、无法获取实时信息
由于 LLM 的训练成本非常高,它无法实时更新其知识库。因此,LLM 可能无法提供最新的信息或跟上快速变化的情况。

4、预训练数据不可更改
LLM 使用的预训练数据可能包含错误或过时的信息,并且无法进行更正或删除。这意味着 LLM 可能会基于不准确或过时的数据进行回答。

5、缺乏长期记忆
LLM 设计的目标是根据输入的数据给出准确的回答,但它没有真正的长期记忆能力。这意味着 LLM 可能在处理复杂的问题或需要上下文理解的情况下表现不佳。

大模型如何注入新知识?

为更好满足用户问答需求,大模型需不断注入新知识。大模型注入新知识有3种方式,其中向量数据库的方式性价比最高。

1.微调Fine-tuning

Fine-tuning 就是在大模型的基础上投喂自己的私有数据,从而生成一个新的模型。然后使用新的模型就可以使用到投喂的私有数据。它确实可以解决领域信息不足的问题,但是他的缺点也非常多。

  1. 需要大量标注数据: Fine-tuning 需要大量标注的数据才能在特定任务上取得好的效果。如果标注数据有限,可能会导致性能下降。
  2. 准确性难以保证:Transformer 本质上是基于“单词接龙”,无法基于领域私有数据进行准确输出。
  3. 修改困难:如果想对 LLM 中的数据是不能直接修改的,只能重新训练。就像一个人已经形成习惯了再去修改是很难的。

2. 外挂向量数据库

把私有数据进行切分,Embedding转成向量,存入向量库中。这样就可以通过向量搜索给大模型加上私有数据了。这种方式有以下优势:

  1. 利用向量数据库为大模型建立记忆,及时更新:导入到向量库中的数据是可以随意增删改的,相比微调灵活性高狠多。
  2. 结合实时数据源,确保信息的时效性:可以定期的导入增量数据,从而提高数据时效性。
  3. 当然也可以接入联网搜索API(google, bing 等等),那这就是另一个话题了。
  4. 存储超长上下文:使用向量库就可以支持超大上下文(一本书,文献,课程等)的导入和读取。
  5. 增加更多的上下文信息:通过增加向量检索结果的 context 条数以降低误导的风险

3. 提示词工程

比如使用如下提示词,让 LLM 只从我们提供的信息中查找,不会自己随意发挥。但模型支持的输入长度是很有限的,比如chatgpt支持4000长度的输入。

"""
已知信息:
{context} 

根据上述已知信息,简洁和专业的来回答用户的问题。如果无法从中得到答案,请说 “根据已知信息无法回答该问题” 或 “没有提供足够的相关信息”,不允许在答案中添加编造成分,答案请使用中文。 
问题是:{question}
"""

ES检索数据库

ES等普通检索数据库基于词元和倒排索引,建立在准确的搜索内容和检索语句上。他们往往通过各种方式对文档进行分词(analyze),通过诸如BKD tree等数据结构,将拆解出来的词元(token)进行倒排索引,在检索时也会对检索语句进行同样的分词处理,通过相同词元的匹配进行召回,再通过文本相关性的算法(如TF/IDF、BM25等)对结果进行打分排序,最终返回结果。

这种检索有较高的查询速度,但只能通过词元的精确匹配做召回,且无法捕获语义相似性。

Elasticsearch构建于Lucene之上:Elasticsearch实际上是一个分布式的、实时的搜索和分析引擎,它构建在Apache Lucene搜索引擎库的基础上。Lucene提供了全文搜索和索引功能,而Elasticsearch在此基础上构建了更多功能,如分布式性能、实时数据索引、聚合分析、RESTful API等。

倒排索引:是一个类似 hashmap 的数据结构,它的 key 是每个词元,而 value 是一个包含这个词元的所有文档的 id 列表(也可能是 hashset、链表等结构),这样的数据结构的好处在于对于一个词元,可以用接近 O(1) 的代价来找到包含它的文章。有时倒排索引中也会包含词元在文档中的位置信息,这是为了能在搜索时,在考虑了 query 中的词元信息之外,也把词元的顺序也一并考虑进去。
在这里插入图片描述

向量数据库

向量库是一个用于存储向量数据的数据库。它可以将文本、图像或其他类型的数据转换成向量形式,并将这些向量存储在数据库中。向量库的主要目的是支持向量检索,即根据查询向量的相似性,在数据库中找到最相似的向量。

向量数据

通过使用词嵌入(Embedding),可以将每个单词映射到一个连续的向量空间中,使得具有相似语义的单词在向量空间中更加接近。Embedding技术的具体实现方法有很多种,我们现在主要是用bert类的方法。

通过使用 Embedding 接口,我们将输入的文字转换成了一个浮点数数组的多维向量表示。这个多维向量表示了输入文字的语义信息,并且可以用于各种自然语言处理任务,如文本分类、信息检索和机器翻译等。使用 Embedding 接口可以帮助我们更好地理解和处理文字数据,提高我们的文本处理效果。

 "input": "The food was delicious and the waiter..."
 "model": "text-embedding-ada-002"
 "embedding": [
        0.0023064255,
        -0.009327292,
        .... (1536 floats total for ada-002)
        -0.0028842222,
      ],

向量检索

当搜索一个词或短语时,通过计算你的搜索词与数据库里每个项目的向量相似度,返回最相似的结果。与传统的分词搜索相比,向量检索有以下优点:

  1. 更好的理解语义:向量检索能够更好地理解词语或句子的意思,因为它不仅仅是基于关键词匹配。
  2. 处理同义词:它可以识别不同词语之间的相似性,比如“手机”和“移动电话”。
  3. 跨语言搜索:向量检索可以更容易地进行不同语言之间的搜索。

简单来说,向量检索可以通过语义进行搜索,不像传统搜索需要关键词完全匹配,更像跟一个真实的人在对话。

大模型+向量数据库问答流程

在这里插入图片描述

RAG检索增强生成

基座大模型使用大量公开数据训练(万亿token起步),然而在垂类领域,要么缺少该垂类的数据样本,要么数据样本没组织好需要Prompt工程才能正确输出,要么数据陈旧,出现答案错误。

面对此类问题,研究者提出了知识库的概念,简而言之,由大模型组织语言,由知识库提供内容。该方案也称为RAG(Retrieval Augmented Generation, 检索增强生成),即 LLM 在回答问题或生成文本时,先会从大量文档中检索出相关的信息,然后基于这些信息生成回答或文本,从而提高预测质量。RAG 方法使得开发者不必为每一个特定的任务重新训练整个大模型,只需要外挂上知识库,即可为模型提供额外的信息输入,提高其回答的准确性。

RAG实例-QAnything(网易开源)

网易开源了自研的 RAG 引擎 QAnything。该引擎允许用户上传 PDF、图片、Word、Excel、PowerPoint 等多种格式的文档,并实现类似于 ChatGPT 的互动问答功能,其中每个答案都能精确追溯到相应的文档段落来源。QAnything 支持纯本地部署,上传文档数量无上限,问答准确率高。

QAnything 整个架构(如下图所示)包括了模型和系统等所有必要的模块。模型方面包括 OCR 解析、Embedding/rerank,以及大模型。系统方面包括向量数据库、MySQL 数据库、前端、后端等必要的模块。整个引擎的功能完整,用户可以直接下载,不需要再搭配其他的模块即可使用。系统可扩展性也非常好,只要硬盘内存足够,就可以一直建库,支持无上限的文档。
在这里插入图片描述

参考链接

https://mp.weixin.qq.com/s/Onn5AiwZBenvPHxIyYoIXg
https://mp.weixin.qq.com/s/dM-F5sdLrG9mFKjWltH-sw
https://mp.weixin.qq.com/s/yp4iZhRrF2Wj5wCkK9RXzA
https://mp.weixin.qq.com/s/tfharL4O1559qceL93aUIA
一次搞懂 Elasticsearch 数据库(万字总结:https://mp.weixin.qq.com/s/3V7T7vC9KOLXVQZWmDLBDw
Elasticsearch:普通检索和向量检索的异同?:https://cloud.tencent.com/developer/article/1941250

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值