概述
QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。Github地址[1]。
QAnything 的主要原理是基于检索增强的生成(Retrieval Augmented Generation,简称 RAG)。
QAnything 结合了用户私有数据和大模型的优势 —— 用户的任何内容,以任意的形式存在,比如各种格式的文档,音频,数据库等,都可以在 QAnything 的支持下,变成可以针对其内容进行问答的使用方式,通过这个技术框架用户可以很方便地搭建自己的智能知识助手。
值得一提的是,QAnything 是一套完整的 RAG 系统,包括专门优化的自研的 embedding 和 rerank 模型,微调后的 LLM,优化后的推理代码,向量数据库,以及一个立即上手可用的前端。所有的算法模型(包括 7B 大模型 + embedding/rerank+OCR)占用显存不超过 16G。
架构
-
导入的在线文档,通过OCR技术以及Embedding后,存入向量数据库 -
两阶段检索:Embedding检索与Rerank重排 -
将检索得到的前K个文本块和用户问题一起送进LLM,让LLM基于给定的文本块来回答用户的问题。
技术框架
在整个框架中,集成应用了如下技术框架实现了QAnything。如下:
-
LLM -
OCR -
Embedding -
Rerank -
向量数据库 -
…
其实摊开来说,就是RAG的相关技术栈。从其源码结构也能看出

两阶段检索
我突然想到的是,Mysql的两阶段提交;在搜索推荐领域,两阶段检索也有,不过一般叫做是粗召回和精排序。在RAG中对应也是”粗召回”与”精排”,其原理逻辑是一样的。对于俺们这业务CRUD写惯了,又没怎么接触搜索推荐领域,对这两阶段检索的原理与背景还是比较难搞懂的。
有道QAnything背后的故事—关于RAG的一点经验分享[2] 细读了此文后,对两阶段检索的背景以及原理有了认识。
一阶段Embedding检索
第一阶段的大概原理:在第一阶段Embedding的相似度检索,只会根据cos等算法,检索出近邻向量,但并不会区分语义,因此可能会导致检索到的数据侧重点不一样,比如
query: 大连医科大学怎么样?
检索返回:
response:
1. 大连理工大学怎么样?
2. 大连医科大学创建于1974年...
第一阶段的Embedding检索,发现第一个相似度更高,如果没第二阶段,那么此时给返回的就是第一个response。
究其根本原因在于第一阶段将query Embedding后,其检索算法只是比对向量间的相似度而已,不会考虑语句语义;其实就是语句的侧重点与语句的相似度是不能划等号的。这个例子就是最典型的。
对于第一阶段的实现,有多种方式;但比较常用的是基于bi-encoder算法模型实现。
Bi-Encoder:给定句子生成句子的embedding。将句子 A 和 B 独立地传递给 BERT,从而产生句子嵌入 u 和 v,然后输出句子嵌入的相似度。其结构图如下,一个双塔模型:

二阶段Rerank精排
一般在这个阶段的Rerank精排,个人理解为就是语句语义检索匹配的实现。联想到Transformer模型中的自注意力机制捕捉到输入序列全局的依赖关系,可以侧重于关键重要的信息;对于这个阶段的常用算法Cross-Encoder,其原理逻辑也是基于transformer网络自注意力机制,实现语义的检索匹配。
以上述例子来说:Cross-Encoder内部会计算句子的侧重点偏向于医科大学
,因此医科大学
相关的句子得分更高,而大连理工大学
则得分更低。
Cross-Encoder:同时将两个句子传递给 Transformer 网络。它产生一个介于 0 和 1 之间的输出值,表示输入句对的相似性。直接输出相似度,不产生句子的 embedding。并且,无法将单个句子传递给Cross-Encoder,需要送入句子对。
其结构如下:

总结
在RAG或搜索推荐领域,二阶段检索的应用很广泛。结合编码器模型,用高效的bi-encoder来检索例如前 100 个最相似的查询语句。然后,使用cross-endoder通过计算每个(查询、命中)组合的分数来重新排列这 100 个命中。
Github地址: https://github.com/netease-youdao/QAnything/blob/master/README_zh.md
[2]
有道QAnything背后的故事—关于RAG的一点经验分享: https://juejin.cn/post/7340920192996360202
原文始发于微信公众号(阿郎小哥的随笔驿站):聊聊QAnything之二阶段检索(粗召回与精排)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/244105.html