Moshi 的架构由多个组件组成,包括文本语言模型、神经音频编解码器、层次化生成建模和全双工对话建模。
2.1 Helium 文本语言模型
Helium 是一个具有7B参数的文本语言模型,作为Moshi生成对话内容的基础。
实现代码概览:
class HeliumModel(nn.Module):
def __init__(self, vocab_size=32000, d_model=4096, n_heads=32, num_layers=32):
super(HeliumModel, self).__init__()
self.tokenizer = Tokenizer(vocab_size)
self.transformer = Transformer(d_model=d_model, n_heads=n_heads, num_layers=num_layers)
self.output_layer = nn.Linear(d_model, vocab_size)
def forward(self, input_ids):
x = self.tokenizer(input_ids)
x = self.transformer(x)
logits = self.output_layer(x)
return logits
关键点:
- 模型架构:基于Transformer,具备32层、32个头和4096的模型维度,支持大规模文本数据处理。
- 输入/输出:输入为文本符号,输出为预测的文本生成符号。
2.2 Mimi 神经音频编解码器
Mimi 是一种神经音频编解码器,它通过残差向量量化(RVQ)将音频编码为离散的音频符号,并能够高效地进行语音重建。
架构图解:
实现代码概览:
class MimiAudioCodec(nn.Module):
def __init__(self, n_quantizers=8, codebook_size=2048, frame_rate=12.5):
super(MimiAudioCodec, self).__init__()
self.encoder = Encoder()
self.quantizer = RVQ(n_quantizers, codebook_size)
self.decoder = Decoder()
self.frame_rate = frame_rate
def forward(self, waveform):
latent = self.encoder(waveform)
tokens = self.quantizer(latent)
reconstructed_waveform = self.decoder(tokens)
return reconstructed_waveform
关键点:
- RVQ量化器:Mimi 使用了8个量化器,并对每一帧的音频符号进行12.5Hz的采样率处理。
- 编码与解码:Mimi通过残差量化和Transformer瓶颈实现高效的语音生成和重建。
2.3 层次化生成建模 (Hierarchical Token Generation)
Moshi 通过 “Inner Monologue” 技术,在生成语音之前先生成文本符号,再生成语义和声学符号。这种方法大大提高了生成语音的语言质量。
架构图解:
实现代码概览:
class HierarchicalGenerator(nn.Module):
def __init__(self, text_model, audio_model):
super(HierarchicalGenerator, self).__init__()
self.text_model = text_model
self.audio_model = audio_model
def forward(self, input_text):
text_tokens = self.text_model(input_text)
audio_tokens = self.audio_model(text_tokens)
return audio_tokens
关键点:
- Inner Monologue:文本符号作为生成语义和声学符号的前缀,确保生成的语音内容准确且自然。
- 生成过程:先预测文本符号,再生成相应的语义和声学符号。
2.4 全双工对话建模
Moshi 支持真正的全双工对话模式,能够同时监听用户的语音并生成系统的语音,处理对话中的语音重叠和插话。
实现代码概览:
class FullDuplexDialogueModel(nn.Module):
def __init__(self, user_audio_model, system_audio_model):
super(FullDuplexDialogueModel, self).__init__()
self.user_audio_model = user_audio_model
self.system_audio_model = system_audio_model
def forward(self, user_audio_input):
user_tokens = self.user_audio_model(user_audio_input)
system_response = self.system_audio_model(user_tokens)
return system_response
关键点:
- 多流音频建模:Moshi 通过并行处理用户和系统的音频流来支持复杂对话动态,消除传统对话系统中的说话者轮流机制。
- 实时生成:系统能够根据用户的语音生成即时回应,并处理语音重叠。