当前位置: 首页 > news >正文

01 双编码器与交叉编码器

自己的感悟:RAG,检索增强生成并非一个新技术,只是对于原有搜索算法在不同场景和技术的升级。举个例子,百度和gogle作为一个搜索引擎,同样采用了bm25和tf-idf等传统匹配算法。只是随着最近大语言模型的发展,多了一个增强生成的阶段和更细粒度的拆分。

Bi-Encoder vs Cross-Encoder

这里需要理解两种编码器的区别:

  • Bi-Encoder(双编码器):query 和 chunk 分别编码成向量,然后计算向量相似度。这就是 Embedding 模型的工作方式。优点是速度快,可以提前把所有 chunk 编码好存起来,查询时只需要编码 query;缺点是精度有限,因为 query 和 chunk 是独立编码的,无法捕捉它们之间的细粒度交互关系。

  • Cross-Encoder(交叉编码器):把 query 和 chunk 拼接在一起(比如[CLS] query [SEP] chunk [SEP]),一起输入模型,模型能看到 query 和 chunk 的完整交互,输出一个相关性分数。优点是精度更高,能捕捉更细粒度的语义关系;缺点是速度慢,每个 (query, chunk) 对都要过一遍模型。

重排序通常用 Cross-Encoder,因为候选集已经很小了(比如 20~50 个),可以接受慢一点的速度,换取更高的精度。

实际上双编码器是将数据隐射到一个高维的坐标系中,通过一个多维度向量表示,然后通过一些距离算法计算匹配度。

而交叉编码器是通过数据进入 Transformer 编码器后,Attention 机制会计算序列中每一个 Token 与其他所有 Token 的关联权重。Query 这边的“苹果”可以直接“看到”Chunk 那边的“水果”和“一种”,同时 Chunk 那边的“水果”也能看到 Query 这边的“好吃”。它捕捉了所有词与词之间两两的交互关系。

所以交叉编码器比双编码器计算的相似度更加准确。

  • 双编码器先压缩(降维成向量),后交互(算距离)
    交互发生在压缩之后,用的是残缺的、丢失了细节的“压缩包”去碰运气。

  • 交叉编码器先交互(全注意力),后压缩(输出分数)
    在交互阶段,512 个 Token 完整保留,带着所有细节去和 Query 的每一个字进行“全场一对一辩论”。直到辩论结束,模型掌握了所有细微线索后,才在最后一层通过[CLS]将其压缩成一个分数。

为什么不直接用 Cross-Encoder 做检索

你可能会问:既然 Cross-Encoder 精度更高,为什么不直接用它做检索,还要搞两阶段?

因为太慢了。假设你的知识库有 100 万个 chunk,用户提问时,你需要把这 100 万个 chunk 逐个和 query 拼接起来过 Cross-Encoder,这需要 100 万次模型推理,延迟和成本都不可接受。

所以工程上一定是两阶段策略:

  • 1.粗检索(Bi-Encoder):快速从 100 万个 chunk 中召回 Top-20 或 Top-50,延迟低,覆盖面广
  • 2.精排序(Cross-Encoder):对这 20~50 个候选逐个打分,延迟可接受,精度高

这就是快召回 + 慢精排的核心思想。

注意嵌入向量生成其实比rerank慢很多,两三倍的差距,但是生成嵌入向量后再进行相似度计算,所需要的时间只有交叉编码器生成的百分之一

http://www.jsqmd.com/news/1125315/

相关文章:

  • 2026年精选好口碑苦荞粉推荐,健康美味不容错过
  • 基于51单片机三路超声波测距仪 汽车多路倒车雷达系统 嵌入式13(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • COCO数据集实战:从pycocotools API到PyTorch数据加载器
  • LangGraph 工作流:Agent 从脚本变成可控,从问题拆解到交付验证
  • 从“使用者”到“架构师”:如何设计你的人机协作工作流?
  • 郴州热门火锅店理性测评|行业避坑+科学选型指南
  • Termux里的二进制和脚本,到底怎么运行才不踩坑?Termux-service 保活妙招!
  • AI写小说接入文心一言教程:千帆API+向量记忆系统实现百万字长篇智能创作
  • 基于STM32智能家居 烟雾温度火灾防盗报警 短信wifi蓝牙系统 成品12(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_
  • Python初学者必知:6个让你效率翻倍的开源框架(附学习路径)
  • 【物理应用】多尺度多物理场优化多孔结构的Matlab代码
  • 商用容积式电热水炉厂家
  • Codex 完整使用教程(Windows/macOS 双系统区别详解)
  • LED灯珠颜色亮度工业自动化测量
  • 【5天实战】从零构建AI-Native组织:飞书+Bot+Gitee全链路自动化实战指南—Day 5:完整场景实操验证
  • Codex 编程智能体入门指南
  • 实战!用LangGraph搭建AI Agent,让它自主完成任务
  • 单镜像素反演厘米无源坐标,全域拓扑推演全程无断轨迹无感定位输出四维时空轨迹,原生耦合复刻分毫实景孪生无标无基无外源硬件依赖,同源同轨同步虚实全域空间
  • 【Crypto】RSA 小指数入门解密
  • 基于STM32单片机温度报警 数码管温度报警器设计 电子温度计 13(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码
  • 在仓颉语言里造一个没有反射的服务端框架
  • AI搞UI测试?这届QA终于不用再当“人形复读机”
  • 【Java毕业设计】校园在线测验考试成绩管理系统的设计与实现 智能题库组卷与在线考试监控系统(源码+文档+远程调试,全bao定制等)
  • 2026封神!5款AI论文平台实测,小白变学霸,初稿直逼优秀模板!
  • 15款降AIGC平台实测:千笔AI综合表现最佳
  • 单卡训练大模型:LLaMA Factory显存优化实战
  • 操作系统复习(九)
  • Python异步代理池实战:从requests阻塞到httpx.AsyncClient,爬虫效率翻倍的踩坑记录
  • Java计算机毕设之在线随机组卷考试管理平台的设计与实现 基于 SpringBoot 的考试成绩分析统计系统(完整前后端代码+说明文档+LW,调试定制等)
  • Linux Vim编辑器完整实操教程(查找/替换/模式切换)