进阶 14 分钟Embeddings

最佳嵌入模型 FR

直接回答

对于法语,BGE-M3 是最稳妥的起点:支持多语言,上下文窗口为 8,192 tokens,采用 MIT 许可证,可在 Ollama 中获取。Qwen3-Embedding 和 EmbeddingGemma 是近期推出、可供测试的替代方案。处理法语时,应避免使用以英语为主的模型(nomic-embed-text、mxbai-embed-large、all-MiniLM)。最终选择需在您自己的文档上验证。

嵌入模型将每段文本转换为向量:正是它决定了「CDD」和「固定期限合同」是相近概念。对于法语,MTEB-French 基准测试显示 BGE-M3 与 all-MiniLM-L12-v2 在检索得分上的差距为 22 个点。本页面对可在本地使用的开放模型进行排名,引用已发布的测量结果及其局限性,然后讨论生产环境中成本高昂的因素:前缀、截断、维度、存储与重新索引。

作者: Mohamed Meguedmi·更新于 2026-09-29·已在 Windows、macOS 和 Linux 上测试

#什么是嵌入模型,以及法语为何会带来额外复杂性

嵌入模型是一种神经网络,可将文本(一句话、一段文字或一个文本块)转换为数值向量,其维度因模型而异,从 384 到 4,096 不等。语义相近的两段文本会产生相近的向量,通常用余弦相似度衡量这种接近程度。正是这种机制使 RAG 能够在用户输入“CDD”时,找到有关“固定期限合同”的段落,即使两者没有任何共同词汇。正如 Ollama 文档所强调的,问题和文档必须由同一个模型编码;因此,更换模型就必须重新索引整个语料库。选择时,只需回答三个问题:模型是否在法语语料上训练过?它的上下文窗口是否能容纳您的文本块?它的许可证是否允许您的用途?

法语本身还带来一些难点:重音符号、省音(如“l'employeur”)、法律缩略语,以及混在文本中的技术性英语用语。模型之间的差距明显。在 MTEB-French 基准测试中,all-MiniLM-L12-v2 的检索得分为 0.43,BGE-M3 为 0.65,在同一组问题上相差 22 个百分点。

i
维度 ≠ 质量
向量更长,并不意味着它天然更精确。在 MTEB 多语言排行榜上,EmbeddingGemma 将向量从 768 维缩减到 512 维后,得分从 61.15 降至 60.71;Google 还列出了 256 维和 128 维的向量大小。存储需求会按维度缩减的比例减少,但质量损失并不遵循同样的比例。

#真正区分模型的五个标准

本地 RAG 工具包

你的文档,你的 AI:基于你的 PDF、笔记和邮件的可靠本地 RAG——无需向云端发送任何内容。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款
训练语言
BGE-M3 和 Qwen3-Embedding 宣称支持超过 100 种语言,multilingual-e5-large 宣称支持 94 种。在 Ollama 中下载量很高的 nomic-embed-text-v1.5 和 mxbai-embed-large-v1,其模型说明页均标注为 English。
最大上下文长度
multilingual-e5-large、Solon 和 mxbai-embed-large 为 512 token;EmbeddingGemma 为 2048 token;BGE-M3 为 8192 token;Qwen3-Embedding 和 Granite R2 为 32000 token。过长的文本块会被截断,而不会被拒绝。
维度与存储
384 至 4 096 维;使用 float32 时,每个向量的每一维占 4 字节(计算见下文)。
许可证
BGE-M3、multilingual-e5-large 和 Solon 采用 MIT 许可证;Qwen3-Embedding、Granite R2、nomic 和 mxbai 采用 Apache 2.0 许可证;EmbeddingGemma 适用 Gemma 条款;jina-clip-v2 采用 CC BY-NC 4.0 许可证(非商业用途)。
前缀和指令
某些模型要求在每段文本前添加前缀(E5 使用“query:”和“passage:”,即使文本是法语也一样)。遗漏前缀会降低检索效果,但不会报错。

#2026年法语模型排名:共对比九个模型

该排名为编辑推荐,非内部测试:综合了法语支持、已发布基准测试及本地部署可用性。模型权重若在 Ollama 库中存在则采用该库权重,否则采用 MTEB-French 研究估算的 float32 权重。

法语嵌入模型:发布方提供的特性
模型维度 / 上下文许可证模型大小各来源对法语支持的说明
BGE-M3 (BAAI)1 024 / 8 192MIT1.2 GB (Ollama)检索 MTEB-French 0.65。支持密集、稀疏和多向量。推荐作为起点。
Qwen3-Embedding 0.6B / 4B / 8B1 024 / 2 560 / 4 096 ; 32 000Apache 2.0639 MB / 2.5 GB / 4.7 GB (Ollama)支持超过 100 种语言。据 Qwen 公布,多语言 MTEB 得分为:64.33 / 69.45 / 70.58。
EmbeddingGemma 300M (Google)768 (512, 256, 128) / 2 048Gemma622 MB (Ollama)超过100种语言。MTEB多语言v2:Google数据显示为61.15。
multilingual-e5-large1 024 / 512MIT2.24 GB(float32)MTEB-French 检索得分为 0.59。必须使用前缀。
Solon-embeddings-large-0.11 024 / 512MIT2.24 GB(float32)由 Ordalie Technologies 发布的法语模型。MTEB-French 检索得分为 0.63。
Granite Embedding 311M Multilingual R2 (IBM)768 / 32 768Apache 2.03.11亿参数法语是 52 种得到强化的语言之一。据 IBM 报告,多语言 MTEB 检索得分为 65.2;尚未查阅独立的法语评测。
nomic-embed-text v1.5768 / 8192(在 Ollama 中为 2048)Apache 2.0274 MB (Ollama)资料页标注的语言为英语。应仅用于英语语料库。
mxbai-embed-large-v1上下文长度512Apache 2.0670 MB (Ollama)资料页标注的语言为英语。应仅用于英语语料库。
all-MiniLM-L12-v2384Apache 2.03300 万参数MTEB-French 检索得分为 0.43。原型仅在 CPU 上运行。

BGE-M3 仍是最佳默认选择:其法语检索结果已公布,8,192 个 token 的上下文长度可避免大多数被迫切分的情况,它还提供有助于混合检索的词法权重。有显卡可用时,可以考虑 Qwen3-Embedding:据 Qwen 称,其 8B 版本在 2025 年 6 月 5 日发布时位居 MTEB 多语言排行榜榜首,但其 4,096 维向量会带来较大的存储负担。EmbeddingGemma 面向配置较低的设备。

Solon 常被介绍为法语法律和行政领域的专家,但在 MTEB-French 研究的三个检索数据集上,它都没有胜出:在 Syntec 集体协议数据集上与 BGE-M3 持平,在法律条文(BSARD)和学校学习问题(Alloprof)数据集上则落后于 BGE-M3。

#法语基准测试能说明什么,又不能说明什么

已发表的参考基准是MTEB-French(Ciancone等,2024年5月):18个数据集、8类任务,共比较了51个模型。作者得出结论,针对句子相似性进行预训练的大型多语言模型表现极为出色。以下是三个数据集上的检索结果(NDCG@10):法语法律条文(BSARD)、Syntec集体协议以及Alloprof的学科问题。

MTEB-French:各数据集的检索表现(NDCG@10),2024 年研究
模型检索平均分法律(BSARD)Syntec 集体劳动协议Alloprof
text-embedding-3-large (OpenAI API)0,730,730,870,60
mistral-embed (API Mistral)0,680,680,790,57
BGE-M30,650,600,850,49
Solon-embeddings-large-0.10,630,580,850,47
multilingual-e5-large0,590,590,810,38
multilingual-e5-small0,520,520,760,27
paraphrase-multilingual-MiniLM-L12-v20,440,380,660,27
all-MiniLM-L12-v20,430,340,610,33

有三项局限,因此不能据此给出最终排名。这项研究发表于 2024 年:既不包含 Qwen3-Embedding(2025 年 6 月),也不包含 EmbeddingGemma(2025 年 9 月)或 Granite R2,而且编写本页时并未参考这些模型在法语上的任何可比评测数据。研究所用的语料库(法律条文、集体劳动协议、学校教育问题)未必与您的语料库相似。最后,厂商公布的多语言评分是自行报告的数据,并且混合了所有语言的结果。

!
这些数字都不是您自己的实测结果
这些表格来自一项已发表的研究和模型发布方的资料,并非本站自行测试的结果。它们指出值得关注的方向,而不是断言哪个模型在您的实际使用中会胜出。要在两个表现相近的模型之间做出选择,最后一节介绍的方法会使用您自己的数据。

#不同场景该选哪个模型:决策表

选择用于法语的嵌入模型
您的情况优先测试的模型为什么注意事项
法语或法语 + 英语语料,电脑配置尚可BGE-M3法语检索得分为 0.65,与该研究中表现最好的开放模型处于同一水平在Ollama中为1.2 GB;无前缀
法律、行政、人力资源BGE-M3,随后对比 Solon在该研究的三个法语数据集上,BGE-M3 的表现与 Solon 持平或更好没有内部法律测试集来验证,选择一个模型仍是在冒险
低端设备或仅使用CPUEmbeddingGemma 300M,或 multilingual-e5-small在 Ollama 中大小为 622 MB;由 Google 为笔记本电脑和移动设备设计上下文长度为2048个token:分块较短
显卡可用,最高质量Qwen3-Embedding-4B 或 8B32000个标记,可调节维度,支持100多种语言2560 维和 4096 维:存储需求与索引限制
长片段、结构化文档BGE-M3、Qwen3-Embedding或Granite R28192 到 32768 个上下文标记过长的分块会稀释语义
商业用途,许可证审计BGE-M3、multilingual-e5-large、Solon、Qwen3-Embedding、Granite R2MIT 或 Apache 2.0重新阅读 Gemma 的使用条款;jina-clip-v2 为非商业用途

#企业定制嵌入模型:开放模型、微调或 API

“量身定制”并不意味着一开始就训练自己的模型。避免浪费时间的顺序是:先使用通用的开放模型,做好分块,采用混合检索和重排序器;然后用您的实际问题评估召回率;最后,只有在失败仍然持续、且原因在于业务术语(内部引用、公司自用缩写)时,才进行微调。

Philipp Schmid 于 2024 年 6 月使用从金融文档中提取的 6300 组问题与段落配对,对 bge-base-en-v1.5 模型进行了微调:在他的测试集上,检索得分提高了约 7.4%,训练在一块消费级显卡上耗时三分钟。这是一个英文案例,只涉及一个语料库,且配对由 LLM 生成:仅供了解大致量级,并非效果承诺。BAAI 也提供了 BGE-M3 微调的相关文档。

获取适合企业场景的嵌入向量的三种方式
选项何时选择限制
在本地运行的通用开放模型(BGE-M3、Qwen3-Embedding)默认起点;文本保留在您的网络内;MIT或Apache许可证尚未学会业务领域术语;需使用您的文档进行评估
开放模型微调混合检索和重排序器仍无法提升召回率;已有数千组问题与文本片段配对需要重新编码的语料库;模型需像软件一样进行版本管理;存在过拟合风险
嵌入 API(Mistral,OpenAI)无GPU,使用量适中;在2024年MTEB-French研究中,text-embedding-3-large和mistral-embed表现领先文本将离开您的网络;模型可能由供应商端变更;存在持续性成本
→
微调前的合理测试
如果目标内容出现在前二十个结果中但未出现在前五个结果中,这正是重排序(reranker)的适用场景:BAAI 建议采用混合检索后结合重排序。嵌入向量的微调旨在捕捉那些从未出现在检索结果中的段落。

#多模态嵌入:在图像和文档页面中进行检索

多模态嵌入模型将文本和图像映射到同一个向量空间。这样就可以根据一句话检索照片,或检索扫描的 PDF 页面,而无需经过 OCR。本页查阅的 Ollama 模型库中的模型(BGE-M3、Qwen3-Embedding、EmbeddingGemma、nomic-embed-text、mxbai-embed-large)仅接受文本输入:下面的多模态模型通过 Hugging Face(Sentence-Transformers 或 Transformers)使用。

开放的多模态嵌入模型
模型输入许可证须知
Qwen3-VL-Embedding 2B / 8B文本、图片、屏幕截图、视频Apache 2.032,000个token;2048和4096维;可调节维度
jina-clip-v2文本与图像;94种语言CC BY-NC 4.0仅限非商业用途:未经发布方许可,应避免用于付费产品或服务
ColPali v1.3图像形式的文档页面,多向量MIT(资料页)模型卡标注为英语;每页使用多个向量会改变存储方式

多模态模型在纯文本任务上并不更好。在 Qwen 发布的表格中,Qwen3-VL-Embedding-2B 在 MTEB 多语言评测中得分为 63.87,而 Qwen3-Embedding-0.6B 得分为 64.33,后者是一个参数量不到前者三分之一的文本模型。对于有效内容为文本的 PDF,请将其转换为干净的文本(使用 Docling 或 OCR),并继续使用文本嵌入模型。将多模态模型留给视觉类语料:示意图、图纸、截图、幻灯片。

#管理嵌入向量:前缀、截断、存储与重新索引

RAG 的效果下降往往更多是由这些细节造成的,而不是模型选择本身。第一个细节是:每个模型家族对问题和文档各有不同的输入格式要求。

各模型要求的前缀(问题和文档)
模型问题前的前缀文档之前
BGE-M3无无
multilingual-e5-largequery: passage: (必填,即使为法语)
Solon-embeddings-large-0.1query : 无
nomic-embed-text v1.5search_query: search_document:
mxbai-embed-large-v1用于检索相关段落的句子表示: 无
Qwen3-EmbeddingInstruct: {用一句话描述任务},换行,Query: {问题}无
EmbeddingGemmatask: search result | query: {question}title: {标题或 none} | text: {内容}

使用Ollama时,mxbai-embed-large的官方示例会将前缀直接嵌入发送的文本中:您需要在自己的代码中手动添加该前缀。Qwen表示指令通常可提升1%至5%的性能,即使在多语言语料库中,也建议使用英文编写指令。

#Ollama 的陷阱:静默截断

Ollama 的 /api/embed 接口有一个 truncate 参数,默认值为 true:输入超过模型的上下文窗口时,会被截断而不报错。使用 mxbai-embed-large(在 Ollama 中的上下文窗口为 512 个 token)时,一个 700 个 token 的分块会在缺少末尾内容的情况下被索引,而且没人察觉。Ollama 中的上下文长度也可能与原始模型说明不同:nomic-embed-text 在 Ollama 中为 2K,而 Nomic 公布的是 8 192。测试时请将 truncate 设为 false:宁可报错,也不要让文本被截断。

#维度、存储与索引限制

存储计算方式很简单:chunk 数量 × 维度 × 4 字节(float32),不包含索引。对于一百万个 chunk,向量本身占用的空间为:

一百万个文本块的 float32 向量,仅计算向量本身(计算值)
维度模型示例存储
256降维后的 EmbeddingGemma 或 Qwen3(Matryoshka)1.0 GB
384all-MiniLM-L12-v21.5 GB
768EmbeddingGemma, Granite R2, nomic3.1 GB
1 024BGE-M3,multilingual-e5-large,Qwen3-0.6B4.1 GB
2 560Qwen3-Embedding-4B10.2 GB
4 096Qwen3-Embedding-8B16.4 GB

数据库也有上限。使用 pgvector 时,索引最多支持 2,000 维向量,采用半精度(halfvec)时则最多支持 4,000 维:Qwen3-Embedding-8B 的 4,096 维甚至超过了这一限制。应对方法是截断向量,经过 Matryoshka 训练的模型(Qwen3-Embedding、EmbeddingGemma、nomic v1.5)支持这种做法,然后再重新归一化,正如 Google 针对 EmbeddingGemma 所说明的那样。Ollama 的 /api/embed API 接受 dimensions 参数,该参数应仅用于这些模型。

#版本管理与重新索引

需保留的元数据
模型的确切名称、修订版本、维度、前缀模板、分块参数、索引日期。没有这些信息,就没人知道检索为何发生了变化。
更换模型
将整个语料库重新编码到新的集合中,进行评估后切换。切勿在同一个集合中混合使用两个模型。
归一化
Ollama 返回 L2 归一化的向量:请在整个系统中使用相同的度量方式(余弦或点积)

#在实际场景中使用模型,并在您的文档上进行测试

Ollama:下载BGE-M3并生成嵌入向量
ollama pull bge-m3

curl http://localhost:11434/api/embed -d '{
  "model": "bge-m3",
  "input": "Le contrat débute le 1er mai."
}'
在 Python 中使用 Ollama:两个相近的文本,一个相距较远的文本
import numpy as np
import ollama

textes = [
    "Le contrat débute le 1er mai.",
    "Date de début : 01/05.",
    "La voiture est rouge.",
]
vecteurs = np.array(ollama.embed(model="bge-m3", input=textes)["embeddings"])

# Les vecteurs d'Ollama sont normalisés : le produit scalaire vaut le cosinus
print(vecteurs[0] @ vecteurs[1])
print(vecteurs[0] @ vecteurs[2])

只需记住两个分数的高低关系:第一个必须明显高于第二个。要认真比较两三个候选模型,下面的流程可以取代所有已发布的排名。

  1. 01
    构建一个真实的测试集
    收集 50 到 100 个真实用户提出的问题(客服咨询、工单、常见问题),并为每个问题标注包含答案的 chunk。由 LLM 编造的问题会让评测结果显得过于理想。
  2. 02
    使用每个候选模型进行编码
    按照前缀表先对 chunk 编码,再对问题编码;所有候选模型都应使用相同的 chunk 长度和存储维度。
  3. 03
    测量recall@5
    对于每个问题,检查前五个结果中是否包含正确的文本块。下面的脚本会完成这一计算。
  4. 04
    以成本为标准进行决策
    保留 recall@5 与最佳模型仅相差一到两个百分点的最轻量模型:体积是原来八倍的模型,每次重新索引都会增加存储和时间成本。
Sentence-Transformers:在您的数据上测量 recall@5
import numpy as np
from sentence_transformers import SentenceTransformer

modele = SentenceTransformer("BAAI/bge-m3")

chunks = [...]      # vos chunks (liste de textes)
questions = [...]   # 50 à 100 vraies questions
cible = [...]       # pour chaque question, l'index du bon chunk

C = modele.encode(chunks, normalize_embeddings=True)
Q = modele.encode(questions, normalize_embeddings=True)

top5 = np.argsort(-(Q @ C.T), axis=1)[:, :5]
recall5 = np.mean([cible[i] in top5[i] for i in range(len(questions))])
print(f"recall@5 = {recall5:.0%}")
→
持久化向量
每次启动都重新编码整个语料库是初学者RAG系统的最慢环节。将向量存储在数据库(Chroma、Qdrant、pgvector、FAISS)中,仅对新分块进行重新编码。
FAQ
最适合法语的嵌入模型是哪个?+
BGE-M3 是最佳起点:其法语检索成绩已公布(MTEB-French 中为 0.65),支持 8,192 个 token,采用 MIT 许可证,且可通过 Ollama 使用。Qwen3-Embedding 和 EmbeddingGemma 发布得更晚,未纳入这项研究。做决定前,请用您语料库中的五十个问题测试这些模型。
可以使用 nomic-embed-text 或 mxbai-embed-large 进行法语嵌入吗?+
它们的 Hugging Face 模型卡标注的语言是英语,而且它们未被纳入 MTEB-French 研究。从技术上说,它们可以处理法语,但质量没有保证。在 Ollama 中,nomic-embed-text 仅提供 2 048 个 token 的上下文,而 Nomic 宣布的上下文长度为 8 192 个 token。比较这两个模型,nomic 提供的上下文更长(在 Ollama 中为 2 048 个 token,而另一个为 512 个);mxbai 只要求为查询添加前缀。优先选择 BGE-M3。
是否存在 bge-m4 模型?+
FlagEmbedding 官方仓库中没有提及任何 bge-m4。该系列中的多语言模型名为 BGE-M3,其中 M3 代表三项特性:多功能(稠密、稀疏、多向量)、多语言(超过 100 种语言)和多粒度(最多 8,192 个 token)。如果某个网站提供 bge-m4,请在下载前核实其来源。
更换嵌入模型时需要重新索引吗?+
是的,需要全部重新索引。两个模型的向量位于不同的空间中,通常连维度都不相同。创建一个新的集合,使用新模型及其前缀模板重新编码所有文本块,测量召回率,然后切换。绝不要在同一个集合中混用两个模型。
多模态嵌入模型可以替代文本模型吗?+
不能,除非内容是视觉内容。在 Qwen 的评测表中,Qwen3-VL-Embedding-2B(63.87)在纯文本任务上的得分仍低于 Qwen3-Embedding-0.6B(64.33)。对于文本型 PDF,请先转换为文本,并继续使用文本嵌入模型。多模态模型适用于示意图、截图和幻灯片;注意,jina-clip-v2 不可用于商业用途。
是否需要为企业量身定制嵌入模型?+
起步阶段通常不需要。通用的开放模型、精心设计的分块策略、混合检索和重排序器就能解决大多数情况。当业务领域词汇导致召回率迟迟无法提升,且您拥有数千对问题与段落数据时,微调才有充分理由,之后还需完整重建索引。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。