BGEM3EmbeddingFunction:连接文本编码与混合检索

一段文本既可以被表示为一个稠密向量,也可以被表示为带权重的稀疏词项。BGEM3EmbeddingFunction
封装 BGE-M3 的推理过程,把文本转换成便于 Milvus 索引与检索的表示。

先分清模型与封装接口

BGE-M3 是文本嵌入模型。M3
对应多语言、多功能与多粒度,并不是“图像、音频、文本三种模态”。模型支持稠密检索、稀疏检索和多向量检索三类能力。BGE-M3 模型卡

BGEM3EmbeddingFunction
是集成接口。模型具备三类能力,不代表每个封装默认返回三类结果。Milvus
官方示例展示的返回字段是 dense 和 sparse。Milvus BGE M3
文档

基本用法

下面按照官方文档中的 PyMilvus 导入路径编写。旧资料可能使用
milvus_model.hybrid,应结合实际安装版本检查。

python -m pip install "pymilvus[model]"
from pymilvus.model.hybrid import BGEM3EmbeddingFunction

ef = BGEM3EmbeddingFunction(
    model_name="BAAI/bge-m3",
    device="cpu",
    use_fp16=False,
)

documents = ["课程支持回放。", "退费申请需要审核。"]
doc_vectors = ef.encode_documents(documents)
query_vectors = ef.encode_queries(["课程结束后还能看吗?"])

print(doc_vectors.keys())
print(len(doc_vectors["dense"]))
print(doc_vectors["dense"][0].shape)
print(doc_vectors["sparse"].shape)

首次运行需要准备依赖与模型权重,CPU
推理耗时取决于机器和文本长度。这里提供接口示例,不代表已经完成本地性能测试。

两种输出怎样理解

表示 直观含义 检索时关注什么
dense 用固定长度向量概括文本 语义表达接近程度
sparse 在词项空间保留少量非零权重 词项匹配及其学习到的权重

“课程结束后还能看吗”和“支持回放”没有完全相同的表达,稠密检索可能补足这种语义关联;稀疏检索则可能帮助保留型号、术语等具体词项信号。实际是否有效需要用查询集验证。

BGE-M3 的 sparse 输出不是简单计算
BM25。它使用模型学习到的词项权重,不能因为结果稀疏,就把它与传统词频统计公式视为同一个算法。

放回完整的 RAG 流程

文档 → 清洗和切分 → 编码 → 保存 dense、sparse 与文档 ID
查询 → 编码 → 两路召回 → 融合 → 可选重排 → 构建回答上下文

两路结果必须能通过同一文档 ID
对齐。检索到的向量还要能回查原文、来源和版本,否则只能找到“相近的数字”,无法提供可引用的证据。

这个类负责编码,不负责自动创建知识库、配置索引、执行融合或生成答案。把这些职责分清,才能定位问题究竟出在表示、召回还是生成环节。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇