Transformers documentation
Bark
该模型于 2023-07-17 贡献至 Hugging Face Transformers。
Bark
概述
Bark 是由 Suno AI 在 suno-ai/bark 中提出的基于 Transformer 的文本转语音模型。
Bark 由 4 个主要模型组成:
- BarkSemanticModel(也称为“文本”模型):一种因果自回归 Transformer 模型,以分词后的文本作为输入,预测能够捕捉文本语义的语义文本 token。
- BarkCoarseModel(也称为“粗粒度声学”模型):一种因果自回归 Transformer,其输入为 BarkSemanticModel 模型的输出结果。它旨在预测 EnCodec 所需的前两个音频码本。
- BarkFineModel(“精细声学”模型),此次采用非因果自编码器 Transformer,基于先前码本嵌入的总和,迭代预测最后一个码本。
- 在通过 EncodecModel 预测出所有码本通道后,Bark 会利用它来解码输出音频数组。
需要注意的是,前三个模块中的每一个都可以支持条件说话人嵌入,以便根据特定的预定义语音来调节输出声音。
该模型由 Yoach Lacombe (ylacombe) 和 Sanchit Gandhi (sanchit-gandhi) 贡献。 原始代码可在此处找到。
优化 Bark
只需几行额外的代码即可优化 Bark,从而显著降低其内存占用并加速推理。
使用半精度
只需以半精度加载模型,即可将推理速度提升一倍,并将内存占用减少 50%。
from transformers import BarkModel
model = BarkModel.from_pretrained("suno/bark-small", device_map="auto")使用 CPU 卸载
如上所述,Bark 由 4 个子模型组成,在音频生成过程中按顺序调用。换句话说,当一个子模型正在使用时,其他子模型处于空闲状态。
如果您使用的是 CUDA GPU 或 Intel XPU,一种简单的解决方案是在子模型空闲时将其从设备卸载到 CPU,从而将内存占用减少 80%。此操作称为 CPU offloading。您可以使用以下一行代码来实现:
model.enable_cpu_offload()
请注意,在使用此功能之前,必须先安装 🤗 Accelerate。以下是安装方法。
使用 Flash Attention 2
Flash Attention 2 是前一个优化版本的进一步加速和优化版本。
安装
首先,检查您的硬件是否与 Flash Attention 2 兼容。最新的兼容硬件列表可在官方文档中查阅。 接下来,安装 Flash Attention 2 的最新版本:
pip install -U flash-attn --no-build-isolation
用法
要使用 Flash Attention 2 加载模型,我们可以将 attn_implementation="flash_attention_2" 标志传递给 from_pretrained()。我们还会以半精度(例如 torch.float16)加载模型,因为这几乎不会降低音频质量,但能显著降低内存占用并加快推理速度:
model = BarkModel.from_pretrained("suno/bark-small", attn_implementation="flash_attention_2", device_map="auto")性能对比
下图展示了原生注意力实现(未优化)与 Flash Attention 2 的延迟对比。在所有情况下,我们都在配备 40GB 显存的 A100 GPU 上使用 PyTorch 2.1 生成了 400 个语义 token:

为了更直观地理解这一点,在 NVIDIA A100 上,当以 16 的 batch size 生成 400 个语义 token 时,你可以获得 17 倍的吞吐量,并且比使用原生模型实现逐句生成还要快 2 秒。换句话说,所有样本的生成速度将提升 17 倍。
结合优化技术
您可以组合使用各种优化技术,同时启用 CPU offload、半精度和 Flash Attention 2。
from transformers import BarkModel
# load in fp16 and use Flash Attention 2
model = BarkModel.from_pretrained("suno/bark-small", attn_implementation="flash_attention_2", device_map="auto")
# enable CPU offload
model.enable_cpu_offload()有关推理优化技术的更多信息,请参见此处。
使用技巧
Suno 在此处提供了多种语言的语音预设库。 这些预设也已上传至 Hub,可在此处此处或此处找到。
from transformers import AutoProcessor, BarkModel
processor = AutoProcessor.from_pretrained("suno/bark")
model = BarkModel.from_pretrained("suno/bark", device_map="auto")
voice_preset = "v2/en_speaker_6"
inputs = processor("Hello, my dog is cute", voice_preset=voice_preset)
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()Bark 能够生成高度逼真的多语言语音以及其他音频,包括音乐、背景噪音和简单的音效。
# Multilingual speech - simplified Chinese
inputs = processor("惊人的!我会说中文")
# Multilingual speech - French - let's use a voice_preset as well
inputs = processor("Incroyable! Je peux générer du son.", voice_preset="fr_speaker_5")
# Bark can also generate music. You can help it out by adding music notes around your lyrics.
inputs = processor("♪ Hello, my dog is cute ♪")
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()该模型还可以生成非语言交流,例如大笑、叹息和哭泣。
# Adding non-speech cues to the input text
inputs = processor("Hello uh [clears throat], my dog is cute [laughter]")
audio_array = model.generate(**inputs)
audio_array = audio_array.cpu().numpy().squeeze()要保存音频,只需从模型配置中获取采样率,并使用一些 scipy 工具:
from scipy.io.wavfile import write as write_wav
# save audio to disk, but first take the sample rate from the model config
sample_rate = model.generation_config.sample_rate
write_wav("bark_generation.wav", sample_rate, audio_array)BarkConfig
class transformers.BarkConfig
< 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 = Nonesemantic_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonecoarse_acoustics_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonefine_acoustics_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonecodec_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneinitializer_range: float = 0.02 )
参数
- semantic_config (BarkSemanticConfig,可选) — 底层语义子模型的配置。
- coarse_acoustics_config (BarkCoarseConfig,可选) — 底层粗粒度声学子模型的配置。
- fine_acoustics_config (BarkFineConfig,可选) — 底层精细声学子模型的配置。
- codec_config (AutoConfig,可选) — 底层编解码器子模型的配置。
- initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
这是用于存储 BarkModel 配置的类。它根据指定的参数实例化 Bark 模型,并定义模型架构。使用默认值实例化配置,将得到与 suno/bark 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import (
... BarkSemanticConfig,
... BarkCoarseConfig,
... BarkFineConfig,
... BarkModel,
... BarkConfig,
... AutoConfig,
... )
>>> # Initializing Bark sub-modules configurations.
>>> semantic_config = BarkSemanticConfig()
>>> coarse_acoustics_config = BarkCoarseConfig()
>>> fine_acoustics_config = BarkFineConfig()
>>> codec_config = AutoConfig.from_pretrained("facebook/encodec_24khz")
>>> # Initializing a Bark module style configuration
>>> configuration = BarkConfig(
... semantic_config, coarse_acoustics_config, fine_acoustics_config, codec_config
... )
>>> # Initializing a model (with random weights)
>>> model = BarkModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configBarkProcessor
class transformers.BarkProcessor
< source >( tokenizerspeaker_embeddings = None )
参数
- tokenizer (
BertTokenizer) — 分词器是必需的输入。 - speaker_embeddings (
dict[dict[str]],可选) — 可选的嵌套说话人嵌入字典。第一层包含语音预设名称(例如"en_speaker_4")。第二层包含"semantic_prompt"、"coarse_prompt"和"fine_prompt"嵌入。对应的值是对应np.ndarray的路径。有关voice_preset_names的列表,请参见 此处。
构建一个 BarkProcessor,将分词器封装为单一处理器。
BarkProcessor 提供了 BertTokenizer 的所有功能。有关更多信息,请参阅 ~BertTokenizer。
__call__
< source >( text = Nonevoice_preset = Nonereturn_tensors = 'pt'max_length = 256add_special_tokens = Falsereturn_attention_mask = Truereturn_token_type_ids = False**kwargs ) → BatchEncoding
参数
- text (`
) -- The sequence or batch of sequences to be encoded. Each sequence can be a string or a list of strings (pretokenized string). If you pass a pretokenized input, setis_split_into_words=True` to avoid ambiguity with batched inputs. - voice_preset (
str,dict[np.ndarray]) — 语音预设,即说话人嵌入。它可以是一个有效的 voice_preset 名称,例如"en_speaker_1",也可以是Bark每个子模型的np.ndarray嵌入字典。或者,它可以是一个本地.npz单语音预设文件的有效文件名,该文件包含键"semantic_prompt"、"coarse_prompt"和"fine_prompt"。 - return_tensors (`
, defaults topt`) — 如果设置,将返回特定框架的张量。可接受的值为:'pt':返回 PyTorchtorch.Tensor对象。'np':返回 NumPynp.ndarray对象。
- max_length (
int, 默认为256) — 控制截断/填充参数所使用的最大长度。如果未设置或设置为 None,则当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(如 XLNet),则禁用截断/填充到最大长度的功能。如果未设置或设置为
None,当截断/填充参数需要最大长度时,将使用预定义的最大模型长度。如果模型没有特定的最大输入长度(例如 XLNet),则禁用截断/填充至最大长度的功能。 - add_special_tokens(
bool,默认为False)—— 在编码序列时是否添加特殊标记。此操作将使用底层的PretrainedTokenizerBase.build_inputs_with_special_tokens函数,该函数定义了哪些标记会自动添加到输入 ID 中。如果您希望自动添加bos或eos标记,此功能非常有用。 - return_attention_mask (
bool, 默认为True) — 是否返回注意力掩码。如果保持默认值,将根据特定分词器的默认设置返回注意力掩码,该设置由return_outputs属性定义。 - return_token_type_ids (
bool, 默认为False) — 是否返回 token type ID。如果保持默认值,将根据特定 tokenizer 的默认设置返回 token type ID,该设置由return_outputs属性定义。
返回值
包含 tokenizer 输出的 BatchEncoding 对象。
如果提供了语音预设,返回的对象将包含一个 "history_prompt" 键,
其值为 BatchFeature,即具有正确张量类型的语音预设。
from_pretrained
< source >( pretrained_processor_name_or_pathspeaker_embeddings_dict_path = 'speaker_embeddings_path.json'**kwargs )
参数
- pretrained_model_name_or_path (
str或os.PathLike) — 可以是以下之一:- 一个字符串,即托管在 huggingface.co 模型仓库中的预训练 BarkProcessor 的 model id。
- 指向一个目录的路径,该目录包含使用 save_pretrained() 方法保存的处理器,例如
./my_model_directory/。
- speaker_embeddings_dict_path (
str,可选,默认为"speaker_embeddings_path.json") — 包含 speaker_embeddings 字典的.json文件的名称,该文件位于pretrained_model_name_or_path中。如果为None,则不加载 speaker_embeddings。 - **kwargs —
传递给
~tokenization_utils_base.PreTrainedTokenizer.from_pretrained的额外关键字参数。
实例化一个与预训练模型关联的 Bark 处理器。
save_pretrained
< source >( save_directoryspeaker_embeddings_dict_path = 'speaker_embeddings_path.json'speaker_embeddings_directory = 'speaker_embeddings'push_to_hub: bool = False**kwargs )
参数
- save_directory (
str或os.PathLike) — 用于保存分词器文件和说话人嵌入的目录(如果该目录不存在,则会自动创建)。 - speaker_embeddings_dict_path (
str,可选,默认为"speaker_embeddings_path.json") — 如果存在,该参数指定包含 speaker_embeddings 嵌套路径字典的.json文件的名称,该文件位于pretrained_model_name_or_path/speaker_embeddings_directory中。 - speaker_embeddings_directory (
str, 可选,默认为"speaker_embeddings/") — 用于保存 speaker_embeddings 数组的文件夹名称。 - push_to_hub (
bool,可选,默认为False) — 是否在保存模型后将其推送到 Hugging Face 模型库。您可以使用repo_id指定要推送到的仓库(默认使用您命名空间中save_directory的名称)。 - kwargs — 传递给 push_to_hub() 方法的额外关键字参数。
将此处理器(分词器……)的属性保存到指定目录中,以便使用 from_pretrained() 方法重新加载。
BarkModel
class transformers.BarkModel
< source >( config: BarkConfig )
参数
- config (BarkConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
完整的 Bark 模型,一个由 4 个子模型组成的文本转语音模型:
- BarkSemanticModel(也称为“文本”模型):一种因果自回归 Transformer 模型,以分词后的文本作为输入,预测能够捕捉文本语义的语义文本 token。
- BarkCoarseModel(也称为“粗粒度声学”模型)同样是一个因果自回归 Transformer,它以最后一个模型的输出作为输入。其目标是对
encodec所需的前两个音频码本进行回归。 - BarkFineModel(“精细声学”模型),此次采用非因果自编码器 Transformer,它基于先前码本嵌入的总和,迭代地预测最后一个码本。
- 在通过 EncodecModel 预测出所有码本通道后,Bark 会利用它来解码输出音频数组。
需要指出的是,前三个模块均支持条件说话人嵌入,以便根据特定的预定义声音对输出声音进行条件化。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
generate
< source >( input_ids: typing.Optional[torch.Tensor] = Nonehistory_prompt: dict[str, torch.Tensor] | None = Nonereturn_output_lengths: bool | None = None**kwargs ) → By default
参数
- input_ids (
Optional[torch.Tensor],形状为 (batch_size, seq_len),可选) — 输入 ID。将被截断至 256 个 token。请注意,输出音频的长度将与批次中最长的生成结果一致。 - history_prompt (
Optional[dict[str,torch.Tensor]], 可选) — 可选的Bark说话人提示。请注意,目前该模型每个批次仅接受一个说话人提示。 - kwargs (可选) — 其余关键字参数字典。关键字参数分为两种类型:
- 如果没有前缀,它们将作为
**kwargs传入每个子模型的generate方法。 - 如果带有 semantic_、coarse_、fine_ 前缀,它们将分别作为语义、粗粒度和细粒度
generate方法的输入。其优先级高于不带前缀的关键字。
这意味着,例如,您可以为除一个之外的所有子模型指定生成策略。
- 如果没有前缀,它们将作为
- return_output_lengths (
bool, 可选) — 是否返回波形长度。在批量处理时很有用。
返回值
默认情况下
- audio_waveform(形状为 (batch_size, seq_len) 的
torch.Tensor):生成的音频波形。 当return_output_lengths=True时: 返回一个由以下元素组成的元组: - audio_waveform(形状为 (batch_size, seq_len) 的
torch.Tensor):生成的音频波形。 - output_lengths(形状为 (batch_size) 的
torch.Tensor):批次中每个波形的长度
根据输入提示以及可选的 Bark 说话人提示生成音频。
示例:
>>> from transformers import AutoProcessor, BarkModel
>>> processor = AutoProcessor.from_pretrained("suno/bark-small")
>>> model = BarkModel.from_pretrained("suno/bark-small")
>>> # To add a voice preset, you can pass `voice_preset` to `BarkProcessor.__call__(...)`
>>> voice_preset = "v2/en_speaker_6"
>>> inputs = processor("Hello, my dog is cute, I need him in my life", voice_preset=voice_preset)
>>> audio_array = model.generate(**inputs, semantic_max_new_tokens=100)
>>> audio_array = audio_array.cpu().numpy().squeeze()enable_cpu_offload
< source >( accelerator_id: int | None = 0**kwargs )
使用 accelerate 将所有子模型卸载到 CPU,在性能影响较小的情况下降低内存占用。该方法在子模型被使用时,每次将整个子模型移至加速器,并且该子模型会保留在加速器上,直到下一个子模型开始运行。
BarkSemanticModel
class transformers.BarkSemanticModel
< source >( config: BarkSubModelConfig )
参数
- config (
BarkSubModelConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Bark 语义(或文本)模型。它与粗粒度模型共享相同的架构。 它是一个类似 GPT-2 的自回归模型,顶部带有一个语言建模头。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → CausalLMOutputWithPast or tuple(torch.Tensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中各 token 在词表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由past_key_values在解码的先前阶段返回,当use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - labels (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在[0, ..., config.vocab_size]范围内,或为 -100(参见input_ids的文档字符串)。索引值设为-100的 token 将被忽略(即被掩码),损失仅针对标签位于[0, ..., config.vocab_size]范围内的 token 进行计算。 - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入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 而不是普通元组。
返回值
CausalLMOutputWithPast 或 tuple(torch.Tensor)
一个 CausalLMOutputWithPast 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(BarkConfig)和输入。
BarkCausalModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。logits(形状为
(batch_size, sequence_length, config.vocab_size)的torch.Tensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。past_key_values(
Cache,可选,在传入use_cache=True或config.use_cache=True时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。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 之后的权重,用于在自注意力头中计算加权平均值。
BarkCoarseModel
class transformers.BarkCoarseModel
< source >( config: BarkSubModelConfig )
参数
- config (
BarkSubModelConfig) — 模型配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Bark 粗粒度声学模型。 它与语义(或文本)模型共享相同的架构。它是一个类似 GPT-2 的自回归模型,顶部带有一个语言建模头。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → CausalLMOutputWithPast or tuple(torch.Tensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中各 token 在词表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由past_key_values在解码的先前阶段返回,当use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - labels (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在[0, ..., config.vocab_size]范围内,或为 -100(参见input_ids的文档字符串)。索引值设为-100的 token 将被忽略(即被掩码),损失仅针对标签位于[0, ..., config.vocab_size]范围内的 token 进行计算。 - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入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 而不是普通元组。
返回值
CausalLMOutputWithPast 或 tuple(torch.Tensor)
一个 CausalLMOutputWithPast 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(BarkConfig)和输入。
BarkCausalModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。logits(形状为
(batch_size, sequence_length, config.vocab_size)的torch.Tensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。past_key_values(
Cache,可选,在传入use_cache=True或config.use_cache=True时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。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 之后的权重,用于在自注意力头中计算加权平均值。
BarkFineModel
class transformers.BarkFineModel
< source >( config: BarkFineConfig )
参数
- config (BarkFineConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
Bark 精细声学模型。它是一个非因果的类 GPT 模型,具有 config.n_codes_total 个嵌入层和语言建模头,每个码本对应一个。
该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。
forward
< source >( codebook_idx: intinput_ids: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → MaskedLMOutput or tuple(torch.Tensor)
参数
- codebook_idx (
int) — 要预测的码本索引。 - input_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中各 token 在词表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - labels(形状为
(batch_size, sequence_length)的torch.LongTensor,可选) — 尚未实现。 - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入input_ids。如果您希望对input_ids索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。 - output_attentions (
bool, 可选) — 是否返回所有注意力层的注意力张量。有关详细信息,请参阅返回张量中的attentions。 - output_hidden_states (
bool,可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参阅返回张量中的hidden_states。 - return_dict (
bool, 可选) — 是否返回 ModelOutput 而不是普通元组。
返回值
MaskedLMOutput 或 tuple(torch.Tensor)
一个 MaskedLMOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(BarkConfig)和输入。
BarkFineModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 掩码语言建模(MLM)损失。logits(形状为
(batch_size, sequence_length, config.vocab_size)的torch.Tensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。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 之后的权重,用于在自注意力头中计算加权平均值。
BarkCausalModel
forward
< source >( input_ids: typing.Optional[torch.Tensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → CausalLMOutputWithPast or tuple(torch.Tensor)
参数
- input_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中各 token 在词表中的索引。默认情况下,填充(padding)将被忽略。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由past_key_values在解码的先前阶段返回,当use_cache=True或config.use_cache=True.仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入
past_key_values,则默认会初始化 DynamicCache。模型将输出与输入相同的缓存格式。
如果使用了
past_key_values,用户应仅输入未处理的input_ids(即未向该模型提供其过去键值状态的那些),其形状为(batch_size, unprocessed_length),而不是形状为(batch_size, sequence_length)的全部input_ids。 - attention_mask (
torch.Tensor形状为(batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自[0, 1]:- 1 表示未被屏蔽的 token,
- 对于被掩码的 token,值为 0。
- position_ids (
torch.Tensor形状为(batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为[0, config.n_positions - 1]. - labels (
torch.LongTensor,形状为(batch_size, sequence_length),可选) — 用于计算掩码语言建模损失的标签。索引值应在[0, ..., config.vocab_size]范围内,或为 -100(参见input_ids的文档字符串)。索引值设为-100的 token 将被忽略(即被掩码),损失仅针对标签位于[0, ..., config.vocab_size]范围内的 token 进行计算。 - inputs_embeds(形状为
(batch_size, sequence_length, hidden_size)的torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入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 而不是普通元组。
返回值
CausalLMOutputWithPast 或 tuple(torch.Tensor)
一个 CausalLMOutputWithPast 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(BarkConfig)和输入。
BarkCausalModel 的 forward 方法重写了 __call__ 特殊方法。
尽管前向传播的实现需要在此函数中定义,但之后应调用
Module实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。
loss (
torch.Tensor,形状为(1,),可选,当提供labels时返回) — 语言建模损失(用于下一个 token 预测)。logits(形状为
(batch_size, sequence_length, config.vocab_size)的torch.Tensor)— 语言建模头的预测分数(SoftMax 之前每个词汇表 token 的分数)。past_key_values(
Cache,可选,在传入use_cache=True或config.use_cache=True时返回)—— 它是一个 Cache 实例。更多详情,请参阅我们的 kv cache 指南。包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见
past_key_values输入)加速顺序解码。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 之后的权重,用于在自注意力头中计算加权平均值。
BarkCoarseConfig
class transformers.BarkCoarseConfig
< 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 = Noneblock_size: int = 1024input_vocab_size: int = 10048output_vocab_size: int = 10048num_layers: int = 12num_heads: int = 12hidden_size: int = 768dropout: float | int = 0.0bias: bool = Trueinitializer_range: float = 0.02use_cache: bool = True )
参数
- block_size (
int,可选,默认值为 1024) — 该模型可能使用的最大序列长度。通常建议将其设置为一个较大的值以防万一(例如 512、1024 或 2048)。 - input_vocab_size (
int, 可选,默认为 10_048) — Bark 子模型的词表大小。定义了调用{model}时传入的inputs_ids所能表示的不同 token 数量。默认为 10_048,但应根据所选的子模型仔细考虑该值。 - output_vocab_size (
int,可选,默认为 10_048) — Bark 子模型的输出词表大小。定义了前向传递{model}时,output_ids所能表示的不同 token 数量。默认值为 10_048,但应根据所选的子模型仔细考虑该值。 - num_layers (
int,可选,默认为12) — Transformer 解码器中隐藏层的数量。 - num_heads (
int,可选,默认为12) — Transformer 解码器中每个注意力层的注意力头数量。 - hidden_size (
int,可选,默认为768) — 隐藏表示的维度。 - dropout (
Union[float, int],可选,默认为0.0) — 所有 dropout 层的比率。 - bias (
bool,可选,默认为True) — 是否在线性层和层归一化层中使用偏置 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool,可选,默认为True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True或模型为仅解码器生成式模型时相关。
这是用于存储 BarkModel 配置的类。它根据指定的参数实例化 Bark 模型,并定义模型架构。使用默认值实例化配置,将得到与 suno/bark 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import BarkCoarseConfig, BarkCoarseModel
>>> # Initializing a Bark sub-module style configuration
>>> configuration = BarkCoarseConfig()
>>> # Initializing a model (with random weights) from the suno/bark style configuration
>>> model = BarkCoarseModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configBarkFineConfig
class transformers.BarkFineConfig
< 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 = Noneblock_size: int = 1024input_vocab_size: int = 10048output_vocab_size: int = 10048num_layers: int = 12num_heads: int = 12hidden_size: int = 768dropout: float | int = 0.0bias: bool = Trueinitializer_range: float = 0.02use_cache: bool = Truetie_word_embeddings: bool = Truen_codes_total: int = 8n_codes_given: int = 1 )
参数
- block_size (
int,可选,默认值为 1024) — 该模型可能使用的最大序列长度。通常建议将其设置为一个较大的值以防万一(例如 512、1024 或 2048)。 - input_vocab_size (
int, 可选,默认为 10_048) — Bark 子模型的词表大小。定义了调用{model}时传入的inputs_ids所能表示的不同 token 数量。默认为 10_048,但应根据所选的子模型仔细考虑该值。 - output_vocab_size (
int,可选,默认为 10_048) — Bark 子模型的输出词表大小。定义了前向传递{model}时,output_ids所能表示的不同 token 数量。默认值为 10_048,但应根据所选的子模型仔细考虑该值。 - num_layers (
int,可选,默认为12) — Transformer 解码器中隐藏层的数量。 - num_heads (
int,可选,默认为12) — Transformer 解码器中每个注意力层的注意力头数量。 - hidden_size (
int,可选,默认为768) — 隐藏表示的维度。 - dropout (
Union[float, int],可选,默认为0.0) — 所有 dropout 层的比率。 - bias (
bool,可选,默认为True) — 是否在线性层和层归一化层中使用偏置 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool,可选,默认为True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True或模型为仅解码器生成式模型时相关。 - tie_word_embeddings (
bool,可选,默认为True) — 是否根据模型的tied_weights_keys映射来绑定权重嵌入。 - n_codes_total (
int,可选,默认为 8) — 预测的音频码本总数。用于精细声学子模型。 - n_codes_given (
int,可选,默认为 1) — 在粗粒度声学子模型中预测的音频码本数量。用于声学子模型。
这是用于存储 BarkModel 配置的类。它根据指定的参数实例化 Bark 模型,并定义模型架构。使用默认值实例化配置,将得到与 suno/bark 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import BarkFineConfig, BarkFineModel
>>> # Initializing a Bark sub-module style configuration
>>> configuration = BarkFineConfig()
>>> # Initializing a model (with random weights) from the suno/bark style configuration
>>> model = BarkFineModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configBarkSemanticConfig
class transformers.BarkSemanticConfig
< 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 = Noneblock_size: int = 1024input_vocab_size: int = 10048output_vocab_size: int = 10048num_layers: int = 12num_heads: int = 12hidden_size: int = 768dropout: float | int = 0.0bias: bool = Trueinitializer_range: float = 0.02use_cache: bool = True )
参数
- block_size (
int,可选,默认值为 1024) — 该模型可能使用的最大序列长度。通常建议将其设置为一个较大的值以防万一(例如 512、1024 或 2048)。 - input_vocab_size (
int, 可选,默认为 10_048) — Bark 子模型的词表大小。定义了调用{model}时传入的inputs_ids所能表示的不同 token 数量。默认为 10_048,但应根据所选的子模型仔细考虑该值。 - output_vocab_size (
int,可选,默认为 10_048) — Bark 子模型的输出词表大小。定义了前向传递{model}时,output_ids所能表示的不同 token 数量。默认值为 10_048,但应根据所选的子模型仔细考虑该值。 - num_layers (
int,可选,默认为12) — Transformer 解码器中隐藏层的数量。 - num_heads (
int,可选,默认为12) — Transformer 解码器中每个注意力层的注意力头数量。 - hidden_size (
int,可选,默认为768) — 隐藏表示的维度。 - dropout (
Union[float, int],可选,默认为0.0) — 所有 dropout 层的比率。 - bias (
bool,可选,默认为True) — 是否在线性层和层归一化层中使用偏置 - initializer_range (
float,可选,默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool,可选,默认为True) — 模型是否应返回最后一次键/值注意力(并非所有模型都使用)。仅当config.is_decoder=True或模型为仅解码器生成式模型时相关。
这是用于存储 BarkModel 配置的类。它根据指定的参数实例化 Bark 模型,并定义模型架构。使用默认值实例化配置,将得到与 suno/bark 类似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。
示例:
>>> from transformers import BarkSemanticConfig, BarkSemanticModel
>>> # Initializing a Bark sub-module style configuration
>>> configuration = BarkSemanticConfig()
>>> # Initializing a model (with random weights) from the suno/bark style configuration
>>> model = BarkSemanticModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config