ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

为什么EVIE-8B检索准确率这么高?面向新手的晚交互与多向量检索原理入门

为什么EVIE-8B检索准确率这么高?面向新手的晚交互与多向量检索原理入门
  • 人工智能
  • 多模态
  • 计算机视觉
  • RAG
  • 检索/搜索引擎

【免费下载链接】EVIE-8B

项目地址:https://ai.gitcode.com/tencent_hunyuan/EVIE-8B
点击查看免费下载

EVIE-8B 是腾讯开源的视觉文档检索模型,凭借**晚交互(Late-Interaction)与多向量(Multi-Vector)**表示,在 ViDoRe 榜单上拿下 66.75 nDCG@10 的 SOTA 成绩。本文面向新手,用通俗语言讲清楚它为什么检索得这么准,并带你跑通仓库自带的 8 页文档 Demo。

上图来自仓库自带的 Demo 数据集(examples/demo/),模拟了真实场景:你手里有一堆图片格式的文档页——财报、发票、组织架构图、专利页——想用一句自然语言查询找到正确的那一页。EVIE-8B 要做的,就是"看图 + 读问题",然后给出最相关的页面。

为什么"一个向量"检索不准?

传统文本检索的经典做法是:把整个文档压成 1 个向量,查询也压成 1 个向量,算一下余弦相似度,最像的就是结果。

这种方式对短文本够用,但对一整页文档就很吃亏:

  • 一页文档里既有标题、正文,又有表格、图表、数字,信息密度很高;
  • 压缩成单向量时,细节被"平均"掉了——比如发票上的到期日和金额,压完之后很难和"哪张发票最贵"这类问题对上;
  • 文档越长,丢失的信息越多。

EVIE-8B 的答案很直接:不压缩。它给文档里的每个 token(每个视觉/文本片段)都保留一个独立向量,整页文档 = 成百上千个向量的组合(README.md 中称其为 per-token multi-vector embeddings)。

晚交互(Late-Interaction):先各算各的,最后再比较

这里引出检索领域的关键分类——早交互 vs 晚交互:

方案做法类比
单向量(Bi-Encoder)查询和文档各自压成 1 个向量,再比较两个人各写一句"自我介绍",比谁更像
晚交互(Late-Interaction)各自展开成多个向量,匹配阶段才逐点比较翻开两本书逐段对照,找共同点

"晚交互"的"晚",指交互(比较)被推迟到匹配阶段:编码阶段查询和文档互不干扰(所以文档向量可以预先离线算好、建索引),只有在打分时才做细粒度对齐。这正是 ColBERT 系列开创、EVIE-8B 继承的路线。

MaxSim:晚交互的打分公式

EVIE-8B 使用MaxSim打分,公式并不复杂:

对查询里的每个向量 qᵢ,在文档的所有向量里找到与它最相似的那个 dⱼ,把每个 qᵢ 的"最佳匹配分"加起来,就是总分。

用一句话概括:查询的每个词都能"各找各的最佳落点"。比如问"发票 4412 的到期日是多少","发票"落在文档顶部的 INVOICE 4412 上,"到期日"落在 DUE DATE 那一行,各自都拿到高分,总分自然高。

这个打分过程的源码就在仓库里,核心只有一行 einsum(对每个查询向量取 max,再求和):

  • MaxSim 实现:maxsim.py
  • 模型主体(每 token 投影 + L2 归一化):modeling_colqwen3_5.py

多向量表示:4096 维为什么是"高配"?

有了晚交互思想,还有两个 EVIE-8B 的"放大器":

  1. 高维表示(4096D per-token):每个 token 向量有 4096 维,远高于同类模型常见的 128~640 维(见 config.json 中"dim": 4096)。维度越高,能编码的版面、字体、表格结构等细节越细。
  2. 双向注意力(Bidirectional Attention):普通语言模型只能"往前看",而检索时需要上下文互相参照。EVIE-8B 把注意力层改成双向(enable_bidirectional_attention(),实现见 modeling_colqwen3_5.py),视觉 patch 与文本上下文充分交叉,图表中的数字能和附近的标题"对话"。

再叠加 77 万+ 文档-查询对的训练数据和精心挖掘的难负样本,高维多向量 + 晚交互的组合拳就解释了它的准确率:ViDoRe V1 达 92.18 nDCG@5,V3 达 66.75 nDCG@10,全面领先(完整对比见 README.md 的 Leaderboard 部分)。

快速上手:跑一个 8 页文档检索 Demo

仓库自带一个开箱即用的 Demo:8 个文档页(财报、发票、专利页等,见 examples/demo/pages/)+ 检索脚本。

第一步,克隆仓库:

git clone https://gitcode.com/tencent_hunyuan/EVIE-8B

第二步,运行 Demo(会自动加载本仓库的权重,对 8 个页面做多向量编码并排序):

bash examples/demo/run.sh

第三步(可选),用 infer.py 单独给自己的图片打分,支持多查询、多图片:

python infer.py --query "What is the total quarterly revenue?" --image examples/demo/pages/q3_revenue.png

💡 小贴士:Demo 的 1024 token 页面预算对应评测协议,日常推理默认预算更大(16384 视觉 token),文档越高清,多向量表达的细节越足。

新手 FAQ

Q1:晚交互不是要实时比较吗,速度慢吗?不会。文档多向量可以离线预先算好存成索引,在线时只需对查询向量与候选文档向量算 MaxSim,且仓库内置了加速后端(LIK kernels,见 maxsim.py 的 backend 说明)。

Q2:多向量会不会占很大存储?会比单向量大(每 token 4096 维),这是精度与存储的权衡。EVIE 家族的小模型 EVIE-4.5B 还支持 Matryoshka 多尺寸头(modeling_colqwen3_5.py),可以按需截断维度。

Q3:Sentence Transformers 用户怎么接入?仓库已按 MultiVectorEncoder 规范打包(modules.json 定义了 投影 → 归一化 → 多向量掩码 的模块链),MultiVectorEncoder("tencent/EVIE-8B")一行即可加载,详见 README.md 的 Sentence Transformers 部分。

总结:三个关键词记住 EVIE-8B

  1. 多向量:文档每个 token 保留独立向量,细节不丢失;
  2. 晚交互(MaxSim):打分时逐点找最佳匹配,对齐更精细;
  3. 高配底座:4096 维表示 + 双向注意力 + 大规模难负样本训练。

单向量像"一句话概括一本书",而 EVIE-8B 做的是"逐段对照两本书"——这就是它检索准确率高的底层逻辑。想动手验证?仓库里的 examples/demo/run.sh 就是最短路径。

  • 人工智能
  • 多模态
  • 计算机视觉
  • RAG
  • 检索/搜索引擎

【免费下载链接】EVIE-8B

项目地址:https://ai.gitcode.com/tencent_hunyuan/EVIE-8B
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进