Transformers documentation
EmbeddingGemma2
该模型于 2026-10-06 贡献至 Hugging Face Transformers。
EmbeddingGemma2
概述
EmbeddingGemma 2 是 Google 基于 Gemma 4 架构构建的多模态嵌入模型。它将 文本、图像、音频和视频——无论是单独输入还是在同一输入中组合——编码到共享的 768 维稠密向量空间中,用于跨模态检索、语义相似度计算、聚类和分类。
主要功能:
- 统一的多模态向量空间。视觉(Gemma4VisionModel)和音频(Gemma4AudioModel)塔将特征投影到双向文本编码器(EmbeddingGemma2TextModel)中,该编码器交替使用全注意力和滑动窗口注意力,并结合逐层嵌入(PLE)。任何单一模态(
text、image、audio、video)或模态组合(image + text、text + audio、image + audio、多张图片、文本与媒体交错)都会映射到一个可比较的单一嵌入。 - Matryoshka 表示学习(MRL)。 EmbeddingGemma2Model 通过线性头将 token 表示投影到
embedding_dim(768)。嵌入可以被截断为更短的前缀(512、256或128)并重新归一化,且质量损失极小。 - 可配置的视觉与视频预算。 EmbeddingGemma2Processor 允许您调整每张图像或每帧的软令牌预算(
{70, 140, 280, 560, 1120}中的max_soft_tokens)以及视频采样率(默认值为fps=1、max_frames=32、overflow_strategy="uniform"、add_timestamps=False)。 - 选择性加载模态塔。在加载时,可以禁用未使用的视觉或音频塔(
vision_config=None、audio_config=None),以降低纯文本或单模态部署的内存占用。
您可以在 EmbeddingGemma 集合中找到所有原始的 EmbeddingGemma 检查点。以下示例使用的是 google/embeddinggemma-2 标识符。
使用示例
句子或多模态嵌入通过两个步骤获得:首先对 last_hidden_state 中非填充 token 执行掩码感知的均值池化,然后在 float32 精度下进行 L2 归一化。Sentence Transformers(>=6.1.0)会自动执行预处理、提示词格式化、均值池化和归一化,是推荐的入口点。若使用 AutoModel,请调用 processor.apply_chat_template(纯文本则使用 AutoTokenizer),并直接对 last_hidden_state 进行池化。
文本检索(encode_query / encode_document)
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
queries = ["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.",
]
# encode_query and encode_document apply the "query" and "document" task prompts
query_embeddings = model.encode_query(queries)
document_embeddings = model.encode_document(documents)
print(query_embeddings.shape, document_embeddings.shape)
# (1, 768) (2, 768)
# (1, 2) matrix of cosine similarities
print(model.similarity(query_embeddings, document_embeddings))import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/embeddinggemma-2")
# Prepend the task prompt directly to plain text inputs (see Task prompts below)
sentences = [
"task: search result | query: Which planet is known as the Red Planet?",
"title: none | text: Venus is often called Earth's twin because of its similar size and proximity.",
"title: none | text: Mars, known for its reddish appearance, is often referred to as the Red Planet.",
]
inputs = tokenizer(sentences, padding=True, return_tensors="pt").to(model.device)
with torch.no_grad():
# (batch_size, sequence_length, config.text_config.embedding_dim)
token_embeddings = model(**inputs).last_hidden_state
# Mask-aware mean pooling over non-padded tokens, then L2 normalization in float32
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
sentence_embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
sentence_embeddings = F.normalize(sentence_embeddings.float(), p=2, dim=-1)
query_embedding, document_embeddings = sentence_embeddings[:1], sentence_embeddings[1:]
print(query_embedding @ document_embeddings.T)任务提示
该模型支持在输入前添加可选的任务提示(并纳入平均池化计算),但提示并非必需,模型在没有提示的情况下也能正常工作。由于最佳配置取决于下游领域和模态组合,我们建议在您的具体任务上分别评估使用和不使用任务提示的效果。Sentence Transformers 在 config_sentence_transformers.json 中提供了以下目录,因此请传入 prompt_name(或使用 encode_query / encode_document,它们分别映射到 query 和 document);如果使用 AutoModel,请在 apply_chat_template 中将提示作为 system 消息传入(或将其前置到纯文本中)。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
embeddings = model.encode("How to train a neural network", prompt_name="Classification")prompt_name | prompt |
|---|---|
query, Retrieval-query, Retrieval, Reranking, BitextMining, SearchQuery | task: search result \| query: |
document, Document, Retrieval-document | title: none \| text: |
Classification, MultilabelClassification | task: classification \| query: |
Clustering | task: clustering \| query: |
CodeRetrieval, InstructionRetrieval | task: code retrieval \| query: |
FactChecking | task: fact checking \| query: |
QuestionAnswering | task: question answering \| query: |
STS, SentenceSimilarity, PairClassification, Summarization | task: sentence similarity \| query: |
Matryoshka 嵌入
嵌入头采用 Matryoshka Representation Learning 进行训练,因此可以将 768 维的嵌入截取为较短的前缀(512、256 或 128)并重新归一化。这能缩小索引规模并加快检索速度,同时基本保持排序质量。请将查询和文档截断为相同的维度,并在截取后始终进行归一化——在 Sentence Transformers 中,truncate_dim 截取的是已归一化的输出,因此前缀不再具有单位长度。
import torch.nn.functional as F
from sentence_transformers import SentenceTransformer
# truncate_dim can also be set once at load time: SentenceTransformer(..., truncate_dim=256)
model = SentenceTransformer("google/embeddinggemma-2")
queries = ["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.",
]
query_embeddings = model.encode_query(queries, truncate_dim=256, convert_to_tensor=True)
document_embeddings = model.encode_document(documents, truncate_dim=256, convert_to_tensor=True)
query_embeddings = F.normalize(query_embeddings.float(), p=2, dim=-1)
document_embeddings = F.normalize(document_embeddings.float(), p=2, dim=-1)
# (1, 256) and (2, 256): a 3x smaller index than the full 768 dimensions
print(query_embeddings.shape, document_embeddings.shape)
# the Mars document still ranks first
print(model.similarity(query_embeddings, document_embeddings))import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoTokenizer
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("google/embeddinggemma-2")
sentences = [
"task: search result | query: Which planet is known as the Red Planet?",
"title: none | text: Venus is often called Earth's twin because of its similar size and proximity.",
"title: none | text: Mars, known for its reddish appearance, is often referred to as the Red Planet.",
]
inputs = tokenizer(sentences, padding=True, return_tensors="pt").to(model.device)
with torch.no_grad():
token_embeddings = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
sentence_embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
# Slice to the first 256 dimensions, then normalize
sentence_embeddings = F.normalize(sentence_embeddings[:, :256].float(), p=2, dim=-1)
print(sentence_embeddings.shape)
# torch.Size([3, 256])
query_embedding, document_embeddings = sentence_embeddings[:1], sentence_embeddings[1:]
# the Mars document still ranks first
print(query_embedding @ document_embeddings.T)多模态嵌入
文本、图像、音频和视频被映射到同一个 768 维向量空间中,从而支持跨模态检索(例如使用文本查询搜索图像、音频或视频)以及组合多模态检索(将多种模态组合为单个查询或文档嵌入)。
在 Sentence Transformers 中,多模态输入以字典形式传入,键为 "text"、"image"、"audio" 和 "video"(每个值可以是单个项目,也可以是项目列表)。使用 AutoModel 时,将聊天风格的消息列表传入 processor.apply_chat_template(..., tokenize=True, return_dict=True, return_tensors="pt")。
1. 单模态与跨模态检索
每种模态(text、image、audio、video)都可以独立嵌入,并通过余弦相似度直接与其他任意模态进行比较:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
# Embed each modality on its own into the shared (768,) space
candidates = model.encode(
[
{"text": "A photo of a cat"},
{"image": IMAGE},
{"audio": "path/to/audio.wav"},
{"video": "path/to/video.mp4"},
]
)
print(candidates.shape)
# (4, 768)
# Cross-modal retrieval: rank text, image, audio, and video candidates against a text query
query = model.encode_query(["A fluffy cat outdoors"])
print(model.similarity(query, candidates))
# tensor([[...]]) of shape (1, 4)import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoProcessor
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
conversations = [
[{"role": "user", "content": [{"type": "text", "text": "A photo of a cat"}]}],
[{"role": "user", "content": [{"type": "image", "url": IMAGE}]}],
[{"role": "user", "content": [{"type": "audio", "url": "path/to/audio.wav"}]}],
[{"role": "user", "content": [{"type": "video", "url": "path/to/video.mp4"}]}],
]
inputs = processor.apply_chat_template(
conversations,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
token_embeddings = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
embeddings = F.normalize(embeddings.float(), p=2, dim=-1)
print(embeddings.shape)
# torch.Size([4, 768])2. 组合多模态嵌入(单个输入中包含多种模态)
可以将多种模态——或同一模态的多个项目——组合成一个单一的联合嵌入,包括纯非文本组合,例如image + audio:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
IMAGE_1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
IMAGE_2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png"
composed_embeddings = model.encode(
[
# text + image
{"text": "A photo of a cat", "image": IMAGE_1},
# text + audio
{"text": "A song", "audio": "path/to/audio.wav"},
# image + audio (no text required)
{"image": IMAGE_1, "audio": "path/to/audio.wav"},
# multiple images + audio + text in one embedding
{"image": [IMAGE_1, IMAGE_2], "audio": "path/to/audio.wav", "text": "Compare both cats"},
]
)
print(composed_embeddings.shape)
# (4, 768)import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoProcessor
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
conversations = [
# text + image
[
{
"role": "user",
"content": [
{"type": "text", "text": "A photo of a cat"},
{"type": "image", "url": IMAGE},
],
}
],
# text + audio
[
{
"role": "user",
"content": [
{"type": "text", "text": "A song"},
{"type": "audio", "url": "path/to/audio.wav"},
],
}
],
# image + audio (no text required)
[
{
"role": "user",
"content": [
{"type": "image", "url": IMAGE},
{"type": "audio", "url": "path/to/audio.wav"},
],
}
],
]
inputs = processor.apply_chat_template(
conversations,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
token_embeddings = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
embeddings = F.normalize(embeddings.float(), p=2, dim=-1)
print(embeddings.shape)
# torch.Size([3, 768])3. 自动排序与手动占位符
当文本中未出现占位符标记(<|image|>、<|video|>、<|audio|>)时,模态将按照其条目在字典或聊天消息 content 中出现的顺序依次输出(紧随任何 system 任务提示之后)。
要在句子中的特定位置交错插入文本和媒体,请在文本中直接写入 <|image|>、<|video|> 或 <|audio|>——此时该输入将禁用自动占位符插入,并且每个占位符会按顺序与提供的媒体项进行展开:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
IMAGE_1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
IMAGE_2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png"
# 1. Automatic ordering: follows the dictionary's key order
# -> <bos> [prompt] <image_tokens> <text_tokens> <eos>
image_first = model.encode({"image": IMAGE_1, "text": "A photo of a cat"}, prompt_name="document")
# -> <bos> [prompt] <text_tokens> <image_tokens> <eos>
text_first = model.encode({"text": "A photo of a cat", "image": IMAGE_1}, prompt_name="document")
# 2. Manual placeholders: interleave media at exact positions in the text
# No extra placeholders are inserted; counts must match the passed media inputs.
interleaved = model.encode(
{
"text": "A jacket similar to <|image|> or <|image|> featured in <|audio|>",
"image": [IMAGE_1, IMAGE_2],
"audio": "path/to/audio.wav",
},
prompt_name="query",
)import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoProcessor
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE_1 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
IMAGE_2 = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/coco_sample.png"
# 1. Automatic ordering: follows the content list order after any system prompt
image_first_messages = [
{"role": "system", "content": "title: none | text: "},
{
"role": "user",
"content": [
{"type": "image", "url": IMAGE_1},
{"type": "text", "text": "A photo of a cat"},
],
},
]
# 2. Manual placeholders: interleave media at exact positions in the text
interleaved_messages = [
{"role": "system", "content": "task: search result | query: "},
{
"role": "user",
"content": [
{"type": "image", "url": IMAGE_1},
{"type": "image", "url": IMAGE_2},
{"type": "audio", "url": "path/to/audio.wav"},
{"type": "text", "text": "A jacket similar to <|image|> or <|image|> featured in <|audio|>"},
],
},
]
inputs = processor.apply_chat_template(
[image_first_messages, interleaved_messages],
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
token_embeddings = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
embeddings = F.normalize(embeddings.float(), p=2, dim=-1)4. 异构(混合模态)批处理
单个批次可以在一次前向传播中混合纯文本、单模态媒体和多模态输入,为每一行生成与单独编码每个条目时相同的嵌入:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
embeddings = model.encode(
[
"A photo of a cat",
{"image": IMAGE},
{"text": "A photo of a cat", "image": IMAGE},
{"audio": "path/to/audio.wav"},
],
prompt_name="document",
)
print(embeddings.shape)
# (4, 768)import torch
import torch.nn.functional as F
from transformers import AutoModel, AutoProcessor
model = AutoModel.from_pretrained("google/embeddinggemma-2", device_map="auto")
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
conversations = [
[
{"role": "system", "content": "title: none | text: "},
{"role": "user", "content": [{"type": "text", "text": "A photo of a cat"}]},
],
[
{"role": "system", "content": "title: none | text: "},
{"role": "user", "content": [{"type": "image", "url": IMAGE}]},
],
[
{"role": "system", "content": "title: none | text: "},
{
"role": "user",
"content": [
{"type": "text", "text": "A photo of a cat"},
{"type": "image", "url": IMAGE},
],
},
],
[
{"role": "system", "content": "title: none | text: "},
{"role": "user", "content": [{"type": "audio", "url": "path/to/audio.wav"}]},
],
]
inputs = processor.apply_chat_template(
conversations,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.no_grad():
token_embeddings = model(**inputs).last_hidden_state
mask = inputs["attention_mask"].unsqueeze(-1).to(token_embeddings.dtype)
embeddings = (token_embeddings * mask).sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
embeddings = F.normalize(embeddings.float(), p=2, dim=-1)
print(embeddings.shape)
# torch.Size([4, 768])5. 禁用未使用的模态塔(内存优化)
如果您的工作负载仅嵌入部分模态(例如,仅文本或文本 + 图像,不包含音频),您可以通过在配置中设置 vision_config=None 和/或 audio_config=None 来跳过实例化和加载未使用的视觉或音频塔。检查点中未使用的塔权重会被干净地忽略,不会发出警告。去掉音频塔后,模型参数量从 744M 降至 439M;如果两个塔都不使用,则降至 271M。
请通过 config_kwargs(它会传递到 AutoConfig.from_pretrained)传入这些参数,而不是 model_kwargs:
from sentence_transformers import SentenceTransformer
# Text-only deployment (skips both vision and audio towers)
text_model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None},
)
# Vision + text deployment (skips audio tower)
vision_text_model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"audio_config": None},
)from transformers import AutoModel
# Text-only deployment (skips both vision and audio towers)
text_model = AutoModel.from_pretrained(
"google/embeddinggemma-2",
vision_config=None,
audio_config=None,
device_map="auto",
)
# Vision + text deployment (skips audio tower)
vision_text_model = AutoModel.from_pretrained(
"google/embeddinggemma-2",
audio_config=None,
device_map="auto",
)处理器
EmbeddingGemma2Processor 集成了分词器、图像处理器、音频特征提取器和视频处理器。
对于批量多模态输入,我们建议通过 Sentence Transformers 传入每个样本的字典(
model.encode([{"image": ..., "text": ...}, ...]))。若要最大程度地精确控制模态的顺序和交错方式,请在text中手动包含<|image|>、<|video|>和<|audio|>占位符。
控制视觉令牌预算(max_soft_tokens)
软令牌预算(max_soft_tokens,支持的取值为 {70, 140, 280, 560, 1120})控制每张图像或视频帧生成的视觉令牌的分辨率和数量(默认每张图像为 280,每帧视频为 140)。较低的取值会缩短序列长度并降低延迟:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image_embedding = model.encode(
{"image": IMAGE},
processing_kwargs={"image": {"max_soft_tokens": 70}},
)from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
inputs = processor(images=[IMAGE], max_soft_tokens=70, return_tensors="pt")
print(inputs["input_ids"].shape, inputs["pixel_values"].shape)
# torch.Size([1, 67]) torch.Size([1, 630, 768])视频帧采样控制
默认情况下,EmbeddingGemma2VideoProcessor 以 1 FPS(fps=1)采样帧,将每个片段限制为 32 帧(max_frames=32,overflow_strategy="uniform"),并且不在提示中包含帧时间戳(add_timestamps=False)。每次调用时都可以覆盖这些参数:
fps(int | float | None):目标采样率,单位为帧/秒。需要包含有效fps和duration的VideoMetadata(从视频文件/URL 解码时会自动填充)。对于没有元数据的预解码帧数组,将跳过 FPS 采样并发出警告,直接应用max_frames。max_frames(int | None):每个视频保留的最大帧数。overflow_strategy("uniform" | "truncate" | None):当帧数超过max_frames时,如何减少多余的帧("uniform"在整个片段中均匀重采样;"truncate"保留前max_frames帧)。add_timestamps(bool):是否在每个帧的 soft-token 块前添加其mm:ss时间戳。与fps不同,此参数没有回退机制:如果视频的元数据中没有fps,设置add_timestamps=True会引发异常,因为猜测的帧率会将错误的mm:ss标签写入提示词。
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
video_embedding = model.encode(
{"video": "path/to/video.mp4"},
processing_kwargs={"video": {"add_timestamps": True, "fps": 2, "max_frames": 16, "overflow_strategy": "truncate"}},
)from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
inputs = processor(
videos=["path/to/video.mp4"],
add_timestamps=True,
fps=2,
max_frames=16,
overflow_strategy="truncate",
return_tensors="pt",
)直接调用 processor(...) 而不使用聊天模板
虽然 processor.apply_chat_template 是多模态对话的主要入口,但也可以直接调用 processor(...)。当省略 text(即 text=None)时,会为批次中的每个样本自动合成 <|image|>、<|video|> 和 <|audio|> 占位符:
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/embeddinggemma-2")
IMAGE = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
AUDIO = "path/to/audio.wav" # a path, a URL, or a 1-D float array sampled at 16 kHz
# Text only
inputs = processor(text=["task: search result | query: Which planet is the Red Planet?"], return_tensors="pt")
# Media only (text=None): placeholders are synthesized per sample
inputs = processor(images=[IMAGE], return_tensors="pt")
inputs = processor(videos=["path/to/video.mp4"], return_tensors="pt")
inputs = processor(audio=[AUDIO], return_tensors="pt")
# Nested per-sample lists or combined modalities with text=None
inputs = processor(
images=[[IMAGE, IMAGE], [IMAGE]],
audio=[[AUDIO], [AUDIO, AUDIO]],
return_tensors="pt",
)
# Manual placeholders in text for direct processor calls
inputs = processor(text=["<|image|> a photo of a cat"], images=[[IMAGE]], return_tensors="pt")
print(list(inputs.keys()))
# ['input_ids', 'attention_mask', 'pixel_values', 'image_position_ids']EmbeddingGemma2TextConfig
class transformers.EmbeddingGemma2TextConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonevocab_size: int = 262144hidden_size: int = 512intermediate_size: int = 2048num_hidden_layers: int = 24num_attention_heads: int = 4num_key_value_heads: int = 2head_dim: int = 256hidden_activation: str = 'gelu_pytorch_tanh'max_position_embeddings: int = 262144initializer_range: float = 0.02rms_norm_eps: float = 1e-06pad_token_id: int | None = 0eos_token_id: int | list[int] | None = 1bos_token_id: int | None = 2rope_parameters: dict | None = Noneattention_bias: bool = Falseattention_dropout: int | float | None = 0.0sliding_window: int = 512layer_types: list[str] | None = Nonehidden_size_per_layer_input: int = 512embedding_dim: int = 768 )
参数
- vocab_size (
int,可选,默认为262144) — 模型的词表大小。定义了input_ids可以表示的不同 token 数量。 - hidden_size (
int,可选,默认为512) — 隐藏表示的维度。 - intermediate_size (
int,可选,默认为2048) — MLP 表示的维度。 - num_hidden_layers (
int,可选,默认为24) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int,可选,默认为4) — Transformer 解码器中每个注意力层的注意力头数量。 - num_key_value_heads (
int, 可选,默认为2) — 这是用于实现 Grouped Query Attention 的 key_value 头数。如果num_key_value_heads=num_attention_heads,模型将使用 Multi Head Attention (MHA);如果num_key_value_heads=1,模型将使用 Multi Query Attention (MQA);否则将使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行平均池化来构建。更多详情请参阅 这篇论文。如果未指定,则默认为num_attention_heads。 - head_dim (
int,可选,默认为256) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads - hidden_activation (
str, 可选, 默认为gelu_pytorch_tanh) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - max_position_embeddings (
int,可选,默认为262144) — 该模型可能使用的最大序列长度。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - rms_norm_eps (
float,可选,默认为1e-06) — RMS 归一化层使用的 epsilon 值。 - pad_token_id (
int, 可选,默认为0) — 词表中用于填充的 token id。 - eos_token_id (
Union[int, list[int]],可选,默认为1) — 词汇表中用于表示流结束(end-of-stream)的 token id。 - bos_token_id (
int,可选,默认为2) — 词汇表中用于表示流起始的 Token id。 - rope_parameters (
dict, 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含rope_theta的值,并且如果希望使用 RoPE 处理更长的max_position_embeddings,则可选地包含用于缩放的参数。 - attention_bias (
bool,可选,默认为False) — 在自注意力机制中,是否在 query、key、value 和 output 投影层中使用偏置。 - attention_dropout (
Union[int, float],可选,默认为0.0) — 注意力概率的 dropout 比率。 - sliding_window (
int, 可选,默认值为 512) — 双向滑动窗口的包含半径:sliding_attention层会关注所有满足abs(q_idx - kv_idx) <= sliding_window的位置。它是一个半径,而非因果 Gemma 模型所配置的单侧宽度,因为此处的掩码是对称的,所以默认值是参考实现中 1024 宽度窗口的一半。 - layer_types (
list[str], 可选) — 一个列表,用于显式地将每个层索引映射到其层类型。如果未提供,将根据 config 值自动生成。 - hidden_size_per_layer_input (
int,可选,默认值为 512) — 逐层(PLE)残差信号的维度。EmbeddingGemma 2 采用仅投影的 PLE:该信号仅由inputs_embeds推导得出,不使用辅助 token 查找表。 - embedding_dim (
int,可选,默认为 768) —embedding_projection生成的句子嵌入的维度。
这是用于存储 EmbeddingGemma2Model 配置的类。它根据指定的参数实例化 Embedding Gemma2 模型,并定义模型架构。使用默认值实例化配置,将得到与 google/embeddinggemma-2 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
EmbeddingGemma2Config
class transformers.EmbeddingGemma2Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_config: transformers.models.embedding_gemma2.configuration_embedding_gemma2.EmbeddingGemma2TextConfig | dict[str, typing.Any] | None = Nonevision_config: transformers.configuration_utils.PreTrainedConfig | dict[str, typing.Any] | None = Noneaudio_config: transformers.configuration_utils.PreTrainedConfig | dict[str, typing.Any] | None = Noneboi_token_id: int | None = 255999eoi_token_id: int | None = 258882image_token_id: int | None = 258880video_token_id: int | None = 258884boa_token_id: int | None = 256000eoa_token_index: int | None = 258883audio_token_id: int | None = 258881initializer_range: float | None = 0.02 )
参数
- text_config (
EmbeddingGemma2TextConfig,可选) — 文本主干的配置。 - vision_config (
PreTrainedConfig或dict,可选) — 视觉塔的配置文件。直接沿用自 Gemma 4;该塔本身在运行时通过AutoModel解析。 - audio_config (
PreTrainedConfig或dict,可选) — 音频塔的配置文件。直接沿用自 Gemma 4;塔本身在运行时通过AutoModel解析。 - boi_token_id (
int,可选,默认为 255999) — 用于包裹图像提示的图像起始(begin-of-image)标记索引。 - eoi_token_id (
int, 可选,默认为 258882) — 用于包裹图像提示的图像结束标记索引。 - image_token_id (
int,可选,默认为258880) — 用作输入图像占位符的图像 token 索引。 - video_token_id (
int,可选,默认为258884) — 用作输入视频占位符的视频 token 索引。 - boa_token_id (
int,可选,默认为 256000) — 用于包裹音频提示的音频起始(begin-of-audio)标记索引。 - eoa_token_index (
int,可选,默认值为 258883) — 用于包裹音频提示的音频结束标记索引。 - audio_token_id (
int,可选,默认为258881) — 用作输入音频占位符的音频 token 索引。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
这是用于存储 EmbeddingGemma2Model 配置的类。它根据指定的参数实例化 Embedding Gemma2 模型,并定义模型架构。使用默认值实例化配置,将得到与 google/embeddinggemma-2 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
EmbeddingGemma2VideoProcessor
class transformers.EmbeddingGemma2VideoProcessor
< source >( **kwargs: *<class 'transformers.models.embedding_gemma2.video_processing_embedding_gemma2.EmbeddingGemma2VideoProcessorKwargs'> )
参数
- do_convert_rgb (
bool,kwargs,可选,默认为True) — 是否将图像转换为 RGB。 - do_resize (
bool,kwargs,可选,默认为True) — 是否调整图像大小。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs,默认为None) — 描述输入到模型的最大维度。 - default_to_square (
bool,kwargs,可选,默认为True) — 当 size 为 int 时,是否在调整大小时默认使用正方形图像。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs,默认为3) — 如果调整图像大小,则使用的重采样滤波器。它可以是枚举PILImageResampling中的一个值。仅当do_resize设置为True时才会生效。 - do_rescale (
bool,kwargs,可选,默认为True) — 是否对图像进行重新缩放。 - rescale_factor (
float,kwargs,可选,默认为0.00392156862745098) — 当do_rescale设置为True时,用于对图像进行缩放的缩放因子。 - do_normalize (
bool,kwargs,可选,默认为True) — 是否对图像进行归一化。 - image_mean (
Union[float, list[float], tuple[float, ...]],kwargs,可选,默认为[0.0, 0.0, 0.0]) — 用于归一化的图像均值。仅当do_normalize设置为True时生效。 - image_std (
Union[float, list[float], tuple[float, ...]],kwargs,可选,默认为[1.0, 1.0, 1.0]) — 用于归一化的图像标准差。仅当do_normalize设置为True时生效。 - do_center_crop (
bool,kwargs,可选) — 是否对图像进行中心裁剪。 - do_pad (
bool, kwargs, 可选) — 是否对图像进行填充。填充操作会将图像填充至批次中的最大尺寸,或填充至每张图像的固定正方形尺寸。具体的填充策略取决于模型。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 应用center_crop后输出图像的尺寸。 - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 仅支持ChannelDimension.FIRST。为兼容旧版处理器而添加。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:"channels_first"或ChannelDimension.FIRST:图像采用 (num_channels, height, width) 格式。"channels_last"或ChannelDimension.LAST:图像采用 (height, width, num_channels) 格式。"none"或ChannelDimension.NONE:图像为 (height, width) 格式。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 用于处理视频的设备。如果未设置,则从输入视频中推断设备。 - do_sample_frames (
bool,kwargs,可选,默认为True) — 是否在处理前从视频中采样帧,还是处理整个视频。 - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — 视频的元数据,包含总时长、帧率(fps)和总帧数等信息。该元数据将用于从视频中采样帧或计算时间戳。除非您打算在预处理之前手动解码视频,否则请勿传入任何元数据。 - fps (
Annotated[int | float | None, None], kwargs,默认为1) — 当do_sample_frames=True时,每秒要采样的目标帧数。 - num_frames (
Annotated[int | None, None], kwargs) — 当do_sample_frames=True时,要采样的最大帧数。 - return_metadata (
bool,kwargs,可选,默认为False) — 是否返回视频元数据。视频元数据是一个包含视频时长、帧率、解码后端等信息的对象。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — 如果设置,将返回特定框架的张量。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 NumPynp.ndarray对象。
- patch_size (
int, kwargs, 可选) — 每个图像补丁的像素尺寸。 - max_soft_tokens (
int,kwargs,可选) — 每个视频帧中软(视觉)令牌的最大数量。 必须是 {70, 140, 280, 560, 1120} 之一。 - pooling_kernel_size (
int, kwargs, 可选) — 在分块(patchification)之后应用的空间池化核大小。 - add_timestamps (
bool,kwargs,可选) — 是否在每个视频占位符展开的帧前添加其mm:ss时间戳。 需要带有有效fps的VideoMetadata,因为无法从已解码的帧中推断时间戳。 - max_frames (
int, kwargs, 可选) — 要采样的最大帧数。如果设置,采样的索引将均匀重新采样以符合该预算。 - overflow_strategy (
str, kwargs, optional) — 用于将采样帧的总数削减至预算范围内的策略。 只能设置为 “uniform” 或 “truncate”。在基于 FPS 的采样之后应用;当基于 FPS 的采样关闭或不适用时,则单独应用。 - load_audio_from_video (
bool,kwargs,可选) — 是否加载输入视频的音轨。 - **kwargs (ProcessingKwargs,可选) — 每种模态(文本、图像、视频、音频)的额外处理选项。模型特定参数已在上方列出;有关支持参数的完整列表,请参阅 TypedDict 类。
构造一个 EmbeddingGemma2VideoProcessor 视频处理器。
预处理
< source >( videos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]]]**kwargs: *<class 'transformers.models.embedding_gemma2.video_processing_embedding_gemma2.EmbeddingGemma2VideoProcessorKwargs'> ) → ~image_processing_base.BatchFeature
参数
- videos (
Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]]) — 要预处理的视频。期望输入单个视频或一批视频,其像素值范围为 0 到 255。如果传入的像素值在 0 到 1 之间,请设置do_rescale=False。 - do_convert_rgb (
bool,kwargs,可选) — 是否将图像转换为 RGB。 - do_resize (
bool,kwargs,可选) — 是否调整图像大小。 - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 描述模型的最大输入维度。 - default_to_square (
bool, kwargs, 可选) — 当 size 为整数时,是否在调整大小时默认使用正方形图像。 - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — 如果调整图像大小,则使用的重采样滤波器。可以是枚举PILImageResampling中的一个值。仅当do_resize设置为True时生效。 - do_rescale (
bool,kwargs,可选) — 是否对图像进行重新缩放。 - rescale_factor (
float, kwargs, 可选) — 如果do_rescale设置为True,则用于对图像进行缩放的缩放因子。 - do_normalize (
bool,kwargs,可选) — 是否对图像进行归一化。 - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, 可选) — 用于归一化的图像均值。仅当do_normalize设置为True时生效。 - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, 可选) — 用于归一化的图像标准差。仅当do_normalize设置为True时生效。 - do_center_crop (
bool,kwargs,可选) — 是否对图像进行中心裁剪。 - do_pad (
bool, kwargs, 可选) — 是否对图像进行填充。填充操作会将图像填充至批次中的最大尺寸,或填充至每张图像的固定正方形尺寸。具体的填充策略取决于模型。 - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — 应用center_crop后输出图像的尺寸。 - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 仅支持ChannelDimension.FIRST。为兼容旧版处理器而添加。 - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, 可选) — 输入图像的通道维度格式。如果未设置,则从输入图像中推断通道维度格式。可以是以下之一:"channels_first"或ChannelDimension.FIRST:图像采用 (num_channels, height, width) 格式。"channels_last"或ChannelDimension.LAST:图像采用 (height, width, num_channels) 格式。"none"或ChannelDimension.NONE:图像为 (height, width) 格式。
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — 用于处理视频的设备。如果未设置,则从输入视频中推断设备。 - do_sample_frames (
bool, kwargs, 可选) — 是否在处理前对视频进行帧采样,还是处理整个视频。 - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — 视频的元数据,包含总时长、帧率(fps)和总帧数等信息。该元数据将用于从视频中采样帧或计算时间戳。除非您打算在预处理之前手动解码视频,否则请勿传入任何元数据。 - fps (
Annotated[int | float | None, None], kwargs) — 当do_sample_frames=True时,每秒要采样的目标帧数。 - num_frames (
Annotated[int | None, None], kwargs) — 当do_sample_frames=True时,要采样的最大帧数。 - return_metadata (
bool, kwargs, 可选) — 是否返回视频元数据。视频元数据是一个包含视频时长、帧率、解码后端等信息的对象。 - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — 如果设置为'pt',则返回堆叠的张量,否则返回张量列表。 - patch_size (
int, kwargs, 可选) — 每个图像补丁的像素尺寸。 - max_soft_tokens (
int,kwargs,可选) — 每个视频帧中软(视觉)令牌的最大数量。 必须是 {70, 140, 280, 560, 1120} 之一。 - pooling_kernel_size (
int, kwargs, 可选) — 在分块(patchification)之后应用的空间池化核大小。 - add_timestamps (
bool,kwargs,可选) — 是否在每个视频占位符展开的帧前添加其mm:ss时间戳。 需要带有有效fps的VideoMetadata,因为无法从已解码的帧中推断时间戳。 - max_frames (
int, kwargs, 可选) — 要采样的最大帧数。如果设置,采样的索引将均匀重新采样以符合该预算。 - overflow_strategy (
str, kwargs, optional) — 用于将采样帧的总数削减至预算范围内的策略。 只能设置为 “uniform” 或 “truncate”。在基于 FPS 的采样之后应用;当基于 FPS 的采样关闭或不适用时,则单独应用。 - load_audio_from_video (
bool,kwargs,可选) — 是否加载输入视频的音轨。
返回值
~image_processing_base.BatchFeature
- data (
dict) — 由 call 方法返回的列表/数组/张量字典(如 ‘pixel_values’ 等)。 - tensor_type (
Union[None, str, TensorType], 可选) — 您可以在此处指定 tensor_type,以便在初始化时将 PyTorch/Numpy 张量中的整数列表进行转换。
EmbeddingGemma2Processor
class transformers.EmbeddingGemma2Processor
< source >( feature_extractorimage_processortokenizervideo_processorchat_template = Noneimage_seq_length: int = 280audio_seq_length: int = 750audio_ms_per_token: int = 40**kwargs )
参数
- feature_extractor (Gemma4AudioFeatureExtractor) — 特征提取器是必需的输入。
- image_processor (Gemma4ImageProcessor) — 图像处理器是必需的输入。
- tokenizer (tokenizer_class) — 分词器是必需的输入。
- video_processor (EmbeddingGemma2VideoProcessor) — 视频处理器是必需的输入。
- chat_template (str) — 一个 Jinja 模板,用于将聊天中的消息列表转换为可分词的字符串。
- image_seq_length (int,可选,默认为 280) — 用于占位符扩展的每张图像的软标记数量。
- audio_seq_length (int,可选,默认为 750) — 每个音频片段中音频软令牌的最大数量。在计算动态音频令牌数量时,作为上限约束。
- audio_ms_per_token (int,可选,默认为 40) —
每个输出软 token 对应的音频毫秒数。用于动态计算音频占位 token 的数量,公式为
ceil(duration_ms / audio_ms_per_token)。 默认值 40 源自 SSCP 卷积在 10ms 帧上实现的 4 倍时间缩减。
构造一个 EmbeddingGemma2Processor,它将特征提取器、图像处理器、分词器和视频处理器封装为单一处理器。
[EmbeddingGemma2Processor] 提供了 [Gemma4AudioFeatureExtractor]、[Gemma4ImageProcessor]、[tokenizer_class] 和 [EmbeddingGemma2VideoProcessor] 的所有功能。有关更多信息,请参阅 [~Gemma4AudioFeatureExtractor]、[~Gemma4ImageProcessor]、[~tokenizer_class] 和 [~EmbeddingGemma2VideoProcessor]。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], NoneType] = Nonetext: str | list[str] | list[list[str]] | None = Nonevideos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]], NoneType] = Noneaudio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneaudio_from_video_indices: list[int] | None = None**kwargs: *<class 'transformers.processing_utils.ProcessingKwargs'> )
参数
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]], 可选) — 要预处理的图像。期望输入单张图像或一批图像,其像素值范围为 0 到 255。如果传入的图像像素值在 0 到 1 之间,请设置do_rescale=False。 - text (
Union[str, list[str], list[list[str]]],可选) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果传入预分词输入,请设置is_split_into_words=True,以避免与批量输入产生歧义。 - videos (
Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]], 可选) — 要预处理的视频。期望输入单个视频或一批视频,其像素值范围为 0 到 255。如果传入的像素值在 0 到 1 之间,请设置do_rescale=False。 - audio (
Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], 可选) — 要准备处理的音频或音频批次。每个音频可以是 NumPy 数组或 PyTorch 张量。 如果为 NumPy 数组/PyTorch 张量,每个音频的形状应为 (C, T),其中 C 为通道数,T 为音频的采样长度。 - audio_from_video_indices (
list[int], 可选) — 一个列表,用于描述每个音频槽的来源,其中None-> 与任何视频轨道均无关联的独立音频i-> 从 videos[i] 中提取的音频 如果audio每个槽位都有一个条目,则videos[i]的音频将直接取自该条目,而不会进行解码。
- return_tensors (
str或 TensorType, 可选) — 如果设置,将返回特定框架的张量。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 NumPynp.ndarray对象。
- **kwargs (ProcessingKwargs,可选) — 每种模态(文本、图像、视频、音频)的额外处理选项。模型特定参数已在上方列出;有关支持参数的完整列表,请参阅 TypedDict 类。
EmbeddingGemma2PreTrainedModel
类 transformers.EmbeddingGemma2PreTrainedModel
< source >( config: PreTrainedConfig*inputs**kwargs )
参数
- config (PreTrainedConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
EmbeddingGemma2TextModel
class transformers.EmbeddingGemma2TextModel
< source >( config: EmbeddingGemma2TextConfig )
参数
- config (EmbeddingGemma2TextConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
EmbeddingGemma 2 文本骨干网络。它拥有 embedding_projection,用于将最终隐藏状态映射到 config.embedding_dim,因此组合模型无需重写 forward。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.Tensor)
参数
- input_ids (
torch.LongTensor形状为(batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.LongTensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入input_ids。如果您希望对input_ids索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
返回值
BaseModelOutput 或 tuple(torch.Tensor)
一个 BaseModelOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(EmbeddingGemma2Config)和输入。
EmbeddingGemma2TextModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
EmbeddingGemma2Model
class transformers.EmbeddingGemma2Model
< source >( config: EmbeddingGemma2Config )
参数
- config (EmbeddingGemma2Config) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
EmbeddingGemma 2 模型:包含一个视觉骨干网络、一个音频骨干网络和一个文本骨干网络,其最终隐藏状态会被投影到 config.text_config.embedding_dim。该模型旨在被 SentenceTransformers 的均值池化和归一化操作所封装。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.LongTensor] = Nonepixel_values: typing.Optional[torch.Tensor] = Nonepixel_values_videos: typing.Optional[torch.Tensor] = Noneinput_features: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneinput_features_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneimage_position_ids: typing.Optional[torch.LongTensor] = Nonevideo_position_ids: typing.Optional[torch.LongTensor] = Nonenum_frames_per_video: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → EmbeddingGemma2ModelOutput or tuple(torch.Tensor)
参数
- input_ids (
torch.LongTensor形状为(batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 对应输入图像的张量。可以使用 Gemma4ImageProcessor 获取像素值。有关详细信息,请参阅 Gemma4ImageProcessor.call()(EmbeddingGemma2Processor 使用 Gemma4ImageProcessor 处理图像)。 - pixel_values_videos (
torch.Tensor,形状为(batch_size, num_frames, num_channels, frame_size, frame_size),可选) — 对应输入视频的张量。可以使用 EmbeddingGemma2VideoProcessor 获取视频的像素值。有关详细信息,请参阅 EmbeddingGemma2VideoProcessor.call()(EmbeddingGemma2Processor 使用 EmbeddingGemma2VideoProcessor 来处理视频)。 - input_features (
torch.Tensor,形状为(batch_size, sequence_length, feature_dim),可选) — 与输入音频特征对应的张量。可以使用 Gemma4AudioFeatureExtractor 获取音频特征。有关详细信息,请参阅 Gemma4AudioFeatureExtractor.call()(EmbeddingGemma2Processor 使用 Gemma4AudioFeatureExtractor 处理音频)。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- input_features_mask (
torch.Tensor,形状为(num_images, seq_length)) — 输入音频的注意力掩码。 - position_ids (
torch.LongTensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入input_ids。如果您希望对input_ids索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。 - image_position_ids(形状为
(batch_size, max_patches, 2)的torch.LongTensor,可选)— 来自图像处理器(image processor)的 2D patch 位置坐标,其中(-1, -1)表示填充(padding)。 该参数会传递给视觉编码器,用于计算位置嵌入(positional embedding)。 - video_position_ids(形状为
(total_num_frames, max_patches, 2)的torch.LongTensor,可选) — 来自视频处理器的 2D patch 位置坐标,其中(-1, -1)表示填充。 该参数会传递给视觉编码器,用于计算位置嵌入。 - num_frames_per_video(形状为
(num_videos,)的torch.LongTensor,可选) — 每个视频包含的帧数。只要传入了pixel_values_videos,就必须提供此参数,因为所有视频的帧都沿单一轴拼接在一起。
返回值
EmbeddingGemma2ModelOutput 或 tuple(torch.Tensor)
EmbeddingGemma2ModelOutput 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(EmbeddingGemma2Config)和输入。
EmbeddingGemma2Model 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
image_hidden_states (
torch.Tensor,可选) — 一个尺寸为(batch_size, num_images, sequence_length, hidden_size)的torch.Tensor。 由视觉编码器生成的模型 image_hidden_states,并在投影最后一个隐藏状态之后得到。audio_hidden_states (
torch.Tensor, 可选) — 大小为(batch_size, num_images, sequence_length, hidden_size)的torch.Tensor。 由音频编码器生成并在投影最后一个隐藏状态后得到的模型的 audio_hidden_states。
get_image_features
< source >( pixel_values: Tensorimage_position_ids: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size)) — 对应输入图像的张量。可以使用 Gemma4ImageProcessor 获取像素值。有关详细信息,请参阅 Gemma4ImageProcessor.call()(EmbeddingGemma2Processor 使用 Gemma4ImageProcessor 处理图像)。 - image_position_ids(形状为
(batch_size, max_patches, 2)的torch.LongTensor,可选) — 图像中每个 patch 的位置,以 (x, y) 坐标表示。填充 patch 用 (-1, -1) 表示。
返回值
BaseModelOutputWithPooling 或 tuple(torch.Tensor)
一个 BaseModelOutputWithPooling 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(EmbeddingGemma2Config)和输入。
将视觉模型的最后一个隐藏状态投影到语言模型空间。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.Tensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后得到。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 tanh 激活函数处理后的结果。线性层的权重在预训练期间通过下一句预测(分类)目标进行训练。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
get_video_features
< source >( pixel_values_videos: Tensorvideo_position_ids: typing.Optional[torch.LongTensor] = Nonenum_frames_per_video: typing.Optional[torch.LongTensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
参数
- pixel_values_videos (
torch.Tensor,形状为(total_num_frames, max_patches, patch_pixels)) — 批次中所有视频的帧,沿帧轴拼接而非堆叠在单独的视频轴上,以便将不同长度的视频一起进行批处理。 - video_position_ids(形状为
(total_num_frames, max_patches, 2)的torch.LongTensor,可选) — 来自视频处理器的 2D patch 位置坐标,其中(-1, -1)表示填充。 该参数会传递给视觉编码器,用于计算位置嵌入。 - num_frames_per_video(形状为
(num_videos,)的torch.LongTensor)— 每个视频所属的帧数,用于将扁平的帧序列按视频拆分。
返回值
BaseModelOutputWithPooling 或 tuple(torch.Tensor)
一个 BaseModelOutputWithPooling 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(EmbeddingGemma2Config)和输入。
将视觉编码器的最后一个隐藏状态投影到语言模型空间。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.Tensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后得到。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 tanh 激活函数处理后的结果。线性层的权重在预训练期间通过下一句预测(分类)目标进行训练。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
get_audio_features
< source >( input_features: Tensorinput_features_mask: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → EmbeddingGemma2AudioModelOutput or tuple(torch.Tensor)
参数
- input_features (
torch.Tensor,形状为(num_images, seq_length, num_features)) — 与输入音频对应的张量。 - input_features_mask (
torch.Tensor,形状为(num_images, seq_length)) — 输入音频的注意力掩码。
返回值
EmbeddingGemma2AudioModelOutput 或 tuple(torch.Tensor)
EmbeddingGemma2AudioModelOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(EmbeddingGemma2Config)和输入。
将音频编码器的最后一个隐藏状态投影到语言模型空间。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.Tensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后得到。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 tanh 激活函数处理后的结果。线性层的权重在预训练期间通过下一句预测(分类)目标进行训练。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
attention_mask (
torch.BoolTensor, 可选) — 形状为(batch_size, num_frames)的 torch.BoolTensor。有效位置为 True,填充位置为 False。