0
点赞
收藏
分享

微信扫一扫

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略


一、知识加工生成的实现策略

1、知识切片优化

文档片段过长会给知识检索造成很大影响,主要有两部分的问题:

1)索引混淆:核心关键词被湮没在大量的无效信息中,导致建立的索引,核心知识占的比重比较小,无论时语义匹配、分词匹配还是图谱检索,都很难精准命中关键数据,从而影响生成答案的质量;;

2)token过长导致语义会被截断:知识数据在embedding时,可能会因为token超长导致语义截断;知识检索结束后,知识片段越长,输入给大模型的信息条数就越少,导致大模型也无法获取足够的有价值的输入,从而影响生成答案的质量。

1.1 按固定字符切分

按固定字符拆分知识,通过设置冗余字符来降低句子截断的问题,使一个完整的句子要么在上文,要么在下文,这种方式能尽量避免在句子中间断开的问题。

这种实现方式成本最低,在业务起步阶段,可以先使用这种方式。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_大模型

1.2 按句子语义切分

按固定字符切,有时候会遇到句子含义联系比较紧密的片段被切分成了两条数据,导致数据质量比较差。可以通过语义理解小模型进行句子拆分,使拆分出来的知识片段语义更加完整。

2、索引优化

2.1 HyDE

原始的文档和用户问题一对一匹配,会存在匹配容错率低的问题,一旦知识一次没匹配上,那就无法被召回。

优化方案

处理后的知识数据,为了提高知识的覆盖范围,可针对知识数据预先用大模型生成一些有关联的假设性问题,当命中这些假设性问题时,也可搜索到相应的知识数据。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_ai_02

2.2 索引降噪

索引降噪主要根据业务特点,去除索引数据中的无效成分,突出其核心知识,降低噪音的干扰。针对QA-pair对和文章片段的知识,处理起来的方法也类似。

QA-pair对类型知识

这种数据一般会以Q作为索引列,与用户的问题组成QQ搜索模式,这样数据召回时匹配难度会低。如果使用原始的Q做索引,又会存在无效此干扰的问题,比如:

用户query

匹配到的query

How can I start to sell on Alibaba?

How can I register an account on Alibaba.com?

句子中,无效的相似成分超过60%,这就会对索引匹配造成很大的干扰。

优化方案

通过大模型泛化向量索引中的Q,突出核心关键词,并且把对应的Answer的主题利用大模型抽取,Q和A都突出关键词。

How can I register an account on Alibaba.com? --> register an account. + Answer主题。

突出核心主题,降低无效数据的干扰。

文章片段类知识

文章片段类知识,由于篇幅长,且在语义上与问题可能差异较大,导致无法很好的匹配。

优化方案

会通过HyDE生成假设性问题,然后组成QA-pair对的形式,然后再利用大模型抽取核心关键词,用来降噪。

2.3 多级索引

近似检索和传统数据库检索不同,近似检索通过聚类或HNSW建立索引后,在检索时,会有一定的近似误差,如果在大量的知识库中检索,会产生检索准确度和性能的问题,在大型数据库的情况下,一种有效的方法是创建两个索引——一个由摘要组成,另一个由文档块组成,并分两步搜索,首先通过摘要过滤掉相关文档,然后只在这个相关组内搜索。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_LLM_03

二、query改写的实现策略

直接使用原始query进行检索,会存在以下几个问题:

1)知识库内的数据无法直接回答,需要组合知识才能找到答案。
2)涉及细节比较多的问题时,大模型往往无法进行高质量的回答。

业务提出了RAG-Fusion和Step-Back Prompting的两种优化方案。

1、RAG-Fusion

RAG-Fusion可以认为是MultiQueryRetriever的进化版,RAG-Fusion首先根据原始question从不同角度生成多个版本的新question,用以提升question的质量;然后针对每个question进行向量检索,到此步为止都是MultiQueryRetriever的功能;与之不同的是,RAG-Fusion在喂给LLM生成答案之前增加了一个排序的步骤。

RAG-Fusion主要流程如下图所示:

  • 查询生成/改写: 使用 LLM 模型对用户的初始查询,进行改写生成多个查询。
  • 向量搜索: 对每个生成的查询进行基于向量的搜索,形成多路搜索召回。
  • 倒数排序融合: 应用倒数排名融合算法,根据文档在多个查询中的相关性重新排列文档。
  • 重排: 使用一些重排算法对结果进行重排。
  • 输出生成: 然后可以参考重新排列后的topK搜索结果,生成最终输出。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_LLM_04

排序包含两个动作,一是独立对每个question检索返回的内容根据相似度排序,确定每个返回chunk在各自候选集中的位置,相似度越高排名越靠前。二是对所有question返回的内容利用RRF(Reciprocal Rank Fusion)综合排序。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_人工智能_05

2、Step-Back Prompting

通过引入一个后退一步的问题,这个问题通常更容易回答,并且围绕一个更广泛的概念或原则,大型语言模型可以更有效地构建它们的推理。

Step-Back Prompting 过程典型的Step-Back Prompting过程主要包括两个步骤:

1)抽象:这是指大型语言模型(LLM)不会立即尝试回答原始问题。相反,它会提出一个关于更大的概念或规则的更一般性问题。这有助于它思考和查找事实。

2)推理:在得到一般问题的答案后,大型语言模型(LLM)使用这些信息来思考并回答原始问题。这被称为“抽象基础推理”。它利用来自更大观点的信息来对原始的、更难的问题给出一个好的答案。

示例

比如问:如果一辆汽车以100公里/小时的速度行驶,行驶200公里,需要多长时间?

此时大模型对数学计算可能会比较迷茫。

后退提示:给定速度和距离,计算时间的基本公式是什么?

输入:为了计算时间,我们使用以下公式:时间=距离/速度

使用公式,时间=200公里/100公里/小时=2小时。

3、用户query降噪

当用户问一个问题时,有些停用词是不起作用的,比如:How to register an account on Alibaba.com,在这个语境中,核心诉求是 register an account,至于How to在表达核心诉求时,意义没那么大,其次,当下沉Alibaba的外贸业务时,on Alibaba.com也变得没那么重要,因为Alibaba的外贸业务系统就是运行在Alibaba.com上,知识库中的知识自然也是Alibaba.com相关的。

可以针对用户问题,去除停用词,比如ES中维护了一份停用词库,可直接使用。如果解决方案中没有ES,也可自己维护停用词库,在nltk、stopwords-iso、Rank NL、Common Stop Words in Various Languages等开源库中维护了大量的停用词库,可根据需要取用。

三、数据召回的实现策略

1、向量召回

在NLP领域,向量召回一直处于无可替代的地位,把自然语言转换成低纬度向量,基于向量的相似度来评判语义的相似程度,这也是业界比较流行的做法。再结合上面提到的向量索引的降噪、假设性性问题以及对用户query的优化,一般都能取得比较不错的成绩。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_ai_06

但单纯的语义向量召回时,当文本向量化模型训练不够优时,向量召回的准确率会比较低,此时需要利用其他召回方式作为补充。

除了向量召回,常见的召回方式还有分词召回以及图谱召回。

2、分词召回

传统的倒排索引检索,基于BM25打分排序机制,从而找到从分词上比较相似的知识数据。结合上面提到的去除停用词策略,以达到比较精准的程度。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_AI大模型_07

3、图谱召回

知识图谱在知识生产和关系提取上有着独特的优势,他能基于现有的数据,根据其关系的抽象,产生新的知识。

比如现在有两条知识:

1)阿里巴巴在国内采用A公司的物流服务。
2)阿里巴巴与物流公司B达成合作,为客户提供更加优质、便捷的物流服务。

上面两条知识经过 NL2Cypher抽取:

alibaba-logisticsServices-A

alibaba-logisticsServices-B

基于这两条知识,可产生一条新知识:alibaba-logisticsServices-A & B

当用户问阿里巴巴平台支持哪些物流服务时,可直接找到 A & B。

4、多路召回

在NLP领域,单纯的语义向量召回时,当文本向量化模型训练不够优时,向量召回的准确率会比较低,此时需要利用其他召回作为补充。一般业务会采用多路召回的方式,来达到比较好的召回效果,多路召回的结果经过模型精排,最终筛选出优质结果。至于使用几种召回策略,根据业务而定。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_AI大模型_08

四、后置处理的实现策略

1、文档合并去重

首先多路召回可能都会召回同一个结果,针对这部分数据要去重,否则对大模型输入的token数是一种浪费。

其次,去重后的文档可以根据数据切分的血缘关系,做文档的合并。

比如检索到的D1、D2、D3都来自同一个父知识片段D,则使用D替换D1、D2、D3,以保证有比较好的知识语义完整性。

大模型LLM | RAG从入门到精通(四)RAG范式的优化实现策略_大模型_09

2、Rerank精排

每种召回策略的排序打分模型有差异,在最终统一的数据筛选层面,要有统一的评判标准。

目前,可用的重新排序模型并不多。一种选择是Cohere提供的在线模型,可以通过API访问。此外,还有一些开源模型,如bge-reranker-base和bge-reranker-large等,根据业务需要择优选择。

五、优化经验总结

RAG想做出来比较容易,但想做好还是比较难的,每个步骤都有可能对最终效果产生影响。

我们在RAG中也做了大量的探索,比如:

  • 知识切分方面,做了固定字符切分的效果验证,分析索引噪音点,利用大模型做了大量的降噪处理;
  • 在query改写方面,利用大模型做了更加明确的意图抽取,并对用户的query进行降噪的探索;
  • 在数据召回方面,embedding模型基于bge、voyage和cohere做了大量的测评,探索向量+分词的召回策略;
  • 在后置处理优化上,做了知识的去重以及rerank的探索等。

RAG的发展会越来越迅速,只要知识依赖和知识更新的问题没有得到解决,RAG就有其存在的价值和一席之地。



举报

相关推荐

0 条评论