Transformers 文档

咪咪

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Mimi

概述

Mimi 模型在 Moshi: a speech-text foundation model for real-time dialogue 中被提出,作者是 Alexandre Défossez、Laurent Mazaré、Manu Orsini、Amélie Royer、Patrick Pérez、Hervé Jégou、Edouard Grave 和 Neil Zeghidour。Mimi 是 Kyutai 团队开发的高保真音频编解码器模型,它将语义和声学信息结合到以 12Hz 运行和比特率为 1.1kbps 的音频 tokens 中。换句话说,它可以用于将音频波形映射到“音频 tokens”(也称为“codebooks”)。

本文的摘要如下:

我们介绍了 Moshi,一个语音-文本基础模型和全双工口语对话框架。当前的口语对话系统依赖于独立组件的 pipelines,即语音活动检测、语音识别、文本对话和文本到语音。这种框架无法模拟真实对话的体验。首先,它们的复杂性导致交互之间有几秒钟的延迟。其次,文本作为对话的中间模式,修改含义的非语言信息(例如情感或非语音声音)在交互中丢失。最后,它们依赖于说话人轮流的分割,这没有考虑到重叠的语音、中断和感叹词。Moshi 通过将口语对话转化为语音到语音的生成,从而完全解决了这些独立的问题。从文本语言模型 backbone 开始,Moshi 从神经音频编解码器的残余量化器中生成语音作为 tokens,同时将自己的语音和用户的语音分别建模为并行流。这允许删除显式的说话人轮流,并建模任意的对话动态。此外,我们将先前工作的分层语义到声学 tokens 生成扩展为首先预测时间对齐的文本 tokens,作为音频 tokens 的前缀。这种“内心独白”方法不仅显着提高了生成语音的语言质量,而且我们还说明了它如何提供流式语音识别和文本到语音。我们最终得到的模型是第一个实时的全双工口语大型语言模型,理论延迟为 160 毫秒,实际应用中为 200 毫秒,并且可以在 github.com/kyutai-labs/moshi 上找到。

它的架构基于 Encodec,但有几个主要区别:

  • 它使用更低的帧速率。
  • 它使用额外的 transformers 进行编码和解码,以获得更好的潜在上下文感知
  • 它使用不同的量化方案:一个 codebook 专门用于语义投影。

使用示例

这是一个关于如何使用此模型编码和解码音频的快速示例:

>>> from datasets import load_dataset, Audio
>>> from transformers import MimiModel, AutoFeatureExtractor
>>> librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")

>>> # load model and feature extractor
>>> model = MimiModel.from_pretrained("kyutai/mimi")
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("kyutai/mimi")

>>> # load audio sample
>>> librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> audio_sample = librispeech_dummy[-1]["audio"]["array"]
>>> inputs = feature_extractor(raw_audio=audio_sample, sampling_rate=feature_extractor.sampling_rate, return_tensors="pt")

>>> encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])
>>> audio_values = model.decode(encoder_outputs.audio_codes, inputs["padding_mask"])[0]
>>> # or the equivalent with a forward pass
>>> audio_values = model(inputs["input_values"], inputs["padding_mask"]).audio_values

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

MimiConfig

class transformers.MimiConfig

< >

( sampling_rate = 24000 frame_rate = 12.5 audio_channels = 1 hidden_size = 512 num_filters = 64 num_residual_layers = 1 upsampling_ratios = None kernel_size = 7 last_kernel_size = 3 residual_kernel_size = 3 dilation_growth_rate = 2 use_causal_conv = True pad_mode = 'constant' compress = 2 trim_right_ratio = 1.0 codebook_size = 2048 codebook_dim = 256 num_quantizers = 32 use_conv_shortcut = False vector_quantization_hidden_dimension = 256 num_semantic_quantizers = 1 upsample_groups = 512 num_hidden_layers = 8 intermediate_size = 2048 num_attention_heads = 8 num_key_value_heads = 8 head_dim = None hidden_act = 'gelu' max_position_embeddings = 8000 initializer_range = 0.02 norm_eps = 1e-05 use_cache = False rope_theta = 10000.0 sliding_window = 250 attention_dropout = 0.0 layer_scale_initial_scale = 0.01 attention_bias = False **kwargs )

参数

  • sampling_rate (int, optional, defaults to 24000) — 音频波形应被数字化的采样率,以赫兹 (Hz) 表示。
  • frame_rate (float, optional, defaults to 12.5) — 模型的帧率。
  • audio_channels (int, optional, defaults to 1) — 音频数据中的声道数。1 表示单声道,2 表示立体声。
  • hidden_size (int, optional, defaults to 512) — 中间表示维度。
  • num_filters (int, optional, defaults to 64) — 第一个 MimiConv1d 下采样层的卷积核数量。
  • num_residual_layers (int, optional, defaults to 1) — 残差层数。
  • upsampling_ratios (Sequence[int], optional) — 内核大小和步幅比率。编码器使用下采样率而不是上采样率,因此它将以与此处指定的顺序相反的顺序使用这些比率,这些比率必须与解码器顺序匹配。如果未指定,则默认为 [8, 6, 5, 4]
  • kernel_size (int, optional, defaults to 7) — 初始卷积的内核大小。
  • last_kernel_size (int, optional, defaults to 3) — 最后一个卷积层的内核大小。
  • residual_kernel_size (int, optional, defaults to 3) — 残差层的内核大小。
  • dilation_growth_rate (int, optional, defaults to 2) — 每层扩张率增加多少。
  • use_causal_conv (bool, optional, defaults to True) — 是否使用完全因果卷积。
  • pad_mode (str, optional, defaults to "constant") — 卷积的填充模式。
  • compress (int, optional, defaults to 2) — 残差分支中的降维。
  • trim_right_ratio (float, optional, defaults to 1.0) — 在 use_causal_conv = True 设置下,用于在转置卷积右侧进行修剪的比率。如果等于 1.0,则表示所有修剪都在右侧完成。
  • codebook_size (int, optional, defaults to 2048) — 每个码本中的离散代码数量。
  • codebook_dim (int, optional, defaults to 256) — 未量化码本向量的维度。如果未定义,则使用 hidden_size
  • num_quantizers (int, optional, defaults to 32) — 量化器中的量化通道或码本的数量。
  • use_conv_shortcut (bool, optional, defaults to False) — 是否使用卷积层作为 MimiResnetBlock 块中的“跳跃”连接。如果为 False,将使用恒等函数,从而提供通用的残差连接。
  • vector_quantization_hidden_dimension (int, optional, defaults to 256) — 残差向量量化空间中的中间表示维度。
  • num_semantic_quantizers (int, optional, defaults to 1) — 语义量化器中的语义量化通道或码本的数量。必须小于 num_quantizers
  • upsample_groups (int, optional, defaults to 512) — 如果 frame_rate!=encodec_frame_rate,则表示用于从一种速率到另一种速率的上采样操作中使用的组数。
  • num_hidden_layers (int, optional, defaults to 8) — Transformer 模型中的隐藏层数。
  • intermediate_size (int, optional, defaults to 2048) — MLP 表示的维度。
  • num_attention_heads (int, optional, defaults to 8) — Transformer 编码器中每个注意力层的注意力头数。
  • num_key_value_heads (int, optional, defaults to 8) — 这是用于实现分组查询注意力 (Grouped Query Attention) 的 key_value 头数。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力 (Multi Head Attention, MHA);如果 num_key_value_heads=1,模型将使用多查询注意力 (Multi Query Attention, MQA);否则使用 GQA。当将多头检查点转换为 GQA 检查点时,每个组的 key 和 value 头应通过对该组内所有原始头进行均值池化 (meanpooling) 来构建。有关更多详细信息,请查看本文。如果未指定,则默认为 8
  • head_dim (int, optional, defaults to hidden_size // num_attention_heads) — 注意力头的维度。
  • hidden_act (str or function, optional, defaults to "gelu") — 解码器中的非线性激活函数(函数或字符串)。
  • max_position_embeddings (int, optional, defaults to 8000) — 此模型可能使用的最大序列长度。Mimi 的滑动窗口注意力允许最多 8000 个 tokens 的序列。
  • initializer_range (float, optional, defaults to 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • norm_eps (float, optional, defaults to 1e-05) — LayerNorm 归一化层使用的 epsilon 值。
  • use_cache (bool, optional, defaults to False) — 模型是否应返回最后的 key/values 注意力(并非所有模型都使用)。仅当 config.is_decoder=True 时相关。
  • rope_theta (float, optional, defaults to 10000.0) — RoPE 嵌入的基周期。
  • sliding_window (int, optional, defaults to 250) — 滑动窗口注意力的窗口大小。如果未指定,则默认为 250
  • attention_dropout (float, optional, defaults to 0.0) — 注意力概率的 dropout 比率。
  • layer_scale_initial_scale (float, optional, defaults to 0.01) — Transformer 模型中残差重缩放操作的初始尺度。
  • attention_bias (bool, defaults to False, optional, defaults to False) — 在自注意力期间,是否在 query、key、value 和输出投影层中使用 bias。

这是用于存储 MimiModel 配置的配置类。它用于根据指定的参数实例化 Mimi 模型,定义模型架构。使用默认值实例化配置将产生类似于 kyutai/mimi 架构的配置。

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

示例

>>> from transformers import MimiModel, MimiConfig

>>> # Initializing a "kyutai/mimi" style configuration
>>> configuration = MimiConfig()

>>> # Initializing a model (with random weights) from the "kyutai/mimi" style configuration
>>> model = MimiModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

MimiModel

class transformers.MimiModel

< >

( config: MimiConfig )

参数

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

Mimi 神经音频编解码器模型。此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

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

decode

< >

( audio_codes: Tensor padding_mask: Optional = None decoder_past_key_values: Union = None return_dict: Optional = None )

参数

  • audio_codes (torch.LongTensor,形状为 (batch_size, num_quantizers, codes_length)optional) — 使用 model.encode 计算的离散代码嵌入。
  • padding_mask (torch.Tensor,形状为 (batch_size, channels, sequence_length)) — 指示哪些输入由于填充而应被忽略,其中元素对于未屏蔽为 1,对于已屏蔽为 0。
  • decoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力块中的 key 和 values),可用于加速解码器 transformer 的顺序解码。这通常包括模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,则用户可以选择仅输入最后的 audio_valuesaudio_codes(那些没有将其过去的 key value 状态提供给此模型的)。

  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是普通元组。

将给定的帧解码为输出音频波形。

请注意,输出可能比输入稍大。在这种情况下,可以修剪末尾的任何额外步骤。

encode

< >

( input_values: Tensor padding_mask: Tensor = None num_quantizers: Optional = None encoder_past_key_values: Union = None return_dict: Optional = None )

参数

  • input_values (torch.Tensor,形状为 (batch_size, channels, sequence_length)) — 输入音频波形的浮点数值。
  • padding_mask (torch.Tensor of shape (batch_size, channels, sequence_length)) — 指示哪些输入因填充而应被忽略,其中元素 1 表示未被掩码,0 表示已被掩码
  • num_quantizers (int, optional) — 量化器(即代码本)的数量。默认情况下,使用所有量化器。
  • encoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力模块中的键和值),可用于加速编码器 transformer 的顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 audio_values 或 `audio_codes (那些没有将其过去的键值状态提供给此模型的)。

  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯元组。

将输入的音频波形编码为离散代码。

forward

< >

( input_values: Tensor padding_mask: Optional = None num_quantizers: Optional = None audio_codes: Optional = None encoder_past_key_values: Union = None decoder_past_key_values: Union = None return_dict: Optional = None ) transformers.models.mimi.modeling_mimi.MimiOutput or tuple(torch.FloatTensor)

参数

  • input_values (torch.FloatTensor of shape (batch_size, channels, sequence_length), optional) — 转换为浮点型的原始音频输入。
  • padding_mask (torch.Tensor of shape (batch_size, sequence_length), optional) — 指示哪些输入因填充而应被忽略,其中元素 1 表示未被掩码,0 表示已被掩码
  • num_quantizers (int, optional) — 量化器(即代码本)的数量。默认情况下,使用所有量化器。
  • audio_codes (torch.LongTensor of shape (batch_size, num_quantizers, codes_length), optional) — 使用 model.encode 计算的离散代码嵌入。
  • encoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力模块中的键和值),可用于加速编码器 transformer 的顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 audio_values 或 `audio_codes (那些没有将其过去的键值状态提供给此模型的)。

  • decoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力模块中的键和值),可用于加速解码器 transformer 的顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 audio_values 或 `audio_codes (那些没有将其过去的键值状态提供给此模型的)。

  • return_dict (bool, optional) — 是否返回 ModelOutput 而不是纯元组。

返回

transformers.models.mimi.modeling_mimi.MimiOutputtuple(torch.FloatTensor)

一个 transformers.models.mimi.modeling_mimi.MimiOutputtorch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),其中包含各种元素,具体取决于配置 (MimiConfig) 和输入。

  • audio_codes (torch.LongTensor of shape (batch_size, num_quantizers, codes_length), optional) — 使用 model.encode 计算的离散代码嵌入。

  • audio_values (torch.FloatTensor of shape (batch_size, sequence_length), optional) 使用 Mimi 的解码器部分获得的解码音频值。

  • encoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力模块中的键和值),可用于加速编码器 transformer 的顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 audio_values 或 `audio_codes (那些没有将其过去的键值状态提供给此模型的)。

  • decoder_past_key_values (Cache, optional) — 预先计算的隐藏状态(自注意力模块中的键和值),可用于加速解码器 transformer 的顺序解码。这通常包含模型在先前解码阶段返回的 past_key_values,当 use_cache=Trueconfig.use_cache=True 时。

    模型将输出与输入相同的缓存格式。

    如果使用 past_key_values,用户可以选择仅输入最后的 audio_values 或 `audio_codes (那些没有将其过去的键值状态提供给此模型的)。

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

尽管 forward 传递的配方需要在该函数内定义,但之后应调用 Module 实例而不是此函数,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。

示例

>>> from datasets import load_dataset
>>> from transformers import AutoFeatureExtractor, MimiModel

>>> dataset = load_dataset("hf-internal-testing/ashraq-esc50-1-dog-example")
>>> audio_sample = dataset["train"]["audio"][0]["array"]

>>> model_id = "kyutai/mimi"
>>> model = MimiModel.from_pretrained(model_id)
>>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

>>> inputs = feature_extractor(raw_audio=audio_sample, return_tensors="pt")

>>> outputs = model(**inputs)
>>> audio_codes = outputs.audio_codes
>>> audio_values = outputs.audio_values
< > 在 GitHub 上更新