Moshi: A Speech-Text Foundation Model for Real-Time Dialogue
Moshi是法国一个人工智能实验室的开源模型,实现了首个开源的端到端语音问答模型,可以有类似chatgpt 4o的语音模式,下面是对这个技术的概述,但是实测远没达到chatgpt4o的能力,可能是有所限制,因为官网的展示视频能力很强。
1. 引言
Moshi 是一种全新的语音-文本基础模型,旨在解决当前语音对话系统的局限。现有的对话系统依赖多个独立的组件(例如语音活动检测、语音识别、文本生成、文本到语音转换),这种多组件框架往往存在高延迟、非语言信息丢失和对话建模不足的问题。
Moshi 通过设计全双工的语音对语音生成模型来解决这些问题。它摒弃了传统的说话者轮流机制,能够处理语音重叠、打断和插话等复杂的对话动态。
2. 关键架构
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_ratedef 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_modelself.audio_model = audio_modeldef 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_modelself.system_audio_model = system_audio_modeldef 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 通过并行处理用户和系统的音频流来支持复杂对话动态,消除传统对话系统中的说话者轮流机制。
- 实时生成:系统能够根据用户的语音生成即时回应,并处理语音重叠。
3. 贡献总结
Moshi 模型的主要贡献如下:
- 实时全双工对话:Moshi 是首个实现160毫秒理论延迟的全双工语音对话模型。
- 多流音频建模:Moshi 能够同时处理多个音频流,实现复杂的对话动态建模。
- 层次化生成架构:通过"Inner Monologue",Moshi 将文本符号、语义符号和声学符号结合在一起,大幅提升了语音生成质量。
4. 结论
Moshi 模型通过其创新的架构,实现了全双工的语音对话系统,能够实时处理复杂的语音交互,包括语音重叠、打断和插话等动态场景。其层次化的生成机制确保了生成语音的高质量,同时解决了传统对话系统中的延迟和信息丢失问题。
架构总览图
通过该架构图,可以看到Moshi系统如何通过文本和音频模型协同工作,进行复杂的语音生成和处理。