Transformers 文件
Qwen2.5-Omni
並獲得增強的文件體驗
開始使用
Qwen2.5-Omni
概述
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"
檢查點支援兩種音色型別:Chelsie
和 Ethan
,其中 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.float16
或 torch.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 )
這是用於儲存 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 提供了 Qwen2VLImageProcessor、WhisperFeatureExtractor 和 Qwen2TokenizerFast 的所有功能。有關更多資訊,請參閱 __call__()
和 decode()。
此方法將其所有引數轉發給 Qwen2TokenizerFast 的 batch_decode()。有關更多資訊,請參閱此方法的文件字串。
獲取分塊索引
< 來源 >( token_indices: ndarray tokens_per_chunk: int ) → list[tuple[int, int]]
根據標記值範圍將標記索引列表拆分為塊。
給定標記索引列表,返回 (start, end) 索引元組列表,表示列表中標記值落在連續 t_ntoken_per_chunk
範圍內的切片。
例如,如果 t_ntoken_per_chunk
為 1000,則函式將建立這樣的塊:
- 第一個塊包含標記值 < 1000,
- 第二個塊包含值 >= 1000 且 < 2000,依此類推。
Qwen2_5OmniForConditionalGeneration
class transformers.Qwen2_5OmniForConditionalGeneration
< 來源 >( config )
引數
- config (Qwen2_5OmniForConditionalGeneration) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化並不會載入與模型相關的權重,只加載配置。要載入模型權重,請檢視 from_pretrained() 方法。
完整的 Qwen2.5Omni 模型,一個由 3 個子模型組成的多模態模型
- Qwen2_5OmniThinkerForConditionalGeneration: 一個因果自迴歸轉換器,接受文字、音訊、影像、影片作為輸入並預測文字標記。
- Qwen2_5OmniTalkerForConditionalGeneration: 一個因果自迴歸轉換器,接受思考者的隱藏狀態和響應作為輸入並預測語音標記。
- Qwen2_5OmniToken2WavModel:一個 DiT 模型,以語音 token 作為輸入,預測梅爾頻譜圖,以及一個 BigVGAN 聲碼器,以梅爾頻譜圖作為輸入,預測波形。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。
定義每次呼叫時執行的計算。
應由所有子類覆蓋。
儘管前向傳播的配方需要在該函式中定義,但之後應該呼叫 Module
例項而不是它,因為前者負責執行註冊的鉤子,而後者則默默地忽略它們。
Qwen2_5OmniPreTrainedModelForConditionalGeneration
class transformers.Qwen2_5OmniPreTrainedModelForConditionalGeneration
< source >( config: PretrainedConfig *inputs **kwargs )
獲取分塊索引
< source >( token_indices: Tensor tokens_per_chunk: int remove_index: int ) → list[tuple[int, int]]
根據標記值範圍將標記索引列表拆分為塊。
給定標記索引列表,返回 (start, end) 索引元組列表,表示列表中標記值落在連續 t_ntoken_per_chunk
範圍內的切片。
例如,如果 t_ntoken_per_chunk
為 1000,則函式將建立這樣的塊:
- 第一個塊包含標記值 < 1000,
- 第二個塊包含值 >= 1000 且 < 2000,依此類推。
get_rope_index
< source >( 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
< source >( 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 相似的配置。
配置物件繼承自 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
< source >( config: Qwen2_5OmniThinkerConfig )
引數
- config (Qwen2_5OmniThinkerConfig) — 模型的配置類,包含模型的所有引數。使用配置檔案初始化不會載入與模型相關的權重,僅載入配置。請檢視 from_pretrained() 方法以載入模型權重。
Qwen2.5OmniThinker 模型,由音訊主幹和語言模型組成。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。
forward
< source >( 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_5OmniThinkerCausalLMOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
, 可選) — 詞彙表中輸入序列 token 的索引。預設情況下,填充將被忽略。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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]
。 - past_key_values (
list[torch.FloatTensor]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參見我們的 kv 快取指南;
- 長度為
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
索引如何轉換為相關向量有比模型內部嵌入查詢矩陣更多的控制,此引數會很有用。 - 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_5OmniThinkerCausalLMOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.models.qwen2_5_omni.modeling_qwen2_5_omni.Qwen2_5OmniThinkerCausalLMOutputWithPast
物件或一個 torch.FloatTensor
元組 (如果傳入 return_dict=False
或 config.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=True
或config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組 (一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,當傳入output_attentions=True
或config.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
< source >( input_features: FloatTensor feature_attention_mask: typing.Optional[torch.LongTensor] = None audio_feature_lengths: typing.Optional[torch.LongTensor] = None )
將音訊編碼為可轉發到語言模型的連續嵌入。
get_image_features
< source >( pixel_values: FloatTensor image_grid_thw: typing.Optional[torch.LongTensor] = None )
將影像編碼為可轉發到語言模型的連續嵌入。
get_video_features
< source >( pixel_values_videos: FloatTensor video_grid_thw: typing.Optional[torch.LongTensor] = None )
將影片編碼為可轉發到語言模型的連續嵌入。
Qwen2_5OmniThinkerTextModel
class transformers.Qwen2_5OmniThinkerTextModel
< source >( config: Qwen2_5OmniTextConfig )
引數
- config (
Qwen2_5OmniTextConfig
) — 包含模型所有引數的模型配置類。使用配置檔案初始化並不會載入與模型相關的權重,僅載入配置。請查閱 from_pretrained() 方法載入模型權重。
裸 Qwen2 5 Omni 文字模型,輸出原始隱藏狀態,不帶任何特定頭。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。
forward
< source >( 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.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列令牌的索引。填充預設會被忽略。索引可以使用 AutoTokenizer 獲取。更多詳情請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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]
。 - past_key_values (
list[torch.FloatTensor]
,可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.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.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 物件或一個 torch.FloatTensor
元組 (如果傳入 return_dict=False
或 config.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=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。更多詳情請參閱我們的 kv cache 指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
,則還包含交叉注意力塊中的鍵和值),可用於加速順序解碼 (參見past_key_values
輸入)。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組 (一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.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
< source >( 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 模型的詞彙量大小。定義了呼叫 Qwen2VLModel 時inputs_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 (
str
或function
, 可選, 預設為"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 相似的配置。
配置物件繼承自 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
< source >( config: Qwen2_5OmniTalkerConfig )
forward
< source >( 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_5OmniTalkerCausalLMOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (形狀為
(batch_size, sequence_length)
的torch.LongTensor
) — 詞彙表中輸入序列標記的索引。填充將預設被忽略。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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]
。 - past_key_values (
list[torch.FloatTensor]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- Cache 例項,請參見我們的 kv 快取指南;
- 長度為
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
。 - 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_5OmniTalkerCausalLMOutputWithPast
或 tuple(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=True
或config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組 (一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,當傳入output_attentions=True
或config.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
< source >( config: Qwen2_5OmniTalkerConfig )
引數
- config (Qwen2_5OmniTalkerConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
裸 Qwen2 5 Omni 模型,輸出原始隱藏狀態,不帶任何特定頭部。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。
forward
< source >( 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.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
of shape(batch_size, sequence_length)
, optional) — 輸入序列標記在詞彙表中的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲取。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- 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]
之間。 - past_key_values (
list[torch.FloatTensor]
, optional) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速序列解碼。這通常包括模型在解碼前期返回的past_key_values
,當use_cache=True
或config.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
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.BaseModelOutputWithPast 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPast 物件或一個 torch.FloatTensor
元組 (如果傳入 return_dict=False
或 config.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=True
或config.use_cache=True
時返回) — 這是一個 Cache 例項。更多詳情請參閱我們的 kv cache 指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
,則還包含交叉注意力塊中的鍵和值),可用於加速順序解碼 (參見past_key_values
輸入)。 -
hidden_states (
tuple(torch.FloatTensor)
,可選,當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
元組 (一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每個層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(torch.FloatTensor)
,可選,當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
元組 (每個層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
的 Qwen2_5OmniTalkerModel 前向方法會覆蓋 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而非此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默忽略它們。
Qwen2_5OmniToken2WavConfig
class transformers.Qwen2_5OmniToken2WavConfig
< source >( dit_config = None bigvgan_config = None **kwargs )
這是用於儲存 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
< source >( config: Qwen2_5OmniToken2WavConfig )
引數
- config (Qwen2_5OmniToken2WavConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型關聯的權重,只加載配置。請查閱 from_pretrained() 方法來載入模型權重。
完整的 Qwen2.5Omni Token2Wav 模型。它由一個 DiT 模型組成,該模型以語音標記作為輸入並預測 mel 譜圖,以及一個 BigVGAN 聲碼器,該聲碼器以 mel 譜圖作為輸入並預測波形。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。
forward
< source >( code conditioning reference_mel num_steps = 10 guidance_scale = 0.5 sway_coefficient = -1.0 **kwargs )
從輸入程式碼和條件引數生成波形。
Qwen2_5OmniToken2WavDiTModel
class transformers.Qwen2_5OmniToken2WavDiTModel
< source >( 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
< source >( config: Qwen2_5OmniBigVGANConfig )
引數
- config (
Qwen2_5OmniBigVGANConfig
) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型關聯的權重,只加載配置。請查閱 from_pretrained() 方法來載入模型權重。
完整的 Qwen2.5Omni Token2WavBigVGAN 模型。它將 mel 譜圖作為輸入並預測波形。
此模型繼承自 PreTrainedModel。請檢視超類的文件,瞭解該庫為其所有模型實現的一般方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
此模型也是 PyTorch torch.nn.Module 子類。將其用作常規 PyTorch 模組,並參考 PyTorch 文件,瞭解與一般用法和行為相關的所有事項。