Transformers 文档

Qwen2.5-Omni

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Qwen2.5-Omni

PyTorch FlashAttention SDPA

概述

Qwen2.5-Omni 模型是阿里巴巴集团通义团队在Qwen2.5-Omni 技术报告中提出的统一多模态模型。

该技术报告的摘要如下:

我们推出 Qwen2.5-Omni,这是一款端到端的多模态模型,旨在感知包括文本、图像、音频和视频在内的多种模态,同时以流式方式生成文本和自然语音响应。为了实现多模态信息输入的流式处理,音频和视觉编码器均采用分块处理方法。这种策略有效地解耦了长序列多模态数据的处理,将感知职责分配给多模态编码器,并将长序列的建模委托给大型语言模型。这种分工通过共享注意力机制增强了不同模态的融合。为了同步视频输入与音频的时间戳,我们以交错方式组织音频和视频序列,并提出了一种新颖的位置嵌入方法,名为 TMRoPE(时间对齐多模态 RoPE)。为了同时生成文本和语音,并避免两种模态之间的干扰,我们提出了 Thinker-Talker 架构。在这个框架中,Thinker 作为大型语言模型负责文本生成,而 Talker 是一种双轨自回归模型,直接利用来自 Thinker 的隐藏表示来输出音频标记。Thinker 和 Talker 模型都设计为以端到端方式进行训练和推理。为了以流式方式解码音频标记,我们引入了一个限制感受野的滑动窗口 DiT,旨在减少初始包延迟。Qwen2.5-Omni 在图像和音频能力方面均优于同等大小的 Qwen2-VL 和 Qwen2-Audio。此外,Qwen2.5-Omni 在 Omni-Bench 等多模态基准测试中取得了最先进的性能。值得注意的是,Qwen2.5-Omni 是第一个在端到端语音指令遵循方面达到与文本输入能力相当性能的开源模型,MMLU 和 GSM8K 等基准测试证明了这一点。至于语音生成,Qwen2.5-Omni 的流式 Talker 在鲁棒性和自然度方面优于大多数现有的流式和非流式替代方案。

注意事项

  • 使用 Qwen2_5OmniForConditionalGeneration 生成音频和文本输出。要只生成一种输出类型,文本专用请使用 Qwen2_5OmniThinkerForConditionalGeneration,音频专用请使用 Qwen2_5OmniTalkersForConditionalGeneration
  • 目前,Qwen2_5OmniForConditionalGeneration 进行音频生成仅支持单个批处理大小。
  • 如果处理视频输入时出现内存不足错误,请减少 processor.max_pixels。默认情况下,最大值设置得非常大,除非分辨率超过 processor.max_pixels,否则高分辨率视觉效果将不会被调整大小。
  • 处理器拥有自己的 apply_chat_template() 方法,可将聊天消息转换为模型输入。

使用示例

Qwen2.5-Omni 可以在 Huggingface Hub 上找到。

单媒体推理

该模型可以接受文本、图像、音频和视频作为输入。以下是推理的示例代码。

import soundfile as sf
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    torch_dtype="auto",
    device_map="auto"
)
processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")

conversations = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "video", "video": "/path/to/video.mp4"},
            {"type": "text", "text": "What cant you hear and see in this video?"},
        ],
    },
]

inputs = processor.apply_chat_template(
    conversations,
    load_audio_from_video=True,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    video_fps=1,

    # kwargs to be passed to `Qwen2-5-OmniProcessor`
    padding=True,
    use_audio_in_video=True,
).to(model.device)

# Generation params for audio or text can be different and have to be prefixed with `thinker_` or `talker_`
text_ids, audio = model.generate(**inputs, use_audio_in_video=True, thinker_do_sample=False, talker_do_sample=True)
text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)

sf.write(
    "output.wav",
    audio.reshape(-1).detach().cpu().numpy(),
    samplerate=24000,
)
print(text)

仅文本生成

为了只生成文本输出并通过不加载音频生成模型来节省计算量,我们可以使用 Qwen2_5OmniThinkerForConditionalGeneration 模型。

from transformers import Qwen2_5OmniThinkerForConditionalGeneration, Qwen2_5OmniProcessor

model = Qwen2_5OmniThinkerForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    torch_dtype="auto",
    device_map="auto",
)
processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")

conversations = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "video", "video": "/path/to/video.mp4"},
            {"type": "text", "text": "What cant you hear and see in this video?"},
        ],
    },
]

inputs = processor.apply_chat_template(
    conversations,
    load_audio_from_video=True,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    video_fps=1,

    # kwargs to be passed to `Qwen2-5-OmniProcessor`
    padding=True,
    use_audio_in_video=True,
).to(model.device)


text_ids = model.generate(**inputs, use_audio_in_video=True)
text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)

sf.write(
    "output.wav",
    audio.reshape(-1).detach().cpu().numpy(),
    samplerate=24000,
)
print(text)

批量混合媒体推理

使用 Qwen2_5OmniThinkerForConditionalGeneration 模型时,该模型可以批量处理由文本、图像、音频和视频等各种类型的混合样本组成的输入。这是一个示例。

import soundfile as sf
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    torch_dtype="auto",
    device_map="auto"
)
processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")

# Conversation with video only
conversation1 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "video", "path": "/path/to/video.mp4"},
        ]
    }
]

# Conversation with audio only
conversation2 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "audio", "path": "/path/to/audio.wav"},
        ]
    }
]

# Conversation with pure text
conversation3 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [{"type": "text", "text": "who are you?"}],
    }
]


# Conversation with mixed media
conversation4 = [
    {
        "role": "system",
        "content": [
            {"type": "text", "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
        ],
    },
    {
        "role": "user",
        "content": [
            {"type": "image", "path": "/path/to/image.jpg"},
            {"type": "video", "path": "/path/to/video.mp4"},
            {"type": "audio", "path": "/path/to/audio.wav"},
            {"type": "text", "text": "What are the elements can you see and hear in these medias?"},
        ],
    }
]

conversations = [conversation1, conversation2, conversation3, conversation4]

inputs = processor.apply_chat_template(
    conversations,
    load_audio_from_video=True,
    add_generation_prompt=True,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    video_fps=1,

    # kwargs to be passed to `Qwen2-5-OmniProcessor`
    padding=True,
    use_audio_in_video=True,
).to(model.thinker.device)

text_ids = model.generate(**inputs, use_audio_in_video=True)
text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)

print(text)

使用技巧

图像分辨率权衡

该模型支持多种分辨率输入。默认情况下,它使用原始分辨率进行输入,但更高分辨率可以提升性能,代价是增加计算量。用户可以设置最小和最大像素数,以根据其需求实现最佳配置。

min_pixels = 128*28*28
max_pixels = 768*28*28
processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B", min_pixels=min_pixels, max_pixels=max_pixels)

音频输出提示

如果用户需要音频输出,系统提示必须设置为“您是通义团队开发的虚拟人 Qwen,能够感知听觉和视觉输入,并生成文本和语音。”,否则音频输出可能无法按预期工作。

{
    "role": "system",
    "content": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech.",
}

是否使用音频输出

该模型支持文本和音频输出。如果用户不需要音频输出,可以在 from_pretrained 函数中设置 enable_audio_output。此选项将节省约 ~2GB 的 GPU 内存,但 generate 函数的 return_audio 选项将只能设置为 False

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    torch_dtype="auto",
    device_map="auto",
    enable_audio_output=False,
)

为了获得灵活的体验,我们建议用户在通过 from_pretrained 函数初始化模型时将 enable_audio_output 设置为 True,然后在调用 generate 函数时决定是否返回音频。当 return_audio 设置为 False 时,模型将仅返回文本输出以更快地获取文本响应。

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    torch_dtype="auto",
    device_map="auto",
    enable_audio_output=True,
)
...
text_ids = model.generate(**inputs, return_audio=False)

改变输出音频的音色类型

Qwen2.5-Omni 支持改变输出音频的音色。用户可以使用 generate 函数的 spk 参数指定音色类型。"Qwen/Qwen2.5-Omni-7B" 检查点支持两种音色类型:ChelsieEthan,其中 Chelsie 为女声,Ethan 为男声。默认情况下,如果未指定 spk,则默认音色类型为 Chelsie

text_ids, audio = model.generate(**inputs, spk="Chelsie")
text_ids, audio = model.generate(**inputs, spk="Ethan")

使用 Flash-Attention 2 加速生成

首先,请确保安装最新版本的 Flash Attention 2

pip install -U flash-attn --no-build-isolation

此外,您应该拥有与 FlashAttention 2 兼容的硬件。有关更多信息,请参阅Flash Attention 存储库的官方文档。FlashAttention-2 只能在模型以 torch.float16torch.bfloat16 加载时使用。

要使用 FlashAttention-2 加载和运行模型,请在加载模型时添加 attn_implementation="flash_attention_2"

from transformers import Qwen2_5OmniForConditionalGeneration

model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    "Qwen/Qwen2.5-Omni-7B",
    device_map="auto",
    torch_dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
)

Qwen2_5OmniConfig

class transformers.Qwen2_5OmniConfig

< >

( thinker_config = None talker_config = None token2wav_config = None enable_audio_output: bool = True **kwargs )

参数

  • thinker_config (dict, 可选) — 基础思考者子模型的配置。
  • talker_config (dict, 可选) — 基础说话者子模型的配置。
  • token2wav_config (dict, 可选) — 基础编解码器子模型的配置。
  • enable_audio_output (bool, 可选, 默认为 True) — 是否启用音频输出并加载说话者和 token2wav 模块。

这是用于存储 Qwen2_5OmniForConditionalGeneration 配置的配置类。它用于根据指定的子模型配置实例化 Qwen2.5Omni 模型,定义模型架构。

使用默认值实例化配置将生成与 Qwen/Qwen2.5-Omni-7B 架构类似的配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

示例

>>> from transformers import (
...     Qwen2_5OmniThinkerConfig,
...     Qwen2_5OmniTalkerConfig,
...     Qwen2_5OmniToken2WavConfig,
...     Qwen2_5OmniForConditionalGeneration,
...     Qwen2_5OmniConfig,
... )

>>> # Initializing sub-modules configurations.
>>> thinker_config = Qwen2_5OmniThinkerConfig()
>>> talker_config = Qwen2_5OmniTalkerConfig()
>>> token2wav_config = Qwen2_5OmniToken2WavConfig()


>>> # Initializing a module style configuration
>>> configuration = Qwen2_5OmniConfig.from_sub_model_configs(
...     thinker_config, talker_config, token2wav_config
... )

>>> # Initializing a model (with random weights)
>>> model = Qwen2_5OmniForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2_5OmniProcessor

class transformers.Qwen2_5OmniProcessor

< >

( image_processor = None video_processor = None feature_extractor = None tokenizer = None chat_template = None )

参数

  • image_processor (Qwen2VLImageProcessor, 可选) — 图像处理器。
  • video_processor (Qwen2VLVideoProcessor, 可选) — 视频处理器。
  • feature_extractor (WhisperFeatureExtractor, 可选) — 音频特征提取器。
  • tokenizer (Qwen2TokenizerFast, 可选) — 文本分词器。
  • chat_template (Optional[str], 可选) — 用于格式化对话的 Jinja 模板。如果未提供,则使用默认聊天模板。

构建一个 Qwen2.5Omni 处理器。Qwen2_5OmniProcessor 提供了 Qwen2VLImageProcessorWhisperFeatureExtractorQwen2TokenizerFast 的所有功能。有关更多信息,请参阅 __call__()decode()

批量解码

< >

( *args **kwargs )

此方法将其所有参数转发给 Qwen2TokenizerFast 的 batch_decode()。有关更多信息,请参阅此方法的文档字符串。

解码

< >

( *args **kwargs )

此方法将其所有参数转发至 Qwen2TokenizerFast 的 decode()。有关更多信息,请参阅此方法的文档字符串。

获取分块索引

< >

( token_indices: ndarray tokens_per_chunk: int ) list[tuple[int, int]]

参数

  • token_indices (np.ndarray) — 单调递增的标记索引值列表。
  • t_ntoken_per_chunk (int) — 每块标记的数量(用作块大小阈值)。

返回

list[tuple[int, int]]

一个元组列表,每个元组代表 token_indices 中块的开始(包含)和结束(不包含)索引。

根据标记值范围将标记索引列表拆分为块。

给定标记索引列表,返回 (start, end) 索引元组列表,表示列表中标记值落在连续 t_ntoken_per_chunk 范围内的切片。

例如,如果 t_ntoken_per_chunk 为 1000,则函数将创建这样的块:

  • 第一个块包含标记值 < 1000,
  • 第二个块包含值 >= 1000 且 < 2000,依此类推。

Qwen2_5OmniForConditionalGeneration

class transformers.Qwen2_5OmniForConditionalGeneration

< >

( config )

参数

完整的 Qwen2.5Omni 模型,一个由 3 个子模型组成的多模态模型

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

_forward_unimplemented

< >

( *input: typing.Any )

定义每次调用时执行的计算。

应由所有子类覆盖。

尽管前向传播的配方需要在该函数中定义,但之后应该调用 Module 实例而不是它,因为前者负责运行注册的钩子,而后者则默默地忽略它们。

Qwen2_5OmniPreTrainedModelForConditionalGeneration

class transformers.Qwen2_5OmniPreTrainedModelForConditionalGeneration

< >

( config: PretrainedConfig *inputs **kwargs )

获取分块索引

< >

( token_indices: Tensor tokens_per_chunk: int remove_index: int ) list[tuple[int, int]]

参数

  • token_indices (形状为 (seq_len, )torch.Tensor) — 单调递增的 token 索引值列表。
  • t_ntoken_per_chunk (int) — 每个块的 token 数(用作块大小阈值)。
  • remove_index (int) 在分块前从 token_indices 中减去的索引 ID —

返回

list[tuple[int, int]]

一个元组列表,每个元组代表 token_indices 中块的开始(包含)和结束(不包含)索引。

根据标记值范围将标记索引列表拆分为块。

给定标记索引列表,返回 (start, end) 索引元组列表,表示列表中标记值落在连续 t_ntoken_per_chunk 范围内的切片。

例如,如果 t_ntoken_per_chunk 为 1000,则函数将创建这样的块:

  • 第一个块包含标记值 < 1000,
  • 第二个块包含值 >= 1000 且 < 2000,依此类推。

get_rope_index

< >

( input_ids: typing.Optional[torch.LongTensor] = None image_grid_thw: typing.Optional[torch.LongTensor] = None video_grid_thw: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None use_audio_in_video: bool = False audio_seqlens: typing.Optional[torch.LongTensor] = None second_per_grids: typing.Optional[torch.Tensor] = None )

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列 token 的索引。如果提供填充,默认情况下将忽略它。
  • image_grid_thw (形状为 (num_images, 3)torch.LongTensor, 可选) — LLM 中每张图像的特征形状的时间、高度和宽度。
  • video_grid_thw (形状为 (num_videos, 3)torch.LongTensor, 可选) — LLM 中每个视频的特征形状的时间、高度和宽度。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 避免对填充 token 索引执行注意力操作的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示 未被遮蔽 的 token,
    • 0 表示 被遮蔽 的 token。
  • use_audio_in_video (bool, 可选) — 如果设置为 True,则在视频中使用音频。
  • audio_seqlens (形状为 (num_audios)torch.LongTensor, 可选) — LLM 中每个音频的特征形状的长度。
  • second_per_grids (形状为 (num_videos)torch.LongTensor, 可选) — 3D 位置 ID 中每个网格沿时间维度的间隔时间(秒)。

根据 LLM 中图像和视频的时间、高度和宽度计算 3D 旋转位置索引。

解释:每个嵌入序列包含视觉嵌入和文本嵌入,或者只包含文本嵌入。

对于纯文本嵌入序列,旋转位置嵌入与现代 LLM 没有区别。示例:input_ids: [T T T T T],其中 T 表示文本。时间位置 ID:[0, 1, 2, 3, 4] 高度位置 ID:[0, 1, 2, 3, 4] 宽度位置 ID:[0, 1, 2, 3, 4]

对于视觉和文本嵌入序列,我们计算视觉部分的 3D 旋转位置嵌入和文本部分的 1D 旋转位置嵌入。示例:时间 (Temporal):3 个补丁,代表视频中不同时间段。高度:2 个补丁,垂直分割每个帧。宽度:2 个补丁,水平分割每个帧。我们还有一些重要参数:fps (每秒帧数):视频的帧率,设置为 1。这意味着每秒处理一帧。tokens_per_second:这是一个关键参数。它决定了一秒视频中概念上包含多少个“时间步长”或“时间 token”。在这种情况下,我们每秒有 25 个 token。因此,视频的每一秒将用 25 个不同的时间点表示。它本质上定义了时间粒度。temporal_patch_size:构成一个时间补丁的帧数。这里是 2 帧。interval:时间位置 ID 的步长,计算公式为 tokens_per_second * temporal_patch_size / fps。在这种情况下,25 * 2 / 1 = 50。这意味着每个时间补丁在时间位置 ID 中将有 50 的差异。input_ids: [V V V V V V V V V V V V T T T T T],其中 V 表示视觉。视觉时间位置 ID:[0, 0, 0, 0, 50, 50, 50, 50, 100, 100, 100, 100] 视觉高度位置 ID:[0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1] 视觉宽度位置 ID:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1] 文本时间位置 ID:[101, 102, 103, 104, 105] 文本高度位置 ID:[101, 102, 103, 104, 105] 文本宽度位置 ID:[101, 102, 103, 104, 105] 这里我们将文本起始位置 ID 计算为最大视觉位置 ID 加 1。

Qwen2_5OmniThinkerConfig

class transformers.Qwen2_5OmniThinkerConfig

< >

( audio_config = None vision_config = None text_config = None audio_token_index = 151646 image_token_index = 151655 video_token_index = 151656 position_id_per_seconds = 25 seconds_per_chunk = 2 audio_start_token_id = 151647 audio_end_token_id = 151648 user_token_id = 872 initializer_range = 0.02 **kwargs )

参数

  • audio_config (dict, 可选) — 音频主干的配置字典。
  • vision_config (dict, 可选) — 视觉主干的配置字典。
  • text_config (dict, 可选) — 文本主干的配置字典。
  • audio_token_index (int, 可选, 默认为 151646) — 用于编码音频提示的音频 token 索引。
  • image_token_index (int, 可选, 默认为 151655) — 用于编码图像提示的图像 token 索引。
  • video_token_index (int, 可选, 默认为 151656) — 用于编码视频提示的视频 token 索引。
  • position_id_per_seconds (int, 可选, 默认为 25) — 每秒位置 ID 的增量。
  • seconds_per_chunk (int, 可选, 默认为 2) — 音频和视频数据块的持续时间(秒)。
  • audio_start_token_id (int, 可选, 默认为 151647) — 用于编码音频提示的音频起始 token 索引。
  • audio_end_token_id (int, 可选, 默认为 151648) — 用于编码音频提示的音频结束 token 索引。
  • user_token_id (`int, 可选, 默认为 872) — 用于编码用户 token 的用户 token 索引。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。

这是存储 Qwen2_5OmniThinkerForConditionalGeneration 配置的配置类。它用于根据指定的参数实例化 Qwen2.5-Omni-Thinker 模型,定义模型架构。使用默认值实例化配置将生成与 Qwen2.5-Omni-Thinker 相似的配置。

例如 Qwen/Qwen2.5-Omni-7B

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

示例

>>> from transformers import Qwen2_5OmniThinkerForConditionalGeneration, Qwen2_5OmniThinkerConfig, Qwen2_5OmniAudioEncoderConfig, Qwen2_5OmniVisionEncoderConfig

>>> # Initializing a Qwen2_5OmniAudioEncoder config
>>> audio_config = Qwen2_5OmniAudioEncoderConfig()

>>> # Initializing a Qwen2_5OmniVisionEncoder config
>>> vision_config = Qwen2_5OmniVisionEncoderConfig()

>>> # Initializing a Qwen2_5OmniTextConfig config
>>> text_config = Qwen2_5OmniTextConfig()

>>> # Initializing a Qwen2.5OmniThinker configuration
>>> configuration = Qwen2_5OmniThinkerConfig(audio_config, vision_config, text_config)

>>> # Initializing a model from the Qwen-Omni style configuration
>>> model = Qwen2_5OmniThinkerForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2_5OmniThinkerForConditionalGeneration

class transformers.Qwen2_5OmniThinkerForConditionalGeneration

< >

( config: Qwen2_5OmniThinkerConfig )

参数

  • config (Qwen2_5OmniThinkerConfig) — 模型的配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Qwen2.5OmniThinker 模型,由音频主干和语言模型组成。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None input_features: typing.Optional[torch.FloatTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None pixel_values_videos: typing.Optional[torch.FloatTensor] = None image_grid_thw: typing.Optional[torch.LongTensor] = None video_grid_thw: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None feature_attention_mask: typing.Optional[torch.Tensor] = None audio_feature_lengths: typing.Optional[torch.LongTensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None rope_deltas: typing.Optional[torch.LongTensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None use_audio_in_video: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None video_second_per_grid: typing.Optional[torch.LongTensor] = None ) transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniThinkerCausalLMOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 词汇表中输入序列 token 的索引。默认情况下,填充将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • input_features (形状为 (batch_size, feature_size, feature_sequence_length)torch.FloatTensor) — 从原始语音波形中提取的浮点值梅尔特征。原始语音波形可以通过加载 .flac.wav 音频文件到 list[float] 类型数组或 numpy.ndarray 来获得,例如通过 soundfile 库(pip install soundfile)。为了将数组准备为 input_features,应使用 AutoFeatureExtractor 来提取梅尔特征、填充并转换为 torch.FloatTensor 类型张量。参见 call()
  • pixel_values (形状为 (batch_size, num_channels, image_size, image_size)torch.FloatTensor, 可选) — 对应输入图像的张量。像素值可以使用 {image_processor_class} 获取。有关详细信息,请参见 {image_processor_class}.__call__{processor_class} 使用 {image_processor_class} 处理图像)。
  • pixel_values_videos (形状为 (batch_size, num_channels, image_size, image_size)torch.FloatTensor, 可选) — 对应输入视频的张量。像素值可以使用 AutoImageProcessor 获取。有关详细信息,请参见 SiglipImageProcessor.call()NewTaskModelProcessor 使用 SiglipImageProcessor 处理视频)。
  • image_grid_thw (形状为 (num_images, 3)torch.LongTensor, 可选) — LLM 中每张图像的特征形状的时间、高度和宽度。
  • video_grid_thw (形状为 (num_videos, 3)torch.LongTensor, 可选) — LLM 中每个视频的特征形状的时间、高度和宽度。
  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 避免对填充 token 索引执行注意力操作的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示 未被遮蔽 的 token,
    • 0 表示 被遮蔽 的 token。

    什么是注意力掩码?

  • feature_attention_mask (形状为 (batch_size, feature_sequence_length)torch.Tensor, 可选) — 避免对填充特征索引执行注意力操作的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示 未被遮蔽 的 token,
    • 0 表示 被遮蔽 的 token。
  • audio_feature_lengths (形状为 (num_audios)torch.LongTensor, 可选) — LLM 中每个音频的特征形状的长度。
  • position_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 每个输入序列 token 在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (list[torch.FloatTensor], 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码上一阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参见我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为旧版缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,将返回旧版缓存格式。

    如果使用 past_key_values,用户可以选择只输入形状为 (batch_size, 1) 的最后 input_ids(那些没有将其过去的键值状态提供给此模型的)而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选参数,您可以直接传递嵌入表示,而不是传递 input_ids。如果您希望对 input_ids 索引如何转换为相关向量有比模型内部嵌入查找矩阵更多的控制,此参数会很有用。
  • rope_deltas (torch.LongTensor,形状为 (batch_size, )可选) — 序列长度和多模态 RoPE 之间的 RoPE 索引差。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于计算遮蔽语言建模损失的标签。索引应位于 [0, ..., config.vocab_size] 或 -100 (参见 input_ids 文档字符串)。索引设置为 -100 的令牌将被忽略 (遮蔽),损失仅针对标签位于 [0, ..., config.vocab_size] 的令牌计算。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码 (参见 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。更多详细信息请参见返回张量中的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。更多详细信息请参见返回张量中的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • use_audio_in_video (bool可选) — 是否在视频中使用音轨,应与 process_audio_info 中的参数相同。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 描述输入序列令牌在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。
  • video_second_per_grid (torch.LongTensor,形状为 (num_videos)可选) — 每个视频每网格的秒数,用于时间特征映射。

返回

transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniThinkerCausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniThinkerCausalLMOutputWithPast 对象或一个 torch.FloatTensor 元组 (如果传入 return_dict=Falseconfig.return_dict=False),包含根据配置 (Qwen2_5OmniConfig) 和输入的不同元素。

  • loss (torch.FloatTensor 形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)可选) — 语言建模头的预测分数(每个词汇令牌在 SoftMax 之前的分数)。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple[torch.FloatTensor]可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组 (一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple[torch.FloatTensor]可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组 (每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

  • rope_deltas (形状为 (batch_size, )torch.LongTensor可选) — 序列长度和多模态 RoPE 之间的 RoPE 索引差异。

Qwen2_5OmniThinkerForConditionalGeneration 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的实现需要在该函数中定义,但之后应调用 Module 实例而非此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略它们。

示例

>>> from io import BytesIO
>>> from urllib.request import urlopen
>>> import librosa
>>> from qwen_vl_utils import process_vision_info
>>> from transformers import Qwen2_5OmniProcessor, Qwen2_5OmniThinkerForConditionalGeneration

>>> thinker = Qwen2_5OmniThinkerForConditionalGeneration.from_pretrained("Qwen/Qwen2.5-Omni-7B")
>>> processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")

>>> conversations = [
>>>         {'role': 'system', 'content': 'You are a helpful voice chat bot, and please respond to me in a casual conversation manner using random voice.'},
>>>         {"role": "user", "content": [
>>>             {"type": "image", "image_url": "https://www.ilankelman.org/stopsigns/australia.jpg"},
>>>             {"type": "audio", "audio_url": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3"},
>>>         ]},
>>> ]

>>> text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
>>> audios = [ librosa.load(BytesIO(urlopen( conversations[1]['content'][1]['audio_url'] ).read()), sr=self.processor.feature_extractor.sampling_rate) ]
>>> images, videos = process_vision_info(conversations)
>>> inputs = processor(text=text, audios=audios, images=images, videos=videos, return_tensors="pt", padding=True)

>>> # Generate
>>> inputs['use_audio_in_video'] = `True` or `False`
>>> generation = thinker.generate(**inputs, max_new_tokens=2048)
>>> generate_ids = generation[:, inputs.input_ids.size(1):]

>>> response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

get_audio_features

< >

( input_features: FloatTensor feature_attention_mask: typing.Optional[torch.LongTensor] = None audio_feature_lengths: typing.Optional[torch.LongTensor] = None )

参数

  • input_features (torch.FloatTensor) — 对应于输入音频的张量。
  • feature_attention_mask (torch.LongTensor可选) — 遮罩,以避免对填充特征索引执行注意力。遮罩值选择范围为 [0, 1]
  • audio_feature_lengths (torch.LongTensor,形状为 (num_audios)可选) — LLM 中每个音频的特征形状长度。

将音频编码为可转发到语言模型的连续嵌入。

get_image_features

< >

( pixel_values: FloatTensor image_grid_thw: typing.Optional[torch.LongTensor] = None )

参数

  • pixel_values (torch.FloatTensor,形状为 (batch_size, num_channels, image_size, image_size)) — 对应于输入图像的张量。
  • image_grid_thw (torch.LongTensor,形状为 (num_images, 3)可选) — LLM 中每个图像的特征形状的时间、高度和宽度。

将图像编码为可转发到语言模型的连续嵌入。

get_video_features

< >

( pixel_values_videos: FloatTensor video_grid_thw: typing.Optional[torch.LongTensor] = None )

参数

  • pixel_values_videos (torch.FloatTensor,形状为 (batch_size, num_channels, image_size, image_size)) — 对应于输入视频的张量。
  • video_grid_thw (torch.LongTensor,形状为 (num_videos, 3)可选) — LLM 中每个视频的特征形状的时间、高度和宽度。

将视频编码为可转发到语言模型的连续嵌入。

Qwen2_5OmniThinkerTextModel

class transformers.Qwen2_5OmniThinkerTextModel

< >

( config: Qwen2_5OmniTextConfig )

参数

  • config (Qwen2_5OmniTextConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化并不会加载与模型相关的权重,仅加载配置。请查阅 from_pretrained() 方法加载模型权重。

裸 Qwen2 5 Omni 文本模型,输出原始隐藏状态,不带任何特定头。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 词汇表中输入序列令牌的索引。填充默认会被忽略。

    索引可以使用 AutoTokenizer 获取。更多详情请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor,形状为 (batch_size, sequence_length)可选) — 遮罩,以避免对填充令牌索引执行注意力。遮罩值选择范围为 [0, 1]

    • 1 表示未被遮蔽的令牌,
    • 0 表示被遮蔽的令牌。

    什么是注意力遮罩?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列令牌在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (list[torch.FloatTensor]可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码上一阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv cache 指南
    • 一个 config.n_layers 长度的 tuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果没有传入 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择只输入形状为 (batch_size, 1) 的最后一个 input_ids(那些没有将其过去的键值状态提供给此模型的),而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选参数,您可以直接传递嵌入表示,而不是传递 input_ids。如果您希望对 input_ids 索引如何转换为相关向量有比模型内部嵌入查找矩阵更多的控制,此参数会很有用。
  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码 (参见 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有注意力层的注意力张量。更多详细信息请参见返回张量中的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的隐藏状态。更多详细信息请参见返回张量中的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • cache_position (torch.LongTensor,形状为 (sequence_length)可选) — 描述输入序列令牌在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。

返回

transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPast 对象或一个 torch.FloatTensor 元组 (如果传入 return_dict=Falseconfig.return_dict=False),包含根据配置 (Qwen2_5OmniConfig) 和输入的不同元素。

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。

    如果使用了 past_key_values,则只输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • past_key_values (Cache可选,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。更多详情请参阅我们的 kv cache 指南

    包含预先计算的隐藏状态(自注意力块中的键和值,如果 config.is_encoder_decoder=True,则还包含交叉注意力块中的键和值),可用于加速顺序解码 (参见 past_key_values 输入)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组 (一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组 (每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

Qwen2_5OmniThinkerTextModel 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的实现需要在该函数中定义,但之后应调用 Module 实例而非此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略它们。

Qwen2_5OmniTalkerConfig

class transformers.Qwen2_5OmniTalkerConfig

< >

( audio_token_index = 151646 image_token_index = 151655 video_token_index = 151656 vocab_size = 8448 tts_text_start_token_id = 151860 tts_text_end_token_id = 151861 tts_text_pad_token_id = 151859 tts_codec_start_token_id = 8293 tts_codec_end_token_id = 8294 tts_codec_pad_token_id = 8292 tts_codec_mask_token_id = 8296 vision_start_token_id = 151652 vision_end_token_id = 151653 embedding_size = 3584 hidden_size = 3584 intermediate_size = 18944 num_hidden_layers = 28 num_attention_heads = 28 num_key_value_heads = 4 hidden_act = 'silu' max_position_embeddings = 32768 rms_norm_eps = 1e-06 head_dim = 128 use_cache = True tie_word_embeddings = False rope_theta = 1000000.0 use_sliding_window = False sliding_window = 32768 max_window_layers = 28 attention_dropout = 0.0 rope_scaling = None position_id_per_seconds = 25 seconds_per_chunk = 2 audio_start_token_id = 151647 audio_end_token_id = 151648 initializer_range = 0.02 spatial_merge_size = 2 layer_types = None **kwargs )

参数

  • audio_token_index (int可选,默认为 151646) — 用于编码音频提示的音频令牌索引。
  • image_token_index (int可选,默认为 151655) — 用于编码图像提示的图像令牌索引。
  • video_token_index (int可选,默认为 151656) — 用于编码视频提示的视频令牌索引。
  • vocab_size (int可选,默认为 8448) — QwenOmni 模型的词汇量大小。定义了调用 Qwen2VLModelinputs_ids 可以表示的不同令牌的数量。
  • tts_text_start_token_id (int可选,默认为 151860) — 用于编码 TTS 文本开头的 TTS 文本起始令牌索引。
  • tts_text_end_token_id (int可选,默认为 151861) — 用于编码 TTS 文本结尾的 TTS 文本结束令牌索引。
  • tts_text_pad_token_id (int可选,默认为 151859) — 用于编码 TTS 文本填充的 TTS 文本填充令牌索引。
  • tts_codec_start_token_id (int可选,默认为 8293) — 用于编码 TTS 编解码器开头的 TTS 编解码器起始令牌索引。
  • tts_codec_end_token_id (int可选,默认为 8294) — 用于编码 TTS 编解码器结尾的 TTS 编解码器结束令牌索引。
  • tts_codec_pad_token_id (int可选,默认为 8292) — 用于编码 TTS 编解码器填充的 TTS 编解码器填充令牌索引。
  • tts_codec_mask_token_id (int可选,默认为 8296) — 用于编码 TTS 编解码器遮罩的 TTS 编解码器遮罩令牌索引。
  • vision_start_token_id (int可选,默认为 151652) — 用于编码视觉开始的 TTS 视觉起始令牌索引。
  • vision_end_token_id (int, 可选, 默认为 151653) — 用于编码视觉结束的 TTS 视觉结束标记索引。
  • embedding_size (int, 可选, 默认为 3584) — 嵌入表示的维度。
  • hidden_size (int, 可选, 默认为 3584) — 隐藏表示的维度。
  • intermediate_size (int, 可选, 默认为 18944) — MLP 表示的维度。
  • num_hidden_layers (int, 可选, 默认为 28) — Transformer 编码器中的隐藏层数量。
  • num_attention_heads (int, 可选, 默认为 28) — Transformer 编码器中每个注意力层中的注意力头数量。
  • num_key_value_heads (int, 可选, 默认为 4) — 用于实现分组查询注意力 (Grouped Query Attention) 的键值头数量。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (MHA);如果 num_key_value_heads=1,模型将使用多查询注意力 (MQA);否则,将使用 GQA。在将多头检查点转换为 GQA 检查点时,每个分组的键值头应通过对其组内的所有原始头进行均值池化来构建。更多详细信息,请查看 这篇论文。如果未指定,默认为 32
  • hidden_act (strfunction, 可选, 默认为 "silu") — 解码器中的非线性激活函数(函数或字符串)。
  • max_position_embeddings (int, 可选, 默认为 32768) — 此模型可能使用的最大序列长度。
  • rms_norm_eps (float, 可选, 默认为 1e-06) — RMS 归一化层使用的 epsilon 值。
  • head_dim (int, 可选, 默认为 128) — 每个注意力头的维度。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时相关。
  • tie_word_embeddings (bool, 可选, 默认为 False) — 模型的输入和输出词嵌入是否应绑定。
  • rope_theta (float, 可选, 默认为 1000000.0) — RoPE 嵌入的基周期。
  • use_sliding_window (bool, 可选, 默认为 False) — 是否使用滑动窗口注意力。
  • sliding_window (int, 可选, 默认为 32768) — 滑动窗口注意力 (SWA) 的窗口大小。如果未指定,默认为 4096
  • max_window_layers (int, 可选, 默认为 28) — 使用完整注意力的层数。前 max_window_layers 层将使用完整注意力,而其后的任何附加层将使用 SWA(滑动窗口注意力)。
  • attention_dropout (float, 可选, 默认为 0.0) — 注意力概率的丢弃率。
  • rope_scaling (Dict, 可选) — 包含 RoPE 嵌入缩放配置的字典。注意:如果应用新的 RoPE 类型并期望模型在更长的 max_position_embeddings 上工作,建议您相应地更新此值。预期内容: rope_type (str): 要使用的 RoPE 子变体。可以是 ['default', 'linear', 'dynamic', 'yarn', 'longrope', 'llama3'] 之一,其中 'default' 是原始 RoPE 实现。 factor (float, 可选): 除 'default' 之外的所有 RoPE 类型都使用。应用于 RoPE 嵌入的缩放因子。在大多数缩放类型中,因子 x 将使模型能够处理长度为 x * 原始最大预训练长度的序列。 original_max_position_embeddings (int, 可选): 与 'dynamic'、'longrope' 和 'llama3' 一起使用。预训练期间使用的原始最大位置嵌入。 attention_factor (float, 可选): 与 'yarn' 和 'longrope' 一起使用。应用于注意力计算的缩放因子。如果未指定,默认为实现推荐的值,使用 factor 字段推断建议值。 beta_fast (float, 可选): 仅与 'yarn' 一起使用。设置线性斜坡函数中外推(仅)边界的参数。如果未指定,默认为 32。 beta_slow (float, 可选): 仅与 'yarn' 一起使用。设置线性斜坡函数中插值(仅)边界的参数。如果未指定,默认为 1。 short_factor (list[float], 可选): 仅与 'longrope' 一起使用。应用于短上下文(< original_max_position_embeddings)的缩放因子。必须是长度与隐藏大小除以注意力头数除以 2 相同的数字列表。 long_factor (list[float], 可选): 仅与 'longrope' 一起使用。应用于长上下文(< original_max_position_embeddings)的缩放因子。必须是长度与隐藏大小除以注意力头数除以 2 相同的数字列表。 low_freq_factor (float, 可选): 仅与 'llama3' 一起使用。应用于 RoPE 低频分量的缩放因子。 high_freq_factor (float, 可选): 仅与 'llama3' 一起使用。应用于 RoPE 高频分量的缩放因子。
  • position_id_per_seconds (int, 可选, 默认为 25) — 每秒位置 ID 的增量。
  • seconds_per_chunk (int, 可选, 默认为 2) — 音频和视频数据块的持续时间(秒)。
  • audio_start_token_id (int, 可选, 默认为 151647) — 用于编码音频提示的音频开始标记索引。
  • audio_end_token_id (int, 可选, 默认为 151648) — 用于编码音频提示的音频结束标记索引。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • spatial_merge_size (int, 可选, 默认为 2) — 用于合并空间维度的尺寸。
  • layer_types (list, 可选) — 每层的注意力模式。

这是存储 Qwen2_5OmniTalkerForConditionalGeneration 配置的配置类。它用于根据指定参数实例化 Qwen2.5-Omni-Talker 模型,定义模型架构。使用默认值实例化配置将生成与 Qwen2.5-Omni-Thinker 相似的配置。

例如 Qwen/Qwen2.5-Omni-7B

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

示例

>>> from transformers import Qwen2_5OmniTalkerForConditionalGeneration, Qwen2_5OmniThinkerConfig, Qwen2_5OmniAudioEncoderConfig, Qwen2_5OmniVisionEncoderConfig

>>> # Initializing a Qwen2_5OmniAudioEncoder config
>>> audio_config = Qwen2_5OmniAudioEncoderConfig()

>>> # Initializing a Qwen2 config
>>> text_config = Qwen2Config()

>>> # Initializing a Qwen2_5Omni configuration
>>> configuration = Qwen2_5OmniThinkerConfig(audio_config, text_config)

>>> # Initializing a model from the qwen2-audio style configuration
>>> model = Qwen2_5OmniTalkerForConditionalGeneration(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2_5OmniTalkerForConditionalGeneration

class transformers.Qwen2_5OmniTalkerForConditionalGeneration

< >

( config: Qwen2_5OmniTalkerConfig )

forward

< >

( input_ids: LongTensor = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None thinker_reply_part: typing.Optional[torch.FloatTensor] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None rope_deltas: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None input_text_ids: typing.Optional[torch.LongTensor] = None image_grid_thw: typing.Optional[torch.LongTensor] = None video_grid_thw: typing.Optional[torch.LongTensor] = None use_audio_in_video: typing.Optional[bool] = None audio_feature_lengths: typing.Optional[torch.LongTensor] = None video_second_per_grid: typing.Optional[torch.LongTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniTalkerCausalLMOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (形状为 (batch_size, sequence_length)torch.LongTensor) — 词汇表中输入序列标记的索引。填充将默认被忽略。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参见 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (形状为 (batch_size, sequence_length)torch.Tensor, 可选) — 用于避免在填充标记索引上执行注意力的掩码。掩码值选择在 [0, 1]

    • 1 表示**未被掩码**的标记,
    • 0 表示**被掩码**的标记。

    什么是注意力掩码?

  • position_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • past_key_values (list[torch.FloatTensor], 可选) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常包括模型在解码上一阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • Cache 实例,请参见我们的 kv 缓存指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)。这也被称为传统缓存格式。

    模型将输出与作为输入提供的缓存格式相同的缓存格式。如果没有传递 past_key_values,将返回传统缓存格式。

    如果使用 past_key_values,用户可以选择仅输入形状为 (batch_size, 1) 的最后 input_ids(那些没有将过去的键值状态提供给此模型的),而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • thinker_reply_part (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — thinker 模型输出的隐藏状态,表示要处理的文本回复部分。
  • inputs_embeds (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor, 可选) — 可选地,您可以直接传递嵌入表示,而不是传递 input_ids。如果您希望对如何将 input_ids 索引转换为关联向量有更多控制,而不是使用模型的内部嵌入查找矩阵,这将非常有用。
  • rope_deltas (形状为 (batch_size, )torch.LongTensor, 可选) — 序列长度和多模态 RoPE 之间的 RoPE 索引差异。
  • use_cache (bool, 可选) — 如果设置为 True,则返回 past_key_values 键值状态,并可用于加速解码(参见 past_key_values)。
  • cache_position (形状为 (sequence_length)torch.LongTensor, 可选) — 描述输入序列标记在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整序列长度。
  • input_text_ids (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 仅文本内容的输入标记 ID,用于多模态上下文中的位置计算。
  • image_grid_thw (形状为 (num_images, 3)torch.LongTensor, 可选) — LLM 中每张图像的特征形状的时间、高度和宽度。
  • video_grid_thw (形状为 (num_videos, 3)torch.LongTensor, 可选) — LLM 中每个视频的特征形状的时间、高度和宽度。
  • use_audio_in_video (bool, 可选) — 是否在视频中使用音轨,应与 process_audio_info 中的参数相同。
  • audio_feature_lengths (形状为 (num_audios)torch.LongTensor, 可选) — LLM 中每个音频的特征形状长度。
  • video_second_per_grid (形状为 (num_videos)torch.LongTensor, 可选) — 每个视频每网格的秒数,用于时间特征映射。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参阅返回张量中的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通元组。

返回

transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniTalkerCausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniTalkerCausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置(Qwen2_5OmniConfig)和输入而变化的各种元素。

  • loss (torch.FloatTensor 形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (形状为 (batch_size, sequence_length, config.vocab_size)torch.FloatTensor) — 语言建模头部的预测分数(SoftMax 之前的每个词汇标记的分数)。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 past_key_values 输入)加速顺序解码。

  • hidden_states (tuple[torch.FloatTensor]可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组 (一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple[torch.FloatTensor]可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组 (每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

  • rope_deltas (形状为 (batch_size, )torch.LongTensor可选) — 序列长度和多模态 RoPE 之间的 RoPE 索引差异。

  • thinker_reply_part (形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor) — 来自 thinker 模型的隐藏状态,用作 talker 模型的输入。这些表示 talker 模型将用于生成语音标记的编码响应。

Qwen2_5OmniTalkerForConditionalGeneration 的 forward 方法,覆盖了 __call__ 特殊方法。

尽管前向传播的实现需要在该函数中定义,但之后应调用 Module 实例而非此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略它们。

示例

>>> from io import BytesIO
>>> from urllib.request import urlopen
>>> import librosa
>>> from transformers import AutoProcessor, Qwen2_5OmniTalkerForConditionalGeneration

>>> model = Qwen2_5OmniTalkerForConditionalGeneration.from_pretrained("Qwen/Qwen2-Audio-7B")
>>> processor = AutoProcessor.from_pretrained("Qwen/Qwen2-Audio-7B")

>>> prompt = "<|audio_bos|><|AUDIO|><|audio_eos|>Generate the caption in English:"
>>> url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2-Audio/audio/glass-breaking-151256.mp3"
>>> audio, _ = librosa.load(BytesIO(urlopen(url).read()), sr=self.processor.feature_extractor.sampling_rate)

>>> inputs = processor(text=prompt, audios=audio, return_tensors="pt")

>>> # Generate
>>> generate_ids = model.generate(**inputs, max_length=30)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Generate the caption in English: Glass is breaking."

Qwen2_5OmniTalkerModel

class transformers.Qwen2_5OmniTalkerModel

< >

( config: Qwen2_5OmniTalkerConfig )

参数

  • config (Qwen2_5OmniTalkerConfig) — 包含模型所有参数的模型配置类。用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法以加载模型权重。

裸 Qwen2 5 Omni 模型,输出原始隐藏状态,不带任何特定头部。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 输入序列标记在词汇表中的索引。默认情况下会忽略填充。

    索引可以使用 AutoTokenizer 获取。有关详细信息,请参阅 PreTrainedTokenizer.encode()PreTrainedTokenizer.call()

    什么是输入 ID?

  • attention_mask (torch.Tensor of shape (batch_size, sequence_length), optional) — 用于避免对填充标记索引执行注意力操作的掩码。掩码值选择在 [0, 1] 之间:

    • 对于未被遮蔽的标记为 1,
    • 对于被遮蔽的标记为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor of shape (batch_size, sequence_length), optional) — 每个输入序列标记在位置嵌入中的位置索引。选择范围在 [0, config.n_positions - 1] 之间。

    什么是位置 ID?

  • past_key_values (list[torch.FloatTensor], optional) — 预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速序列解码。这通常包括模型在解码前期返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    允许两种格式:

    • 一个 Cache 实例,请参阅我们的 kv cache 指南
    • 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量。这也被称为传统缓存格式。

    模型将输出与输入相同的缓存格式。如果未传递 past_key_values,则将返回传统缓存格式。

    如果使用了 past_key_values,用户可以选择只输入形状为 (batch_size, 1) 的最新 input_ids(那些没有将其过去键值状态提供给此模型的),而不是形状为 (batch_size, sequence_length) 的所有 input_ids

  • inputs_embeds (torch.FloatTensor of shape (batch_size, sequence_length, hidden_size), optional) — 可选地,你可以选择直接传递嵌入表示,而不是传递 input_ids。如果你想对如何将 input_ids 索引转换为相关向量有比模型内部嵌入查找矩阵更多的控制,这将非常有用。
  • use_cache (bool, optional) — 如果设置为 True,则返回 past_key_values 键值状态,可用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool, optional) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量下的 attentions
  • output_hidden_states (bool, optional) — 是否返回所有层的隐藏状态。有关详细信息,请参阅返回张量下的 hidden_states
  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通的元组。
  • cache_position (torch.LongTensor of shape (sequence_length), optional) — 指示输入序列标记在序列中位置的索引。与 position_ids 不同,此张量不受填充影响。它用于在正确位置更新缓存并推断完整的序列长度。

返回

transformers.modeling_outputs.BaseModelOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.BaseModelOutputWithPast 对象或一个 torch.FloatTensor 元组 (如果传入 return_dict=Falseconfig.return_dict=False),包含根据配置 (Qwen2_5OmniConfig) 和输入的不同元素。

  • last_hidden_state (torch.FloatTensor, 形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。

    如果使用了 past_key_values,则只输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个隐藏状态。

  • past_key_values (Cache可选,当传入 use_cache=Trueconfig.use_cache=True 时返回) — 这是一个 Cache 实例。更多详情请参阅我们的 kv cache 指南

    包含预先计算的隐藏状态(自注意力块中的键和值,如果 config.is_encoder_decoder=True,则还包含交叉注意力块中的键和值),可用于加速顺序解码 (参见 past_key_values 输入)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传入 output_hidden_states=Trueconfig.output_hidden_states=True 时返回) — torch.FloatTensor 元组 (一个用于嵌入层的输出,如果模型有嵌入层,+ 一个用于每个层的输出),形状为 (batch_size, sequence_length, hidden_size)

    模型在每个层输出的隐藏状态以及可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传入 output_attentions=Trueconfig.output_attentions=True 时返回) — torch.FloatTensor 元组 (每个层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

Qwen2_5OmniTalkerModel 前向方法会覆盖 __call__ 特殊方法。

尽管前向传播的实现需要在该函数中定义,但之后应调用 Module 实例而非此函数,因为前者负责运行预处理和后处理步骤,而后者则会默默忽略它们。

Qwen2_5OmniToken2WavConfig

class transformers.Qwen2_5OmniToken2WavConfig

< >

( dit_config = None bigvgan_config = None **kwargs )

参数

  • dit_config (DiT_Args, optional) — 负责生成 mel 谱图的扩散变换器 (DiT) 模块的配置类。
  • bigvgan_config (BigVGAN_Args, optional) — 负责将 mel 谱图转换为波形的 BigVGAN 模块的配置类。

这是用于存储 Qwen2_5OmniToken2WavModel 配置的配置类。它用于实例化 Qwen2.5-Omni-Token2Wav 模型,该模型结合了用于 mel 谱图生成的扩散变换器 (DiT) 和用于波形合成的 BigVGAN 模型。此配置包含这两个组件的子配置。

配置对象继承自 PretrainedConfig,可用于控制模型输出。有关更多信息,请阅读 PretrainedConfig 的文档。

示例

>>> from transformers import Qwen2_5OmniToken2WavModel, DiT_Args, BigVGAN_Args

>>> # Initialize DiT configuration
>>> dit_config = DiT_Args(
...     dim=1024,
...     depth=22,
...     heads=16,
...     ff_mult=2
... )

>>> # Initialize BigVGAN configuration
>>> bigvgan_config = BigVGAN_Args(
...     mel_dim=80,
...     upsample_rates=[5,3,2,2,2,2]
... )

>>> # Initialize main configuration
>>> config = Qwen2_5OmniToken2WavConfig(dit_config, bigvgan_config)

>>> # Initialize model with config
>>> model = Qwen2_5OmniToken2Wav(config)

>>> # Accessing the model configuration
>>> configuration = model.config

Qwen2_5OmniToken2WavModel

class transformers.Qwen2_5OmniToken2WavModel

< >

( config: Qwen2_5OmniToken2WavConfig )

参数

  • config (Qwen2_5OmniToken2WavConfig) — 包含模型所有参数的模型配置类。用配置文件初始化不会加载与模型关联的权重,只加载配置。请查阅 from_pretrained() 方法来加载模型权重。

完整的 Qwen2.5Omni Token2Wav 模型。它由一个 DiT 模型组成,该模型以语音标记作为输入并预测 mel 谱图,以及一个 BigVGAN 声码器,该声码器以 mel 谱图作为输入并预测波形。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

forward

< >

( code conditioning reference_mel num_steps = 10 guidance_scale = 0.5 sway_coefficient = -1.0 **kwargs )

从输入代码和条件参数生成波形。

Qwen2_5OmniToken2WavDiTModel

class transformers.Qwen2_5OmniToken2WavDiTModel

< >

( config: Qwen2_5OmniDiTConfig )

参数

  • config (Qwen2_5OmniDiTConfig) — 包含模型所有参数的模型配置类。用配置文件初始化不会加载与模型关联的权重,只加载配置。请查阅 from_pretrained() 方法来加载模型权重。

完整的 Qwen2.5Omni Token2WavDiT 模型。它将语音标记作为输入并预测 mel 谱图。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

Qwen2_5OmniToken2WavBigVGANModel

class transformers.Qwen2_5OmniToken2WavBigVGANModel

< >

( config: Qwen2_5OmniBigVGANConfig )

参数

  • config (Qwen2_5OmniBigVGANConfig) — 包含模型所有参数的模型配置类。用配置文件初始化不会加载与模型关联的权重,只加载配置。请查阅 from_pretrained() 方法来加载模型权重。

完整的 Qwen2.5Omni Token2WavBigVGAN 模型。它将 mel 谱图作为输入并预测波形。

此模型继承自 PreTrainedModel。请查看超类的文档,了解该库为其所有模型实现的一般方法(例如下载或保存、调整输入嵌入大小、修剪头等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参考 PyTorch 文档,了解与一般用法和行为相关的所有事项。

< > 在 GitHub 上更新