Transformers documentation
PE 音频
该模型于 2025-04-17 在 HF papers 上发布,并于 2025-12-16 贡献至 Hugging Face Transformers。 该模型于 2025-04-17 发布,并于 2025-12-16 添加至 Hugging Face Transformers。
PE 音频
PE Audio 是 Meta 感知编码器(Perception Encoder)系列中的音频分支。它通过对比学习将原始波形与文本对齐到共享的嵌入空间中,并在配对的音频-字幕数据上进行训练,以实现跨模态检索和零样本音频分类。
同一编码器上方暴露了两个模型头。PeAudioModel 为每个片段返回一个池化嵌入,用于片段级别的检索;而 PeAudioFrameLevelModel 每 40 毫秒返回一个嵌入,用于事件定位和细粒度的时序分析。
您可以在 perception-encoder-audio-visual 集合中找到所有官方的 PE Audio 检查点。
快速入门
import torch
from datasets import load_dataset
from transformers import AutoProcessor, PeAudioModel
processor = AutoProcessor.from_pretrained("facebook/pe-av-large")
model = PeAudioModel.from_pretrained(
"facebook/pe-av-large",
device_map="auto",
)
ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
audio = ds[0]["audio"]["array"]
labels = ["a dog barking", "a person speaking", "music playing"]
audio_inputs = processor.feature_extractor(audio, sampling_rate=48_000, return_tensors="pt").to(model.device)
text_inputs = processor.tokenizer(labels, padding=True, return_tensors="pt").to(model.device)
inputs = {**audio_inputs, **text_inputs}
with torch.no_grad():
outputs = model(**inputs)
probs = outputs.logits_audio_text.sigmoid()
print({label: p.item() for label, p in zip(labels, probs[0])})使用技巧与说明
- 音频必须为单声道(
feature_size=1)并重采样至 48 kHz——特征提取器会发出警告,但不会替你执行重采样。不支持立体声输入。 - 变长音频通过
padding_mask(而非通常的attention_mask)进行处理。该掩码在到达编码器之前会由dac_config.hop_length在内部进行下采样,因此请传入特征提取器返回的原始波形分辨率掩码。 - PeAudioModel 返回形状为
(n_audio, n_text)的 logits。PeAudioFrameLevelModel 返回(n_audio, n_text, n_frames),每 40 ms 一帧。请根据任务选择对应的类——它们共享权重,因此切换成本很低。 - 文本塔是一个通过
AutoModel从config.text_config加载的共享编码器。分词器通过AutoTokenizer附加到处理器上,而不是使用专用类。
PeAudioConfig
class transformers.PeAudioConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None )
这是用于存储 PeAudioModel 配置的类。它根据指定的参数实例化 Pe Audio 模型,并定义模型架构。使用默认值实例化配置将生成与 facebook/pe-av-large 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import PeAudioModel, PeAudioConfig
>>> # Initializing a PeAudioModel style configuration
>>> configuration = PeAudioConfig()
>>> # Initializing a model from the pe-av-large style configuration
>>> model = PeAudioModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configPeAudioEncoderConfig
class transformers.PeAudioEncoderConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonedac_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonehidden_size: int = 1792intermediate_size: int = 4800num_hidden_layers: int = 6num_attention_heads: int = 14num_key_value_heads: int | None = Nonehead_dim: int = 128hidden_act: str = 'silu'max_position_embeddings: int = 10000initializer_range: float = 0.02rms_norm_eps: float = 1e-05rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Noneattention_bias: bool = Falseattention_dropout: float | int = 0.0 )
参数
- dac_config (
Union[PreTrainedConfig, dict], 可选) — 用于对原始音频输入进行分词的 DAC 音频编码器的配置。如果传入字典,将使用它来实例化一个具有默认 DAC 超参数的 DacConfig。 - hidden_size (
int,可选,默认为1792) — 隐藏表示的维度。 - intermediate_size (
int,可选,默认为4800) — MLP 表示的维度。 - num_hidden_layers (
int,可选,默认为6) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int,可选,默认为14) — Transformer 解码器中每个注意力层的注意力头数量。 - num_key_value_heads (
int, 可选) — 这是用于实现 Grouped Query Attention 的 key_value 头数。如果num_key_value_heads=num_attention_heads,模型将使用 Multi Head Attention (MHA);如果num_key_value_heads=1,模型将使用 Multi Query Attention (MQA);否则使用 GQA。在将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行平均池化来构建。更多详情请参阅 这篇论文。如果未指定,则默认为num_attention_heads。 - head_dim (
int,可选,默认为128) — 注意力头维度。如果为 None,则默认为 hidden_size // num_attention_heads - hidden_act (
str,可选,默认为silu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、"relu"、"silu"等。 - max_position_embeddings (
int,可选,默认为10000) — 该模型可能使用的最大序列长度。 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - rms_norm_eps (
float,可选,默认为1e-05) — RMS 归一化层使用的 epsilon 值。 - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], 可选) — 包含 RoPE 嵌入配置参数的字典。该字典应包含rope_theta的值,并且如果希望使用 RoPE 处理更长的max_position_embeddings,则可选地包含用于缩放的参数。 - attention_bias (
bool,可选,默认为False) — 在自注意力机制中,是否在 query、key、value 和 output 投影层中使用偏置。 - attention_dropout (
Union[float, int],可选,默认为0.0) — 注意力概率的 dropout 比率。
这是用于存储 PeAudioModel 配置的类。它根据指定的参数实例化 Pe Audio 模型,并定义模型架构。使用默认值实例化配置将生成与 facebook/pe-av-large 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
>>> from transformers import PeAudioEncoder, PeAudioEncoderConfig
>>> # Initializing a PeAudioEncoder style configuration
>>> configuration = PeAudioEncoderConfig()
>>> # Initializing a model from the pe-av-large style configuration
>>> model = PeAudioEncoder(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configPeAudioFeatureExtractor
class transformers.PeAudioFeatureExtractor
< source >( feature_size: int = 1sampling_rate: int = 48000padding_value: float = 0.0hop_length: int = 1920**kwargs )
构建一个 PeAudioFeatureExtractor 特征提取器。
该特征提取器继承自 SequenceFeatureExtractor,其中包含了大部分主要方法。用户应参考该父类以获取有关这些方法的更多信息。
__call__
< source >( raw_audio: numpy.ndarray | list[float] | list[numpy.ndarray] | list[list[float]] | str | list[str]padding: bool | str | transformers.utils.generic.PaddingStrategy | None = Nonetruncation: bool | None = Falsemax_length: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonesampling_rate: int | None = None )
PeAudioProcessor
PeAudioEncoder
class transformers.PeAudioEncoder
< source >( config: PeAudioEncoderConfig )
参数
- config (PeAudioEncoderConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
PeAudio Encoder 模型。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_values: Tensorpadding_mask: typing.Optional[torch.Tensor] = None**kwargs ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
参数
- input_values (
torch.Tensor,形状为(batch_size, sequence_length)) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。有关详细信息,请参阅 PeAudioProcessor.call()。 - padding_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对input_values. 中的掩码值,取值范围为[0, 1]:- 1 对于未被掩码的样本,
- 对于被掩码的样本,值为 0。
返回值
BaseModelOutputWithPooling 或 tuple(torch.Tensor)
一个 BaseModelOutputWithPooling 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(PeAudioConfig)和输入。
PeAudioEncoder 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
last_hidden_state(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor)— 模型最后一层输出的隐藏状态序列。pooler_output (
torch.Tensor,形状为(batch_size, hidden_size)) — 序列中第一个 token(分类 token)的最后一层隐藏状态,经过用于辅助预训练任务的层进一步处理后得到。例如,对于 BERT 系列模型,这返回的是分类 token 经过线性层和 tanh 激活函数处理后的结果。线性层的权重在预训练期间通过下一句预测(分类)目标进行训练。hidden_states (
tuple(torch.Tensor),可选,当传入output_hidden_states=True或config.output_hidden_states=True时返回) — 一个torch.Tensor元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。
attentions (
tuple(torch.Tensor),可选,当传入output_attentions=True或config.output_attentions=True时返回) — 一个torch.Tensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。
PeAudioModel
forward
< source >( input_ids: Tensorinput_values: Tensorattention_mask: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonereturn_loss: bool | None = None**kwargs ) → PeAudioOutput or tuple(torch.Tensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length)) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)会被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- input_values (
torch.Tensor,形状为(batch_size, sequence_length)) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。有关详细信息,请参阅 PeAudioProcessor.call()。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- padding_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对input_values. 中的掩码值,取值范围为[0, 1]:- 1 对于未被掩码的样本,
- 对于被掩码的样本,值为 0。
- return_loss (
bool, 可选) — 是否返回损失值。
返回值
PeAudioOutput 或 tuple(torch.Tensor)
PeAudioOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(PeAudioConfig)和输入。
PeAudioModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
- loss (
torch.Tensor,形状为(1,),可选) — 在音频和文本表示之间计算的对比损失。 - logits_audio_text(形状为
(batch_size, batch_size)的torch.Tensor,可选)— 音频嵌入与文本嵌入之间的相似度 logits。PeAudioFrameLevelModel 返回形状为(batch_size, batch_size, sequence_length)的逐帧 logits。 - text_audio_embeds(形状为
(batch_size, hidden_size)的torch.Tensor,可选)— 投影到音频-文本空间的文本嵌入。 - audio_embeds(形状为
(batch_size, hidden_size)的torch.Tensor,可选)— 投影到音频-文本空间的音频嵌入。PeAudioFrameLevelModel 返回形状为(batch_size, sequence_length, hidden_size)的逐帧嵌入。 - text_outputs (
BaseModelOutputWithPooling,可选) — 文本编码器的模型输出,包括最后一个隐藏状态和池化输出。 - audio_outputs (
BaseModelOutputWithPooling,可选) — 音频编码器的模型输出,包括最后一个隐藏状态和池化输出。
PeAudioFrameLevelModel
forward
< source >( input_ids: Tensorinput_values: Tensorattention_mask: typing.Optional[torch.Tensor] = Nonepadding_mask: typing.Optional[torch.Tensor] = Nonereturn_loss: bool | None = None**kwargs ) → PeAudioOutput or tuple(torch.Tensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length)) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)会被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- input_values (
torch.Tensor,形状为(batch_size, sequence_length)) — 输入原始语音波形的浮点值。可以通过将.flac或.wav音频文件加载为list[float]、numpy.ndarray或torch.Tensor类型的数组来获取这些值,例如 使用 torchcodec 库(pip install torchcodec)或 soundfile 库(pip install soundfile)。要将该数组准备为input_values,应使用 AutoProcessor 进行填充并转换为torch.Tensor类型的张量。有关详细信息,请参阅 PeAudioProcessor.call()。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- padding_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对input_values. 中的掩码值,取值范围为[0, 1]:- 1 对于未被掩码的样本,
- 对于被掩码的样本,值为 0。
- return_loss (
bool, 可选) — 是否返回损失值。
返回值
PeAudioOutput 或 tuple(torch.Tensor)
PeAudioOutput 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(PeAudioConfig)和输入。
PeAudioFrameLevelModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
- loss (
torch.Tensor,形状为(1,),可选) — 在音频和文本表示之间计算的对比损失。 - logits_audio_text(形状为
(batch_size, batch_size)的torch.Tensor,可选)— 音频嵌入与文本嵌入之间的相似度 logits。PeAudioFrameLevelModel 返回形状为(batch_size, batch_size, sequence_length)的逐帧 logits。 - text_audio_embeds(形状为
(batch_size, hidden_size)的torch.Tensor,可选)— 投影到音频-文本空间的文本嵌入。 - audio_embeds(形状为
(batch_size, hidden_size)的torch.Tensor,可选)— 投影到音频-文本空间的音频嵌入。PeAudioFrameLevelModel 返回形状为(batch_size, sequence_length, hidden_size)的逐帧嵌入。 - text_outputs (
BaseModelOutputWithPooling,可选) — 文本编码器的模型输出,包括最后一个隐藏状态和池化输出。 - audio_outputs (
BaseModelOutputWithPooling,可选) — 音频编码器的模型输出,包括最后一个隐藏状态和池化输出。