ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

检索策略大全:关键词检索vs向量检索vs混合检索,怎么选效果最好

检索策略大全:关键词检索vs向量检索vs混合检索,怎么选效果最好 检索策略大全关键词检索vs向量检索vs混合检索有了向量数据库和Embedding模型接下来就是怎么搜了。很多人做RAG默认就用向量检索。其实检索方式不止这一种。关键词检索、向量检索、混合检索各有各的适用场景。选对了检索方式效果能提升一大截。这一篇我们把常见的检索方式都讲一遍。各自的原理是什么优缺点是什么什么时候用哪种以及怎么组合效果最好。关键词检索关键词检索是最传统的检索方式。用户输入关键词在文档里找包含这些关键词的内容。技术原理就是倒排索引。每个词对应一个文档列表记录了这个词在哪些文档里出现过、出现了多少次、在什么位置。查询的时候把查询词的倒排表拿出来做交集或者并集然后算相关性打分排序。Elasticsearch、Solr这些搜索引擎干的就是这个事。优点精确。要找什么关键词就返回包含什么关键词的结果。不会跑题。可解释性强。为什么返回这个结果因为它包含了你搜的关键词。清清楚楚。对专有名词、编号、术语这类精确匹配的场景效果特别好。产品型号、订单号、人名地名关键词检索比向量检索准。实现成熟。搜索引擎发展了几十年技术非常成熟。性能稳定成本可控。缺点只能匹配字面。意思一样但说法不一样就搜不到。比如用户搜保修多久文档里写的是质保期限关键词匹配不上。对同义词、近义词、不同表达方式无能为力。必须字面上对得上才行。需要用户会用关键词。用户得知道文档里大概会用什么词才能搜得到。普通用户经常不知道该搜什么关键词。适用场景文档内容比较规范术语统一的场景。用户查询比较明确知道自己要找什么关键词的场景。对精确匹配要求高的场景比如查编号、查代码、查特定名称。向量检索向量检索就是我们前面一直在说的语义检索。把文本转成向量算向量相似度来找最相关的内容。优点懂语义。意思相近就能搜到不用字面上一样。用户问保修多久文档写质保一年也能匹配上。不用用户想关键词。用户用自然语言提问就行不用琢磨该搜什么词。使用门槛低。能处理模糊和复杂的查询。整句整段地搜甚至用一个问题去搜都能找到相关内容。缺点不精确。有时候字面完全不相关的语义上可能被误判为相似。搜出来的结果可能不相关。对专有名词、编号、特定术语的匹配不如关键词检索准。比如产品型号是一串字母数字向量检索可能就认不出来。可解释性差。为什么返回这个结果因为向量相似度高。但为什么相似度高说不太清楚。效果依赖Embedding模型。模型好效果就好模型差效果就差。不同领域可能需要不同的模型。适用场景用户用自然语言提问的场景。比如智能客服、知识库问答。文档表达方式多样同一个意思有很多种说法的场景。需要模糊匹配、语义匹配的场景。混合检索既然关键词检索和向量检索各有优缺点那能不能两个一起用。当然可以。这就是混合检索。混合检索的思路很简单。同一份查询同时用关键词检索和向量检索各返回一批结果。然后把两批结果合并在一起重新排序返回最终的Top K。为什么要这么做。因为两种检索方式是互补的。关键词检索擅长精确匹配向量检索擅长大语义。合在一起既能搜到语义相关的也不会漏掉精确匹配的。实际项目里混合检索的效果通常比单独一种都好。这也是现在RAG系统的主流做法。怎么合并结果两种检索的结果怎么合并有几种方法。最简单的是加权融合。给关键词检索的打分和向量检索的打分各分配一个权重加起来作为最终分数然后排序。权重怎么配要根据你的数据和查询来调。复杂一点的用RRF倒数排名融合。不看具体分数只看排名。每个结果在两个列表里的排名取倒数加起来作为最终的分数。排名越靠前分数越高。RRF的好处是不用考虑两个检索的打分尺度不一样的问题。反正只看排名。效果通常也还不错。最好的方法是用重排序模型。把候选结果都扔给Rerank模型让它重新排一遍序。效果最好就是成本高一些。后面重排序那一篇会专门讲。其他检索方式除了这三种主流的还有一些其他的检索方式。多模态检索。不止搜文本还能搜图片、搜视频。用多模态的Embedding模型把不同模态的内容映射到同一个向量空间里。文字可以搜图片图片也可以搜文字。结构化检索。除了文本内容还可以按元数据来过滤。时间范围、文档类型、作者、分类都可以作为过滤条件。先按元数据缩小范围再做语义检索。大部分向量数据库都支持元数据过滤。HyDE。假设文档嵌入是一种检索增强的技巧。用户提问以后先让大模型生成一个假设的答案然后用这个假设答案去做向量检索。有时候效果比直接用问题检索好。因为答案跟答案之间比问题跟答案之间更像。查询改写。也叫查询扩展。把用户的问题改写一下改得更完整、更规范、更像文档里的表达方式然后再去检索。改写可以是同义改写也可以是扩写还可以分解成多个子问题。这些都是在基础检索之上的优化手段。基础做好了再加上这些效果能再上一个台阶。怎么选说了这么多检索方式到底用哪个。给几个实用的建议。第一个别一上来就搞最复杂的。先用最简单的向量检索跑起来看看效果怎么样。效果够了就不用折腾了。第二个如果发现有很多精确匹配的场景效果不好比如搜产品型号、人名、编号加上关键词检索做混合。第三个如果知识库内容不多比如只有几千条关键词检索可能就够了。向量检索的优势在数据量大的时候才明显。第四个做中文场景一定要注意关键词检索的效果。中文的分词、同义词、术语这些问题比英文复杂。很多时候混合检索比纯向量效果好。第五个效果调优是个迭代的过程。先上基础版本看日志分析bad case针对性地加优化。别一开始就把所有技巧都堆上去出了问题都不知道是哪一步的问题。检索这部分就先讲到这里。检索是RAG的第一步也是很关键的一步。搜准了后面生成才有好的原料。搜不准再强的大模型也答不对。下一篇我们讲重排序。检索回来的结果怎么用Rerank模型再排一遍序把最相关的放到前面。这也是提升效果性价比很高的一步。
返回列表