Transformers 文档
巴克
并获得增强的文档体验
开始使用
Bark
概述
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 子模型配置实例化 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 (
str
或 TensorType, 可选) — 如果设置,将返回特定框架的张量。可接受的值为:'pt'
: 返回 PyTorchtorch.Tensor
对象。'np'
: 返回 NumPynp.ndarray
对象。
返回
由 BatchEncoding(即 tokenizer
的输出)和 BatchFeature(即具有正确张量类型的语音预设)组成的元组。
准备模型一个或多个序列的主要方法。此方法将 text
和 kwargs
参数转发到 AutoTokenizer 的 __call__()
以编码文本。此方法还提供了一个语音预设,它是一个数组字典,用于条件化 Bark
的输出。如果 voice_preset
是有效的文件名,则 kwargs
参数将转发到分词器和 cached_file
方法。
来自预训练
< 源 >( 预训练处理器名称或路径 说话人嵌入字典路径 = 'speaker_embeddings_path.json' **kwargs )
参数
- pretrained_model_name_or_path (
str
或os.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 (
str
或os.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 )
使用 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.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的torch.Tensor
, 可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
tuple[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
,用户可以选择只输入最后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]
。 - 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.CausalLMOutputWithPast 或 tuple(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.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的torch.Tensor
, 可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- past_key_values (
tuple[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
,用户可以选择只输入最后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]
。 - 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.CausalLMOutputWithPast 或 tuple(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
< source >( 配置 )
参数
- config (BarkFineModel) — 模型的配置类,包含模型的所有参数。使用配置文件初始化不会加载与模型相关的权重,只加载配置。请查看 from_pretrained() 方法来加载模型权重。
Bark 精细声学模型。它是一个非因果的类 GPT 模型,具有 config.n_codes_total
个嵌入层和语言模型头,每个码本一个。
此模型继承自 PreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪头部等)。
此模型也是 PyTorch torch.nn.Module 子类。将其作为常规 PyTorch 模块使用,并参考 PyTorch 文档了解所有与一般用法和行为相关的事项。
前向传播
< source >( 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.MaskedLMOutput 或 tuple(torch.FloatTensor)
参数
- codebook_idx (
int
) — 将要预测的码本的索引。 - input_ids (形状为
(batch_size, sequence_length)
的torch.Tensor
,可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。索引可以使用 AutoTokenizer 获取。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.__call__()。
- 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]
。 - 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.MaskedLMOutput 或 tuple(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
前向传播
< source >( 输入 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.CausalLMOutputWithPast 或 tuple(torch.FloatTensor)
参数
- input_ids (形状为
(batch_size, sequence_length)
的torch.Tensor
,可选) — 词汇表中输入序列标记的索引。默认情况下将忽略填充。索引可以使用 AutoTokenizer 获取。有关详细信息,请参见 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.__call__()。
- past_key_values (
tuple[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
。 - 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]
。 - 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.CausalLMOutputWithPast 或 tuple(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
< source >( 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
< source >( 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 toTrue
) — 是否在线性层和层归一化层中使用偏置。 - initializer_range (
float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool
, optional, defaults toTrue
) — 模型是否应返回最后一个 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
< source >( 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 toTrue
) — 是否在线性层和层归一化层中使用偏置。 - initializer_range (
float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - use_cache (
bool
, optional, defaults toTrue
) — 模型是否应返回最后一个 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