Transformers 文档

Mimi

Mimi

概述

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

论文的摘要如下:

我们介绍了Moshi,一个语音-文本基础模型和全双工语音对话框架。当前的语音对话系统依赖于独立组件的流水线,即语音活动检测、语音识别、文本对话和文本到语音。这样的框架无法模拟真实对话的体验。首先,它们的复杂性导致交互之间存在几秒钟的延迟。其次,文本作为对话的中间模态,修改意义的非语言信息——如情感或非语音声音——在交互中丢失。最后,它们依赖于说话者轮次的划分,没有考虑到重叠语音、打断和插话。Moshi通过将语音对话视为语音到语音的生成,解决了这些独立问题。从一个文本语言模型骨干开始,Moshi从神经音频编解码器的残差量化器中生成语音标记,同时将其自身语音和用户语音分别建模为并行流。这允许去除显式的说话者轮次,并建模任意对话动态。我们进一步扩展了先前工作的分层语义到声学标记生成,首先预测时间对齐的文本标记作为音频标记的前缀。这种“内心独白”方法不仅显著提高了生成语音的语言质量,还展示了如何提供流式语音识别和文本到语音。我们的最终模型是第一个实时全双工语音大语言模型,理论延迟为160毫秒,实际延迟为200毫秒,可在github.com/kyutai-labs/moshi上获取。

其架构基于Encodec,但有以下几个主要区别:

  • 它使用了更低的帧率。
  • 它使用额外的转换器进行编码和解码,以实现更好的潜在上下文化
  • 它使用了一种不同的量化方案:一个码本专门用于语义投影。

使用示例

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

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

transformers.MimiConfig

< >

( 采样率 = 24000 帧率 = 12.5 音频通道 = 1 隐藏层大小 = 512 滤波器数量 = 64 残差层数量 = 1 上采样比率 = None 卷积核大小 = 7 最后卷积核大小 = 3 残差卷积核大小 = 3 扩张增长率 = 2 使用因果卷积 = True 填充模式 = 'constant' 压缩 = 2 右侧修剪比率 = 1.0 码本大小 = 2048 码本维度 = 256 量化器数量 = 32 使用卷积捷径 = False 向量量化隐藏维度 = 256 语义量化器数量 = 1 上采样组 = 512 隐藏层数量 = 8 中间层大小 = 2048 注意力头数量 = 8 键值头数量 = 8 头维度 = None 隐藏层激活函数 = 'gelu' 最大位置嵌入 = 8000 初始化范围 = 0.02 归一化epsilon = 1e-05 使用缓存 = False rope_theta = 10000.0 滑动窗口 = 250 注意力丢弃率 = 0.0 层缩放初始比例 = 0.01 注意力偏置 = False **kwargs )

参数

  • sampling_rate (int, optional, defaults to 24000) — 音频波形应被数字化的采样率,以赫兹(Hz)表示。
  • frame_rate (float, optional, defaults to 12.5) — 模型的帧率。
  • audio_channels (int, optional, 默认为 1) — 音频数据中的通道数。1 表示单声道,2 表示立体声。
  • hidden_size (int, optional, 默认为 512) — 中间表示的维度。
  • num_filters (int, 可选, 默认为 64) — 第一个 MimiConv1d 下采样层的卷积核数量。
  • num_residual_layers (int, optional, defaults to 1) — 残差层的数量。
  • upsampling_ratios (Sequence[int], 可选) — 内核大小和步幅比率。编码器使用下采样比率而不是上采样比率,因此它将使用与此处指定的比率相反的顺序,这些比率必须与解码器顺序匹配。 如果未指定,将默认为 [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, 可选, 默认为 1.0) — 在use_causal_conv = True设置下,用于在转置卷积的右侧进行修剪的比例。如果 等于1.0,意味着所有的修剪都在右侧进行。
  • codebook_size (int, optional, defaults to 2048) — 每个代码本中的离散代码数量。
  • codebook_dim (int, 可选, 默认为 256) — 未量化的码书向量的维度。如果未定义,则使用 hidden_size.
  • num_quantizers (int, optional, defaults to 32) — 量化器中的量化器通道或码本的数量。
  • use_conv_shortcut (bool, 可选, 默认为 False) — 是否在 MimiResnetBlock 块中使用卷积层作为“跳过”连接。如果为 False, 将使用恒等函数,提供一个通用的残差连接。
  • vector_quantization_hidden_dimension (int, optional, defaults to 256) — 残差向量量化空间中的中间表示维度。
  • num_semantic_quantizers (int, 可选, 默认为 1) — 语义量化器中的语义量化通道或码本的数量。必须小于 num_quantizers.
  • upsample_groups (int, optional, 默认为 512) — 如果 frame_rate!=encodec_frame_rate,表示在上采样操作中用于从一个速率转换到另一个速率的组数。
  • num_hidden_layers (int, optional, 默认为 8) — Transformer 模型中的隐藏层数量。
  • intermediate_size (int, optional, 默认为 2048) — MLP 表示的维度。
  • num_attention_heads (int, optional, 默认为 8) — Transformer 编码器中每个注意力层的注意力头数。
  • num_key_value_heads (int, 可选, 默认为 8) — 这是用于实现分组查询注意力(Grouped Query Attention)的键值头数量。如果 num_key_value_heads=num_attention_heads,模型将使用多头注意力(MHA),如果 num_key_value_heads=1,模型将使用多查询注意力(MQA),否则将使用GQA。当 将多头检查点转换为GQA检查点时,每个组的键和值头应通过平均池化该组中的所有原始头来构建。 更多详情请查看这篇论文。如果未指定,将默认为8.
  • head_dim (int, optional, defaults to hidden_size // num_attention_heads) — 注意力头的维度.
  • hidden_act (strfunction, 可选, 默认为 "gelu") — 解码器中的非线性激活函数(函数或字符串)。
  • max_position_embeddings (int, optional, 默认为 8000) — 该模型可能使用的最大序列长度。Mimi 的滑动窗口注意力机制允许最多 8000 个标记的序列。
  • initializer_range (float, 可选, 默认值为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。
  • norm_eps (float, optional, 默认为 1e-05) — LayerNorm 归一化层使用的 epsilon 值。
  • use_cache (bool, 可选, 默认为 False) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。仅在 config.is_decoder=True 时相关。
  • rope_theta (float, optional, 默认为 10000.0) — RoPE 嵌入的基础周期。
  • sliding_window (int, 可选, 默认为 250) — 滑动窗口注意力窗口大小。如果未指定,将默认为 250.
  • attention_dropout (float, optional, 默认为 0.0) — 注意力概率的丢弃比例。
  • layer_scale_initial_scale (float, optional, 默认为 0.01) — Transformer 模型中残差重新缩放操作的初始比例。
  • attention_bias (bool, 默认为 False, 可选, 默认为 False) — 是否在自注意力机制中的查询、键、值和输出投影层中使用偏置。

这是用于存储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

transformers.MimiModel

< >

( config: MimiConfig )

参数

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

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

该模型也是一个PyTorch torch.nn.Module 子类。 将其作为常规的PyTorch模块使用,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。

解码

< >

( audio_codes: Tensor padding_mask: typing.Optional[torch.Tensor] = None decoder_past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = None return_dict: typing.Optional[bool] = None )

参数

  • audio_codes (torch.LongTensor 形状为 (batch_size, num_quantizers, codes_length), 可选) — 使用 model.encode 计算的离散代码嵌入.
  • padding_mask (torch.Tensor of shape (batch_size, channels, sequence_length)) — 指示哪些输入由于填充而被忽略,其中元素为1表示未屏蔽,0表示屏蔽.
  • decoder_past_key_values (Cache, optional) — Pre-computed hidden-states (key and values in the self-attention blocks) that can be used to speed up sequential decoding of the decoder transformer. This typically consists in the past_key_values returned by the model at a previous stage of decoding, when use_cache=True or config.use_cache=True.

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

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

  • return_dict (bool, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。

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

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

编码

< >

( input_values: Tensor padding_mask: Tensor = None num_quantizers: typing.Optional[float] = None encoder_past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = None return_dict: typing.Optional[bool] = None )

参数

  • input_values (torch.Tensor of shape (batch_size, channels, sequence_length)) — 输入音频波形的浮点值。
  • padding_mask (torch.Tensor of shape (batch_size, channels, sequence_length)) — 指示哪些输入由于填充而被忽略,其中元素为1表示未屏蔽,0表示屏蔽.
  • num_quantizers (int, 可选) — 使用的量化器(即码本)数量。默认情况下,使用所有量化器。
  • encoder_past_key_values (Cache, optional) — Pre-computed hidden-states (key and values in the self-attention blocks) that can be used to speed up sequential decoding of the encoder transformer. This typically consists in the past_key_values returned by the model at a previous stage of decoding, when use_cache=True or config.use_cache=True.

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

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

  • return_dict (bool, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。

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

前进

< >

( input_values: Tensor padding_mask: typing.Optional[torch.Tensor] = None num_quantizers: typing.Optional[int] = None audio_codes: typing.Optional[torch.Tensor] = None encoder_past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = None decoder_past_key_values: typing.Union[transformers.cache_utils.Cache, typing.List[torch.FloatTensor], NoneType] = None return_dict: typing.Optional[bool] = None ) transformers.models.mimi.modeling_mimi.MimiOutputtuple(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, 可选) — 使用的量化器(即码本)数量。默认情况下,使用所有量化器。
  • audio_codes (torch.LongTensor 形状为 (batch_size, num_quantizers, codes_length), 可选) — 使用 model.encode 计算的离散代码嵌入.
  • encoder_past_key_values (Cache, optional) — Pre-computed hidden-states (key and values in the self-attention blocks) that can be used to speed up sequential decoding of the encoder transformer. This typically consists in the past_key_values returned by the model at a previous stage of decoding, when use_cache=True or config.use_cache=True.

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

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

  • decoder_past_key_values (Cache, optional) — Pre-computed hidden-states (key and values in the self-attention blocks) that can be used to speed up sequential decoding of the decoder transformer. This typically consists in the past_key_values returned by the model at a previous stage of decoding, when use_cache=True or config.use_cache=True.

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

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

  • return_dict (bool, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。

返回

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

一个 transformers.models.mimi.modeling_mimi.MimiOutput 或一个由 torch.FloatTensor 组成的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含根据配置(MimiConfig)和输入的各种元素。

  • audio_codes (torch.LongTensor 形状为 (batch_size, num_quantizers, codes_length), 可选) — 使用 model.encode 计算的离散代码嵌入。

  • audio_values (torch.FloatTensor 形状为 (batch_size, sequence_length), 可选) 解码的音频值,使用 Mimi 的解码器部分获得。

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

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

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

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

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

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

MimiModel 的前向方法,重写了 __call__ 特殊方法。

尽管前向传递的配方需要在此函数内定义,但之后应该调用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
< > Update on GitHub