说明文档
EmbeddingGemma 模型卡
模型页面: EmbeddingGemma
资源和技术文档:
使用条款: 条款
作者: Google DeepMind
模型信息
描述
EmbeddingGemma 是来自 Google 的 300M 参数、其规模下最前沿的开源嵌入模型,基于 Gemma 3(使用 T5Gemma 初始化)和用于创建 Gemini 模型的相同研究和技术构建。EmbeddingGemma 生成文本的向量表示,使其非常适合搜索和检索任务,包括分类、聚类和语义相似性搜索。该模型使用 100 多种口语语言的数据进行训练。
小型尺寸和设备端聚焦使其可以部署在资源有限的环境中,如手机、笔记本电脑或台式机,从而让每个人都能使用最前沿的 AI 模型,并帮助促进创新。
输入和输出
-
输入:
- 文本字符串,例如要嵌入的问题、提示或文档
- 最大输入上下文长度为 2048 个标记
-
输出:
- 输入文本数据的数值向量表示
- 输出嵌入维度大小为 768,还可通过 Matryoshka 表示学习 (MRL) 提供更小的选项(512、256 或 128)。MRL 允许用户将 768 大小的输出嵌入截断到所需大小,然后重新归一化,以实现高效准确的表示。
使用方法
这些模型权重设计用于配合 Transformers.js 使用。
注意: EmbeddingGemma 激活不支持 fp16 或其衍生版本。请根据您的硬件使用 fp32、q8 或 q4。
Transformers.js(JavaScript)
import { AutoModel, AutoTokenizer, matmul } from "@huggingface/transformers";
// 从 🤗 Hub 下载
const model_id = "onnx-community/embeddinggemma-300m-ONNX";
const tokenizer = await AutoTokenizer.from_pretrained(model_id);
const model = await AutoModel.from_pretrained(model_id, {
dtype: "fp32", // 选项: "fp32" | "q8" | "q4".
});
// 使用查询和文档运行推理
const prefixes = {
query: "task: search result | query: ",
document: "title: none | text: ",
};
const query = prefixes.query + "Which planet is known as the Red Planet?";
const documents = [
"Venus is often called Earth's twin because of its similar size and proximity.",
"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
"Jupiter, the largest planet in our solar system, has a prominent red spot.",
"Saturn, famous for its rings, is sometimes mistaken for the Red Planet.",
].map((x) => prefixes.document + x);
const inputs = await tokenizer([query, ...documents], { padding: true });
const { sentence_embedding } = await model(inputs);
// 计算相似度以确定排名
const scores = await matmul(sentence_embedding, sentence_embedding.transpose(1, 0));
const similarities = scores.tolist()[0].slice(1);
console.log(similarities);
// [ 0.30109718441963196, 0.6358831524848938, 0.4930494725704193, 0.48887503147125244 ]
// 将相似度转换为排名
const ranking = similarities.map((score, index) => ({ index, score })).sort((a, b) => b.score - a.score);
console.log(ranking);
// [
// { index: 1, score: 0.6358831524848938 },
// { index: 2, score: 0.4930494725704193 },
// { index: 3, score: 0.48887503147125244 },
// { index: 0, score: 0.30109718441963196 }
// ]
在 Python 中使用 ONNX Runtime
from huggingface_hub import hf_hub_download
import onnxruntime as ort
from transformers import AutoTokenizer
# 从 🤗 Hub 下载
model_id = "onnx-community/embeddinggemma-300m-ONNX"
model_path = hf_hub_download(model_id, subfolder="onnx", filename="model.onnx") # 下载图
hf_hub_download(model_id, subfolder="onnx", filename="model.onnx_data") # 下载权重
session = ort.InferenceSession(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_id)
# 使用查询和文档运行推理
prefixes = {
"query": "task: search result | query: ",
"document": "title: none | text: ",
}
query = prefixes["query"] + "Which planet is known as the Red Planet?"
documents = [
"Venus is often called Earth's twin because of its similar size and proximity.",
"Mars, known for its reddish appearance, is often referred to as the Red Planet.",
"Jupiter, the largest planet in our solar system, has a prominent red spot.",
"Saturn, famous for its rings, is sometimes mistaken for the Red Planet."
]
documents = [prefixes["document"] + x for x in documents]
inputs = tokenizer([query] + documents, padding=True, return_tensors="np")
_, sentence_embedding = session.run(None, inputs.data)
print(sentence_embedding.shape) # (5, 768)
# 计算相似度以确定排名
query_embeddings = sentence_embedding[0]
document_embeddings = sentence_embedding[1:]
similarities = query_embeddings @ document_embeddings.T
print(similarities) # [0.30109745 0.635883 0.49304956 0.48887485]
# 将相似度转换为排名
ranking = similarities.argsort()[::-1]
print(ranking) # [1 2 3 0]
在文本嵌入推理 (TEI) 中使用 ONNX Runtime
docker run -p 8080:80 \
ghcr.io/huggingface/text-embeddings-inference:cpu-1.8.1 \
--model-id onnx-community/embeddinggemma-300M-ONNX \
--dtype float32 \
--pooling mean
模型数据
训练数据集
该模型基于包含多种来源的文本数据进行训练,总计约 3200 亿个标记。关键组成部分如下:
- 网页文档: 多样化的网页文本集合确保模型接触到广泛的语言风格、主题和词汇。训练数据集包含超过 100 种语言的内容。
- 代码和技术文档: 让模型接触代码和技术文档有助于其学习编程语言和专业化科学内容的结构和模式,从而提高其对代码和技术问题的理解。
- 合成数据和任务特定数据: 合成训练数据有助于教授模型特定技能。这包括为信息检索、分类和情感分析等任务精心设计的数据,有助于微调其在常见嵌入应用中的性能。
这些多样化数据源的组合对于训练强大的多语言嵌入模型至关重要,该模型能够处理各种不同的任务和数据格式。
数据预处理
以下是应用于训练数据的关键数据清理和过滤方法:
- CSAM 过滤: 在数据准备过程的多个阶段应用了严格的 CSAM(儿童性虐待材料)过滤,以确保排除有害和非法内容。
- 敏感数据过滤: 作为使 Gemma 预训练模型安全可靠的一部分,使用自动化技术从训练集中过滤掉某些个人信息和其他敏感数据。
- 其他方法: 根据我们的政策进行基于内容和安全性的过滤。
模型开发
硬件
EmbeddingGemma 使用最新一代的张量处理单元 (TPU) 硬件(TPUv5e)进行训练,更多详细信息请参阅 Gemma 3 模型卡。
软件
训练使用 JAX 和 ML Pathways 完成。更多详细信息请参阅 Gemma 3 模型卡。
评估
基准测试结果
该模型针对大量不同的数据集和指标进行了评估,以涵盖文本理解的不同方面。
全精度检查点
<table> <thead> <tr> <th colspan="3"><strong>MTEB(多语言,v2)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>维度</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>768d</td> <td>61.15</td> <td>54.31</td> </tr> <tr> <td>512d</td> <td>60.71</td> <td>53.89</td> </tr> <tr> <td>256d</td> <td>59.68</td> <td>53.01</td> </tr> <tr> <td>128d</td> <td>58.23</td> <td>51.77</td> </tr> </tbody> </table>
<table> <thead> <tr> <th colspan="3"><strong>MTEB(英语,v2)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>维度</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>768d</td> <td>68.36</td> <td>64.15</td> </tr> <tr> <td>512d</td> <td>67.80</td> <td>63.59</td> </tr> <tr> <td>256d</td> <td>66.89</td> <td>62.94</td> </tr> <tr> <td>128d</td> <td>65.09</td> <td>61.56</td> </tr> </tbody> </table>
<table> <thead> <tr> <th colspan="3"><strong>MTEB(代码,v1)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>维度</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>768d</td> <td>68.76</td> <td>68.76</td> </tr> <tr> <td>512d</td> <td>68.48</td> <td>68.48</td> </tr> <tr> <td>256d</td> <td>66.74</td> <td>66.74</td> </tr> <tr> <td>128d</td> <td>62.96</td> <td>62.96</td> </tr> </tbody> </table>
QAT 检查点
<table> <thead> <tr> <th colspan="3"><strong>MTEB(多语言,v2)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>量化配置(维度)</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>Q4_0 (768d)</td> <td>60.62</td> <td>53.61</td> </tr> <tr> <td>Q8_0 (768d)</td> <td>60.93</td> <td>53.95</td> </tr> <tr> <td>混合精度* (768d)</td> <td>60.69</td> <td>53.82</td> </tr> </tbody> </table>
<table> <thead> <tr> <th colspan="3"><strong>MTEB(英语,v2)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>量化配置(维度)</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>Q4_0 (768d)</td> <td>67.91</td> <td>63.64</td> </tr> <tr> <td>Q8_0 (768d)</td> <td>68.13</td> <td>63.85</td> </tr> <tr> <td>混合精度* (768d)</td> <td>67.95</td> <td>63.83</td> </tr> </tbody> </table>
<table> <thead> <tr> <th colspan="3"><strong>MTEB(代码,v1)</strong></th> </tr> </thead> <tbody> <tr> <td><strong>量化配置(维度)</strong></td> <td><strong>平均值(任务)</strong></td> <td><strong>平均值(任务类型)</strong></td> </tr> <tr> <td>Q4_0 (768d)</td> <td>67.99</td> <td>67.99</td> </tr> <tr> <td>Q8_0 (768d)</td> <td>68.70</td> <td>68.70</td> </tr> <tr> <td>混合精度* (768d)</td> <td>68.03</td> <td>68.03</td> </tr> </tbody> </table>
注意:QAT 模型在量化后进行评估
* 混合精度指对嵌入层、前馈层和投影层使用 int4、对注意力层使用 int8 的按通道量化(e4_a8_f4_p4)。
提示指令
EmbeddingGemma 可以使用预先添加到输入字符串的提示,为各种用例(如文档检索、问答和事实验证)或特定输入类型(查询或文档)生成优化的嵌入。
查询提示遵循 task: {任务描述} | query: 的形式,其中任务描述因用例而异,默认任务描述为 search result。文档风格提示遵循 title: {标题 | "none"} | text: 的形式,其中标题为 none(默认)或文档的实际标题。请注意,如果提供标题(如果有),将改善文档提示的模型性能,但可能需要手动格式化。
根据您的用例和输入数据类型使用以下提示。这些提示可能在您所选建模框架的 EmbeddingGemma 配置中已经可用。
<table> <thead> <tr> <th><br> <strong>用例(任务类型枚举)</strong></th> <th><br> <strong>描述</strong></th> <th><br> <strong>推荐提示</strong></th> </tr> </thead> <tbody> <tr> <td><br> 检索(查询)</td> <td rowspan="4"><br> 用于生成针对文档搜索或信息检索优化的嵌入</td> <td><br> task: search result | query: {内容}</td> </tr> <tr> <td><br> 检索(文档)</td> <td><br> title: {标题 | "none"} | text: {内容}</td> </tr> <tr> <td><br> 问答</td> <td><br> task: question answering | query: {内容}</td> </tr> <tr> <td><br> 事实核查</td> <td><br> task: fact checking | query: {内容}</td> </tr> <tr> <td><br> 分类</td> <td><br> 用于生成针对根据预定义标签对文本进行分类优化的嵌入</td> <td><br> task: classification | query: {内容}</td> </tr> <tr> <td><br> 聚类</td> <td><br> 用于生成针对根据相似性对文本进行聚类优化的嵌入</td> <td><br> task: clustering | query: {内容}</td> </tr> <tr> <td><br> 语义相似性</td> <td><br> 用于生成针对评估文本相似性优化的嵌入。这不适用于检索用例。</td> <td><br> task: sentence similarity | query: {内容}</td> </tr> <tr> <td><br> 代码检索</td> <td><br> 用于根据自然语言查询检索代码块,例如 <em>对数组排序</em> 或 <em>反转链表</em>。代码块的嵌入使用 retrieval_document 计算。</td> <td><br> task: code retrieval | query: {内容}</td> </tr> </tbody> </table>
使用和限制
这些模型存在某些用户应该注意的限制。
预期用途
开源嵌入模型在各行业和领域有广泛的应用。以下潜在用途列表并不全面。此列表的目的是提供关于模型创建者在模型训练和开发过程中考虑的可能用例的背景信息。
-
语义相似性: 优化的嵌入用于评估文本相似性,例如推荐系统和重复检测
-
分类: 优化的嵌入用于根据预定义标签对文本进行分类,例如情感分析和垃圾邮件检测
-
聚类: 优化的嵌入用于根据相似性对文本进行聚类,例如文档组织、市场研究和异常检测
-
检索
- 文档: 针对文档搜索优化的嵌入,例如为搜索索引文章、书籍或网页
- 查询: 针对一般搜索查询优化的嵌入,例如自定义搜索
- 代码查询: 针对根据自然语言查询检索代码块优化的嵌入,例如代码建议和搜索
-
问答: 用于问答系统中问题的嵌入,优化用于查找回答问题的文档,例如聊天机器人。
-
事实核查: 用于需要验证的事实的嵌入,优化用于检索包含支持或反驳该声明的证据的文档,例如自动化事实核查系统。
限制
-
训练数据
- 训练数据的质量和多样性显著影响模型的能力。训练数据中的偏见或差距可能导致模型响应的限制。
- 训练数据集的范围决定了模型可以有效处理的主题领域。
-
语言歧义和细微差别
- 自然语言本质上是复杂的。模型可能难以理解细微的差别、讽刺或比喻语言。
道德考量和风险
已识别的风险和缓解措施:
- 偏见的延续: 鼓励在模型训练、微调和其他用例期间进行持续监控(使用评估指标、人工审查)并探索去偏见技术。
- 恶意用途的滥用: 技术限制以及开发者和最终用户教育有助于防止嵌入的恶意应用。提供教育资源供用户报告滥用情况的机制。Gemma 模型的禁止用途在 Gemma 禁止使用政策 中列出。
- 隐私违规: 模型在经过过滤以移除某些个人信息和其他敏感数据的数据上进行训练。鼓励开发者遵守隐私法规并采用隐私保护技术。
优势
在发布时,与同尺寸模型相比,这一系列模型提供了从负责任 AI 开发角度设计的高性能开源嵌入模型实现。使用本文件中描述的基准评估指标,这些模型在性能上优于其他同尺寸的开源模型替代品。
onnx-community/embeddinggemma-300m-ONNX
作者 onnx-community
创建时间: 2025-08-22 16:41:16+00:00
更新时间: 2025-09-04 15:43:56+00:00
在 Hugging Face 上查看