Rag检索与排序核心算法

📅 2026/7/30 21:55:52 👁️ 阅读次数 📝 编程学习
Rag检索与排序核心算法

01多轮Query改写

多轮Query改写

怎么做多轮query改写,用户提问之后,结合大模型和思维链进行多轮query改写,生成改写的query。分别用原始的query和改写query分别进行检索,混合检索,最后把结果取并集,进行融合排序,这两个排序都是分别针对两个不同的query进行排序,排完之后再融合在一起,最后合并在一起给大模型进行回答。

大模型回答也有技巧,依靠大模型多轮问答能力,使用用户原始 query,不是改写query,用户原始query加历史聊天记录,用户改写之后有可能改写的不对,就算改写错了,相当于检索内容也会有一些错误,相当于用户的query加历史聊天记录,大模型可以做一层过滤,检索的内容有杂质大模型也能过滤,这样就能提高一些容错性,就算检索错了,其实也可以进行解决。

多轮Query改写模型的Prompt案例

多轮问答优化

02检索算法-全文检索

rag技术实现全流程

全文检索通常基于倒排索引技术。在创建索引时,系统会对文本进行分词处理,将文本分解为单词或词项,并记录每个词项在哪些文档中出现以及出现的位置和频率等信息。

文本分词

  • 定义:将一段连续的文档或查询文本分解成单词、词语或有意义的单元的过程,以便于索引和搜索处理。
  • 特点:分词方法有规则、词典、统计和深度学习等多种方式,适用于不同语言和应用场景。

分词的算法:

第一种也是最常见的是TFIDF,统计一个词在某一篇文档的频率,再除以文档的数量TF。一些常见词"的了你我他",它的词频会很高,会导致计算的词和文档的得分会很高,这时就加入IDF,用文档的总数除以词在文档的数量算一个 log值。如果说常见词在每篇文档都出现了,相当于分子分母除完之后是等于1,log1=0,相当于TFIDF这种常见词它就会变成0,IDF主要是解决那些稀有词频率又很高,所以说TFIDF它的精确度相对来说比较高,它能解决一些竞对关键词的问题,实际上它的缺点就是语义理解会差,构建成本会更高。TFIDF进行了一个进化,就是常用的BM25算法,这个算法经久不衰。

BM25除了考虑它的词频、IDF逆文档频率之外,还考虑了文档的长度。比如一篇文章有50个词,分出50个词,比如某个词叫“人工智能”出现了一次,那它的词频是1/50。第二个文档有500个词,“人工智能”出现了3次,它的IDF 肯定是一样的,所以我们比的是TF,这时候1/50和3/500来比,一定是3/500更小,那就说明“人工智能”在这篇文章就不相关了吗?那实际上文章长就没有优势了,文章越短越有优势,所以BM 25算法就是解决这样一个问题。

  • 第一BM25算法它右边TF这部分是一个非线性算法。IDF的TF就是说词频越高,分数就会一直涨,所以是线性的。BM 25算法这个区别就是说,f(t,d)是它的一个词频,k和b是它的一个超参数,用词频乘以超参数。f(t,d)词频一直往上加,加到一定程度之后就会饱和,就不会一直是线性的。刚开始的时候,词频很小的时候,它属于一个线性的增长,但是当增大一定程度的时候,它就会饱和了,就变成一个曲线了。所以BM25算法,它并不是简单的计算次数,当词数到一定程度的时候它就差不多就够了,就不会再往上加了。不像TFIDF的词频,如果越多它就会一直是线性的增加,这是第一个改进。
  • 第二部分文档的长度也受影响,比如文档a有50个词人工智能的概率1/50,文档b是3/500,这么一比,它俩就不是一个数量级差了1/10了,实际上用户问了一个人工智能,那一定会更容易拿文档a,不会拿文档b, 但是用了长度的加权,就是长度的归一化。上边的|d|是当前文档的长度,下边avgdl这个是文档的平均长度,当我文档长度大于平均长度的时候,相除也就1-2之间这种,所以它的值不会特别大,再乘以超参数b进行平衡长文档和短文档。按公式算完之后,把k=1.2,b=0.75,算完之后短文档是0.685,长文档是0.615,差距一下子就从刚才的10倍,缩小了很多。在TF中就是长文档更因为它的词更多,词频更高,就导致它的命中率就更容易命中。但是BM 25算法就是说我们对这个长度进行归一化,抑制了这个偏差。这是第二个改进,就是对文档长度的一个优化。
  • 第三个改进是IDF,IDF是要解决常见词“的了你我他”,因为它太多了,所以需要把它降权。如果说文档里“的了你我他”特别多,那他这只是不加他的分,但还有别的词在加分,所以他的最差,他权重全趋于0,每篇文章都有“你我他”,所以说他就变成0,其实对常见词惩罚是不太足的,但是BM25算法就考虑了这个点,要对常见词进行一个惩罚。不能有那么多无关紧要的,一些关键词更重要,所以它这里权重就变成负,(N-df(t))/df(t) 小于1,log小于1就变成负数了,如果它俩相等就是log1=0。如果它大于1,那它就是大于0,这里的0.5是一个为了平滑用的,所以它就会对IDF进行一个常见词的惩罚。在常见词出现过多的时候,这篇文章里出现过常见词太多了,那它的负权重就会惩罚,确保检索的结果更聚焦于有区分度的关键词。 BM25算法它的本质就是TFIDF, 完了,面试官问你那 TFIDF 是什么?那BM25算法又对它有什么改进。
  • 第四点是灵活的参数,TFIDF是固定公式,它是不可以调整的,而BM算法是提供了K1和 b去进行适配,一般k选1.2,b选0.75,其实基本就是这样。现在BM25算法非常常见,用TFIDF的很少,这是全文检索计算相关性的一个算法。

当用户进行提问query之后,先进行分词,分完词之后。先用倒排索引把所有文档拿回来,我们需要找到跟用户提问query相关的,比如TOP10的文档,用query里面每个分词的词跟每个文档这些词计算BM 25算法,每个文档都有一个得分,之后再进行排序,选择TOP10给返回来,这就是全文检索的一个算法流程。

开源分词模型对比:

如果发现全文检索不准了,以它为基线去分析是TF太饱和了,还是因为文档长度,来进行调整参数。对全文检索BM25算法除了调参基本上没有改进的地方,需要改进的就在于分词。分词的作用在这里面是说能够很好的分出业务场景,跟业务场景相关的关键词,能够很好区分出来。

分词太细会把噪音也带进来,分词太粗可能就召回不回来。

如果又想把专业术语切出来,又能正常分词。有两种方案,第一种方案是命名实体识别,专门识别这些专业术语,进行命名实体识别,其他正常切,只把命名实体识别之外的那些句子正常切就可以了。第二种是把这一堆专业术语的词典放到分词工具里,这些分词工具都支持把词典扔进去之后就可以切了,按业务场景去切。

比如一二百词的专业术语,放到分词里面,直接加载词典就可以了,如果说词表太多,而且这个词表还能直接靠一些硬匹配就能匹配出来,把这些词直接匹配,剩下的用分词工具去切就可以。宁肯切细一点,也不要切粗。

如果词典特别大、特别多,有5万的词典,5万的专业术语都扔到词典中,都扔到那个结巴分词里,可能会导致该切也切了,不该切的它也切了,所以把原来好的东西也没切出来。

用分词工具先跑一遍数据集。比如有100篇文档,跑一遍,跑完之后分词,算个最简单的TFIDF,再去停用词,这样就不能统计出关键词了。看下这些关键词是不是把业务场景里面的东西都包含了,如果说没有包含,可以把这个分词工具pass掉了。像jieba切的细,全文检索不回来,还有向量检索,后边还有重排序可以补救,切细了可以补救,切粗了就补救不了了。

03检索算法-向量检索

BERT模型的核心设计

双向Transformer架构:BERT基于Transformer编码器结构,通过多层自注意力机制(基础版12层、大型版24层)实现文本的双向上下文建模,BERT能同时捕捉词汇左右两侧的语境信息

句向量的提取方法:

  • [CLS]标记向量:句子开头添加的特殊标记[CLS],其对应向量常作为整句的语义表示,适用于分类任务。
  • 词向量池化:对句子中所有词向量取平均或最大值池化(Mean/Max Pooling),保留全局信息。

向量检索是向量空间中相应的计算,先对用户的query,对文档切块进行向量表示,表示完就构建索引。在线的部分先进行用户的query向量表示进行检索。

这里面的向量表示一般用匹配模型,它是借鉴DSSM双塔思想,每一个塔都是用预训练的语言模型进行表示。它这有两个塔,左边一个塔是query是训练时候用,用query生成的。另一个塔是document是文档的,分别走Bert,走完之后,最后出一个向量层,document也出向量,最后计算相似度,这是基于表示的。

它的特点就是说query****和document是两个独立编码,比如说现在有100万篇文档,query来了之后生成向量,不可能把这100万篇文档重新在线计算一遍,计算完了之后再一个个比较,不可能,所以提前把这些向量文档构建好,在线的时候只需对query进行一个向量表示,这样提高效率。 缺点就是在模型学习的时候没有交互,它们互相之间是独立的,无法充分挖掘两者信息细粒度的匹配程度。

双塔一个query,一个document,用的是bge-m3,query和document是一个模型,用一个模型既可以对query生成一个向量,也可以对document生成一个向量。预训练的时候有一些策略在里面,所以可以解决这种非对称的情况,非对称就是说query因为很短,document会很长,这种检索的时候会存在问题。

索引构建: 全文检索用倒排索引构建到数据库,向量检索是一个暴力搜索的flat,还有图这种结构。

计算相关性是余弦相似度,用两个向量计算余弦****相度,也是一个经久不衰的一个方式。

文本长度对向量模型的影响

词序感知对向量模型的影响

LLM类向量模型(Qwen3-Embedding)

基于大模型的向量模型Qwen3的embedding,区别首先它是大模型类,左边这个图包括了四部分,第一部分是它可以提供一些任务指令,比如根据查询找相关的文档,query是用户输入信息,docs是文档的一些数据,通过这样进行一个判断,最后用EOS序列标记符进行判断生成它的向量。

这跟bert类模型不一样,因为bert是前面CLS或者整体的一个池化,但是大模型用的是序列结束标识符EOS。因为bert类模型是only encoder,所以它上来就可以直接看到双向编码,所以它可以直接用CLS 开头就可以拿到它的向量,而基于大模型类它是only decoder。它没有办法看到后边的,所以只要生成完之后,用最后一个标记符获取它的向量,这是基于大模型类。训练过程分三个阶段:

  • 第一个阶段是弱监督预训练,用通义32B生成了1.5亿对合成文本,覆盖了很多任务,基本覆盖了四类任务,把任务构成文本之后。先进行弱监督训练,预训练是对比学习的一个预训练。我们这第一阶段就结束了。
  • 第二阶段是一个有监督的微调,通过1.5亿的数据进行筛选,筛选出来1200万对数据进行learning微调,对一个领域的泛化这是第二阶段。
  • 第三阶段是进行模型融合,采用了一种球面线性插值方式,这种技术在合并的时候可以微调,保存多个模型,进行模型的合并可以提高鲁棒性。

所以在通义三向量模型里,相对来说比较复杂。训练方式比正常的BGE 会比较复杂,因为BGE就相当于只拿到开源数据整理好之后进行微调。通义3的embedding有三个,一个是0.6B、一个是4B、还有一个8B。

Bert类与LLM类向量模型区别

开源向量模型检索能力对比

bce只支持512,就跟切块相关。Bert类是双向编码,Bert虽然解决了LSTM长尾遗忘,还会存在一些信息丢失,所以太长也不太好。所以建议用256到512来进行切块是有原因的,跟它的向量模型有关系,像bge-m3可以支持8192,但实际上也不太好,因为太长也会有信息丢失,还会有噪声,切块的时候要配合向量模型。

检索的时候一边是全文检索,另一边向量检索。bce和bge-m3它俩是互补的,有时候可以检索回来,最后相当于用三路召回:

  • 一路是全文检索,
  • 一路是bce召回,
  • 一路是bge-m3的召回。

bge-m3加上全文检索,调整全文检索的分词,之后就可以把bce给拿掉,它的互补能力就没有了,因为bce除了互补之外,还存在召回一些冗余内容,而且耗时较长,三路耗时会长,所以慢慢就把它拿掉了。前期的时候如果没有别的办法,可以尝试三路召回

04混合检索

来一个query,先进行k近邻向量检索,这是向量检索一部分。

第二种是query进行分词,用BM25算法检索回来。混合检索就是左边一路用向量检索,右边一路用BM25算法检索,最后合并一起进入排序模型,最后输出一路检索内容。向量检索可以解决相近语义,像bge-m3是多语种的,也可以理解多模态。向量检索除了用bge中文,还也可以用CLIP,它的容错性强,因为泛化能力强,这是向量优势。全文检索优势是精准匹配,比如问是 iphone 17,库里全是iphone 16、iphone 15,iphone 17没有,实际上是检索不回来的,全文检索这一路是召不回来内容的,但是向量检索就可以。向量检索就可能会出现问iphone 17,但把库里的iphone 16和 iphone 15拿回来,存在向量检索的问题,全文检索能精准的把iphone 17拿回来,它还对短文本有优势。

第三点倾向于低频词汇匹配,可解释性强,所以混合检索融合它俩的优势。混合检索可以利用全文检索和向量检索对数据查询,提高检索的准确性和可行度。混合检索可以利用向量模型的多样性返回多种不同的结果,它们之间互相还能补充。混合检索可以用全文检索进行排序、过滤这种复杂查询需求,跟业务场景相关,这是全文检索的一个情况。

可解释,全文检索可以用文本匹配,高亮显示,这是混合检索的一个优势。

知识库构建流程

知识库格式对比

05排序算法 向量模型处理的是相似,但是不相关;排序模型rerank就是来解决相似不相关的。

向量检索与排序模型之间的差异

RRF融合排序

RRF****融合排序就是对两路或者多路不同的检索进行排序,它不是利用每个检索的得分,而是靠排名。因为全文检索用的是BM25算法,它是一套得分向量模型,得分是0到1之间,BM25有可能大于1,所以它俩区间是不一样的,没法靠得分进行排名,同一个向量就是不同的向量模型,比如 BCE和BGE这两个向量模型的得分也是没有参考性的。所以不能光靠它的得分进行排名,所以有了这个算法RRF倒数融合排序。

下图是RRFscore的计算公式,D是整个文档的集,r是文档的排名,k是超参。比如A的BM25的RRF得分为1/2(k=1,r=1),向量相关性得分为1/4,最后A=1.33。k越大,对排名靠后的惩罚分不会那么高的,k=1关注排名前面的。

基于交互的匹配模型(Cross-Encoder)

第二个排序模型是基于交互的匹配模型,这个跟基于表示的匹配模型是不一样的,因为基于表示只需要表示每一个塔之间的结果,左边一个 query,右边一个document打标出来,从最上层进行一个交互。而基于交互的匹配模型它的区别是将query和document拼接输入到模型中,在底层又开始进行一个交互,交互完之后最后用MLP输出它的匹配得分,计算相似度得分。它的优点是精度高,底层就能捕捉复杂语义,缺点就是速度慢,每次检索都需要实时计算,query和document不能像向量那样预存文档信息。右边就是说用户检索到信息之后进行一一匹配,每个查询跟文档进行匹配计算得分,就比较耗时了。

RRF算法实现的重排它不涉及检索结果与查询之间的语义关系。而Cross-Encoder重排就是基于Cross-Encoder模型,在语义层面上实现的重排。

Cross-Encoder的工作原理是将用户的“查询”和每个“文档”作为一个整体,共同输入到一个深度学习模型(如Transformer)中进行计算,进而精确的判断两者之间的相关性。

延迟交互模型(CoIBERT)

这个是延迟交互模型,它其实既可以当排序模型,也可以当向量模型使用。它是一个结合了双编码器的高效,还有交互模型细粒度匹配的排序模型,核心是通过延迟交互来实现语义解锁优化。既有了基于表示的匹配模型,又有基于交互的匹配模型优点,特点是高效性,既可以双编码进行构建,就像基于表示似的,离线把编码文档计算好,查询的时候只需要对编,对快用户的提问进行构建,速度远高于基于交互的模型,它还保留了梯度的语义,可以多项输出。

离线构建好了,每一个向量的TOKEN,每一个TOKEN左边三个绿色是3个TOKEN,右边蓝色是有5个TOKEN,每一个绿色TOKEN会跟右边蓝色那6个TOKEN都会进行交互,交互完之后选择最大相似度得分,第二个TOKEN也会跟右边6个进行一个交互取最大得分,这样就相当于每个都交互完之后出现三个,最大得分之后加和拿到最大的相似度得分。

这是它的优势,延迟交互,底层进行一个离线交互,各自生成各自的,最后在后边部分每个TOKEN之间进行一个交互,进行交互之后最终得分,这就是延迟交互的特点,对每一个query的TOKEN向量计算与所有文档所有TOKEN的向量最大的相似度,求和得最终的一个得分。这是基于延迟交互的模型。

不同匹配模型架构的对比

左边是向量模型基于双塔模型,底层是Transformer,中间没有交互,各自独立编码。右边是query和document一起进Transformer进行交互。

三类排序模型对比

LLM类排序模型(Qwen3-Reranker)

通义3是基于大模型的排序模型,先有一个任务指令以及query和document,最后输出结果,进行排序计算得分。它模型特点:

第一是单塔结构,现在模型不是双塔,query一个塔,document一个塔,单塔结构将用户的查询和候选文档拼接在一起,用户模型内部进行一个深度计算。

第二个特点是它的长文本能力,基于通义3的模型,能处理高达32K的TOKEN。

第三指令感知,这个和现在模型是一样的,这也是大模型的一个特点。可以跟最新用户的指令进行一个动态调整它的排序标准。

和通义的向量模型区别:它就不像通义3的向量模型做了三阶段,它是两阶段的,第二阶段就是有监督的微调。第三阶段就是一个模型的融合,相当于用同一类的数据构建了两个模型。rerank模型也有三个不同的大小,一个是0.6B,一个是4B,还有一个是8B。通义3排序模型,相当于把排序模型进行一个对话,传统的就是rank、boost类的模型,输入CLS query sep再加上到后面的结果,最后通过CLS算一个MLP,之后进行相关性得分。他算的方式相对来说快一些,但它只能算相对来说比较浅层的内容。通义从关系模型做转化,第一个就是任务转化,对系统提示词进行一个调整,只需要判断模型的任务是否从文档满足它的需求,回答只需要对输出的结果是yes和no,结构也有变化,因为输入像大模型聊天是一样的。

任务质量query document,利用了大模型的理解和推理能力,它像传统的rerank,它用 cos去算相关性得分,它预测下个词yes或 no 的概率直接进行一个相关性判别,与传统的方法来对比,传统是一个简单的打分器。

rerank模型就像判官一样,输出yes和no的概率。它不是依赖于分类头输出的抽象得分,通过预测答案的yes or no的结果,它最大优势就是第一它能支持像大模型一样的任务指令,第二是解释性强,可以根据不同的任务适配不同的检索任务。大模型可以支持长上下文,语义推理能力也比较好,给了相关性得分,完了判别yes or no,输入用户的指令、用户的查询以及他的文档,最后输出结果就是它的一个得分,用yes的分除以yes加no的分,因为大模型输出结果的时候有多个TOKEN。

主流排序模型:

06基于LLM相关性判断

背景问题

  • 大模型遵循“Garbage in, Garbage out”原则
  • 检索阶段经常会召回无关或噪声知识
  • 不相关知识会导致回答偏差或错误

解决方案:Knowledge

  • 作用:作为一个“检索结果质量关口”,在传入大模型前进行知识过滤。
  • 原理:基于自然语言推理(NLI)任务来判断:
  • 检索到的知识是否能支持问题的回答(Entailment)

  • 是否与问题无关(Neutral)

  • 是否与问题相矛盾(Contradiction)

  • 实现方式:
  • 使用小参数模型,在NLI任务上进行微调或直接应用

  • 只保留与问题呈现“蕴含关系”的知识

  • 丢弃无关或矛盾的信息

模块效果

  • 过滤后知识更精准:回答基于高相关知识,不再被噪声干扰
  • 答案更简洁可信:避免冗余和错误,用户体验提升
  • 增强系统鲁棒性:即使召回到部分无关文档,也能在过滤环节自动剔除
  • 可扩展性:未来可以引入更多模型(如BERT、DeBERTa、LLaMA)或多任务联合训练,进一步提升判别能力。

07全链路多路召回优化

多路召回:结合多种召回方式(语义+关键词+规则…)→获得更全面的候选文档。 可以提升RAG检索的覆盖率与准确性,应用于搜索引擎、推荐系统、智能客服等。

多路召回的方式

  • ①并行召回:向量Top10 + BM25 Top10 → 合并去重 → 重排取TopN
  • 优势:多路召回充分利用了语义与关键词两种优势,互补性强,能够更全面地覆盖候选文档,减少单一召回策略导致的漏检问题,是当前工业界最主流的做法。
  • ②RRF融合:多路排序综合得分
  • ③精排模型:Cross-Encoder(BERT类)打分更精准

多路召回的优势

  • 融合信息:利用语义理解+关键词匹配,提供更全面的检索结果。
  • 提升性能:覆盖率↑,漏检↓,误检↓
  • 抗噪声强:抗噪声能力强,保证结果稳定性和可靠性。

流程设计

方案:BM25召回+向量召回→RRF初排(提升融合效果)→ Reranker精排(Cross-Encoder)→大模型生成最终答案

实际应用:根据具体应用场景和需求,灵活调整召回策略和参数,确保在应用中能够达到最佳效果。

1.混合检索架构(多模型互补)

关键词检索:使用BM25捕获精准片段,进行快速初步筛选。

向量检索:使用bge-m3向量检索处理复杂语义,提升语义检索的全面性与精度。

2.候选粗筛(粗排序)

RRF(倒数融合排序):基于BM25与向量检索的相对排名融合,去重并提高粗排效率。

3.语义重排(精排序)

异构内容处理:表格→文本摘要,图片→跨模态描述。

轻量重排:BGE-Reranker-v2-M3(基于交叉编码器)快速排序,平衡速度与效果。

相关性判别:基于LLM相关性判别,去除无关噪声。

4.业务驱动排序策略

数据混合:按需配置问答对与文档切片比例,更符合实际应用场景。

阈值筛选:基于置信度过滤,确保结果相关性与质量。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费