Transformers 文档

巴克

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Bark

PyTorch FlashAttention

概述

Bark 是由 Suno AI 在 suno-ai/bark 中提出的基于 Transformer 的文本转语音模型。

Bark 由 4 个主要模型组成

  • BarkSemanticModel(也称为“文本”模型):一种因果自回归 Transformer 模型,它以分词文本作为输入,并预测捕获文本含义的语义文本标记。
  • BarkCoarseModel(也称为“粗声学”模型):一种因果自回归 Transformer,它以 BarkSemanticModel 模型的结果作为输入。它旨在预测 EnCodec 所需的前两个音频编码本。
  • BarkFineModel(“精细声学”模型),这次是一个非因果自编码器 Transformer,它根据先前编码本嵌入的总和迭代预测最后一个编码本。
  • 在预测了 EncodecModel 的所有编码本通道后,Bark 使用它来解码输出音频数组。

值得注意的是,前三个模块中的每一个都可以支持条件说话人嵌入,以根据特定预定义语音条件化输出声音。

此模型由 Yoach Lacombe (ylacombe)Sanchit Gandhi (sanchit-gandhi) 贡献。原始代码可以在这里找到。

优化 Bark

Bark 只需额外几行代码即可优化,这可以**显著减少其内存占用**并**加速推理**。

使用半精度

您只需以半精度加载模型,即可将推理速度提高 50%,并将内存占用减少 50%。

from transformers import BarkModel
import torch

device = "cuda" if torch.cuda.is_available() else "cpu"
model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16).to(device)

使用 CPU 卸载

如上所述,Bark 由 4 个子模型组成,它们在音频生成过程中按顺序调用。换句话说,当一个子模型在使用时,其他子模型处于空闲状态。

如果您使用的是 CUDA 设备,一种简单的解决方案,可将内存占用减少 80%,是在子模型空闲时将其从 GPU 卸载到 CPU。此操作称为 *CPU 卸载*。您只需一行代码即可使用它,如下所示

model.enable_cpu_offload()

请注意,在使用此功能之前必须安装 🤗 Accelerate。安装方法在此处。

使用 Better Transformer

Better Transformer 是 🤗 Optimum 的一个功能,可在底层执行内核融合。您可以在不降低性能的情况下将速度提高 20% 到 30%。它只需要一行代码即可将模型导出到 🤗 Better Transformer

model =  model.to_bettertransformer()

请注意,在使用此功能之前必须安装 🤗 Optimum。安装方法在此处。

使用 Flash Attention 2

Flash Attention 2 是前一个优化版本的更快、更优化的版本。

安装

首先,检查您的硬件是否与 Flash Attention 2 兼容。兼容硬件的最新列表可在官方文档中找到。如果您的硬件与 Flash Attention 2 不兼容,您仍然可以通过上述Better Transformer 支持从注意力内核优化中受益。

接下来,安装 最新版本的 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", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to(device)
性能比较

以下图表显示了原生注意力实现(无优化)、Better Transformer 和 Flash Attention 2 的延迟。在所有情况下,我们都在 40GB A100 GPU 上使用 PyTorch 2.1 生成 400 个语义标记。Flash Attention 2 也始终比 Better Transformer 快,并且随着批量大小的增加,其性能会进一步提高

从这个角度来看,在 NVIDIA A100 上,当以批量大小 16 生成 400 个语义标记时,您可以获得 17 倍的吞吐量,并且仍然比使用原生模型实现逐个生成句子快 2 秒。换句话说,所有样本的生成速度将提高 17 倍。

在批量大小为 8 时,在 NVIDIA A100 上,Flash Attention 2 也比 Better Transformer 快 10%,在批量大小为 16 时,快 25%。

结合优化技术

您可以结合优化技术,同时使用 CPU 卸载、半精度和 Flash Attention 2(或 🤗 Better Transformer)。

from transformers import BarkModel
import torch

device = "cuda" if torch.cuda.is_available() else "cpu"

# load in fp16 and use Flash Attention 2
model = BarkModel.from_pretrained("suno/bark-small", torch_dtype=torch.float16, attn_implementation="flash_attention_2").to(device)

# enable CPU offload
model.enable_cpu_offload()

在此处了解更多关于推理优化技术的信息

使用技巧

Suno 提供了多种语言的语音预设库,可在此处找到。这些预设也上传到此处此处的中心。

>>> from transformers import AutoProcessor, BarkModel

>>> processor = AutoProcessor.from_pretrained("suno/bark")
>>> model = BarkModel.from_pretrained("suno/bark")

>>> 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

transformers.BarkConfig

< >

( 语义配置: typing.Optional[dict] = None 粗声学配置: typing.Optional[dict] = None 精细声学配置: typing.Optional[dict] = None 编解码器配置: typing.Optional[dict] = None 初始化范围 = 0.02 **kwargs )

参数

  • semantic_config (BarkSemanticConfig, 可选) — 基础语义子模型的配置。
  • coarse_acoustics_config (BarkCoarseConfig, 可选) — 基础粗声学子模型的配置。
  • fine_acoustics_config (BarkFineConfig, 可选) — 基础精细声学子模型的配置。
  • codec_config (AutoConfig, 可选) — 基础编解码器子模型的配置。
  • 示例
  • ```python

    从 transformers 导入 (

  • … BarkSemanticConfig, —
  • … BarkCoarseConfig, —
  • … BarkFineConfig, —
  • … BarkModel, —
  • … BarkConfig, —
  • … AutoConfig, —
  • … ) —

这是用于存储 BarkModel 配置的配置类。它用于根据指定的子模型配置实例化 Bark 模型,定义模型架构。

使用默认值实例化配置将产生与 Bark suno/bark 架构类似的配置。

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

来自子模型配置

< >

( 语义配置: BarkSemanticConfig 粗声学配置: BarkCoarseConfig 精细声学配置: BarkFineConfig 编解码器配置: PretrainedConfig **kwargs ) BarkConfig

返回

Bark配置

一个配置对象的实例

根据 Bark 子模型配置实例化 BarkConfig(或派生类)。

BarkProcessor

transformers.BarkProcessor

< >

( 分词器 说话人嵌入 = None )

参数

  • 分词器 (PreTrainedTokenizer) — PreTrainedTokenizer 的一个实例。
  • speaker_embeddings (dict[dict[str]], 可选) — 可选的嵌套说话人嵌入字典。第一层包含语音预设名称(例如 "en_speaker_4")。第二层包含 "semantic_prompt""coarse_prompt""fine_prompt" 嵌入。值对应于相应 np.ndarray 的路径。有关 voice_preset_names 列表,请参见此处

构建一个 Bark 处理器,它将文本分词器和可选的 Bark 语音预设封装在一个处理器中。

__call__

< >

( 文本 = None 语音预设 = None 返回张量 = 'pt' 最大长度 = 256 添加特殊标记 = False 返回注意力掩码 = True 返回标记类型 ID = False **kwargs ) Tuple(BatchEncoding, BatchFeature)

参数

  • 文本 (str, list[str], list[list[str]]) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果序列以字符串列表(预分词)形式提供,则必须设置 is_split_into_words=True(以消除与序列批次的歧义)。
  • 语音预设 (str, dict[np.ndarray]) — 语音预设,即说话人嵌入。它可以是有效的语音预设名称,例如 "en_speaker_1",也可以直接是 Bark 的每个子模型的 np.ndarray 嵌入字典。或者它可以是本地 .npz 单个语音预设的有效文件名。
  • return_tensors (strTensorType, 可选) — 如果设置,将返回特定框架的张量。可接受的值为:

    • 'pt': 返回 PyTorch torch.Tensor 对象。
    • 'np': 返回 NumPy np.ndarray 对象。

返回

元组(BatchEncoding, BatchFeature)

BatchEncoding(即 tokenizer 的输出)和 BatchFeature(即具有正确张量类型的语音预设)组成的元组。

准备模型一个或多个序列的主要方法。此方法将 textkwargs 参数转发到 AutoTokenizer 的 __call__() 以编码文本。此方法还提供了一个语音预设,它是一个数组字典,用于条件化 Bark 的输出。如果 voice_preset 是有效的文件名,则 kwargs 参数将转发到分词器和 cached_file 方法。

来自预训练

< >

( 预训练处理器名称或路径 说话人嵌入字典路径 = 'speaker_embeddings_path.json' **kwargs )

参数

  • pretrained_model_name_or_path (stros.PathLike) — 这可以是:

    • 一个字符串,即托管在 huggingface.co 上模型仓库中的预训练 BarkProcessor 的 *模型 ID*。
    • 包含使用 save_pretrained() 方法保存的处理器的 *目录* 路径,例如 ./my_model_directory/
  • speaker_embeddings_dict_path (str, 可选, 默认为 "speaker_embeddings_path.json") — 包含位于 pretrained_model_name_or_path 中的 speaker_embeddings 字典的 .json 文件的名称。如果为 None,则不加载任何 speaker_embeddings
  • **kwargs — 额外关键字参数,传递给 `~tokenization_utils_base.PreTrainedTokenizer.from_pretrained`。

实例化与预训练模型关联的 Bark 处理器。

保存预训练模型

< >

( 保存目录 扬声器嵌入字典路径 = 'speaker_embeddings_path.json' 扬声器嵌入目录 = 'speaker_embeddings' 推送到集线器: bool = False **kwargs )

参数

  • save_directory (stros.PathLike) — 存储分词器文件和说话人嵌入的目录(如果目录不存在将创建)。
  • speaker_embeddings_dict_path (str, 可选, 默认为 "speaker_embeddings_path.json") — 将包含说话人嵌入嵌套路径字典(如果存在)的 .json 文件的名称,该文件将位于 pretrained_model_name_or_path/speaker_embeddings_directory 中。
  • speaker_embeddings_directory (str, 可选, 默认为 "speaker_embeddings/") — 存储说话人嵌入数组的文件夹名称。
  • push_to_hub (bool, 可选, 默认为 False) — 是否在保存模型后将其推送到 Hugging Face 模型中心。您可以使用 repo_id 指定要推送到的存储库(将默认为您命名空间中 save_directory 的名称)。
  • kwargs (可选) — 额外关键字参数,传递给 push_to_hub() 方法。

将此处理器(分词器…)的属性保存在指定目录中,以便可以使用 from_pretrained() 方法重新加载。

BarkModel

transformers.BarkModel

< >

( 配置 )

参数

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

完整的 Bark 模型,一个由 4 个子模型组成的文本到语音模型

  • BarkSemanticModel(也称为“文本”模型):一种因果自回归 Transformer 模型,它以分词文本作为输入,并预测捕获文本含义的语义文本标记。
  • BarkCoarseModel(也称为“粗糙声学”模型),也是一个因果自回归转换器,它将上一个模型的结果作为输入。它旨在回归 encodec 所需的前两个音频编码本。
  • BarkFineModel(“精细声学”模型),这次是一个非因果自编码器 Transformer,它根据先前编码本嵌入的总和迭代预测最后一个编码本。
  • 在预测了 EncodecModel 的所有编码本通道后,Bark 使用它来解码输出音频数组。

值得注意的是,前三个模块中的每一个都可以支持条件说话人嵌入,以根据特定预定义语音条件化输出声音。

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

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

生成

< >

( 输入 ID: typing.Optional[torch.Tensor] = None 历史提示: typing.Optional[dict[str, torch.Tensor]] = None 返回输出长度: typing.Optional[bool] = None **kwargs ) 默认情况下

参数

  • input_ids (形状为 (batch_size, seq_len) 的 Optional[torch.Tensor], 可选) — 输入 ID。将被截断至多 256 个标记。请注意,输出音频的长度将与批次中最长的生成长度相同。
  • 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()

启用 CPU 卸载

< >

( 加速器 ID: typing.Optional[int] = 0 **kwargs )

参数

  • accelerator_id (int, 可选, 默认为 0) — 子模型加载和卸载的加速器 ID。此参数已弃用。
  • kwargs (dict, 可选) — 附加关键字参数:gpu_id:子模型加载和卸载的加速器 ID。

使用 accelerate 将所有子模型卸载到 CPU,以低性能影响减少内存使用。此方法一次将一个完整子模型移动到加速器并在使用时,子模型将保留在加速器中直到下一个子模型运行。

BarkSemanticModel

transformers.BarkSemanticModel

< >

( 配置 )

参数

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

Bark 语义(或文本)模型。它与粗略模型共享相同的架构。它是一个 GPT-2 样式的自回归模型,顶部带有一个语言建模头。

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

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

前向传播

< >

( 输入 ID: typing.Optional[torch.Tensor] = None 过去的键值: typing.Optional[tuple[torch.FloatTensor]] = None 注意力掩码: typing.Optional[torch.Tensor] = None 位置 ID: typing.Optional[torch.Tensor] = None 头部掩码: typing.Optional[torch.Tensor] = None 标签: typing.Optional[torch.LongTensor] = None 输入嵌入: typing.Optional[torch.Tensor] = None 使用缓存: typing.Optional[bool] = None 输出注意力: typing.Optional[bool] = None 输出隐藏状态: typing.Optional[bool] = None 返回字典: typing.Optional[bool] = None ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • past_key_values (tuple[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,用户可以选择只输入最后 input_ids(那些没有将其过去键值状态提供给此模型的)形状为 (batch_size, 1) 而不是所有 input_ids 形状为 (batch_size, sequence_length)

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

    • 1 表示标记未被掩盖
    • 0 表示标记被掩盖

    什么是注意力掩码?

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

    什么是位置 ID?

  • head_mask (形状为 (num_heads,)(num_layers, num_heads)torch.Tensor, 可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择范围为 [0, 1]

    • 1 表示头部未被掩盖
    • 0 表示头部被掩盖
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor, 可选) — 用于计算掩码语言建模损失的标签。索引应在 [0, ..., config.vocab_size] 或 -100 之间(请参阅 input_ids 文档字符串)。索引设置为 -100 的标记将被忽略(掩盖),损失仅针对标签在 [0, ..., config.vocab_size] 中的标记计算。
  • input_embeds (形状为 (batch_size, input_sequence_length, hidden_size)torch.FloatTensor, 可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。这里,由于 Bark 的特殊性,如果使用 past_key_valuesinput_embeds 将被忽略,您必须使用 input_ids。如果未使用 past_key_values 并且 use_cache 设置为 Trueinput_embeds 优先于 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 而不是普通元组。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (BarkConfig) 和输入的不同元素。

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

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

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 它是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 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 后的注意力权重,用于计算自注意力头中的加权平均值。

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

虽然前向传播的配方需要在此函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

BarkCoarseModel

transformers.BarkCoarseModel

< >

( 配置 )

参数

  • 配置 ([[BarkCausalModel](/docs/transformers/v4.53.3/en/model_doc/bark#transformers.BarkCausalModel)]) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,只加载配置。请查看 from_pretrained() 方法加载模型权重。

Bark 粗略声学模型。它与语义(或文本)模型共享相同的架构。它是一个类似 GPT-2 的自回归模型,顶部带有一个语言建模头。

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

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

前向传播

< >

( 输入 ID: typing.Optional[torch.Tensor] = None 过去的键值: typing.Optional[tuple[torch.FloatTensor]] = None 注意力掩码: typing.Optional[torch.Tensor] = None 位置 ID: typing.Optional[torch.Tensor] = None 头部掩码: typing.Optional[torch.Tensor] = None 标签: typing.Optional[torch.LongTensor] = None 输入嵌入: typing.Optional[torch.Tensor] = None 使用缓存: typing.Optional[bool] = None 输出注意力: typing.Optional[bool] = None 输出隐藏状态: typing.Optional[bool] = None 返回字典: typing.Optional[bool] = None ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • past_key_values (tuple[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,用户可以选择只输入最后 input_ids(那些没有将其过去键值状态提供给此模型的)形状为 (batch_size, 1) 而不是所有 input_ids 形状为 (batch_size, sequence_length)

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

    • 1 表示标记未被掩盖
    • 0 表示标记被掩盖

    什么是注意力掩码?

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

    什么是位置 ID?

  • head_mask (形状为 (num_heads,)(num_layers, num_heads)torch.Tensor可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言模型损失的标签。索引应在 [0, ..., config.vocab_size] 或 -100 (参见 input_ids 文档字符串) 之间。索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 中的标记计算。
  • input_embeds (形状为 (batch_size, input_sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。在这里,由于 Bark 的特殊性,如果使用了 past_key_values,则 input_embeds 将被忽略,您必须使用 input_ids。如果未使用 past_key_values 并且 use_cache 设置为 True,则 input_embeds 将优先于 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 而不是普通的元组。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (BarkConfig) 和输入的不同元素。

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

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

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 它是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 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 后的注意力权重,用于计算自注意力头中的加权平均值。

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

虽然前向传播的配方需要在此函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

BarkFineModel

class transformers.BarkFineModel

< >

( 配置 )

参数

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

Bark 精细声学模型。它是一个非因果的类 GPT 模型,具有 config.n_codes_total 个嵌入层和语言模型头,每个码本一个。

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

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

前向传播

< >

( codebook_idx: int input_ids: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.LongTensor] = None input_embeds: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None ) transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

参数

  • codebook_idx (int) — 将要预测的码本的索引。
  • input_ids (形状为 (batch_size, sequence_length)torch.Tensor可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。

    索引可以使用 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.Tensor可选) — 每个输入序列标记在位置嵌入中的位置索引。选择范围为 [0, config.n_positions - 1]

    什么是位置 ID?

  • head_mask (形状为 (num_heads,)(num_layers, num_heads)torch.Tensor可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 尚未实现。
  • input_embeds (形状为 (batch_size, input_sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果使用 past_key_values,可选地只需要输入最后一个 input_embeds(那些没有将其过去的键值状态提供给此模型的)形状为 (batch_size, 1)(参见 past_key_values)。如果您希望对如何将 input_ids 索引转换为相关向量具有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • output_attentions (bool, 可选) — 是否返回所有注意力层的注意力张量。更多详情请参见返回张量下的 attentions
  • output_hidden_states (bool, 可选) — 是否返回所有层的隐藏状态。更多详情请参见返回张量下的 hidden_states
  • return_dict (bool, 可选) — 是否返回 ModelOutput 而不是普通的元组。

返回

transformers.modeling_outputs.MaskedLMOutputtuple(torch.FloatTensor)

一个 transformers.modeling_outputs.MaskedLMOutput 或一个 torch.FloatTensor 的元组(如果传入 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (BarkConfig) 和输入的不同元素。

  • loss (形状为 (1,)torch.FloatTensor可选,当提供 labels 时返回) — 掩码语言建模 (MLM) 损失。

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

  • 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 后的注意力权重,用于计算自注意力头中的加权平均值。

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

虽然前向传播的配方需要在此函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

BarkCausalModel

class transformers.BarkCausalModel

< >

( config )

前向传播

< >

( 输入 ID: typing.Optional[torch.Tensor] = None 过去的键值: typing.Optional[tuple[torch.FloatTensor]] = None 注意力掩码: typing.Optional[torch.Tensor] = None 位置 ID: typing.Optional[torch.Tensor] = None 头部掩码: typing.Optional[torch.Tensor] = None 标签: typing.Optional[torch.LongTensor] = None 输入嵌入: typing.Optional[torch.Tensor] = None 使用缓存: typing.Optional[bool] = None 输出注意力: typing.Optional[bool] = None 输出隐藏状态: typing.Optional[bool] = None 返回字典: typing.Optional[bool] = None ) transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

参数

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

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

    什么是输入 ID?

  • past_key_values (tuple[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

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

    • 1 表示标记未被掩码
    • 0 表示标记被掩码

    什么是注意力掩码?

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

    什么是位置 ID?

  • head_mask (形状为 (num_heads,)(num_layers, num_heads)torch.Tensor可选) — 用于使自注意力模块的选定头部无效的掩码。掩码值选择在 [0, 1] 之间:

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • labels (形状为 (batch_size, sequence_length)torch.LongTensor可选) — 用于计算掩码语言模型损失的标签。索引应在 [0, ..., config.vocab_size] 或 -100 (参见 input_ids 文档字符串) 之间。索引设置为 -100 的标记将被忽略(掩码),损失仅针对标签在 [0, ..., config.vocab_size] 中的标记计算。
  • input_embeds (形状为 (batch_size, input_sequence_length, hidden_size)torch.FloatTensor可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。在这里,由于 Bark 的特殊性,如果使用了 past_key_values,则 input_embeds 将被忽略,您必须使用 input_ids。如果未使用 past_key_values 并且 use_cache 设置为 True,则 input_embeds 将优先于 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 而不是普通的元组。

返回

transformers.modeling_outputs.CausalLMOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithPast 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置 (BarkConfig) 和输入的不同元素。

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

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

  • past_key_values (Cache, 可选, 当传递 use_cache=True 或当 config.use_cache=True 时返回) — 它是一个 Cache 实例。有关更多详细信息,请参阅我们的 kv 缓存指南

    包含预计算的隐藏状态(自注意力块中的键和值),可用于(参见 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 后的注意力权重,用于计算自注意力头中的加权平均值。

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

虽然前向传播的配方需要在此函数中定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者则默默地忽略它们。

BarkCoarseConfig

class transformers.BarkCoarseConfig

< >

( block_size = 1024 input_vocab_size = 10048 output_vocab_size = 10048 num_layers = 12 num_heads = 12 hidden_size = 768 dropout = 0.0 bias = True initializer_range = 0.02 use_cache = True **kwargs )

参数

  • block_size (int可选,默认为 1024) — 此模型可能使用的最大序列长度。通常为了以防万一设置为较大值(例如 512、1024 或 2048)。
  • input_vocab_size (int可选,默认为 10_048) — Bark 子模型的词汇表大小。定义了调用 BarkCoarseModel 时传入的 inputs_ids 可以表示的不同标记的数量。默认为 10_048,但应根据所选子模型仔细考虑。
  • output_vocab_size (int可选,默认为 10_048) — Bark 子模型的输出词汇表大小。定义了当 BarkCoarseModel 向前传递时,output_ids 可以表示的不同标记的数量。默认为 10_048,但应根据所选子模型仔细考虑。
  • num_layers (int可选,默认为 12) — 给定子模型中的隐藏层数量。
  • num_heads (int可选,默认为 12) — Transformer 架构中每个注意力层的注意力头数量。
  • hidden_size (int可选,默认为 768) — 架构中“中间”(通常称为前馈)层的维度。
  • dropout (float可选,默认为 0.0) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • bias (bool可选,默认为 True) — 是否在线性层和层归一化层中使用偏差。
  • initializer_range (float可选,默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • use_cache (bool可选,默认为 True) — 模型是否应返回最后一个键/值注意力(并非所有模型都使用)。

这是用于存储 BarkCoarseModel 配置的配置类。它用于根据指定的参数实例化模型,定义模型架构。使用默认值实例化配置将产生与 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.config

BarkFineConfig

class transformers.BarkFineConfig

< >

( tie_word_embeddings = True n_codes_total = 8 n_codes_given = 1 **kwargs )

参数

  • block_size (int, optional, defaults to 1024) — 此模型可能使用的最大序列长度。通常将其设置为一个较大的值以备不时之需(例如,512、1024 或 2048)。
  • input_vocab_size (int, optional, defaults to 10_048) — Bark 子模型的词汇表大小。定义了调用 BarkFineModel 时传入的 inputs_ids 可以表示的不同 token 的数量。默认为 10_048,但应根据所选的子模型仔细考虑。
  • output_vocab_size (int, optional, defaults to 10_048) — Bark 子模型的输出词汇表大小。定义了当向前传递 BarkFineModel 时,output_ids 可以表示的不同 token 的数量。默认为 10_048,但应根据所选的子模型仔细考虑。
  • num_layers (int, optional, defaults to 12) — 给定子模型中的隐藏层数。
  • num_heads (int, optional, defaults to 12) — Transformer 架构中每个注意力层的注意力头数量。
  • hidden_size (int, optional, defaults to 768) — 架构中“中间”(通常称为前馈)层的维度。
  • dropout (float, optional, defaults to 0.0) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • bias (bool, optional, defaults to True) — 是否在线性层和层归一化层中使用偏置。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • use_cache (bool, optional, defaults to True) — 模型是否应返回最后一个 key/values 注意力(并非所有模型都使用)。
  • n_codes_total (int, optional, defaults to 8) — 预测的音频码本总数。用于精细声学子模型。
  • n_codes_given (int, optional, defaults to 1) — 粗略声学子模型中预测的音频码本数量。用于声学子模型。

这是用于存储 BarkFineModel 配置的配置类。它用于根据指定参数实例化模型,定义模型架构。使用默认值实例化配置将生成与 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.config

BarkSemanticConfig

class transformers.BarkSemanticConfig

< >

( block_size = 1024 input_vocab_size = 10048 output_vocab_size = 10048 num_layers = 12 num_heads = 12 hidden_size = 768 dropout = 0.0 bias = True initializer_range = 0.02 use_cache = True **kwargs )

参数

  • block_size (int, optional, defaults to 1024) — 此模型可能使用的最大序列长度。通常将其设置为一个较大的值以备不时之需(例如,512、1024 或 2048)。
  • input_vocab_size (int, optional, defaults to 10_048) — Bark 子模型的词汇表大小。定义了调用 BarkSemanticModel 时传入的 inputs_ids 可以表示的不同 token 的数量。默认为 10_048,但应根据所选的子模型仔细考虑。
  • output_vocab_size (int, optional, defaults to 10_048) — Bark 子模型的输出词汇表大小。定义了当向前传递 BarkSemanticModel 时,output_ids 可以表示的不同 token 的数量。默认为 10_048,但应根据所选的子模型仔细考虑。
  • num_layers (int, optional, defaults to 12) — 给定子模型中的隐藏层数。
  • num_heads (int, optional, defaults to 12) — Transformer 架构中每个注意力层的注意力头数量。
  • hidden_size (int, optional, defaults to 768) — 架构中“中间”(通常称为前馈)层的维度。
  • dropout (float, optional, defaults to 0.0) — 嵌入、编码器和池化器中所有全连接层的 dropout 概率。
  • bias (bool, optional, defaults to True) — 是否在线性层和层归一化层中使用偏置。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • use_cache (bool, optional, defaults to True) — 模型是否应返回最后一个 key/values 注意力(并非所有模型都使用)。

这是用于存储 BarkSemanticModel 配置的配置类。它用于根据指定参数实例化模型,定义模型架构。使用默认值实例化配置将生成与 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
< > 在 GitHub 上更新