Transformers 模型词表中添加新 token

在使用预训练模型时,我们有时需要使用一些自定义 token 来增强输入,例如使用 [ENT_START] 和 [ENT_END] 在文本中标记出实体。由于自定义 token 并不在预训练模型原来的词表中,因此直接运用分词器 (Tokenizer) 处理输入就会出现问题。

例如直接使用 BERT 分词器处理下面的句子:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-cased")

sentence = 'Two [ENT_START] cars [ENT_END] collided in a [ENT_START] tunnel [ENT_END] this morning.'
print(tokenizer(sentence).tokens())
['[CLS]', 'Two', '[', 'E', '##NT', '_', 'ST', '##AR', '##T', ']', 'cars', '[', 'E', '##NT', '_', 'E', '##ND', ']', 'collided', 'in', 'a', '[', 'E', '##NT', '_', 'ST', '##AR', '##T', ']', 'tunnel', '[', 'E', '##NT', '_', 'E', '##ND', ']', 'this', 'morning', '.', '[SEP]']

由于分词器无法识别 [ENT_START] 和 [ENT_END] ,将它们都当作未知字符处理,例如 [ENT_END] 被切分成了 '[''E''##NT''_''E''##ND'']' 七个 token,很明显不符合我们的预期。

此外,有时我们还会遇到一些领域相关词汇,例如医学领域的文本通常会包含大量的医学术语,它们可能并不在模型的词表中(例如一些术语是使用多个词语的缩写拼接而成),这时也会出现上面的问题。

此时我们就需要将这些新 token 添加到模型的词表中,让分词器与模型可以识别并处理这些 token。

添加新 token

添加方法

Huggingface 的 Transformers 库提供了两种方式来添加新 token,分别是:

  • add_tokens() 添加普通 token:添加新 token 列表,如果 token 不在词表中,就会被添加到词表的最后。tokenizer = AutoTokenizer.from_pretrained("bert-base-cased") num_added_toks = tokenizer.add_tokens(["new_tok1", "my_new-tok2"]) print("We have added", num_added_toks, "tokens") We have added 2 tokens 为了防止 token 已经包含在词表中,我们还可以预先对新 token 列表进行过滤:new_tokens = ["new_tok1", "my_new-tok2"] new_tokens = set(new_tokens) - set(tokenizer.vocab.keys()) tokenizer.add_tokens(list(new_tokens))
  • add_special_tokens() 添加特殊 token:添加包含特殊 token 的字典,键值从 bos_tokeneos_tokenunk_tokensep_tokenpad_tokencls_tokenmask_tokenadditional_special_tokens 中选择。与 add_tokens() 类似,如果 token 不在词表中,就会被添加到词表的最后。添加后,还可以通过特殊属性来访问这些 token,例如 tokenizer.cls_token 就指向 cls token。tokenizer = AutoTokenizer.from_pretrained("bert-base-cased") special_tokens_dict = {"cls_token": "[MY_CLS]"} num_added_toks = tokenizer.add_special_tokens(special_tokens_dict) print("We have added", num_added_toks, "tokens") assert tokenizer.cls_token == "[MY_CLS]" We have added 1 tokens 我们也可以使用 add_tokens() 添加特殊 token,只需要额外设置参数 special_tokens=Truetokenizer = AutoTokenizer.from_pretrained("bert-base-uncased") num_added_toks = tokenizer.add_tokens(["[NEW_tok1]", "[NEW_tok2]"]) num_added_toks = tokenizer.add_tokens(["[NEW_tok3]", "[NEW_tok4]"], special_tokens=True) print("We have added", num_added_toks, "tokens") print(tokenizer('[NEW_tok1] Hello [NEW_tok2] [NEW_tok3] World [NEW_tok4]!').tokens()) We have added 2 tokens ['[CLS]', '[new_tok1]', 'hello', '[new_tok2]', '[NEW_tok3]', 'world', '[NEW_tok4]', '!', '[SEP]'] 特殊 token 的标准化 (normalization) 过程与普通 token 有一些不同,比如不会被小写。这里我们使用的是不区分大小写的 BERT 模型,因此分词后添加的普通 token [NEW_tok1] 和 [NEW_tok2] 都被处理为了小写,而特殊 token [NEW_tok3] 和 [NEW_tok4] 则维持大写,与 [CLS] 等自带特殊 token 保持一致。

对于之前的例子,很明显实体标记符 [ENT_START] 和 [ENT_END] 属于特殊 token,因此按添加特殊 token 的方式进行。如果使用 add_tokens() 则需要额外设置 special_tokens=True,或者也可以直接使用 add_special_tokens()

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

num_added_toks = tokenizer.add_tokens(['[ENT_START]', '[ENT_END]'], special_tokens=True)
# num_added_toks = tokenizer.add_special_tokens({'additional_special_tokens': ['[ENT_START]', '[ENT_END]']})
print("We have added", num_added_toks, "tokens")

sentence = 'Two [ENT_START] cars [ENT_END] collided in a [ENT_START] tunnel [ENT_END] this morning.'

print(tokenizer(sentence).tokens())
We have added 2 tokens
['[CLS]', 'two', '[ENT_START]', 'cars', '[ENT_END]', 'collided', 'in', 'a', '[ENT_START]', 'tunnel', '[ENT_END]', 'this', 'morning', '.', '[SEP]']

可以看到,分词器成功地将 [ENT_START] 和 [ENT_END] 识别为 token,并且依旧保持大写。

调整 embedding 矩阵

注意!无论使用哪种方式向词表中添加新 token 后,都需要重置模型 token embedding 矩阵的大小,也就是向矩阵中添加新 token 对应的 embedding,这样模型才可以正常工作(将 token 映射到对应的 embedding)。

该操作通过调用预训练模型的 resize_token_embeddings() 函数来实现,例如对于上面的例子:

from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
model = AutoModel.from_pretrained("bert-base-uncased")

print(len(tokenizer))
num_added_toks = tokenizer.add_tokens(['[ENT_START]', '[ENT_END]'], special_tokens=True)
print("We have added", num_added_toks, "tokens")
print(len(tokenizer))

model.resize_token_embeddings(len(tokenizer))
print(model.embeddings.word_embeddings.weight.size())

# Randomly generated matrix
print(model.embeddings.word_embeddings.weight[-2:, :])
30522
We have added 2 tokens
30524
torch.Size([30524, 768])

tensor([[-0.0325, -0.0224,  0.0044,  ..., -0.0088, -0.0078, -0.0110],
        [-0.0005, -0.0167, -0.0009,  ...,  0.0110, -0.0282, -0.0013]],
       grad_fn=<SliceBackward0>)

可以看到,在添加了特殊 token [ENT_START] 和 [ENT_END] 之后,分词器的词表大小从 30522 增加到了 30524,并且模型的 token embedding 矩阵大小也成功调整为了 30524×76830524×768。

我们还尝试打印出新添加 token 对应的 embedding。因为新 token 会添加在词表的末尾,因此只需打印出矩阵最后两行。如果你重复运行一下上面的代码,就会发现每次打印出的 [ENT_START] 和 [ENT_END] 的 embedding 是不同的。这是因为在默认情况下,这些新 token 的 embedding 是随机初始化的

token embedding 初始化

如果有充分的训练语料对模型进行微调或者继续预训练,那么将新添加 token 初始化为随机向量没什么问题。但是如果训练语料较少,甚至是只有很少语料的 few-shot learning 场景下,这种做法就可能存在问题。研究表明,在训练数据不够多的情况下,这些新添加 token 的 embedding 只会在初始值附近小幅波动。换句话说,即使经过训练,它们的值事实上还是随机的。

因此,在很多情况下,我们需要手工初始化这些新 token 的 embedding。对于 Transformers 库来说,可以通过直接对 embedding 矩阵赋值来实现。例如对于上面的例子,我们将这两个新 token 的 embedding 都初始化为全零向量:

with torch.no_grad():
    model.embeddings.word_embeddings.weight[-2:, :] = torch.zeros([2, model.config.hidden_size], requires_grad=True)
print(model.embeddings.word_embeddings.weight[-2:, :])
tensor([[0., 0., 0.,  ..., 0., 0., 0.],
        [0., 0., 0.,  ..., 0., 0., 0.]], grad_fn=<SliceBackward0>)

注意,初始化 embedding 的过程并不可导,因此这里通过 torch.no_grad() 暂停梯度的计算。

初始化为已有 token 的值

比较常见的操作是根据新添加 token 的语义,将其值初始化为训练好 token 的 embedding。例如对于上面的例子,我们可以将 [ENT_START] 和 [ENT_END] 的值都初始化为“entity”对应的 embedding。因为 token id 就是 token 在矩阵中的索引,因此我们可以直接通过 weight[token_id] 取出“entity”对应的 embedding。

token_id = tokenizer.convert_tokens_to_ids('entity')
token_embedding = model.embeddings.word_embeddings.weight[token_id]
print(token_id)

with torch.no_grad():
    for i in range(1, num_added_toks+1):
        model.embeddings.word_embeddings.weight[-i:, :] = token_embedding.clone().detach().requires_grad_(True)
print(model.embeddings.word_embeddings.weight[-2:, :])
9178
tensor([[-0.0039, -0.0131, -0.0946,  ..., -0.0223,  0.0107, -0.0419],
        [-0.0039, -0.0131, -0.0946,  ..., -0.0223,  0.0107, -0.0419]],
       grad_fn=<SliceBackward0>)

可以看到最终结果符合我们的预期,[ENT_START] 和 [ENT_END] 被初始化为相同的 embedding。

另一种常见的做法是根据新 token 的语义,使用对应的描述文本来完成初始化。例如将值初始化为描述文本中所有 token 的平均值,假设新 token titi 的描述文本为 wi,1,wi,2,…,wi,nwi,1,wi,2,…,wi,n,那么 titi 的初始化 embedding 为:

这里 EE 表示预训练模型的 token embedding 矩阵。对于上面的例子,我们可以分别为 [ENT_START] 和 [ENT_END] 编写对应的描述,然后再对它们的值进行初始化:

descriptions = ['start of entity', 'end of entity']

with torch.no_grad():
    for i, token in enumerate(reversed(descriptions), start=1):
        tokenized = tokenizer.tokenize(token)
        print(tokenized)
        tokenized_ids = tokenizer.convert_tokens_to_ids(tokenized)
        new_embedding = model.embeddings.word_embeddings.weight[tokenized_ids].mean(axis=0)
        model.embeddings.word_embeddings.weight[-i, :] = new_embedding.clone().detach().requires_grad_(True)
print(model.embeddings.word_embeddings.weight[-2:, :])
['end', 'of', 'entity']
['start', 'of', 'entity']
tensor([[-0.0340, -0.0144, -0.0441,  ..., -0.0016,  0.0318, -0.0151],
        [-0.0060, -0.0202, -0.0312,  ..., -0.0084,  0.0193, -0.0296]],
       grad_fn=<SliceBackward0>)

可以看到,这里成功地将 [ENT_START] 初始化为“start”、“of”、“entity”三个 token embedding 的平均值,将 [ENT_END] 初始化为“end”、“of”、“entity” embedding 的平均值。

保存新的token词汇表和模型权重

# 保存tokenizer
tokenizer.save_pretrained(save_directory)
# 保存model
model.save_pretrained(save_directory)

OmniFlatten |一种基于Qwen2-0.5B的端到端无缝对话大模型,解决对话中断、回话等问题

全双工口语对话系统在显著超越传统的单轮对话系统方面取得了重要进展,因为它们允许多向的同时通信, closely 地模拟了人际交流。然而,在全双工对话系统中实现低延迟和自然交互仍然是一个重大挑战,尤其是考虑到人类对话中的中断、回话以及重叠语音等动态因素。在本文中,作者提出了一种名为 Omni-Flatten 的新型端到端基于 GPT 的模型,用于全双工对话,该模型能够有效地建模自然对话中固有的复杂行为,并且具有较低的延迟。

为了实现全双工通信能力,作者提出了一种多阶段的后训练方案,逐步将基于文本的大语言模型(LLM) Qwen2-0.5B 主干调整为能够实时生成文本和语音的语音-文本对话 LLM,而无需修改主干 LLM 的架构。训练过程分为三个阶段:模态对齐半双工对话学习全双工对话学习。在整个训练阶段中,作者通过扁平化操作标准化数据,这使得作者可以统一不同模态和任务的训练方法和模型架构。

Omni-Flatten提供了一种简明的建模技术,并为开发高效且自然的端到端全双工口语对话系统指明了有前景的研究方向。可以在该网页上找到由 Omni-Flatten 生成的对话音频示例。

简介

传统的轮转式语音对话系统仅支持半双工通信,即用户和系统的通信是双向进行但不能同时进行。这类系统在许多实际应用中虽有效,但在处理中断、回声通道和重叠语音时往往显得不足,这反映了人类面对面交流的自发性。相比之下,全双工语音对话系统允许同时进行双向通信,更贴近人类面对面交流的动力学特征。全双工语音对话系统能够通过同时说话、听和思考促进更为自然和高效的交互。然而,在全双工系统中实现低延迟和自然交互仍然是一个重大挑战。

近年来,开发语音对话系统的工作受到了大语言模型(LLM)进展的驱动,并大致可以分为协作系统和端到端系统两类。协作系统通过对接基于LLM的对话模块与外部ASR或TTS模块来实现语音理解和语音生成。例如,Qwen-audio处理语音输入,输出文本并通过TTS将其转换为口头回应。相比之下,一些端到端系统直接基于语音-文本多模态模型建模语音到语音的对话,但这些模型大多是回合制对话模型,不支持全双工对话。最近在开发端到端全双工语音对话系统方面取得的进步包括SyncLM和开源的Moshi。

具体而言,Moshi并行模型了用户的多条语音输入流和系统的文本及语音输出流,简化了全双工对话的处理。然而,这种并行框架并不被基于GPT的模型天然支持,因此需要复杂的策略如声学延迟和内心独白等设计。类似Omni-Flatten,SyncLM也是训练来预测用户的语音单元和助手的交替片段以获得实时全双工语音对话能力。然而,他们引入了一种去重策略来减轻静默语音对模型语义能力的影响,而作者则是通过显式文本 Token 预测增强对话模型的语义能力。

为了应对全双工语音对话系统中实现自然交互和低延迟所面临的挑战,作者提出了一种基于GPT的新颖端到端模型Omni-Flatten,用于全双工语音对话。Omni-Flatten能够有效学习自然对话中固有的复杂行为,并通过低延迟促进类似人类的对话。作者提出了一种多阶段渐进式后训练方案,通过首先进行模态对齐,然后交替和展平对话中的多个语音和文本流,将基于文本的大语言模型(LLM) Qwen2-0.5B 骨架适应为一个健壮的语音-文本对话模型。值得注意的是,Omni-Flatten并未改变基于文本的 Backbone 架构,也未依赖于计算密集型的预训练。

多阶段后训练过程始于对文本大语言模型 Backbone 网络进行监督多任务微调,以实现语音-文本模态对齐,并获得一种跨模态大语言模型,使用自动语音识别(ASR)和文本到语音合成功能(TTS)。这一阶段对于确保系统能够准确地理解和生成语音及文本,从而形成人机交互的无缝界面至关重要。

在获得语音-文本大语言模型后,作者通过三个渐进阶段,使用交错和序列化的对话对其进行微调:

  1. 在第一个阶段,作者使用扁平化技术,将用户输入和系统输出的文本流和语音流均摊平为单一序列(即处理四流数据)。这一阶段作为初步步骤,旨在训练模型学习半双工对话能力。
  2. 在第二个阶段,作者进一步移除用户输入文本流,对剩余的三流进行细粒度切分和对齐,将这些切分部分扁平化,并继续使用扁平化的三流数据对模型进行训练。这一步骤的目标是训练模型学习实时多流预测能力,从而实现全双工通信
  3. 最后,作者构建仅包含输入和输出语音的两流数据,并继续对模型进行训练,以专注于语音到语音的生成任务,从而消除对中间文本的依赖,减少延迟,并使系统更接近实时交互。

Omni-Flatten提出了一种简单而创新的建模技术,为开发高效且自然的端到端全双工对话系统提供了有前景的研究方向。

本项工作的主要贡献可以总结如下:

  1. 作者提出了一种新颖的一次性基于GPT的模型Omni-Flatten,该模型能够有效建模自然人类对话中固有的复杂行为,同时具有低延迟。作者提出了一种多阶段的后训练方案,通过基于As Rand TT S的有监督多任务微调实现文本基础的大语言模型向稳健的语音-文本对话模型的成功适应,然后对对话中的语音和文本流进行细粒度分块,并将它们扁平化为单一序列,逐步训练模型以获得半双工和全双工通信能力。值得注意的是,Omni-Flatten 并未对该GPT模型进行任何结构上的修改,也不依赖于计算量大的预训练。
  2. 作者的实验验证了模态对齐阶段的有效性,因为最终模型在ASR和TTS方面的表现达到了可接受的水平。作者使用高性能的大语言模型作为评估器,评估由Omni-Flatten生成的对话质量,并评估了对话轮换性能,包括系统轮换和用户轮换,以及运行时效率。结果显示,Omni-Flatten生成的对话具有合理的质量,模态对齐和半双工学习阶段均提升了模型的全双工对话能力。相对于用户轮换,Omni-Flatten在处理系统轮换方面更为出色,系统轮换的平均响应时间为160毫秒,而用户轮换的平均响应时间则为805毫秒。

方法论

在本节中,作者介绍了作者的端到端全双工对话模型Omni-Flatten。如图1所示,作者使用音频分词器将对话中的每个输入和输出语音流离散化为一个离散的语音Token序列。

OmniFlatten:端到端全双工语音对话模型概述:该模型能够持续接收用户输入的语音,同时生成助手的语音和文本输出。语音分词器将用户的语音(包括静音段)转换为输入语音的分词序列(表示为红色方块序列:S0, S1, S2, S3, S4, …)。我们将一段输入语音分词(用实线框括起来的分词)输入到OmniFlatten中,以解码生成一段输出分词(用虚线框括起来的分词)。输出分词包括语音分词(蓝色方块序列:S0, S1, S2, S3, S4, …)和文本分词(绿色圆圈序列:T0, T1, T2, …)。我们将输出文本分词按照固定的文本块大小组织,并按照固定的语音块大小生成输出语音分词,从而利用预测的文本指导语音生成。用户的语音分词与预测生成的助手文本和语音分词根据说话人轮次交错排列,最终展平为一个单一序列。最后,输出的语音分词和文本分词分别输入到语音去分词器和文本去分词器中,以生成助手的输出语音和文本。

作者然后交替排列语音Token序列和文本Token序列,并将它们展平成一个单一序列。Omni-Flatten采用多阶段渐进式训练过程,将基于文本的大语言模型转化为具备模态对齐和对话学习能力的 robust 的端到端全双工口语对话模型。在接下来的子节中,作者将详细阐述作者方法的关键组成部分,包括音频Token化与反Token化、模态对齐以及对话学习。

音频标记化和去标记化

为了将连续的语音信号转换为离散的Token序列,作者采用了在CosyVoice中使用的语音Tokenizer。由于通过多语种ASR的监督,这种语音Tokenizer能够将语音转换为语义Token,从而有助于提升语音理解并保证生成语音的内容一致性。该Tokenizer利用了一个编码器和一个向量量化(VQ)层,将音频信号离散化为具有4096个Codebook代码的语音Token序列。

Cosyvoice模型架构

在将离散的语音Token重新转换回音频时,作者同样使用了与CosyVoice中相同的Optimal Transport Conditional Flow Matching模型(OTCFM)。OTCFM将语音Token序列转化为Mel频谱图,然后使用HifiGAN语音生成器生成最终的音频输出。先前的研究表明,相比于更简单的梯度扩散概率模型(DPM),OTCFM在训练更容易且生成更快方面表现更优。

为什么要使用HifiGAN将mel谱转换为音频:    
     理论上,梅尔语谱图(Mel-spectrogram)可以直接转换回音频波形,但这个过程通常并不像简单的逆变换那样直接和精确。原因在于,梅尔语谱图只是音频的一个低维表示,丢失了很多原始音频中的细节信息,尤其是相位信息。而语音合成中的高质量波形生成通常需要更复杂的模型来重建这些细节。HiFiGAN 和其他类似的模型提供了一个有效的框架来实现这种重建。

1. 梅尔谱图到波形的转换问题
梅尔语谱图是通过将音频信号转换到梅尔频率刻度后提取的特征。它是通过傅里叶变换将音频信号转换成频谱图后,再通过梅尔滤波器组对频谱进行压缩得到的。梅尔语谱图通常只保留了音频的频率信息,而没有包含关于时间和相位【波形】的细节。由于相位信息对音频波形的重建至关重要,直接将梅尔谱图转换回波形往往会导致失真或不自然的声音。

2. 为什么需要 HiFi-GAN 这样的模型?
HiFi-GAN 和类似的生成对抗网络(GAN)模型是为了应对梅尔谱图到波形转换的挑战而设计的。梅尔谱图提供了音频的频谱信息,但缺少细节,如相位信息、音质和时间结构等。而 HiFi-GAN 等模型通过以下方式弥补了这个缺失:

相位重建:HiFi-GAN 等模型不仅仅是简单的反变换,它们通过学习梅尔谱图与真实音频波形之间的复杂关系,能够通过生成模型有效地重建音频的相位信息,从而得到更高质量的波形。

生成对抗训练:HiFi-GAN 使用生成对抗网络(GAN),通过生成器和判别器的对抗训练,能够更好地捕捉到音频信号的自然性和细节。生成器从梅尔谱图出发生成波形,判别器则判断生成的波形是否与真实的音频波形相似。经过多次训练,生成器学会了如何产生高质量的波形。

高质量输出:直接从梅尔谱图到波形的传统方法(如 Griffin-Lim 算法)通常会产生较低质量的波形,尤其是在细节和自然性上有所欠缺。HiFi-GAN 可以生成非常高质量的波形,甚至接近人类语音的真实感。

模态对齐

作者从对预训练的文本大语言模型(Text-Based LLM Backbone)进行后训练开始,以获得适用于语音理解与生成的语音-文本大语言模型(Speech-Text LLM)。由于Qwen2-0.5B具有较小的规模,适合低计算资源要求,并且对于这种规模的模型而言表现力较强,因此作者选择它作为基模型。作者使用配对的语音-文本数据(ASR和TTS任务)进行监督微调(Supervised Fine-Tuning, SFT),这一过程使预训练的文本大语言模型适应了语音-文本多模态模型。

对于每个语音-文本对,作者构建如下训练样本:

TTS 样本:

其中,[ASR]和[TT S]分别表示ASR任务和TT S任务的ID;[SOS]、[EOS]、[SOT]、[EOT]是特殊的Token,分别表示语音句子或文本句子的开始和结束。作者使用这个对齐的语音-文本多模态模型进行后续的对话学习。这里的S_seq 是语音进行 CosyVoice Tokenizer 来获得的,T_seq是文本序列。 S_seq 经过 OTCFM 合成音频mel谱,在经过HifiGAN解码合成音频。

对话学习

在上述所述的语音-文本多模态模型的基础上,作者分三个阶段进行对话学习,包括使用轮流对话数据的语音和文本流进行半双工对话训练,然后基于语音和文本序列的精细分块和对齐进行全双工对话训练。

具体而言,在全双工对话训练期间,作者首先去除输入文本流,并使用剩余的三个流进行训练,然后进一步去除输出文本流,并使用剩余的两个流进行训练,以逐步消除对文本信息的依赖,专注于语音到语音的生成,并减少延迟。

在整个三个阶段中,作者将多流对话数据交错并压平成单一序列。【moshi做法是将多流并行建模】

半双工对话训练

半双工对话智能体是全双工对话智能体的特殊且简化案例,其中人类和助手交替发言,且不存在重叠说话的情况,即在发言人的发言期间,聆听者完全静默。

由于用于学习模态对齐的语音识别(ASR)和文本到语音(TTS)数据中不存在重叠说话的情况,因此半双工对话训练比需要模型处理轮流发言、副通道反馈以及重叠说话的全双工对话训练更符合已对齐的多模态模型。作者采用循序渐进的学习理念,在首先进行半双工对话训练之后再进行全双工对话训练。

四流训练:

基于四种流(语音和文本分词)的半双工对话训练如图所示,模型在根据对话中实际说话人轮次组织的数据上进行训练。我们将多轮对话中的语音和文本分词展平成一个单一序列,按照以下模式进行排列:

  • 第 N−1 轮中包含用户语音分词(红色方块表示)和用户文本分词(红色圆圈表示);
  • 第 N 轮中包含助手文本分词(蓝色圆圈表示)和助手语音分词(蓝色方块表示)。

通过这种展平方法,模型能够在训练过程中捕捉多轮对话的上下文信息,同时保持不同流数据的关联性。

在半双工对话训练过程中,作者训练模型主要执行用户语音片段的语音识别(ASR),以获取文本内容,接着基于用户文本内容生成助手的文本回应,然后通过基本上执行TTS任务来预测助手文本回应的语音片段。这种模式在一次对话的多个回合中得以扩展,如图2所示。

全双工对话训练

基于三流数据的训练为了开发出能够进行低延迟双工对话的人类 Level 的全双工会话智能体,作者需满足实时要求。为此,作者从四种数据流中移除了用户文本流,并使用剩余的三种数据流进行训练。为了处理重叠语音,作者在基于片段的基础上引入了分块和宽松语音-文本 Token 对齐的方式,这样一来,作者就无需在语音token和文本token之间实现严格的 Token 级对齐。

具体来说,在准备用于此阶段的训练数据时,作者首先按照固定大小将对话数据中的语音 Token 序列和文本 Token 序列分块,然后交错排列这三种数据流并展平成单一序列用于训练,遵循输入语音、输出文本、输出语音的顺序。值得注意的是,由于文本效率更高,文本片段的大小通常小于语音片段的大小。

三流训练:

在本研究中,作者将文本片段的大小设置为 2 个 Token ,将语音片段的大小设置为10个 Token 。这种方法确保了输出文本不会过度提前出现,从而在最小化与上述四流数据格式之间的差异的同时最大化保留TTS任务的目标。在文本内容结束后,作者使用特殊的静默终止 Token 填充文本流使用静默语音 Token 填充输出语音流中的静默区域。基于分块的三流数据的这种训练过程如图3所示。

基于三流全双工对话数据的全双工对话训练(移除用户文本流)如图所示,我们将输入和输出的多模态分词序列分割为短块,并将它们展平在一起。这样模型可以实时流式处理用户语音分词的输入,同时生成助手的文本和语音分词输出。

在第 N−1 块中,输入五个用户语音分词(红色方块,实线框中),模型输出七个助手分词(虚线框中),包括两个助手文本分词(蓝色圆圈)和五个助手语音分词(蓝色方块)。

模型遵循标准的自回归训练和解码过程。图中虚线箭头表示在一个块内,模型会重新输入预测的助手文本和语音分词,以完成自回归解码过程。这种方法保证了全双工对话流的连续性和实时性,同时简化了用户输入数据的处理。

双流训练:

基于两流全双工对话数据的全双工对话训练(进一步移除助手文本流)。如图所示,相较于三流实验,我们进一步移除了助手文本分词,仅保留用户和助手的语音分词作为输入。具体来说,我们将用户和助手的语音分词展平为一个单一序列输入到模型中。

在第 N−1 块中,输入 5 个用户语音分词(红色方块,实线框中),模型在第 N−1 块中输出 5 个助手语音分词(蓝色方块,虚线框中)。

这种方法简化了模型输入和输出的形式,仅依赖语音分词进行全双工对话的处理。这种训练方式突出语音信号在实时对话中的核心作用,同时进一步减少了对文本流的依赖。

训练基于双流数据为进一步降低延迟并消除对中间文本的依赖,从而专注于语音到语音的生成,作者进一步移除了输出文本流,仅保留输入和输出语音流。基于分块双流数据的这一训练过程如图4所示。

实验

数据

模态对齐数据集

模态对齐训练阶段的目标是帮助模型学习语音Token和文本Token之间的对应关系,并使模型获得自动语音识别(ASR)和文本到语音(TTS)两项关键能力。为了实现这一目标,作者结合了一组包含开源和专有数据的TTS和ASR数据集。开源数据集包括普通话和英语数据,如AISHELL-3、LibriTTS、TED-L1UM、VoxPopuli、LibriSpeech以及MLS。此外,还整合了几种专有ASR和TTS数据集。总体而言,用于语音-文本模态对齐的数据集约包含10万小时的音频数据,其中30%为开源数据,70%为专有数据。

模拟语音聊天数据集:为了构建对话学习的语音聊天数据,作者设计了一条数据合成与模拟Pipeline来生成对话数据。首先,作者收集了大量的高质量开源文本对话数据,用于后续的语音合成,包括Alpaca、Moss、BelleCN和ultraChat。然后,使用启发式规则筛选出不适合Text-to-Speech(TTS)的数据样本,例如包含较高比例非文本元素(如代码和数学表达式)的样本、长度超过200字(中英文皆可)的样本,以及包含罕见或不常见符号的样本。最后,作者保留了大约360,000个基于轮次的对话会话(半双工对话)。

其次,作者基于这些文本的多轮交互对话创建了伪全双工语音聊天。作者使用CosyVoice合成了每一轮的音频。具体来说,作者首先从LibriSpeech和3DSpeaker数据集中采样说话人嵌入,以获得多样化的音色。在合成每一轮的语音之后,作者采用模拟策略,在每个说话人通道中适当地安排每一轮的音频,使得这次对话能够模拟自然的交互过程,即每位说话人交替发言,偶尔有中断和停顿,并且上下文流畅。详细的流程如下:

作者将合成的对话音频组织为两个通道,第一个通道是用户通道,第二个通道是助手通道。请注意,文本对话始终以用户开头,然后用户和助手交替发言。在用户发言结束后,作者立即开始下一个助手的发言,以便助手能够及时回应用户。在助手发言结束后,作者从正态分布中采样从助手回合结束时间到下一个用户回合开始时间的暂停时长,从而创建出用户与助手交错对话所对应的音频。

第三部分,为了模拟用户音频通道中的真实场景,作者还从MUSAN噪声数据集中采样背景噪声,并将其添加到用户音频通道中。作者控制信噪比(SNR)在15 dB到25 dB之间。基于此数据合成与仿真Pipeline,作者生成了总计2000小时的多通道对话数据。基于该数据集,作者使用其中1%的数据作为验证集,另外1%的数据作为测试集,其余数据用于训练。

训练和推理设置

作者使用QWen2-0.5B作为基础模型。在模态对齐训练阶段,最大序列长度设置为1024个Token。在对话学习阶段,最大序列长度扩展到8192个Token。在整个训练阶段,作者都使用标准交叉熵损失作为训练目标。

此外,在对话学习阶段,作者对User通道应用了损失 Mask ,因为作者观察到这项操作增强了模型训练的稳定性,可能是因为User通道中含有噪声音频输入。作者采用AdamW优化器,权重衰减设置为0.1,设为0.9,设为0.95。最大学习率设为2e-05,并采用Warm Up和余弦衰减策略。作者用5个epochs进行训练,并基于验证集上的损失选择最佳模型。批量大小设为1亿个Token。作者的代码实现基于NanoGPT项目4。

推理过程中,为了从模型中获得Assistant文本响应的预测,作者使用测试集中固定的用户语音通道语音作为固定语音输入,并交替填充预测的Assistant语音和文本

评价

模态对齐后的ASR和TTS任务性能改善情况

在模态对齐训练阶段(第3.2节),目标是帮助模型学习语音Token和文本Token之间的对应关系,并获得ASR和TTS能力;因此,作者通过评估最终对齐的多模态模型的ASR和TTS性能来评价此训练阶段的有效性。对于ASR评估,作者使用该模型将输入语音对应的离散语音Token解码为文本输出。

对于TTS评估,作者基于输入文本生成语音Token,然后使用CosyVoice的随机英语女性声音合成为音频。合成的音频随后使用Whisper Large V3模型进行识别,ASR的输出则与输入文本进行对比评分。ASR和TTS评估均在公开可用的LibriSpeech和VoNet Speech数据集上进行,采用字符错误率(CER)作为评估指标。

值得注意的是,CER不仅能够衡量模型TTS能力的合成准确度和鲁棒性,还能在很大程度上反映出音频质量。此外,由于本工作的主要目标是研究全双工语音聊天中的对话动态,因此本文未采用传统的语音质量标准评估指标,如主观意见得分(MOS)。

对于ASR评估,作者对比了Modality Alignment训练阶段后的语音文本对齐多模态模型(称为OmniFlatten)与Whisper Large V3模型。对于TTS评估,使用GT Speech Tokens表示将 GT 波形分割成语音Token,并使用相同的英女性音将其反向转换为语音。如表1所示,OmniFlatten在ASR和TTS任务上均表现出显著的性能。这些结果表明,Modality Alignment训练阶段有效地将单一模态的文本基础大语言模型转变为具有合理语音理解和生成能力的语音-文本多模态模型,为进一步的对话学习奠定了基础。

全双工对话能力受模态对齐和半双工对话学习的影响分析

正如第3.3.2节所述,针对三流数据进行全双工对话学习的训练阶段有助于模型获得全双工对话能力,并且该模型能够生成语音和文本用于助手。前期研究表明,竞争性的文本基础大语言模型可以作为多种自然语言生成任务的可靠评估工具,因为由大语言模型评估者为生成文本分配的分数与人类评估高度相关。

因此,作者通过 Prompt 一个竞争性的文本大语言模型来评估OmniFlatten的全双工对话能力,让其评估对话的意义并为训练过程中生成的预测助手文本响应赋分。值得注意的是,在仅针对两流数据完成最终训练阶段后,OmniFlatten仅输出助手的语音,这给基于文本的大语言模型带来了评估上的挑战。

评分机制涉及设计特定的 Prompt 词,并利用竞争性的文本大语言模型Qwen-max模型6来对模型生成的回答进行1到10分的评分。作者用于大语言模型评分的具体 Prompt 词详见附录A。作者精心设计该 Prompt 词以评估预测Assistant文本响应的流畅性和连贯性。此外,作者还在测试集上报告了该模型的CE损失值。

为了分析模态对齐训练阶段(第3.2节)和半双工对话学习阶段(第3.3节)在基于三流数据训练后对Omni-Flatten全双工对话能力的影响,作者对比了以下模型预测的Assistant文本响应的大语言模型评分:

  • QWen2-0.5 模型直接在三流数据上训练(表示为 Omni-Flatten,具有跨模态对齐但不采用半双工训练)。
  • QWen2-0.5B 在三流数据( Token 为 Omni-Flatten 且不包含半双工训练)上进行了模态对齐和全双工对话训练。
  • QWen2-0.5B 在三流数据上进行了模态对齐、半双工对话训练和全双工对话训练( Token 为 Omni-Flatten)。
  • 测试集中的真实文本响应(用GT响应表示).

表2的结果显示,模态对齐和半双工训练阶段均提高了预测助手文本响应的大语言模型得分,这表明这两个阶段都促进了模型全双工对话性能的提升,并且多阶段训练策略有效地增强了模型端到端全双工语音对话的能力。

轮流对话性能和运行效率:为了评估全双工交互的自然性,作者评估Assistant在用户说完话后能否及时回应(即Assistant进行轮流对话),以及当用户试图打断时Assistant能否及时停止说话(即用户进行轮流对话)。作者定义了以下指标。

Assistant 轮换 Acc@K:此度量定义为:如果在用户发出具有语义意义的语音 token 结束后的第 k个 token 处,Assistant 正确预测了一个非静默 token,则表明 Assistant 已经接过了话筒并开始发言。

用户轮换Acc@K :此指标定义为,在辅助智能体正在说话时,当用户输入一个语义上有意义的语音Token之后,辅助智能体是否正确地输出了一个静默Token在第k个Token位置上。该指标表明辅助智能体成功响应了用户的轮换尝试,即停止自身说话并进入倾听状态。请注意,在作者模拟的伪全双工对话数据集中,由于未考虑返回通道,因此用户输入始终被视为用户获得了发言权。

表3展示了评估结果。作者做如下观察:

  1. 使用本文中使用的语音片段大小10时,当用户结束发言后,智能体能够迅速响应,智能体轮换准确率在第5个Token时达到了55.7%,在第10个Token时达到了71.3%。相比之下,用户的轮换准确率非常低,在第25个Token时仅为30%。这是因为作者的合成全双工数据基于轮换文本对话构建,未涵盖用户打断智能体发言并轮换的情况。在未来的工作中,作者计划细化数据合成Pipeline,更好地模拟现实世界全双工交互中的复杂交互模式,例如用户打断和轮换发言,以及反馈通道。
  2. 智能体轮换的平均响应时间为160毫秒,而用户的平均响应时间为805毫秒。这种差异的原因在于智能体的轮换发生在用户的发言结束时,此时大量语义信息已经可用,系统可以迅速作出响应;相比之下,用户开始发言时语义上下文尚未完全建立,因此系统需要更长的时间来做出决策,停止说话并让出发言权
  3. 作者观察到使用更大的语音片段大小可以提高用户的轮换准确率和较大的K值下的智能体轮换准确率。作者认为这是由于更大的语音片段可以提供更多全面的语义信息以供轮换预测。然而,较大的片段大小也需要更长的预测时间,从而增加智能体的轮换响应时间。不同语音片段大小对用户轮换响应时间的影响相对较小,因为正如前面所述,无论语音片段大小如何,用户的轮换速度始终较慢。

结论和未来的工作

在本文中,作者介绍了一种基于合成全双工语音对话数据并设计多阶段渐进训练范式来实现模态对齐和对话学习的端到端全双工语音对话模型Omni-Flatten。

Omni-Flatten提供了一种简单的全双工建模方案,无需改变基于文本的大语言模型的基本架构,也不依赖于计算密集型的预训练。实证评估表明,提出的方法对于开发处理全双工交互的端到端模型具有前景。

参考

[0]. Omni-Flatten: An End-to-end GPT Model for Seamless Voice Conversation.

CleanS2S-语音到语音 (S2S) 的原型智能体

https://github.com/opendilab/CleanS2S

CleanS2S 是一个语音到语音 (S2S) 的原型智能体,提供高质量的流式交互,并采用单文件实现。其设计简洁明了,旨在提供类似 GPT-4o 风格的中文交互原型智能体。该项目希望让用户直接体验语言用户界面 (LUI) 的强大功能,并帮助研究人员快速探索和验证 S2S pipeline 的潜力。

功能

📜 单文件实现

每个智能体管道的细节都放在一个独立的文件中。无需额外配置依赖项或理解项目文件结构。这对于那些想快速了解 S2S 管道并直接验证新想法的人来说,是一个很好的参考实现。所有管道实现都易于修改和扩展,用户可以快速更换喜欢的模型(例如 LLM)、添加新组件或自定义管道。

实时流式接口

整个 S2S 管道主要由 ASR(自动语音识别)、LLM(大型语言模型)和 TTS(文本转语音)组成,配合两个 WebSockets 组件接收器(包含 VAD)和发送器。管道设计为实时流模式,用户可以像人与人对话一样实时与智能体互动。所有音频和文本信息通过 WebSocket 流式发送和接收。为此,我们利用多线程和队列机制确保流过程顺畅,避免阻塞问题。所有组件都设计为异步和非阻塞,处理输入队列的数据并将结果输出到另一个队列。

🧫 全双工交互与打断机制

基于 WebSockets 提供的强大机制,管道支持全双工交互,这意味着用户可以同时与智能体对话和听取回复。此外,管道支持中断,用户可以在对话中随时通过新语音输入打断智能体。智能体将停止当前处理,开始处理新输入,并结合之前的对话和中断内容进行处理。此外,我们发现聊天机器人常用的“助理风格”和“轮流式”回应是人类对话的主要缺点之一。我们为智能体添加了更有趣的策略,以使对话更具互动性和吸引力。

🌍 网络搜索和 RAG

通过集成网络搜索功能和检索增强生成(RAG)模型,管道得到了进一步增强。这些功能使智能体不仅能实时处理和响应用户输入,还能从网络中获取和整合外部信息到响应中。这为回答用户提出的各种实际问题提供了扩展和灵活性。

  • WebSearchHelper 类负责根据用户查询进行在线搜索或收集与对话相关的附加信息。这使智能体能够参考最新或外部数据,增强响应的丰富性和准确性。
  • RAG 类实现了检索增强生成方法,首先从数据库中检索相关信息,然后使用这些信息生成响应。这一两步过程确保智能体的回复基于相关的事实数据,使互动更加知情和符合上下文。

快速上手

后端

安装

## clone the repository
git clone https://github.com/opendilab/CleanS2S.git
cd CleanS2S/backend
pip install -r requirements.txt
  • 根据此处的说明安装 funasr 以支持 paraformer-zh
  • 根据此处的说明安装 cosyvoice 以支持 CosyVoice-300M

下载模型

您需要下载以下四个必要的模型(3个 ASR 模型 + 1个 TTS 模型),可以通过以下链接下载,并放置在合适的目录中。

对于 LLM,我们默认使用 LLM API,您也可以按照下方的说明定制自己的本地 LLM(如 DeepSeek-V2.5、Qwen2.5 等)。

删除 --enable_llm_api 和 --lm_model_url 参数,修改 --lm_model_name 参数为您的本地 LLM 模型路径(例如 --lm_model_name /home/users/deepseek-v2.5)。

您还需要准备一个参考音频目录,其中包含用于韵律和音色转换的参考音频。我们在此仓库中准备了一个示例参考音频目录

如果您想使用自己的参考音频,需要保持与示例参考音频目录相同的格式。音频应为 10~20 秒长,发音清晰。

运行服务器

以下是使用默认设置运行服务器的示例:

export LLM_API_KEY=<your-deepseek-api-key>
python3 -u s2s_server_pipeline.py \
        --recv_host 0.0.0.0 \
        --send_host 0.0.0.0 \
        --stt_model_name <your-asr-path> \
        --enable_llm_api \
        --lm_model_name "deepseek-chat" \
        --lm_model_url "https://api.deepseek.com" \
        --tts_model_name <your-tts-path> \
        --ref_dir <ref-audio-path> \
        --enable_interruption

ℹ️ 支持自定义LLM:在这里,我们使用 deepseek-chat 作为默认 LLM API ,您也可以根据 OpenAI 接口更改为其他 LLM API。(修改--lm_model_name--lm_model_url,设置您自己的 API 密钥)

ℹ️ 支持其他自定义:您可以参考后端管道文件(例如s2s_server_pipeline.py)中由argparse库实现的参数列表,根据自己的需求进行自定义。所有参数在其帮助属性中都有详细文档,易于理解。

使用 Websearch+RAG 运行服务器

您首先需要安装 Websearch 和 RAG 所需的依赖。

pip install -r backend/requirements-rag.txt

其次,为 RAG 中嵌入 Websearch 结果选择一个嵌入模型,例如以下嵌入模型:

git lfs install
git clone https://huggingface.co/sentence-transformers/all-MiniLM-L6-v2

然后,为 Websearch 和 RAG 模块提供令牌,在s2s_server_pipeline_rag.py中,我们使用Serper作为 Websearch 工具,使用Deepseek进行 RAG 。

export LLM_API_KEY=''
export SERPER_API_KEY=''

最后,在运行服务器的示例代码中,将s2s_server_pipeline.py替换为s2s_server_pipeline_rag.py,并添加参数--embedding_model_name

这是使用默认设置和 Websearch+RAG 运行服务器的示例:

python3 -u s2s_server_pipeline_rag.py \
        --recv_host 0.0.0.0 \
        --send_host 0.0.0.0 \
        --stt_model_name <your-asr-path> \
        --enable_llm_api \
        --lm_model_name "deepseek-chat" \
        --lm_model_url "https://api.deepseek.com" \
        --tts_model_name <your-tts-path> \
        --embedding_model_name <embedding-model-path> \
        --ref_dir <ref-audio-path> \
        --enable_interruption

前端

我们建议使用Docker镜像来安装和运行客户端。以下是具体步骤:

## 运行基本的Docker镜像
docker run -it -p 3001:3001 amazonlinux:2023.2.20231011.0 sh
## 安装必要的包
dnf install vim git nodejs -y
npm install -g pnpm
git clone https://github.com/opendilab/CleanS2S.git
cd CleanS2S/frontend_nextjs
pnpm install

frontend_nextjs目录中准备适当的.env.local文件,您可以参考.env.example文件以获取所需的环境变量。

## 运行客户端
pnpm dev --port 3001

然后您可以在浏览器中访问客户端,地址为http://localhost:3001(推荐使用 Chrome 浏览器)。

附注:如果您想在本地运行客户端,请首先安装 node.js 和 pnpm ,然后使用 pnpm 安装必要的包并运行客户端。

MooER (摩尔): 基于8万小时训练数据的开源音频理解大模型

MooER: LLM-based Speech Recognition and Translation Models from Moore Threads

Github: https://github.com/MooreThreads/MooER
ModelScope: https://modelscope.cn/models/MooreThreadsSpeech/MooER-MTL-5K
Huggingface: https://huggingface.co/mtspeech/MooER-MTL-5K

paper:https://arxiv.org/abs/2408.05101

🎉🎉🎉我们发布了支持普通话输入的新 Omni (MooER-omni-v1) 和语音转语音翻译 (MooER-S2ST-v1) 模型。Omni 模型可以听到、思考和与您交谈!请在此处查看我们的演示

 Omni (MooER-omni-v1)

在本工作中,我们推出了摩耳大模型(英文名:MooER)—— 一个由摩尔线程开发的、基于大语言模型(Large Language Model,LLM)的语音识别和语音翻译系统。通过摩尔框架,您可以基于大语言模型,以端到端的方式,将输入语音自动转录为文本(即语音识别),并将其翻译为其它语言(即语音翻译)。关于MooER的具体效果,您可以查阅下文中有关评测结果的部分。在我们公布的技术报告中,我们提供了更详细的实验结果,并分享了我们对模型配置、训练策略等方面的理解。

MooER是业界首个基于国产全功能GPU进行训练和推理的大型开源语音模型。依托摩尔线程夸娥(KUAE)智算平台,MooER大模型仅用38小时便完成了5000小时音频数据和伪标签的训练,这一成就得益于自研的创新算法和高效计算资源的结合。

MooER不仅支持中文和英文的语音识别,还具备中译英的语音翻译能力。在多个语音识别领域的测试集中,MooER展现出领先或至少持平的优异表现。特别值得一提的是,在Covost2中译英测试集中,MooER-5K取得了25.2的BLEU分数,接近工业级效果。摩尔线程AI团队在该工作中开源了推理代码和5000小时数据训练的模型,并计划进一步开源训练代码和基于8万小时数据训练的模型,希望该工作能够在语音大模型的方法演进和技术落地方面为社区做出贡献。

MooER主要功能:

  • 语音识别:支持中文和英文的语音到文本的转换
  • 语音翻译:具备中文语音翻译成英文文本的能力
  • 高效率训练:在摩尔线程的智算平台上,快速完成大量数据的训练
  • 开源模型:推理代码和部分训练模型已经开源,便于社区使用和进一步研究。

MooER 模型、实验:

  • 深度学习架构:MoOER采用了深度学习技术,特别是神经网络来处理和理解语音信号端到端训练:模型从原始语音信号直接到文本输出,无需传统语音识别系统中的多个独立模块。
  • Encoder-Adapter-Decoder结构:
    • Encoder:负责将输入的语音信号转换成一系列高级特征表示。
    • Adapter:用于调整和优化模型对特定任务的适应性,提高型的泛化能力。
    • Decoder(Large Language Model,LLM):基于这些特征生成最终的文本输出。
  • LoRA技术:使用LoRA(Low-Rank Adaptation)技术,一种参数高效的模型微调方法,通过只更新模型中一小部分参数来提高训练效率和效果。
  • 伪标签训练:在训练过程中使用伪标签技术,即用模型自身的预测作为训练数据,以增强模型的学习能力。
  • 多语言支持:MOOER支持中文和英文的语音识别,以及中译英的语音翻译,显示出其多语言处理能

MooER的模型结构

包括Encoder、Adapter和Decoder(Large Language Model,LLM)三个部分。其中,由Encoder对输入的原始音频进行建模,提取特征并获取表征向量。Encoder的输出会送到Adapter进一步下采样,使得每120ms音频输出一组音频Embedding。音频Embedding和文本的Prompt Embedding拼接后,再送进LLM进行对应的下游任务,如语音识别(Automatic Speech Recognition,ASR)、语音翻译(Automatic Speech Translation,AST)等。在模型训练阶段,融合了语音模态和文本模态的数据会按以下形式输入到LLM:

训练数据格式

MooER的训练

我们使用开源的Paraformer语音编码器、Qwen2-7B-instruct大语言模型来初始化Encoder和LLM模块,并随机初始化Adapter模块。训练过程中,Encoder始终固定参数,Adapter和LLM会参与训练和梯度更新。利用自研的夸娥智算平台,我们使用DeepSpeed框架和Zero2策略,基于BF16精度进行训练和推理。经实验发现,训练过程中更新LLM参数能够提升最终音频理解任务的效果。为了提升训练效率,我们采用了LoRA技术,仅更新2%的LLM参数。具体的模型参数规模如下:

MooER 数据集:

该模型的训练数据MT5K(MT 5000h)由部分开源数据和内部数据构成,内部数据的语音识别标签均是由第三方云服务得到的伪标签。语音识别的伪标签经过一个文本翻译模型后,得到语音翻译的伪标签。我们没有对这些伪标签数据做任何的人工筛选。具体数据来源和对应的规模如下:

MooER实验结果:

我们将MooER与多个开源的音频理解大模型进行了对比,包括Paraformer、SenseVoice、Qwen-audio、Whisper-large-v3和SeamlessM4T-v2等。这些模型的训练规模从几万小时到上百万小时不等。对比结果显示,我们的开源模型MooER-5K在六个中文测试集上的CER(字错误率)达到4.21%,在六个英文测试集的WER(词错误率)为17.98%,与其它开源模型相比,MooER-5K的效果更优或几乎持平。特别是在Covost2 zh2en中译英测试集上,MooER的BLEU分数达到了25.2,显著优于其他开源模型,取得了可与工业水平相媲美的效果。基于内部8万小时数据训练的MooER-80k模型,在上述中文测试集上的CER达到了3.50%,在英文测试集上的WER到达了12.66%。

• Paraformer-large: 60,000 hours ASR data
• SenseVoice small: 300,000 hours ASR data
• Qwen-audio: 53,000 hours ASR data + 3700 hours S2TT data + …
• WhisperV3: 1000,000 hours weakly labels, 4000,000 hours pseudo labels
• SeamlessM4T2: 351,000 hours S2TT data, 145,000 hours S2ST data
• MooER-5K: 5,000 hours pseudo labels【伪标签】
• MooER-80K: 80,000 hours pseudo labels【伪标签】

建议

与此同时,我们还得到一些有趣的结论,可以为数据资源和计算资源有限的开发者提供一些建议:

▼Encoder的选择。我们分别对比了无监督(Self-Supervised Learning)训练的W2v-bert 2.0、半监督(Semi-Supervised Learning)训练的Whisper v3和有监督(Supervised Learning)训练的Paraformer。我们发现,采用无监督训练得到的Encoder必须参与到训练过程中,否则模型很难收敛。综合考虑模型效果、参数量以及训练和推理的效率,我们选择Paraformer作为Encoder。

▼音频建模粒度很关键。我们尝试使用240ms、180ms和120ms的粒度进行建模,并发现这一参数对音频与文本的融合效果具有重要影响,同时会影响模型的最终效果和训练的收敛速度。经过评估,我们最终选择每120ms输出一个音频Embedding

▼快速适应到目标垂类。我们仅使用了140h~150h的英文数据进行训练,可以在6个不同来源的英文的测试集上取得一定效果。同时我们尝试将任务迁移到语音翻译(AST)领域,取得了很好的效果。我们相信这个方法同样也适用于小语种、方言或其它低资源的音频理解任务。

▼LLM对音频理解任务的影响。我们发现,在模型训练过程中采用LoRA技术对LLM参数进行更新,可以使训练更快收敛,并且最终取得更好的效果。同时,音频理解任务上的效果也会随着基础LLM效果提升而提升。【LLM模型越大,效果越好。训练参数越多,效果越好】

是否冻结LLM,以及LLM模型的选择

加速训练:

优化了数据加载器部分,在相同配置下可以将训练速度提高4到5倍。同时,我们基于5000小时的训练优化了DeepSpeed的训练策略,并将其重新用于我们8wh内部数据的训练。对于需要解冻编码器的训练,我们使用梯度检查点技术以减少内存使用。我们使用基于Moore Threads的KUAE平台加速大型模型的训练。

训练参数:

应用场景:

  • 实时语音转写:在会议、讲座、课堂等场合,MOOER可以实时将语音转换为文字,便于记录和回顾。
  • 多语言翻译:支持中英文之间的语音翻译,适用于跨国会议、国际交流等场景。
  • 智能客服:在客户服务领域,MOOER可以通过语音识别和翻译功能,提高客服的响应效率和服务质量。
  • 语音助手:集成到智能手机、智能音箱等设备中,提供语音交互服务。
  • 教育辅助:在语言学习中,MOOER可以帮助学习者进行发音校正和语言翻译,

📝 路线图

  •  Technical report 技术报告
  •  Inference code and pretrained ASR/AST models using 5k hours of data
    使用 5k 小时数据的推理代码和预训练的 ASR/AST 模型
  •  Pretrained ASR model using 80k hours of data
    使用 80k 小时数据的预训练 ASR 模型
  •  Traning code for MooER MooER 的训练代码
  •  LLM-based speech-to-speech translation (S2ST, Mandrin Chinese to English)
    LLM 基于语音的语音转语音翻译(S2ST,Mandrin 中文到英文)
  •  GPT-4o-like audio-LLM supporting chat using speech
    类似 GPT-4o 的音频LLM 支持使用语音聊天
  •  Training code and technical report about our new Omni model
    有关我们新 Omni 模型的培训代码和技术报告
  •  Omni audio-LLM that supports multi-turn conversation
    Omni audio-LLM,支持多轮次对话
  •  Pretrained AST and multi-task models using 80k hours of data
    使用 80k 小时数据的预训练 AST 和多任务模型
  •  LLM-based timbre-preserving Speech-to-speech translation
    LLM 基于音色保留的语音到语音翻译

OpenAI o1复现项目进展报告

摘自:机器之心

O1 Replication Journey: A Strategic Progress Report

Report | Walnut Plan | Citation

团队介绍:本项目的核心开发团队主要由上海交通大学 GAIR 研究组的本科三年级、四年级学生以及直博一年级研究生组成。项目得到了来自 NYU 等一线大型语言模型领域顶尖研究科学家的指导。详细作者介绍见:https://github.com/GAIR-NLP/O1-Journey#about-the-team。


人工智能领域掀起巨浪的 OpenAI o1 模型发布三周后,一支由高校年轻研究者组成的团队今天发布了题为 “o1 Replication Journey: A Strategic Progress Report (o1 探索之旅:战略进展报告)” 的研究进展报告。这份报告的独特之处在于 (1)不仅提出并验证了 “旅程学习” 的技术的巨大潜力(研究者也认为是 o1 取得成功的关键技术):通过 327 条训练样本,鼓励模型学会反思、纠错、回溯,其在复杂数学题目上表现 绝对性能就超过了传统监督学习 8% 以上,相对性能提升超过 20%;(2)并且,其前所未有的透明度和即时性,不仅详细记录了团队在复现过程中的发现、挑战、试错和创新方法,更重要的是,它倡导了一种全新的 AI 研究范式。研究团队负责人表示:” 我们的主要目标不是达到与 OpenAI 的 o1 相当的性能 —— 考虑到可用资源有限,这是一个极具挑战性的任务。相反,我们的使命是透明地记录和分享我们的探索过程,聚焦于我们遇到的根本问题,发现新的科学问题,并识别导致 o1 的成功的关键因素,并与更广泛的 AI 社区分享我们的试错经验。o1 技术无疑会成为全球各大 AI 科技公司争相复现的目标。如果我们能够及早分享一些复现过程中的经验教训,就能帮助其他公司减少不必要的试错,从而降低全球范围内 o1 技术复现的总体成本和时间。这不仅有利于推动技术的快速发展,也能促进整个 AI 行业的共同进步。

团队提出的模型在同一道数学题上,与 OpenAI 的 o1-preview (答对)及 GPT-4o(答错)的比较实例,证明旅程学习不断试错、反思、自我纠正的能力在复杂推理任务场景上非常关键。
  • 技术报告链接:https://github.com/GAIR-NLP/O1-Journey/blob/main/resource/report.pdf
  • Github 链接:https://github.com/GAIR-NLP/O1-Journey
  • o1 讨论资源:https://github.com/GAIR-NLP/O1-Journey/tree/main/resource’

该报告发现了什么?从 “”捷径学习”” 到 “旅程学习”,从 “浮光掠影” 到 “深耕细作”

图:从 “捷径学习” 到 “旅程学习” 的范式转变。这是一个用于推理任务的搜索树。对于数学问题解决任务,根节点代表初始问题,而叶节点则是最终结论。绿色节点表示正确答案,红色节点表示错误答案。传统上,学习主要集中在对直接从根到叶的捷径路径进行监督训练。然而,本研究探索了对整个探索路径进行监督学习,这包括了试错和纠正的过程。

团队认为,大多数现有的机器学习或大模型训练方法(如监督式微调)都可以被归类为 “捷径学习” (Shortcut Learning),即模型学习到达正确答案的直接路径。这种传统范式虽然在特定、明确定义的任务中可能有效,但在面对复杂、动态和开放性问题时显示出明显的局限性。捷径学习具有以下几个关键特征:(1) 注重快速结果:强调在短时间内达到特定的性能指标或完成特定任务。(2) 高度依赖数据:性能改进通常依赖于增加训练数据量,而非改进学习算法本身。(3) 泛化能力有限:在训练数据分布之外的场景中,性能可能会急剧下降。(4) 缺乏自我纠正能力:这些系统通常缺乏识别和纠正自身错误的能力。尽管捷径学习推动了人工智能的许多进步,但它难以产生真正智能和可靠的人工智能系统,无法应对现实世界挑战的复杂性。随着我们追求更高级形式的人工智能甚至超级智能,这种方法的局限性变得越来越明显。
认识到这些缺点,本文提出了一种名为 “旅程学习”(Journey Learning) 的新范式。旅程学习旨在使人工智能系统能够通过学习、反思、回溯和适应不断进步,就像人类一样,从而展现出更高水平的智能。

如图所示,团队提出了 “旅程学习” 范式,它鼓励模型不仅学习捷径,还要学习完整的探索过程,包括试错、反思和回溯。仅使用 327 个训练样本,不借助任何额外训练技巧,旅程学习在 MATH 数据集上的表现就超过了传统监督学习 8% 以上,展示了其极其强大的潜力。作者也认为这是 o1 技术中最关键的组成部分

表:捷径学习和旅程学习的多维度比较

模型生成的例子:

技术细节是什么?o1 技术探索之旅

如图所示,从 OpenAI o1 9 月 12 日发布的过去三周内,该团队对 o1 技术已经完成了系统化、多阶段的探索。这个过程始于使用 OlympicArena 数据集对 o1 进行初步评估(如下表格),旨在全面了解其在多个学科领域的认知能力。研究的核心集中在 o1 思维结构的分析上,特别关注 “长思维” 这一关键概念整个探索技术涉及多个复杂的步骤,包括奖励模型的开发、在策略推理树的构建,以及将这些元素整合为连贯的长思维过程。整个研究过程采用了迭代和并行的方法。进行了多次尝试,不断调整和完善技术和方法。评估过程包括定量和定性分析,结合人工检查和专门的分析工具,以确保研究的准确性和有效性。

团队强调了探索过程的重要性,而不仅仅关注最终结果。这种重视科研探索过程的思路与团推提出的 “旅程学习” 范式相一致,强调了在复杂、动态环境中不断试错、纠错的持续学习和适应的重要性。通过这个过程,不仅获得了关于 o1 技术的深入理解,还开发了一套探索未知 AI 技术的系统方法。研究过程涉及决策分析、挑战识别以及创新解决方案的开发。最终,这项研究不仅仅是对 o1 技术的探索,更是对先进 AI 系统研究方法的一次实践和验证。通过分享研究过程,包括成功和失败的经验,旨在为 AI 研究社区提供有价值的见解,促进该领域的集体进步。
这个探索过程展示了开放、协作的 AI 研究在推动技术边界方面的重要性,为未来更复杂的 AI 系统研究提供了有益的参考和指导。
具体地,团队凝炼了复现 o1 过程中的几个关键问题,并做了非常细致的探索分享:

  • Q1: o1 的思维链是什么样子的?
  • Q2: 长思维 (Long thought) 是如何工作的?
  • Q3: 如何构建长思维?
  • Q4: 如何构建奖励模型?
  • Q5: 如何构建 on-policy 推理树?
  • Q6: 如何从推理树中推导出长思维?
  • Q7: 如何评估我们的尝试方法?
  • Q8: 如何训练我们的模型?
  • Q9: 什么是人类和 AI 协同标注的有效策略?

  • Q1: o1 的思维链是什么样子的?
  • 经过探索,团队确定需要构建的长思维数据应具有以下特征:

    • 迭代式问题解决:模型首先定义函数,然后逐步探索相关表达式,将复杂方程分解为更简单的组成部分,反映了一种结构化和有条理的方法。 
    • 关键思维指标:使用 “Therefore” 表示结论,”Alternatively” 探索不同路径,”Wait” 表示反思,以及 “Let me compute” 过渡到计算,突出了模型的推理阶段。 
    • 递归和反思方法:模型经常重新评估和验证中间结果,使用递归结构确保一致性,这在严谨的数学推理中很典型。 
    • 假设探索:模型测试不同的假设,随着获得更多信息而调整其方法,展示了推理过程中的灵活性
    • 结论和验证:最后,模型解方程并验证结果,强调在完成之前验证结论的重要性。 

    Q2: 长思维 (Long thought) 是如何工作的?
    这是团队认为重要的问题。然而,在当前的研究阶段,该团队仅仅提出了猜想。团队认为还没有足够的经验证据来验证它们的准确性,这也是未来需要重点展开的工作。
    o1 长思维方法的显著成功可以归因于在上述中介绍的旅程学习 (Journey Learning)。与传统的捷径学习 (Shortcut Learning) 不同,旅程学习允许模型探索整个决策轨迹,模仿人类的问题解决过程。这种全面的探索使 o1 能够考虑多种解决方案路径,从错误中学习,并理解完整的问题解决过程。通过经历正确和错误的路径,模型发展出强大的错误处理和自我纠正能力,增强了其适应新挑战的能力。这种方法培养了对问题领域更深入的理解,不仅仅是知道正确答案,而是理解为什么以及如何得出答案。旅程学习过程密切模拟人类的认知过程,包含试错、反思和调整。这大大增加了模型输出内容的可解释性,因为 o1 可以提供详细的解决步骤并解释其推理过程,包括如何从错误中恢复。因此,基于旅程学习的 o1 长思维过程不仅仅是计算时间的扩展,还代表了一种彻底的、人类般的推理探索。这种方法使 o1 能够处理更复杂的问题,提供更可靠和可解释的答案,并在面对新挑战时表现出更大的适应性,从而解释了它在各种任务中的卓越表现。


    Q3: 如何构建长思维?
    尝试 1:基于 LLM 和奖励的树搜索 根据在 Q1 中对长思维的观察,其最显著的特征是在推理产生错误时或遇到冗余的推理步骤时尝试反思和回溯。这类似于在推理树上搜索问题的解决方案,在错误节点处回溯,直到找到正确的解决路径。为实现这一点,需要构建一棵推理树,其中根节点代表问题,其他每个节点代表一个推理步骤。从根到任何节点的路径代表从问题到该结论的推理过程。此外,回溯和反思必须基于错误的推理步骤,这需要一个更细粒度的奖励模型(即过程级)来指示树中每个节点的正确性。通过在具有过程级奖励的推理树上执行搜索算法,可以将错误步骤整合到思维链中,从而构建包含回溯和反思等行为的长思维。
    尝试 2:提议 – 批评循环 尝试 1 通过基于预定义规则在树上执行搜索来构建长思维,但这限制了回溯和反思等行为的自由度。因此,团队尝试让模型选择自己当前的行为。团队构建了一个提议 – 批评循环,其中为模型预定义了一些可能的行为(即继续、回溯、反思、终止),并让模型自身选择行为来构建推理树。如果树没有达到最终答案,可以将这个负面信号告知模型,引导它反思和纠正其方法。
    尝试 3:多智能体方法 基于推理树构建长思维存在几个挑战,包括存在许多冗余的无效节点,以及存在不依赖于反思行为的推理步骤,从而引起构建的长思维逻辑不一致。为解决这个问题,团队设计了一个利用多智能体辩论的算法,其中一个智能体充当策略模型,持续推理,而另一个智能体充当评论模型,指示策略模型是否应该继续当前推理或执行回溯等行为。两个智能体进行持续对话,在找到正确答案时自然构建长思维数据集。
    尝试 4:完整的人类思维过程注释 当人类处理推理问题时,他们通常不会不断地向前推理直到解决问题或失败;相反,他们在无法继续时会反思、回溯和重写推理。这种行为与长思维的特征高度一致。因此,可以忠实且全面地记录人类解决推理任务的过程,从而产生高质量的长思维。


    Q4: 如何构建奖励模型?
    使用奖励模型的第一步是定义粒度。团队的目标不仅仅是关注最终结果,而是专门提高 LLMs 在反思、回溯和相关认知过程方面的能力。因此,团队将评估粒度定义在步骤层面。具体来说,团队使用来自 Abel 的微调数据,通过行号使解决方案变得清晰可辨。
    实现奖励模型的过程可以使用开源模型或是调用闭源模型的 api。团队比较了不同奖励模型在 PRM800K 和 MR-GSM8K 子集上的元评估表现。如下表格展示了结果,其中,o1-mini 在不同数据集上表现最佳,证明其是一个良好的奖励模型。

    Q5: 如何构建 on-policy 推理树?

    构建推理树需要一个能够执行单步推理的策略模型。给定一个问题及其相应的最终答案,策略模型从问题作为根节点开始,不断向树中添加新节点。它首先生成 w 个可能的第一步推理步骤作为根节点的子节点。然后,它迭代地进行前向推理,为每个当前节点(如第一步推理)生成 w 个可能的后续推理步骤作为该节点的子节点。这个过程重复进行,直到达到预设的最大深度或所有叶节点达到最终答案。

    策略模型和步骤分段 构建推理树需要清晰定义推理步骤。为此,团队采用 Abel 提出的数据格式,将数学问题解决方案转化为具有清晰步骤的形式,将答案分成多行,每行以行号开始,并包含该行内的推理。因此,使用 Abel 数据集对 DeepSeekMath-7B-Base 进行微调,得到 Abel-DSMath,作为策略模型。在这种特定格式数据上微调的模型可以方便地控制单个推理步骤的生成。

    奖励模型和剪枝 上述提出的树生成算法计算成本高昂。当设置后续推理步骤数目为 3 和深度为 10 时,最后一次迭代需要生成 3 的 10 次方个推理步骤。因此,使用奖励模型来剪除错误的推理步骤,提高操作效率。具体来说,团队采用束搜索,在每次迭代中只选择少量候选项保留到下一轮。根据使用的奖励模型,剪枝实现的细节有所不同。团队尝试了两个奖励模型:math-shepherd 和 o1-mini。

    Math-shepherd 为每个步骤提供一个介于 0 和 1 之间的实数,表示当前步骤正确的概率。在树生成的每次迭代中,对所有推理步骤进行评分,并选择得分最高的前 K 个进入下一次迭代。这将总生成次数进行剪枝。然而,math-shepherd 在评估困难问题的推理步骤时存在困难,需要一个更强大的奖励模型,能够为每个步骤提供高准确度的正确性指示。因此,最终使用 o1-mini 为每个步骤提供奖励,直接指示每个推理步骤是否正确。此时,在树生成的每次迭代中,利用来自 o1-mini 的奖励,选择最多 K 个正确的推理步骤进入下一次迭代。

    Q6: 如何从推理树中推导出长思维?
    一旦构建了推理树,目标就变为探索如何从推理树转换为包含试错过程的长思维。在该团队的框架中,推理树的每个节点都被奖励模型标注,指示该步骤是否正确或错误。具体的合成步骤如下:

    • 从推理树构建捷径 首先从推理树构建捷径,其中只包括正确答案和有效的中间步骤。从代表问题的根节点开始,找出通向正确答案叶节点的路径。如果有多个正确答案节点,则建立多条正确路径。
    • 遍历推理树 为了得到长思维,采用深度优先搜索(DFS)遍历树。这种遍历按 DFS 顺序构建路径,记录从根问题节点到正确答案叶节点的每一步,同时包括任何被标记为错误的节点的推理。DFS 的挑战在于它探索了庞大的搜索空间,产生了大量可能无法得到正确解决方案的试错路径。为了简化这一初始探索,团队还引入了具体的约束来缓解由于遍历路径过长导致的合成数据的复杂性。首先,根据节点是否位于正确路径(即捷径)上来标记树中的所有节点。遍历遵循以下规则: 
    • 正确路径上的节点:DFS 遇到正确路径上的节点时,它可能会探索导致错误结果的子节点,从而模拟试错的过程。一旦这个节点到达叶节点并被确定为错误,算法就会回溯并切换到正确的路径继续遍历。 
    • 不在正确路径上的节点:随机选择一个子节点进行探索,并不产生试错的分支。

     为进一步简化过程,应用了一个额外的约束:正确路径上的每个节点最多允许 K 次试错 —— 一次在错误路径上的试错和一次在正确路径上的探索。 这些约束确保 DFS 遍历专注有意义的试错探索,同时避免过度探索错误路径。在未来的实验中,计划移除或调整这些约束,以研究试错路径长度与最终模型性能之间的关系。

    • 从遍历路径得到长思维 生成遍历路径并将推理附加到错误节点后,通过连接路径中的所有步骤来构建长思维,其中还包含了每个错误步骤的推理。然而,初步实验表明,使用这个形式的长思维数据来训练模型的性能不佳。为解决这个问题,团队尝试使用 GPT-4o 来修改草稿。GPT-4o 在保留所有推理步骤(包括错误步骤、反思和修正)的同时,增强了思维过程的连贯性和流畅性。这种方法确保最终的长思维不仅准确,而且自然流畅,模拟了包含正确和错误步骤的人类问题解决过程。

    Q7: 如何评估我们的尝试方法?

    除了使用特定评估指标在基准测试上测试准确率分数外,人工审查实际案例(输入输出)是评估数据和模型的关键步骤。因此,为了提供一种更直观的方式来评估模型在特定问题上的表现,团队构建了一个可视化数据分析平台。
    具体来说,可视化平台包括合成树及其对应长思维的可视化,以及训练模型的输出。此外,在可视化结果时,支持详细的条件过滤,例如过滤正确或错误回答的问题,或输出是否包含表示反思或犹豫的关键词(如 “wait”)。另外,可视化平台支持不同迭代轮次的合成数据和模型输出之间的比较,这使得团队可以非常直观地验证新一轮的数据或模型是否有效。

    Q8: 如何训练我们的模型?
    团队实验使用预训练语言模型 deepseek-math-7b-base(更多其他模型已经在等待列表中)。训练过程分为两个主要阶段:监督微调(SFT)和直接偏好学习(DPO)。
    第一阶段:监督微调(SFT): 
    SFT 过程包括两个阶段:

    • 初始阶段:在这个初始阶段,团队专注于使用只包含正确中间步骤和最终正确答案的响应来微调模型。在 Abel 数据集和 PRM800K 数据集上微调 Deepseek-math-7b-base。对于 PRM800K 中的每个问题,使用单个正确的逐步解决方案,丢弃不导向最终答案的回复。在这个阶段,对每个数据集进行一个 epoch 的微调,主要目的是让模型熟悉所需的响应格式。
    • 旅程学习:在第二阶段,使用构建的长思维(包含 327 个示例)进一步微调初始阶段的 SFT 模型。这个阶段旨在增强模型发现错误、自我反思、自我修正和执行回溯的能力。通过在合成的包含试错、反思的长思维数据上训练,模型对更长推理链中涉及的复杂性有更深入的理解。为了比较,团队还在从同一推理树生成的相应捷径上 (Shortcut Learning) 微调模型(同样是 327 个),从而更直观的比较旅程学习相比捷径学习所带来的增益。

    第二阶段:直接偏好学习(DPO)
    在这个阶段,使用核采样(top_p = 0.95 和温度 T = 0.7)从 MATH Train 数据集为每个问题生成 20 个回复。这 20 个回复根据最终答案的正确性分类为正面和负面响应。从中,随机选择 5 个正面响应和 5 个负面响应来创建 5 对偏好对。然后,使用这些偏好对和 DPO 损失来训练模型,使其能够从正确和错误答案的比较中学习。


    Q9: 什么是人类和 AI 协同标注的有效策略?
    团队开发了一种人类和 AI 协作的数据标注流程,用于生成基于 MATH 数据集的高质量、长文本推理数据。通过这个流程,我们将短短几行人类标注的解题方案扩展为包含数千个 token 的、符合 “旅程学习” 范式的详细推理过程。在构建流程的过程中,我们发现了下面几种有效的标注技巧:

    • 完整的思维过程:标注者不必详细记录每一个想到的词语,但必须记录每一个尝试、反思、联想和修正的过程。这些发散的认知路径在日常思考中可能并未被表达成文字,甚至没有被显式认知。然而,捕捉这些思维转变以及背后的原因是至关重要的。这种规划和理解认知转换的能力是大语言模型从我们的数据中必须学习的核心技能。
    • 补充解释常识:人类在用语中经常省略一些可以从上下文中推断的信息,比如对前述公式的引用,或是对广为人知的理论的应用。然而,当大语言模型尝试解读人类标注时,这种省略可能导致幻觉。因此,高质量的数据必须包括对常识性知识的明确解释,以防止大模型的误解。

    遵循以上两个关键要素,人类专家即可完成数据标注,这些数据精简但准确,非常利于大模型做进一步增强。下一阶段,通过设计复杂的提示词,我们通过大语言模型实现了数据扩展和增强。我们的提示词包含以下关键点:

    • 数据颗粒度的增强:提示词强调将问题解决过程分解为更细小的步骤。通过将过程拆解成细粒度且易于理解的步骤块,大语言模型能更好地掌握和内化每个概念,确保在每个阶段都有深入的理解。
    • 逐步推理:提示词控制大语言模型需频繁暂停,反思已知信息或提出下一步的操作。这种停顿模仿了学生在思考问题时的自然过程,帮助他们保持参与感和对推理过程的连接感,而不仅仅是被动地遵循指令。
    • 探索者视角:与直接呈现答案不同,大语言模型被鼓励以探索的语气进行推理,即假设自己是第一次思考这个问题。这种方式可以激发某种程度的 “好奇心”,鼓励模型批判性思考,使他们感觉自己是学习过程的一部分,而不是简单地接收信息。

    为什么科学进展报告很重要?
    研究团队表示:传统发论文方无法适应新的科研范式,人工智能技术的快速发展开创了一个新的研究范式时代,其特点是长期的、基于团队的努力,通常持续六个月或更长时间。这种转变虽然有利于突破性创新,但无意中给科学过程带来了新的挑战。长期团队合作的内向性经常导致向更广泛科学界信息流动的减少。此外,这些项目的长期性质往往导致研究人员满足感的延迟,可能在整个研究过程中培养焦虑和动力减弱。另外,大规模团队项目的复杂性使得认可个人贡献变得复杂,可能侵蚀传统的学术激励结构。团队的进展报告方法旨在通过增强透明度、促进实时反馈和认可,以及鼓励对长期研究计划的持续承诺来解决这些新出现的挑战。在这样的背景下,团队认为 ”Scientific Progress Report“ (科研进展报告)是一种比 现在”Scentific Paper“ (科研论文)更有价值的科研产出和成果分享的组织形式。团队科学探索过程的细致记录,尤其在 AI 能力快速发展的背景下,具有深远意义。通过全面记录探索过程,包括成功和失败,团队正在培育一个独特而宝贵的数据集。这份全面的记录对于训练真正理解科学方法的 AI 模型至关重要。o1 的成功强调了 AI 系统不仅要学习结果,还要学习完整的科学探索过程,包括试错的重要性。通过科研进展报告,不仅可以捕捉技术细节,还包括决策理由、灵感来源和思维过程。这些 “人类因素” 对于训练能够进行真实科学发现的 AI 模型至关重要。
    下一步探索
    团队根据的研究时间线和取得的进展,确定了几个未来探索和发展的关键方向:

    • 扩展长思维的合成: 基于在长思维合成方面的成功迭代,团队计划进行第三轮的数据集成。这将涉及处理更复杂和多样的思维模式,可能揭示 o1 能力的新维度。
    • 长思维扩展定律实验: 这个研究流程旨在理解模型的性能和能力如何随着数据、模型大小和计算资源的增加而扩展。对这个规律的掌握对优化方法和挖掘超级 AI 系统背后的基本原理至关重要。
    • 细粒度、以思考为中心的评估: 计划开发和实施更复杂的评估方法,专注于细粒度、以思考为中心的评估。这种方法将让我们更准确地衡量生成的长思维的质量和连贯性,为模型推理能力提供更深入的洞察。
    • 人机协作以提高思考质量: 未来计划的一个关键部分是探索和增强人机协作,以产生更贴近人类思维的高质量思考数据。这涉及开发利用人类智能和 AI 能力的共同优势,促进 AI 能力的突破。
    • 持续改进奖励和批评模型: 基于过程级奖励模型和评论模型设置,旨在进一步完善这些系统。这个持续的过程将涉及迭代改进,以更好地提供细粒度的监督信号。
    • 推理树的合成优化: 计划探索从推理树中推导和集成长思维更复杂、有效的方法。这将涉及探索更加先进高效的算法来遍历并利用复杂结构中的信息。
    • 扩展训练方法: 未来计划包括进一步实验和完善训练流程。这包括增加预训练阶段、迭代训练、强化学习、偏好学习和 DPO(直接偏好优化)。
    • 持续的透明度和资源共享: 将继续分享在整个科研旅程中开发的资源、观察到的结论和工具。这种持续的做法旨在促进更广泛的 AI 研究社区的协作和加速进展。
    • 探索多代理方法: 基于在多代理系统方面的初步尝试,计划深入研究这一领域,发现建模复杂推理和决策过程潜在的新方法。
    • 完善分析工具: 旨在进一步开发和增强分析工具。这些工具对解释模型输出、跟踪进展和指导未来研究方向至关重要。

    通过追求这些途径,不仅推进我们对 o1 能力的理解和复制,还要推动 AI 研究方法的边界。

    核桃计划:

    团队借本项目正式引出 “核桃计划” (https://gair-nlp.github.io/walnut-plan),团队成员表示:“对 o1 技术路线的探索及复现工作,仅仅是我们核桃计划的一部分。核桃计划旨在成为人工智能复杂推理和深度思考能力研究的开放先锋,致力于推动 AI 从简单的信息处理工具演变为具备 “牛顿” 和 “爱因斯坦” 级别深度思考能力的智能系统。我们将着眼于更长远的研究,最终的伟大愿景是让未来可以呈现 AI 驱动的科研范式,即 AI 完全具备参与人类科研的水准,从而更好地服务人类、改变世界。”

    为什么BERT输入的最大长度要限制为512?

    来自 知乎

    总的来说是为了计算效率,所以把长度限制在了512。

    To speed up pretraing in our experiments, we pre-train the model with sequence length of 128 for 90% of the steps. Then, we train the rest 10% of the steps of sequence of 512 to learn the positional embeddings.

    当然,最最本质的原因还是在于BERT中的Positional Embedding和Transformer中的Positional Embedding实现方式不一样,后者是通过公式计算得到的,而前者本质上则是一个可学习的参数,也就是说每个位置所对应的向量就类似于Token Embedding中每个词对应的词向量。

    class PositionalEmbedding(nn.Module):
        """
        位置编码。
          *** 注意: Bert中的位置编码完全不同于Transformer中的位置编码,
                    前者本质上也是一个普通的Embedding层,而后者是通过公式计算得到,
                    而这也是为什么Bert只能接受长度为512字符的原因,因为位置编码的最大size为512 ***
          # Since the position embedding table is a learned variable, we create it
          # using a (long) sequence length `max_position_embeddings`. The actual
          # sequence length might be shorter than this, for faster training of
          # tasks that do not have long sequences.
                                                     ————————  GoogleResearch
        https://github.com/google-research/bert/blob/eedf5716ce1268e56f0a50264a88cafad334ac61/modeling.py
        """
    
        def __init__(self, hidden_size, max_position_embeddings=512, initializer_range=0.02):
            super(PositionalEmbedding, self).__init__()
            self.embedding = nn.Embedding(max_position_embeddings, hidden_size)
            self._reset_parameters(initializer_range)

    因此,除非是你自己从零开始训练一个模型,否则如果你使用的是谷歌开源的预训练模型,那么这个词表的大小将会被限制在512。 当然,你依旧可以突破这个限制,那就是自己在从新初始化Positional Embedding中的向量,然后对前512个进行替换,后面的就自己在对于语料上训练微调。

    OpenAI o1技术报告

    技术报告:https://openai.com/index/learning-to-reason-with-llms/

    OpenAI o1介绍:https://openai.com/index/introducing-openai-o1-preview/

    我们正在引入OpenAI o1,这是一种新的大型语言模型,经过强化学习训练,可以执行复杂的推理。o1在回答之前思考–它可以在对用户做出响应之前产生一个很长的内部思考链。

    OpenAI发布新模型o1系列,可以实现复杂推理,旨在花更多时间思考,然后再做出响应。这些模型可以推理复杂的任务并解决比以前的科学、编码和数学模型更难的问题。 并且效果得到了极大的提升,大概从高中生提升到了博士生。

    具体来说,o1系列是OpenAI首个经过强化学习训练的模型,在输出回答之前,会在产生一个很长的思维链,以此增强模型的能力。换句话说,内部思维链越长,o1思考得越久,模型在推理任务上的表现就越好。

    o1有多强?

    CEO奥特曼给出答案:

    在刚刚结束的2024 IOI信息学奥赛题目中,o1的微调版本在每题尝试50次条件下取得了213分,属于人类选手中前49%的成绩。

    如果允许它每道题尝试10000次,就能获得362.14分,高于金牌选手门槛,可获得金牌

    另外它还在竞争性编程问题 (Codeforces) 中排名前89%,在美国数学奥林匹克 (AIME) 预选赛题目中跻身美国前500名学生之列。

    与GPT-4o相比,o1在数理化生、英语法律经济等各种科目都有不同成绩改进。

    发布的模型包括哪些?

    o1:暂未对外开放使用。

    o1-preiview:o1的先行版本,可以立即提供给ChatGPT付费用户和Tier 5级API用户

    o1-mini:速度更快、性价比更高,适用于需要推理和无需广泛世界知识的任务。

    OpenAI o1原理

    OpenAI o1 是经过强化学习训练来执行复杂推理任务的新型语言模型。特点就是,o1 在回答之前会思考——它可以在响应用户之前产生一个很长的内部思维链

    也就是该模型在作出反应之前,需要像人类一样,花更多时间思考问题。通过训练,它们学会完善自己的思维过程,尝试不同的策略,并认识到自己的错误。

    对于复杂的推理任务来说,这是一个重大进步,OpenAI称代表了人工智能的最高水平。

    鉴于此,他们决定将计数器重置,并将该系列模型命名为OpenAI o1。

    重点在于,OpenAI的大规模强化学习算法,教会模型如何在数据高度有效的训练过程中利用其思想链进行高效思考。换言之,类似于强化学习的 Scaling Law

    OpenAI发现,随着更多的强化学习(训练时计算)和更多的思考时间(测试时计算),o1的性能持续提高。而且扩展这种方法的限制与大模型预训练的限制有很大不同,OpenAI也还在继续研究。

    模型评估

    为了突出相对于 GPT-4o 的推理性能改进,OpenAI 在一系列不同的人类考试和机器学习基准测试中测试了 o1 模型。实验结果表明,在绝大多数推理任务中,o1 的表现明显优于 GPT-4o。

    在许多推理密集型基准测试中,o1的表现可与人类专家相媲美。最近的前沿模型在 MATH 和GSM8K 上表现得非常好,以至于这些基准测试在区分模型方面不再有效。因此,OpenAI 在 AIME 上评估了数学成绩,这是一项旨在测试美国最聪明高中数学学生的考试。

    OpenAI 还在 GPQA Diamond 基准上评估了 o1,这是一个困难的智力基准,用于测试化学、物理和生物学方面的专业知识。为了将模型与人类进行比较,OpenAI 聘请了拥有博士学位的专家来回答 GPQA Diamond 基准问题。

    实验结果表明:o1 超越了人类专家的表现,成为第一个在该基准测试中做到这一点的模型。

    启用视觉感知能力后,o1 在 MMMU 基准上得分为 78.2%,成为第一个与人类专家相当的模型。o1 还在 57 个 MMLU 子类别中的 54 个上优于 GPT-4o。

    思维链(Chain of Thought)

    与人类在回答难题之前会长时间思考类似,o1 在尝试解决问题时会使用思维链。通过强化学习,o1 学会磨练其思维链并改进其使用的策略。o1 学会了识别和纠正错误,并可以将棘手的步骤分解为更简单的步骤。o1 还学会了在当前方法不起作用时尝试不同的方法。这个过程极大地提高了模型的推理能力。

    编程能力(Coding)

    基于 o1 进行了初始化并进一步训练了其编程技能后,OpenAI 训练得到了一个非常强大的编程模型(o1-ioi)。该模型在 2024 年国际信息学奥林匹克竞赛(IOI)赛题上得到了 213 分,达到了排名前 49% 的水平。并且该模型参与竞赛的条件与 2024 IOI 的人类参赛者一样:需要在 10 个小时内解答 6 个高难度算法问题,并且每个问题仅能提交 50 次答案。

    OpenAI发现,如果放宽提交限制条件,则模型性能更是能大幅提升。如果每个问题允许提交 1 万次答案,即使不使用上述测试时选取策略,该模型也能得到 362.14 分——高于金牌门槛。

    最后,OpenAI 模拟Codeforces 主办的竞争性编程竞赛,以展示该模型的编码技能。采用的评估与竞赛规则非常接近,允许提交 10 份代码。GPT-4o 的 Elo评分为 808,在人类竞争对手中处于前 11% 的水平。该模型远远超过了 GPT-4o 和 o1——它的 Elo 评分为 1807,表现优于 93% 的竞争对手。

    人类偏好评估(Human preference evaluation

    除了考试和学术基准之外,OpenAI 还在更多领域的具有挑战性的开放式提示上评估了人类对 o1-preview 和 GPT-4o 的偏好。

    在这次评估中,人类训练者对 o1-preview 和 GPT-4o 的提示进行匿名回答,并投票选出他们更喜欢的回答。在数据分析、编程和数学等推理能力较强的类别中,o1-preview 的受欢迎程度远远高于 GPT-4o。然而,o1-preview 在某些自然语言任务上并不受欢迎,这表明它并不适合所有用例。

    安全性(Safety)

    思维链(CoT)推理为安全和对齐提供了新的思路。OpenAI 发现,将模型行为策略整合到推理模型的思维链中,可以高效、稳健地教导人类价值观和原则。通过向模型教导自己的安全规则以及如何在上下文中推理它们,OpenAI 发现推理能力直接有利于模型稳健性的证据:o1-preview 在关键越狱评估和用于评估模型安全拒绝边界的最严格内部基准上取得了显著的改进。

    OpenAI认为,使用思维链可以为安全和对齐带来重大进步,因为

    1)它能够以清晰的方式观察模型思维;

    2)关于安全规则的模型推理对于分布外场景更具稳健性。

    为了对自己的改进进行压力测试, OpenAI 在部署之前根据自己的安全准备框架进行了一系列安全测试和红队测试。结果发现,思维链推理有助于在整个评估过程中提高能力。尤其值得注意的是,OpenAI 观察到了有趣的奖励黑客攻击实例。

    隐式思维链(Hiding the Chains of Thought)

    OpenAI认为隐式思维链为监控模型提供了独特的机会。假设它是忠实且清晰的,隐式思维链使得能够读懂模型的思想并了解其思维过程。例如,人们将来可能希望监控思维链以寻找操控用户的迹象。

    但要做到这一点,模型必须能够自由地以未改变的形式表达其思想,因此不能在思维链训练进行任何政策合规性或用户偏好性训练。OpenAI也不想让用户直接看到不一致的思维链。

    因此,在权衡用户体验、竞争优势和追求思维链监控的选项等多种因素后,OpenAI决定不向用户展示原始的思维链。OpenAI承认这个决定有不好的地方,因此努力通过教导模型在答案中重现思维链中的任何有用想法来部分弥补。同时对于 o1 模型系列,OpenAI展示了模型生成的思维链摘要。

    OpenAI o1-mini

    o1系列擅长准确生成和调试复杂代码。为了为开发人员提供更有效的解决方案,OpenAI还发布了OpenAI o1-mini,这是一种更快、更便宜的推理模型,在编码方面特别有效。作为一个较小的模型,o1-mini比o1-preview便宜80%,使其成为需要推理但不需要广泛知识的应用程序的强大、经济高效的模型。

    o1-mini擅长STEM,尤其是数学和编码——在AIME和Codeforce等评估基准上几乎与OpenAI o1的性能相当。预计o1-mini将是一种更快、更具成本效益的模型,适用于需要在没有广泛知识的情况下进行推理的应用程序。

    STEM推理优化(Optimized for STEM Reasoning)

    像o1这样的大型语言模型是在庞大的文本数据集上预先训练的。虽然这些高容量模型具有广泛的世界知识,但对于现实世界的应用来说,它们可能既昂贵又缓慢。相比之下,o1-mini是一个较小的模型,在预训练期间针对STEM推理进行了优化。在使用与o1相同的高计算强化学习(RL)管道进行训练后,o1-mini在许多有用的推理任务上取得了相当的性能,同时具有更高的性价比。

    当在需要智能和推理的基准上进行评估时,o1-mini与o1-preview和o1相比表现良好。然而,o1-mini在需要非STEM事实知识的任务上表现较差。

    数学能力:在高中AIME数学竞赛中,o1-mini(70.0%)与o1(74.4%)具有竞争力,同时价格明显更低,表现优于o1-preview(44.6%)。o1-mini的分数(约11/15个问题)使其跻身美国高中生前500名左右。

    编码能力:在 Codeforces 竞赛网站上,o1-mini 的 Elo 得分为 1650,与 o1 (1673) 不相上下,并且高于 o1-preview (1258)。此外,o1-mini 在 HumanEval 编码基准和高中网络安全夺旗挑战 (CTF) 中也表现出色。

    STEM:在一些需要推理的学术基准上,例如 GPQA(科学)和 MATH-500,o1-mini 的表现优于 GPT-4o。o1-mini 在MMLU 等任务上的表现则不如 GPT-4o,并且由于缺乏广泛的世界知识而在 GPQA 基准上落后于 o1-preview。

    人类偏好评估:OpenAI让人类评分员在各个领域具有挑战性的开放式提示上比较 o1-mini 和 GPT-4o。与o1-preview 类似,在推理量大的领域,o1-mini 比 GPT-4o 更受欢迎;但在以语言为中心的领域,o1-mini 并不比 GPT-4o 更受青睐。

    在速度层面,OpenAI 比较GPT-4o、o1-mini和 o1-preview 对一个单词推理问题的回答。结果显示,GPT-4o回答不正确,而 o1-mini 和 o1-preview 均回答正确,并且 o1-mini 得出答案的速度快了大约 3-5 倍。

    安全性

    o1-mini使用与o1-preview相同的对齐和安全技术进行训练。与GPT-4o相比,该模型在StrongREJECT数据集的内部版本上的越狱鲁棒性提高了59%。在部署之前,使用与o1-preview相同的安全评估方法,仔细评估了o1-mini的安全风险。

    QWen-Audio语音大模型

    https://github.com/QwenLM/Qwen-Audio

    Qwen-Audio:通过统一的大规模音频语言模型推进通用音频理解

    Qwen-Audio 🤖 🤗  | Qwen-Audio-Chat 🤖 🤗  |    Demo 🤖 | 🤗

      Homepage  |   Paper   |    WeChat   |   Discord

    本文提出了Qwen-Audio模型,旨在通过扩大音频语言预训练的范围,覆盖超过30个任务和多种音频类型,如人声、自然声音、音乐和歌曲,从而促进通用音频理解能力的提升。然而,直接联合训练所有任务和数据集可能导致干扰问题,因为不同数据集相关的文本标签由于任务焦点、语言、标注的细粒度和文本结构的差异而存在显著变化。为了解决一对多的干扰问题,我们精心设计了一个多任务训练框架,通过对解码器的分层标签序列进行条件化,促进知识共享并通过共享和特定标签分别避免干扰。值得注意的是,Qwen-Audio在多种基准任务中实现了卓越的性能,而无需任何任务特定的微调,超越了同类模型。在Qwen-Audio的基础上,我们进一步开发了Qwen-Audio-Chat,允许多种音频和文本输入,实现多轮对话并支持多种以音频为中心的场景。

    Qwen-Audio 可以以多种音频 (包括说话人语音、自然音、音乐、歌声)和文本作为输入,并以文本作为输出。Qwen-Audio 系列模型的特点包括:

    • 音频基石模型:Qwen-Audio是一个性能卓越的通用的音频理解模型,支持各种任务、语言和音频类型。在Qwen-Audio的基础上,我们通过指令微调开发了Qwen-Audio-Chat,支持多轮、多语言对话。Qwen-Audio和Qwen-Audio-Chat模型均已开源。
    • 兼容多种复杂音频的多任务学习框架:为了避免由于数据收集来源不同以及任务类型不同,带来的音频到文本的一对多的干扰问题,我们提出了一种多任务训练框架,实现相似任务的知识共享,并尽可能减少不同任务之间的干扰。通过提出的框架,Qwen-Audio可以容纳训练超过30多种不同的音频任务;
    • 出色的性能:Qwen-Audio在不需要任何任务特定的微调的情况下,在各种基准任务上取得了领先的结果。具体得,Qwen-Audio在Aishell1、cochlscene、ClothoAQA和VocalSound的测试集上都达到了SOTA;
    • 支持多轮音频和文本对话,支持各种语音场景:Qwen-Audio-Chat支持声音理解和推理、音乐欣赏、多音频分析、多轮音频-文本交错对话以及外部语音工具的使用。
    图3
    图 1:Qwen-Audio 和多任务音频文本学习模型之前的顶级性能,例如 SpeechT5、SpeechNet、SpeechLLaMA、SALMONN和 Pengi。我们展示了 12 个数据集的测试集结果,包括自动语音识别 (ASR)、语音到文本翻译 (S2TT)、自动音频字幕 (AAC)、声学场景分类 (ASC)、语音情感识别 (SER)、音频问答 (AQA)、声音分类 (VSC) 和音符分析 (MNA)。ASR 数据集(例如 Librispeech、Aishell1 和 Aishell2)的结果引用 1 – WER%。CoVoST2 的结果是七个翻译方向(en-de、de-en、en-zh、zh-en、es-en、fr-en 和 it-en)的平均 BLEU 分数。Qwen-Audio 无需任何特定于任务的微调即可实现卓越的性能,超越了同类产品。

    Methodology 

    本节提供了Qwen-Audio和Qwen-Audio-Chat的详细信息,这些模型旨在实现通用音频理解和基于人类指令的灵活互动。首先,在第1节中介绍了Qwen-Audio和Qwen-Audio-Chat的模型结构。我们的模型训练过程分为两个阶段:多任务预训练监督微调。我们在第2节中描述了通过多任务学习进行的Qwen-Audio训练。随后,在第3节中描述了Qwen-Audio-Chat的监督微调过程,使其能够实现灵活的人机互动。

    模型架构

    Qwen-Audio 模型的架构如图 3 所示。Qwen-Audio 包含一个音频编码器和一个大型语言模型。给定配对数据 (𝒂,𝒙) ,其中 𝒂 和 𝒙 表示音频序列和文本序列,训练目标是将下一个文本标记概率最大化为:

    Audio Encoder 音频编码器

    音频编码器Qwen-Audio采用单一音频编码器处理多种类型的音频。该音频编码器基于Whisper-large-v2模型初始化,该模型为32层Transformer结构,包含两个卷积下采样层作为前端。音频编码器由640M参数构成。尽管Whisper是针对语音识别和翻译进行监督训练的,其编码表示仍然包含丰富的信息,如背景噪声,甚至可以用于恢复原始语音。在音频数据预处理过程中,Whisper将其重采样至16kHz,并使用25ms的窗口大小和10ms的步长将原始波形转换为80通道梅尔谱图。此外,模型还包含一个步幅为2的池化层,以减少音频表示的长度。因此,编码器输出的每一帧大约对应于原始音频信号的40ms片段。在训练时,采用SpecAugment作为数据增强技术。

    大型语言模型Qwen-Audio将大型语言模型作为其基础组件。该模型使用从Qwen-7B中获得的预训练权重进行初始化。Qwen-7B是一个32层的Transformer解码器模型,隐藏层大小为4096,总参数量为7.7B。

    多任务预训练

    在音频处理领域,已开发出多样化的音频数据集以应对特定任务,如表1所示。Qwen-Audio旨在利用广泛的音频数据集进行联合训练,目标是训练一个统一的模型,能够支持所有音频任务,从而消除在处理不同任务时繁琐的模型切换需求。更重要的是,在联合训练过程中,各任务可以相互受益,原因在于:1)相似任务能够通过知识共享和协同学习而获益,因为它们关注音频信号中嵌入的基本信息;2)依赖于低层次感知能力的任务可以帮助需要高层次理解或推理能力的任务。

    然而,由于任务聚焦、语言、标注的细粒度和文本结构等方面的差异,不同数据集在文本标签上存在显著变化(例如,有些数据是结构化的,而其他数据则是非结构化的)为了训练适用于不同任务的网络,仅仅混合这些多样化的数据集无法实现相互增强;相反,它会引入干扰。目前大多数现有的多任务训练方法要么将相似任务分组(例如,音频描述、转录),要么为每个数据集分配一个数据集ID,以避免干扰。尽管这些方法取得了一定效果,但仍有很大的改进空间。Whisper提出了一种多任务训练格式,通过将任务和条件信息作为输入特定令牌的序列传递给语言解码器,如语音活动检测、语言识别和句子级时间戳标签。然而,Whisper主要集中于语音翻译和识别任务。

    多任务训练格式框架

    受到Whisper的启发,为了融合不同类型的音频,我们提出了一种多任务训练格式框架,具体如下:

    • 转录标签:预测的启动由转录标签表示。使用<|startoftranscripts|>来指示涉及准确转录口语和捕捉语音录音语言内容的任务,如语音识别和语音翻译任务。对于其他任务,则使用<|startofanalysis|>标签。
    • 音频语言标签:然后,我们引入一个语言标签,指示音频中所说的语言。该标签使用分配给训练集中每种语言的唯一令牌,共计八种语言。当音频片段不包含任何语音(例如自然声音和音乐)时,模型训练预测<|unknown|>令牌。
    • 任务标签:后续令牌指定任务。我们将收集的音频任务分为五类:<|transcribe|>、<|translate|>、<|caption|>、<|analysis|>和<|question-answer|>任务。对于问答(QA)任务,我们在标签后附加相应的问题。
    • 文本语言标签标签令牌指定输出文本序列的语言。
    • 时间戳标签:<|timestamps|>或<|notimestamps|>令牌的存在决定模型是否需要预测时间戳。与Whisper使用的句子级时间戳不同,包含<|timestamps|>标签要求模型进行细粒度的单词级时间戳预测,简称为SRWT(具有单词级时间戳的语音识别)。这些时间戳的预测与转录单词交错进行:开始时间令牌在每个转录令牌之前预测,而结束时间令牌在之后预测。根据我们的实验,SRWT提高了模型将音频信号与时间戳对齐的能力。这种改进的对齐有助于模型对语音信号的全面理解,从而在语音识别和音频问答任务等多个任务中取得显著进展。
    • 输出指令最后,我们提供输出指令,以进一步指定任务和不同子任务所需的格式,然后开始文本输出。

    我们框架的指导原则是通过共享标签最大限度地提高相似任务之间的知识共享,从而提升它们的性能。同时,我们确保不同任务和输出格式可以区分,以避免模型的一对多映射问题。有关Qwen-Audio多任务格式的概述,请参见图3。

    监督微调

    多任务模型的广泛预训练赋予了它们对音频的广泛理解。在此基础上,我们采用基于指令的微调技术,以提高模型与人类意图的对齐能力,从而形成一个交互式聊天模型,称为Qwen-Audio-Chat。为实现这一目标,我们手动创建每个任务的示例。这些示例包括原始文本标签、问题和答案。随后,我们利用GPT-3.5基于提供的原始文本标签生成更多的问题和答案。此外,我们还通过手动标注、模型生成和策略串联创建了一套音频对话数据集。该数据集帮助我们将推理、故事生成和多图像理解能力融入模型中。

    为了有效处理多音频对话和多个音频输入,我们引入了用“Audio id:”标记不同音频的约定,其中id对应于音频输入对话的顺序。在对话格式方面,我们使用ChatML(OpenAI)格式构建指令调优数据集。在这种格式中,每个交互的声明用两个特殊令牌(<im_start>和<im_end>)进行标记,以便于对话结束。

    为了促进在多轮对话中来自音频和纯文本模态的多样化输入,我们在此训练过程中结合使用上述以音频为中心的指令数据和纯文本指令数据。这种方法使模型能够无缝处理多种输入形式。指令调优数据的总量为20k。

    Experiments

    设置

    多任务预训练阶段,我们冻结大型语言模型(LLM)的权重,仅优化音频编码器。该训练模型被称为Qwen-Audio。在随后的监督微调阶段,我们固定音频编码器的权重,仅优化LLM。最终模型被标记为Qwen-Audio-Chat。两个阶段的详细训练配置列在表6中。

    评估

    为了评估Qwen-Audio的通用理解能力,如表2所示,我们进行了全面的评估,涵盖多种任务,包括自动语音识别(ASR)、语音转文本翻译(S2TT)、自动音频描述(AAC)、声学场景分类(ASC)、语音情感识别(SER)、音频问答(AQA)、声乐声音分类(VSC)和音乐音符分析(MNA)。此次评估涉及12个数据集。评估数据集严格排除在训练数据之外,以避免数据泄露。两个阶段的详细训练配置列在表6中。

    主要结果

    在本节中,我们对Qwen-Audio模型进行了全面评估,评估其在各种任务上的表现,而无需任何任务特定的微调。首先,我们检查其在英语自动语音识别(ASR)方面的结果,如表3所示,Qwen-Audio的表现优于以往的多任务学习模型。具体而言,它在librispeech的test-clean和test-other数据集上分别取得了2.0%和4.2%的词错误率(WER)。同样,中文普通话的ASR结果显示Qwen-Audio在与之前方法的对比中表现出竞争力。根据我们所知,Qwen-Audio在Aishell1的开发集和测试集上达到了最新的研究成果。此外,我们还评估了Qwen-Audio在CoVoST2数据集上的语音翻译性能。结果显示,Qwen-Audio在所有七个翻译方向上均显著超越基线模型。

    最后,我们分析了Qwen-Audio在各种音频分析任务上的表现,包括AAC、SWRT、ASC、SER、AQA、VSC和MNA,结果汇总在表3中。在这些任务中,Qwen-Audio始终显著优于基线模型。特别地,它在CochlScene、ClothoAQA和VocalSound上取得了最新的研究成果,展示了模型强大的音频理解能力。

    表3:自动语音识别(ASR)、语音转文本翻译(S2TT)、自动音频描述(AAC)、带有词级时间戳的语音识别(SRWT)、声学场景分类(ASC)、语音情感识别(SER)、音频问答(AQA)、声乐声音分类(VSC)和音乐音符分析(MNA)任务的结果。在SRWT任务中,Forced-aligner(McAuliffe等,2017)的结果是基于真实转录文本预测时间戳,而Paraformer-large-TP(Gao等,2023)和Qwen-Audio则在更具挑战性的场景中,通过直接生成包含转录文本和时间戳的序列来应对。

    互动聊天结果

    我们通过图2中的示例案例展示了Qwen-Audio-Chat的对话能力。此外,我们计划向公众开放训练好的模型,以便进行在线聊天互动。

    词级时间戳预测分析

    我们通过训练Qwen-Audio提出了带有词级时间戳的语音识别任务(SRWT),旨在不仅识别语音转录,还预测每个单词的时间戳。SRWT的目的有两个:首先,改善模型将音频信号与细粒度时间戳对齐的能力;其次,支持Qwen-Audio-Chat中的语音和音频的基础对接,以及基于对接的问答任务,例如找到提到某人姓名的音频片段的开始和结束时间,或识别给定音频中是否出现某种声音。

    在本节中,我们在多任务预训练中排除了SRWT任务的训练,同时保持其他任务不变。值得注意的是,去除SRWT并不影响训练的音频数据集的覆盖范围,因为SRWT任务与自动语音识别(ASR)任务共享相同的音频数据集。结果如表4和表5所示,训练中包含SRWT的模型在自动语音识别和音频问答任务中表现优越,包括自然声音问答和音乐问答。这些结果突显了将细粒度词级时间戳纳入模型以增强通用音频信号对接能力,并进而提高声音和音乐信号问答任务性能的有效性。

    结论

    在本文中,我们提出了Qwen-Audio系列,这是一个具备通用音频理解能力的大规模音频语言模型集合。为了融合不同类型的音频进行共同训练,我们提出了一个统一的多任务学习框架,该框架促进了相似任务之间的知识共享,并避免了由于不同文本格式引起的一对多映射问题。在没有任何任务特定微调的情况下,所得到的Qwen-Audio模型在各种基准测试中超越了以往的工作,证明了其通用音频理解能力。通过监督指令微调,Qwen-Audio-Chat展示了与人类意图对齐的强大能力,支持来自音频和文本输入的多语言和多轮对话。

    SALMONN-语音大模型

    code:https://github.com/bytedance/SALMONN/

    paper:https://arxiv.org/abs/2310.13289

    SALMONN 是一个大型语言模型 (LLM),支持语音、音频事件和音乐输入,由清华大学电子工程系和字节跳动开发。SALMONN 可以感知和理解各种音频输入,从而获得多语言语音识别和翻译、音频语音共推理等新兴能力,而不是纯语音输入或音频事件输入。这可以被视为赋予 LLM “耳朵”和认知听力能力,这使得 SALMONN 向具有听力的通用人工智能迈出了一步。

    SALMONN 的模型架构如下所示。窗口级 Q-Former 用作连接模块,将 Whisper 语音编码器和 BEATs 音频编码器的输出融合为增强音频令牌,这些令牌与 LLM 输入空间对齐。LoRA 适配器将增强的 LLM 输入空间与其输出空间对齐。文本提示用于指示 SALMONN 回答有关一般音频输入的开放式问题,答案位于 LLM 文本响应中。

    相较于语音识别、音频字幕等传统语音和音频处理任务,SALMONN 利用 LLM来实现认知导向的音频感知,极大地提高了模型的通用性和任务的丰富性。此外,SALMONN 能够以相对较高的准确性遵循文本命令甚至语音命令。由于 SALMONN 只使用基于文本命令的训练数据,因此聆听语音命令也是一种跨模态新兴能力。

    为了解决由于在预训练和微调阶段出现的任务过拟合问题,即LLM局限于在指令微调中使用的特定任务,而对于没有出现的任务能力很差,而提出了一个额外的少量样本激活微调阶段,以使SALMONN重新获得LLM的突现能力。

    Introduction

    在本文中,我们提出了一种语音音频语言音乐开放神经网络(SALMONN),它是一种单一音频-文本多模态大语言模型(LLM),能够感知和理解三种基本类型的声音,包括语音、音频事件和音乐。为了增强在语音和非语音音频任务上的表现,SALMONN采用了双编码器结构,其中包括来自Whisper语音模型的语音编码器(Radford等,2023)和BEATs音频编码器(Chen等,2023c)。使用窗口级查询Transformer(Q-Former)(Li等,2023a)作为连接模块,将可变长度的编码器输出序列转换为可变数量的增强音频token,以输入到Vicuna LLM(Chiang等,2023),并能够以高时间分辨率实现音频-文本对齐低秩适应(LoRA)方法(Hu等,2022)应用于Vicuna,作为跨模态适配器,将Vicuna的增强输入空间与其输出空间对齐,从而进一步提升其性能。在窗口级Q-Former和LoRA的跨模态预训练和指令微调阶段使用了一系列语音、音频和音乐任务最终得到的多模态LLM局限于在指令微调中使用的特定任务,特别是语音识别和音频描述,表现出有限或没有的跨模态突现能力,我们称之为任务过拟合问题。本文中,跨模态突现能力指的是在训练中未见的跨模态任务的执行能力,实质上是LLM的突现能力(Wei等,2022b),在指令微调过程中丧失。为此,我们提出了一个额外的少量样本激活微调阶段,以使SALMONN重新获得LLM的突现能力,并减轻对已训练任务的显著灾难性遗忘。

    为了评估 SALMONN 的认知听力能力,使用了广泛的语音、音频事件和音乐基准。 任务可以分为三个级别。 第一级对经过指令调优训练的八个任务进行基准测试,例如语音识别、翻译和音频总结,而其他两个级别对未经训练的任务进行基准测试。 第二级包括五个基于语音的 NLP 任务,例如翻译为未经训练的语言和槽填充(slot filling,即从文本中提取特定信息并填充到预定义的槽位中),这依赖于语音和文本标记之间的多语言和高质量对齐。 最后一级的任务,包括基于音频的讲故事和语音音频协同推理,不仅需要理解语音,还需要理解非语音听觉信息。 实验结果表明,SALMONN 作为单一模型可以执行所有这些任务,并在标准基准上实现具有竞争力的性能,这揭示了构建能够“听到”并理解通用音频输入的人工智能 (AI) 的可行性由语音、音频事件和音乐的混合组成。

    本文的主要贡献可以总结如下。

    • 我们提出了SALMONN,尽我们所知,这是第一个能够感知和理解包括语音、音频事件和音乐在内的一般音频输入的多模态LLM。
    • 我们通过调整LoRA缩放因子来研究跨模态涌现能力的存在,并提出了一种低成本的激活调优方法,作为额外的训练阶段,能够激活跨模态涌现能力,并减轻对训练中已见任务的灾难性遗忘。
    • 我们在一系列反映一般听觉能力的任务上评估SALMONN,并提出了两个新任务:基于音频的讲故事和语音音频共同推理。

    模型和训练

    模型架构

    SALMONN 的模型架构如图 1所示。



    图1:SALMONN的模型架构。窗口级Q-Former作为连接模块,用于融合来自Whisper语音编码器和BEATs音频编码器的输出,生成增强音频标记,这些标记与LLM输入空间对齐。LoRA适配器将增强的LLM输入空间与其输出空间对齐。文本提示用于指导SALMONN回答有关一般音频输入的开放式问题,答案则以LLM文本响应的形式呈现。在训练过程中,LLM和编码器保持固定,而其余部分可以更新。

    两个互补听觉编码器【用于建模语音音频和非语音音频】的输出特征被同步并结合在一起。Q-Former被用作连接模块,并应用于帧级别,其输出序列与文本指令提示集成,并通过LoRA适配器输入到LLM中,以生成文本响应。

    双重听觉编码器:使用了OpenAI的Whisper模型(Radford等,2023)的语音编码器和BEATs音频编码器(Chen等,2023c)。(Whisper模型经过大量弱监督数据的训练,适用于语音识别和翻译,其编码器输出特征适合建模语音并包含背景噪音的信息(Gong等,2023a)。BEATs经过迭代自监督学习训练,提取高级非语音音频语义信息,并提出有效的声学tokenizer,将连续音频特征量化为丰富的语义离散标签)输入音频首先被标记化,然后在训练中被掩蔽和预测。标记器通过提炼音频标记的语义知识进行更新(Chen等,2023c)。因此,这两个编码器的结果听觉特征是互补的,适合包含语音和非语音信息的一般音频输入。由于两个编码器具有相同的输出帧率50Hz,连接后的输出特征表示为:

    Z=Concat(Encoderwhisper​(X),Encoderbeats​(X)),

    其中 X 是可变长度的一般音频输入序列,Encoderwhisper​(⋅) Encoderbeats​(⋅) 分别是Whisper和BEATs编码器,Concat(⋅) 是在特征维度上逐帧连接的操作,Z 是具有 T 帧的连接编码器输出序列。

    窗口级Q-Former:Q-Former结构通常用于将图像编码器的输出转换为固定数量的LLM文本输入标记(Li等,2023a),在处理可变长度的音频输入时需要进行修改。具体而言,将输入图像的编码器输出表示为 Zl​,Q-Former使用固定数量的可训练查询 Q 将 Zl​ 转换为 N 个文本标记 Hl​,这需要多个堆叠的Q-Former块。Q-Former块类似于Transformer解码器块(Vaswani等,2017),但在第一个块中使用固定数量的可训练静态查询 Q,并从自注意力层中移除因果掩码。通过这种方式,Q-Former允许查询在 Q中首先使用自注意力层相互引用,然后使用交叉注意力层与 Zl​ 进行交互。

    对于一个变长的通用音频输入Z=[Zt​]t=1T,通过将 Z 分割成大小为 L 的窗口,并用零填充最后一个窗口,可以表示为{{Zt​}t=(l−1)×L+1l×L​}l=1T/L⌉​。而不是在序列级别使用 Q-Former 将整个 Z转换为 N 个文本标记,SALMONN 在窗口级别使用 Q-Former,就好像每个窗口中的编码器输出帧堆叠在一起形成一幅图像一样。因此,文本标记序列 H 变为:

    其中 Q-Former(·) 是 Q-Former 函数,H 的形状为 ⌈T/L⌉×N 的文本标记。窗口级的 Q-Former 使用可变数量的文本标记,因此在处理可变长度序列时效率更高。此外,H 被强制与 Z 具有单调对齐,从而提高了时间分辨率,这对于语音识别非常重要。

    LLM 和 LoRA:本工作中使用的是预训练的 Vicuna LLM(Chiang et al., 2023),该模型是针对指令微调的 LLaMA LLM(Touvron et al., 2023)。LoRA(Hu et al., 2022)是一种广泛使用的参数高效微调方法,用于 LLM 适应,在 SALMONN 中用于调整 Vicuna 自注意力层中的查询和数值权重矩阵。在本工作中,LoRA 是可训练的,而 Vicuna 不是。

    训练方法

    本节介绍了 SALMONN 的三阶段跨模态训练方法。除了最近视觉 LLM 所采用的预训练指令微调阶段(Dai et al., 2023; Zhang et al., 2023b),还提出了一个额外的激活微调阶段,以解决指令微调中对语音识别和音频描述任务的过拟合问题

    预训练阶段:基于语音识别和语音描述音频进行预训练

    为了减小预训练参数(LLM 和编码器)与随机初始化参数(连接模块和适配器)之间的差距,使用大量的语音识别和音频描述数据对窗口级 Q-Former 和 LoRA 进行预训练。这两个任务包含关于语音和非语音音频事件内容的关键听觉信息,并且都不需要复杂的推理和理解,因此可以帮助 SALMONN 学习听觉信息与文本信息之间的高质量对齐。

    指令微调阶段:

    类似于 NLP(Wei et al., 2022a)和视觉语言(Dai et al., 2023),音频-文本指令微调使用了一系列监督的语音、音频事件和音乐任务,如表 1 所示,作为 SALMONN 训练的第二阶段。根据任务的重要性(例如语音识别和音频描述)以及在测试中拥有此能力的不可或缺性(例如重叠语音识别、电话识别和音乐描述)选择这些任务。指令提示基于与音频数据配对的文本生成。

    任务过拟合:

    尽管仅通过前两个训练阶段构建的 SALMONN 可以在指令微调中训练的任务上产生有竞争力的结果,但它在执行未训练的跨模态任务时表现出有限或几乎没有能力,尤其是那些需要跨模态共同推理能力的任务。特别是,该模型有时会违反指令提示,生成与其所接受的任务无关的响应,仿佛它接收到的指令与训练中常见的任务相关(例如语音识别)。我们将这一现象称为任务过拟合。在这里,我们对该问题进行了理论分析,详细的实验验证见第 5.3 和 5.4 节。

    我们将任务过拟合归因于两个原因。首先,与用于 LLM 训练的纯文本数据相比,我们的跨模态指令微调中仅使用了更简单的指令提示(Wei et al., 2022a),因此生成的响应并不复杂且多样。同时,指令微调中包含的一些任务,特别是语音识别和音频描述,具有比其他任务(如语音和音频问答)更确定的输出这两个原因结合导致内在条件语言模型(LM)偏向于一个缺乏良好泛化能力的错误分布,阻止了 SALMONN 执行未训练的跨模态任务。更具体地,在测试时,给定新指令提示 I 的测试输入 X 的响应文本序列 Y^ 可以生成为 Y^=argmaxY​PΛ​(Y|X,I),这也是训练中要最大化的目标。利用贝叶斯法则,有

    由于在 SALMONN 训练中仅看到有限的文本响应,内在条件 LM PΛ(Y∣X) 偏向于与 X 强对齐的 Y 序列,例如自动语音识别(ASR)和自动音频描述(AAC)任务的转录,尤其是简单且短的转录。根据公式(3),这导致 I′(具有更多样本响应的zero-shot 指令)具有小的 PΛ(Y∣X,I′)。

    激活微调阶段:

    缓解任务过拟合的有效方法是对内在条件 LM PΛ​(Y∣X) 进行正则化。实现这一点的简单方法是对具有更长和更多样化响应的任务进行微调,例如基于听觉信息的问答和讲故事。这类任务的配对训练数据可以基于与语音识别或音频和音乐字幕数据配对的文本生成,可以由人工注释者手动生成,也可以通过提示文本基础 LLM 自动生成。

    我们采用一种高效的方法,使 SALMONN 能够通过简单地降低 LoRA 适配器的缩放因子来生成长且多样化的响应。这是一种正则化 PΛ​(Y∣X) 的替代方法,因为内在条件 LM 只能通过窗口级 Q-Former 和 LoRA 学习,因为它们是训练中唯一更新的模块。降低 LoRA 缩放因子的效果在第 5.2 节中可以找到,确实可以激活问答和讲故事能力,并生成长且多样化的响应,但也会显著降低在训练任务上的结果。为了在恢复跨模态突现能力的同时保持竞争力的结果,我们建议使用以降低的 LoRA 缩放因子生成的 SALMONN 响应来执行称为激活微调的第三阶段微调。随后在第 5.4 节中展示的实验结果表明,激活微调是一种高效且有效的少样本自监督训练方法。

    实验设置

    模型设置

    SALMONN 使用 Whisper-Large-v2(Radford et al., 2023)模型的编码器作为语音编码器,使用微调后的 BEATs(Chen et al., 2023c)编码器作为音频编码器,以及具有 13B 参数的 Vicuna LLM(Chiang et al., 2023)作为基础 LLM。对于窗口级 Q-Former,我们使用 N = 1,仅有一个可训练查询,设置L = 17,这大约对应于每个窗口 0.33 秒。因此,对于 30 秒的音频,Q-Former 输出 88 个文本标记。关于 LoRA(Hu et al., 2022)的超参数,我们将秩设置为 8,缩放因子设置为 4.0。在训练中,仅更新 Q-Former 和 LoRA 的参数,结果约为 3300 万(M)参数,约占整个 SALMONN 模型的 0.24%。

    数据设置

    采用第 3.2 节中提出的三阶段训练。用于第一预训练阶段的数据包括 960 小时的 LibriSpeech 训练集(Panayotov et al., 2015)和 1000 小时的 GigaSpeech M 集(Chen et al., 2021)用于语音识别,以及 2800 小时的 WavCaps(Mei et al., 2023)(去除音频片段超过 180 秒的部分)、AudioCaps(Kim et al., 2019)和 Clotho(Drossos et al., 2020)数据集用于音频描述生成。

    第二个指令调优阶段涉及多个任务,包括自动语音识别(ASR)、自动语音翻译(AST)、自动音频字幕(AAC)、音素识别(PR)、情感识别(ER)、音乐字幕(MC)、重叠语音识别(OSR)、说话人验证(SV)、性别识别(GR)、语音问答(SQA)、音频问答(AQA)和音乐问答(MQA)。在SQA、AQA和MQA任务中,问题是基于文本字幕标签使用ChatGPT生成的,模型需要根据通用音频输入和带有问题的文本提示提供答案。本阶段使用的数据列在表1中,其中“En2Zh”指的是从英语到中文的AST。

    在最后的激活调优阶段,SALMONN基于音频片段编写了十二个故事,使用了reduced的LoRA。然后,模型使用基于教师强制的交叉熵训练进行12步训练,每一步只使用一个故事样本,以激活SALMONN的跨模态突现能力。

    任务设置

    由于文本LLM具备通过指令调优进行zero-shot学习的能力(Wei et al., 2022a),因此当将基于文本的主干LLM与多模态编码器连接时,期望能实现高质量的跨模态对齐,从而出现这样的能力。为了评估SALMONN的zero-shot跨模态突现能力,选择了15种语音、音频和音乐任务,并将其分为三个不同的层次。

    任务层级1包括在指令调优中使用的任务,因此对SALMONN来说最容易执行。这些任务及其训练数据的列表在第4.2节中给出,各任务的评估指标见表2。

    任务层级2包括未训练的任务,因此比层级1更具挑战性。层级2的任务是基于语音的NLP任务,包括语音关键词提取(KE),评估基于语音内容提取的关键词的准确性;基于口语查询的问题回答(SQQA),评估根据语音中的问题检索的常识知识;基于语音的槽填充(SF),评估从语音内容中获得的所需槽值(通常是命名实体)的准确性。还包括两个AST任务,En2De(英语到德语)和En2Ja(英语到日语),它们也被视为跨模态突现能力,因为指令调优中仅训练了En2Zh。SALMONN的主干LLM Vicuna可以根据语音转录执行所有层级2的任务,因此SALMONN将以完全端到端的方式实现这些任务,而无需任何显式的语音识别。

    任务层级3是最具挑战性的任务,包括基于音频的故事讲述(Story)和语音音频共同推理(SAC)。基于音频的故事讲述是根据来自一般音频输入的听觉信息编写有意义的故事。SAC要求模型理解嵌入在输入音频片段中的口语问题,从背景音频事件或音乐中寻找证据,并根据此进行推理以回答问题。根据我们的知识,这两个层级3的任务是首次在本文中提出的,要求SALMONN以完全端到端的方式感知语音、音频和音乐,并根据听觉信息进行理解和推理。

    表2列出了所有测试集及其评估指标。跟随率(FR)是某些层级2和层级3任务的额外指标,测量SALMONN能够成功遵循指令的百分比。考虑到所选任务复杂,且更容易因任务过拟合导致指令违反,因此引入FR。值得注意的是,我们仅通过计算故事中不同单词的数量来计算故事任务的多样性指标,这仅代表故事的丰富性,而非质量

    表2:三层任务中使用的测试集、指标及参考值来源。SQQA和KE中使用的语音数据是通过商业文本转语音产品合成的。
    参考值说明:“Whisper”指使用Whisper-Large-v2进行自动语音识别(ASR),“Whisper + Vicuna”指将Whisper-Large-v2 ASR输出的转录结果输入到Vicuna中,其余则是我们所知的最新成果。

    实验结果

    所有15个任务的完整结果:
    表3展示了SALMONN在所有15个任务上的结果。从结果来看,无论是否进行激活调优,SALMONN在所有一级任务上都能产生竞争力的结果。然而,未进行激活调优的模型在二级和三级任务上表现严重受限,几乎无法执行。特别是在SQQA、故事和SAC等强调多模态交互的任务中,未调优的SALMONN几乎无法遵循指令。进行激活调优后,SQQA、SF、故事和SAC任务的执行成功率显著提高。图2展示了在激活调优不同训练步骤中,模型在ASR和PR、SQQA、故事和SAC任务上的表现变化趋势,表明激活调优只需少量训练样本和步骤即可激活新兴能力:ASR和PR的结果几乎保持不变,而SQQA、故事和SAC的结果则出现了新兴趋势。由于篇幅限制,结果的更详细分析在附录B中讨论。

    降低LoRA缩放因子的影响
    本节探讨在未进行激活调优的情况下,测试时降低LoRA缩放因子对缓解任务过拟合问题的影响。如图3所示,当LoRA缩放因子降至约2.0,即其原始值的一半时,模型突然展现出跨模态推理能力,这与%PER的下降一起证明了LoRA中嵌入的内在条件语言模型的存在。

    任务过拟合与激活调优分析
    为了验证内在条件语言模型的影响,我们计算了每个激活调优阶段步骤的困惑度(PPL)。具体而言,对于给定的音频 X,使用基于特定任务的文本指令提示I 的教师强制方法计算与探测任务对应的 Y 序列的概率,或在不使用 I 的情况下进行计算。

    如图4所示,比较了故事/SAC任务的真实响应(通过折扣LoRA缩放因子生成)与由于任务过拟合而导致模型错误执行的任务响应(本例中为AAC)。在子图(a)和(b)中,计算 PΛ(Y∣X) 时未使用文本指令提示,结果显示未进行激活调优时,AAC的 Y 的PPL明显低于Story/SAC的 Y。在激活调优过程中,这些任务之间的PPL差距得到缓解,表明对主导AAC任务的偏向显著降低。在子图(c)和(d)中,我们探测了带有Story和SAC指令的 PΛ(Y∣X,I)。结果表明,在激活调优之前,即使文本指令提示是执行Story/SAC,AAC的PPL仍低于Story/SAC,这解释了模型未能遵循指令的原因。在激活调优过程中,Story/SAC的 Y 的PPL值逐渐低于AAC,最终模型能够执行指令任务。

    使用不同任务和数据的激活调优:
    我们探索了几种激活方法来激活模型,包括基于音频编写的长故事、带有长答案的文本问答(QA)任务对,以及长语音转录的ASR任务。这三种方法都对LoRA和Q-Former进行了微调。通过忽略Q-Former和音频输入,Vicuna和LoRA被微调为适应的文本基础LLM。作为另一对照组,进行了使用LoRA和Q-Former但不微调Q-Former的实验。

    结果如表4所示。从结果来看,ASR(长)即用长标签训练的ASR任务,或仅基于文本提示输入的故事(文本基础)都无法激活模型。而使用长答案的故事或QA训练(故事或QA(长))则能够激活模型。这是因为ASR任务强调提高高质量的跨模态对齐,使得分布更加偏向内在条件语言模型。至于基于文本的故事微调,实际上影响的是P(Y∣Tx,I) 而不是 P(Y∣X,I),其中Tx 是语音的参考文本。因此,基于文本的训练无法缓解任务过拟合。带有长答案的QA数据能够激活LLM,但激活模型的性能不如使用故事任务激活的模型,尤其导致生成响应的重复率较高。这可能是因为QA任务的配对答案多样性低于故事任务,从而导致内在条件LM PΛ(Y∣X) 的正则化效果不如预期。

    附录:EXAMPLES OF SALMONN

    Moshi-开源版GPT-4o

    自然聊天,情绪丰富,随意打断,拒绝呆板和回合制!

    来自法国的初创团队Kyutai,发布了这个对标GPT-4o的神奇的端到端语音模型。并将代码、模型权重和一份超长的技术报告开源。

    整个模型的参数量为7.69B,pytorch平台上只有bf16版本,如果在本地跑的话对显存有一定要求,而candle上提供了8bit版本,mlx上更是有4bit版本可供使用。

    moshi作为一个全双工口语对话框架,由几部分组成:首先是Mimi,目前最先进的流式神经音频编解码器,能够以完全流式的方式(延迟80毫秒)处理24 kHz音频(12.5 Hz表示,带宽1.1 kbps(8个量化器,2048的码本 12.5*8*11))。

    token/s Nq 量化器数量
    带宽Bandwidth码本大小
    Mini8*12.5=10081.1kbps2048
    WavTokenizer-small4010.5kbps4096
    WavTokenizer-small 7510.9kbps4096
    SpeechTokenizer30043.0kbps1024
    Encodec 30043.0kbps1024
    Encodec15021.5kbps1024
    常见神经音频编解码器的对比:计算公式 假设码本大小2^n,每秒语音的hz=BW/(Nq*n),token=Nq* 每秒语音的hz , 每秒语音的hz =token/Nq
    Overview of Moshi。Moshi 是一种语音文本基础模型,它支持实时语音对话。 Moshi 架构的主要组成部分是:一个定制的文本语言模型骨干Helium,参见第 3.2 节);一个具有残差矢量量化和从自监督语音模型中提取的语义知识的神经音频编解码器(Mimi,第 3.3 节);用户和 Moshi 语义和声学词元的流式分层生成以及在使用 Inner Monologue 时 Moshi 的时间对齐文本词元(第 3.4 节)。

    然后是负责知识储备、理解和输出的Transformer部分,包括Helium Temporal Transformer和Depth Transformer。其中小型的深度Transformer负责对给定时间步长的码本间依赖性进行建模,而大型(7B参数)时间 Temporal Transformer对时间依赖性进行建模。作者还提出了「内心独白」:在训练和推理过程中,对文本和音频进行联合建模。这使得模型能够充分利用文本模态传递的知识,同时保留语音的能力

    Moshi模拟两种音频流:一种来自Moshi自身(模型的输出),另一种来自用户(音频输入)。沿着这两个音频流,Moshi预测与自己的语音(内心独白)相对应的文本,极大地提高了生成的质量。Moshi的理论延迟为160毫秒(Mimi帧大小80毫秒 + 声学延迟80毫秒),在L4 GPU上的实际总延迟仅有200毫秒。

    论文解读

    摘要

    Moshi,一个语音文本基础模型和全双工口语对话框架。目前的口语对话系统依赖于独立组件的管道,包括语音活动检测、语音识别、文本对话和文本转语音。这种框架无法模拟真实对话的体验。首先,它们的复杂性导致交互之间的延迟达到几秒。其次,文本作为对话的中介模态,会丢失修改意义的非语言信息,比如情感或非语言声音。最后,它们依赖于说话者轮次的分段,这并未考虑重叠发言、打断和插话。

    Moshi 通过将口语对话视为语音到语音的生成,解决了这些独立问题。Moshi 从文本语言模型的骨干开始,从神经音频编解码器的残差量化器生成语音作为标记,同时将自身语音和用户语音建模为并行流。这使得可以去除显式的说话者轮次,并建模任意的对话动态。此外,我们扩展了之前工作的分层语义到声学标记生成首先预测与时间对齐的文本标记,作为音频标记的前缀。这种“内心独白”方法不仅显著提高了生成语音的语言质量,还展示了它如何提供流式语音识别和文本转语音。我们开发的模型是首个实时全双工口语大型语言模型,理论延迟为 160 毫秒,实际为 200 毫秒

    Moshi突破了传统AI对话模型的限制:延迟、文本信息瓶颈和基于回合的建模。

    Moshi使用较小的音频语言模型增强了文本LLM主干,模型接收并预测离散的音频单元,通过理解输入并直接在音频域中生成输出来消除文本的信息瓶颈同时又可以受益于底层文本LLM的知识和推理能力。Moshi扩展了之前关于音频语言模型的工作,引入了第一个多流音频语言模型,将输入和输出音频流联合显式处理为两个自回归token流,完全消除了说话者转向的概念,从而允许在任意动态(重叠和中断)的自然对话上训练模型。

    贡献:

    • 我们训练了Mimi,一个神经音频编解码器,使用残差向量量化(RVQ)将音频转换为Moshi预测的离散标记,并反向转换音频语言模型通常将声学标记与自监督语音模型的语义标记结合,以便在缺乏文本条件下生成可理解的语音。我们通过将语义信息蒸馏到声学标记的第一层【RVQ第一层作为语义信息】,扩展了Zhang等人的方法,并引入了改进的训练技巧。
    • 我们提出了Moshi,这是一种新的音频语言建模架构,将Helium与一个较小的Transformer模型结合,以分层和流式的方式预测音频标记。我们展示了这种无条件音频语言模型生成可理解语音的挑战,并提供了解决方案,超越了非流式模型的可理解性和音频质量,同时以流式方式生成音频。我们进一步扩展该架构以并行建模多个音频流,允许概念上和实际处理全双工对话的简单处理。
    • 我们介绍了内心独白,这是一种新的音频语言模型训练和推理设置通过在音频tokens之前预测时间对齐的文本tokens,显著提高了生成语音的事实性和语言质量。Moshi是一个语音到语音模型,能够推理用户音频和Moshi音频中的非语言信息。然而,这并不妨碍Moshi在语音输出的同时生成文本。基于以往的观察,粗到细的生成(从语义到声学标记)对生成一致的语音至关重要我们将这一层次扩展为在每个时间步使用文本标记作为语义标记的前缀。我们的实验表明,这不仅显著提高了生成语音的长度和质量,还显示强制文本和音频tokens之间的延迟允许从Moshi模型中推导出流式ASR和流式TTS。
    • 我们沿多个维度评估了Moshi的所有组件,包括文本理解、语音可懂性和一致性、音频质量以及口语问答。我们的实验结果表明,我们的模型在现有语音-文本模型中处于最前沿,适用于语音建模和口语问答,同时兼容流式处理,并能够建模数分钟的上下文(在我们的实验中为5分钟)。

    模型

    Moshi是一个多流语音到语音的Transformer模型,凭借其创新的架构实现了与用户的全双工口语对话,如图1所示。Moshi基于Helium构建,这是一个从零开始开发的文本LLM,依赖高质量的文本数据为模型提供强大的推理能力。我们还提出了”内心独白“,这是一种训练和推理程序,在其中我们共同建模文本和音频标记。这使得模型能够充分利用文本模态所 impart 的知识,同时保持语音到语音的系统特性

    为了实现实时对话,我们从一开始就将Moshi设计为多流架构该模型能够同时与用户说话和倾听,无需显式建模说话者轮次。此外,为了以高质量和高效的方式捕捉用户输入音频和Moshi输出的声音,我们提出了Mimi,这是一种神经音频编解码器,通过使用残差向量量化和知识蒸馏,将语义和声学信息结合成一个单一的tokenizer。为了共同建模来自Moshi和用户的音频流,以及Moshi的文本标记,我们依赖于与流式推理兼容的Depth Transformer。

    Helium 文本语言模型

    架构:

    Helium 是一种自回归语言模型,基于 Transformer 架构。 遵循该领域之前的研究,我们对原始架构进行了以下更改:首先,我们在模型的注意力块、前馈块和输出线性层的输入处使用 RMS 归一化。 我们使用旋转位置嵌入RoPE,4,096 个token的上下文长度和 FlashAttention来进行高效训练。 最后,我们改变了前馈块的架构,并使用门控线性单元,以 SiLU 激活函数作为门控函数。 我们的分词器基于 SentencePiece的 unigram 模型,包含 32,000 个元素,主要针对英语。 我们将所有数字拆分为单个数字,并使用字节回退以确保我们的分词器不会丢失信息。 我们使用 AdamW优化器训练模型,使用固定学习率,然后进行余弦学习率衰减。

    ps:SentencePiece是谷歌推出的子词开源工具包,它是把一个句子看作一个整体,再拆成片段,而没有保留天然的词语的概念。一般地,它把空格也当作一种特殊字符来处理,再用BPE或者Unigram[切分subword的算法]来构造词汇表。他是一种无监督的文本 tokenizer 和 detokenizer,主要用于基于神经网络的文本生成系统,其中,词汇量在神经网络模型训练之前就已经预先确定了。 SentencePiece 实现了subword单元(例如,字节对编码 (BPE))和 unigram 语言模型),并可以直接从原始句子训练子词模型(subword model)。 这使得我们可以制作一个不依赖于特定语言的预处理和后处理的纯粹的端到端系统。SentencePiece开源代码地址:https://github.com/google/sentencepiece,详细讲解

    预训练数据过滤

    训练数据是训练 LLM 的关键要素之一:我们现在介绍我们获得大型高质量文本数据集的方法。 我们从高质量的数据源开始,例如维基百科、Stack Exchange 和大量的科学文章。 由于这些数据源的数据量不足以训练 LLM,我们还依赖于从 CommonCrawl 【Common Crawl是一个501非营利组织,它对Web进行爬网,并向公众免费提供其档案和数据集。】爬取的网络数据来扩展我们的数据集。 网络数据需要大量处理才能获得高质量的训练集:我们执行去重、语言识别和质量过滤。 接下来,我们将更详细地描述每个操作。

    去重。我们从WET文件开始,这些文件仅包含网页的文本内容,是由CommonCrawl【它对Web进行爬网,并向公众免费提供其档案和数据集】项目提取的。由于这种格式包含页面的所有文本,因此包含了大量的样板内容,如导航菜单。 因此,我们管道的第一步是在行级别对每个分片(每个抓取有 100 个分片)进行去重,以去除这些模板代码。为此,我们计算每行的FNV哈希值,并使用布隆过滤器来去除重复项。我们还训练了一个fastText(Joulin等,2016)分类器来区分重复和非重复项,以进行模糊去重:在这里,我们仅删除被分类为重复的至少三行连续的块。

    语言识别。 一旦去重完成,我们就应用基于 fastText 的语言识别器来仅保留英语数据。 语言识别是在文档级别进行的,我们只保留超过一定阈值(0.85)的文档。

    质量过滤。 最后一步是过滤剩余的数据,只保留高质量的网页。 为了执行此步骤,我们训练了一个 fastText 分类器,它使用来自我们高质量数据源和随机 CommonCrawl 网页的行。 我们得到一个包含 9 个类别的分类器,对应于我们的不同高质量来源,例如维基百科或维基教科书,以及 StackExchange 的子集,例如 STEM 或人文科学。 其动机是获得对保留哪些文档的更精细控制,不仅基于与高质量来源的相似性,还基于它们的领域。 此分类器在行级别应用,并通过计算每行的平均分数(按其长度加权)来获得聚合分数。 同样,我们保留对应于超过一定阈值的文档。

    音频token化

    参考了 SpeechTokenizer采用蒸馏技术将非因果的高层次语义信息转移到由因果模型生成的令牌中(用NAR直接生成语义token)

    为了将波形离散化为音频符元,我们引入了 Mimi,一个作为具有离散瓶颈的自动编码器运行的神经音频编解码器(参考EnCodec)。 在文献中,遵循 Borsos 等人 (2022) 定义的术语,这些符元被称为 acoustic 声学token,因为它们模拟了细致的音频细节,并且针对高质量重建进行了优化。 虽然这些 acoustic声学token为有条件文本到音频模型提供了合适的目标 (例如文本到语音 或文本到音乐 )但无条件的语音生成需要将其与从自监督语音模型中提取的语义令牌结合。 与它们的 acoustic声学对应物不同, semantic 语义符元不允许重建高质量音频,但与语言内容高度相关。 这种与语言的相似性允许通过使用 semantic 语义音频符元作为预测 acoustic 声学符元的词缀来生成可理解且一致的语音,即使没有文本条件。 然而,这种混合符元化方法与实时生成不兼容。 语义令牌通常不是因果的,因此只能以离线方式计算。此外,使用单独的编码器生成声学和语义令牌会带来不可忽视的计算负担。因此,Mimi受到之前关于SpeechTokenizer工作的启发,采用蒸馏技术将非因果的高层次语义信息转移到由因果模型生成的令牌中 (用NAR直接生成语义token) ,从而实现语义-声学令牌的流式编码和解码。

    ps:“非因果的高层次语义”指其中的语义信息不依赖于时间顺序。这种语义通常能够捕捉到更广泛的上下文或抽象概念,但无法用于实时生成,因为它不能逐步构建,而是需要完整的数据输入。“因果模型生成的令牌”指的是通过因果模型(例如,基于自回归的方法)逐步生成的输出。在这种模型中,每个时间步骤的生成都只依赖于当前和之前的输入,而不依赖于未来的输入。这种方式确保了生成过程的顺序性和一致性,因此非常适合实时应用,比如语音生成或文本生成。通过这种方式生成的令牌通常用于构建连贯的序列,以便后续的处理或合成。

    架构

    我们的基线架构借鉴了 SoundStream 和 Encodec,它由一个 SeaNet 自动编码器和一个残差向量量化器组成。 编码器通过级联残差卷积块来将单通道波形x ∈ RL投影到潜在表示 enc(x) ∈ RS×D ,这些卷积块交替使用膨胀和步进卷积,以及 ELU非线性函数和权重归一化。所有卷积都是因果的( 每个时间步骤的生成都只依赖于当前和之前的输入,而不依赖于未来的输入。关于因果卷积:https://zhuanlan.zhihu.com/p/422177151,因此该自动编码器可以在流式方式下运行。 具有 4 个卷积块和相应的步幅因子(4, 5, 6, 8) ,以及最终步长为 2 的 1D 卷积,Mimi的编码器能够将24kHz的波形转换成每秒12.5帧且维度为D=512的潜在表示。对称地,解码器采用了类似的结构,但使用转置卷积代替步进卷积,以将潜在表示重新投影回24kHz音频。 我们使用残差矢量量化器对潜在空间进行离散化,该量化器迭代地将矢量量化 (VQ) 应用于先前量化器的残差。 具有Q个量化器,每个量化器都有一个包含NA个质心的码本,RVQ 将潜在空间离散化为{1, . . . , NA}S×Q。 作为基线,我们使用重建损失和对抗性损失的组合来训练此模型,遵循 Encodec( Defossez 等人, 2023)的设置。 我们将在下面详细介绍 Mimi 相对于此默认配置的主要变化。

    基于 Transformer 的瓶颈。 为了提高 Mimi 将语音编码为紧凑表示并同时重建高质量音频的能力,我们在瓶颈中添加了 Transformer 模块,一个在量化之前,另一个在量化之后。 这些 Transformer 有 8 层、8 个头、RoPE 位置编码、250 帧(20 秒)的有限上下文、GELU 激活、512 的模型维度和 2048 的 MLP 维度。 为了稳定训练,我们使用 LayerScale,其对角线值的初始化为 0.01。 两个 Transformer 都使用因果掩码(mask),这保留了整个架构与流式推理的兼容性。 两个 Transformer 都证明对感知音频质量很有用,而编码器中的 Transformer 还改善了下面描述的语义信息的提取 (见表 3 的消融研究)。

    因果关系和流式传输。 使用上述超参数,Mimi 是因果的,可以在编码和解码时以流式方式使用。 其初始帧大小和整体步长均对应于 80 毫秒,这意味着给定 80 毫秒的第一个音频帧,Mimi 输出第一个潜在时间步,该时间步可以解码为 80 毫秒的输出音频。

    优化。 与纯粹使用 Adam的卷积编解码器不同,在架构中引入 Transformer 需要使用权重衰减和 AdamW优化器进行额外的正则化。 更准确地说,我们仅对 Transformers 的参数应用权重衰减,权重为 5 · 10−2。 我们使用8 · 10−4的学习率,0.5 的动量衰减和 0.9 的平方梯度衰减,以及 0.99 的权重指数移动平均值。 我们使用 128 的批量大小,在12 s的随机窗口上进行 4M step2的训练,而 Transformers 的上下文限制在 10 秒(编码器最后降采样层的 250 帧,以及解码器的对称帧)。

    量化率。我们使用了Q=8个量化器(如图二所示),每个量化器的码本大小为NA=2048在12.5Hz时,这表示比特率为1.1kbps。尽管潜在维度是512,我们在应用RVQ之前将输入(基于图2中的“Lin”线性层)投影到256维,并在解码前再将其投影回512维。与先前的工作一致,我们采用了量化器dropout以提供编解码器的比特率可扩展性。此外,我们在训练过程中不以一定概率进行量化可以改善音频质量。更准确地说,我们在训练过程中仅50%的时间对序列进行量化。与Kumar等人不同的是,这意味着将未经量化的嵌入传递给解码器,而不是将所有量化器量化的嵌入传递过去。表3显示这种方法显著提高了客观质量指标,而人类评价结果则不够明确。在我们的实验中,我们观察到一个有些反直觉的现象:随着比特率降低,这种改进效果变得更加明显。

    仅使用对抗损失训练。作为基线,我们按照Défossez等人(2023)的方式,使用重构损失与对抗损失的组合来训练Mimi,即一个多尺度梅尔频谱重构损失加上一个多尺度STFT判别器。具体的参数可以在Audiocraft代码库中找到。虽然之前的神经编解码器依赖于这种重构损失和对抗损失的组合,但我们尝试了纯对抗训练,在这种训练方式下我们只保留特征损失和判别器损失。我们注意到,Hauret等人(2023)之前在带宽扩展的背景下也进行了类似的实验。尽管移除重构损失显著降低了客观指标的表现,但在开发过程中我们观察到生成的音频听起来比根据上述指标预期的好得多。表4报告的主观评价确认了这一观察,并展示了仅使用对抗损失进行训练对音频质量有显著提升。

    使用分裂RVQ学习语义-声学token

    类似于SpeechTokenizer,我们从一个自监督模型(在我们的案例中是WavLM8 (Chen等人,2022))中提取语义信息,并将其蒸馏到RVQ的第一层。WavLM将16kHz的波形映射成以50Hz采样的1024维嵌入,而Mimi则将24kHz的波形映射成12.5Hz下的512维嵌入。在训练过程中,我们通过将输入波形降采样到16kHz来生成蒸馏目标,然后计算WavLM嵌入。接着,我们用一个输出维度为1024的线性投影,随后进行步幅为4、核大小为8的平均池化,以达到12.5Hz的频率。有趣的是,我们观察到非因果地执行这种平均池化对于性能至关重要,这与流式推理兼容,因为这些嵌入仅在训练期间使用。我们将输出维度为1024的线性liner投影层应用于RVQ第一层的输出,同时保持实际进入解码器的嵌入。随后,我们计算第一个量化器输出与变换后的WavLM嵌入之间的余弦距离,以进行知识蒸馏。

    表3显示,蒸馏损失与针对质量的重建和对抗损失存在冲突。确实,虽然蒸馏显著提高了第一个量化器的音素辨别能力(通过ABX测量),但也对音频质量产生了负面影响。我们假设这是由于将语义信息蒸馏到单个RVQ的第一层:由于高阶量化器在第一个量化器的残差上操作,后者需要在音频质量与音素辨别能力之间进行权衡。我们通过提出分离RVQ来解决此问题。我们不再使用单个具有8个层级的RVQ而是将语义信息蒸馏到一个普通的VQ中并并行应用具有7个层级的RVQ我们将它们的输出相加,使得两者均可用于重建,同时去除保持声学信息在语义量化器残差中的约束。图2展示了该架构,表3表明此解决方案在整体上提供了更好的语义与声学权衡。

    表3:关于Mimi编解码器超参数的消融研究。我们通过报告音素ABX可辨识性任务的错误率来评估语义建模。为了评估重建质量,我们计算了VisQOL和MOSNet,并通过MUSHRA协议收集人类评判。“量化率”指在训练期间仅对潜在空间应用量化50%的时间(与量化器丢弃无关)

    生成式音频建模

    我们现在描述如何扩展基础Helium模型,以支持Mimi编解码器提供的音频令牌建模。我们的目标是实现真实的对话交互,因此我们进一步展示如何同时建模两个音频流,一个代表用户,另一个代表系统。最后,我们详细介绍一种新功能——内心独白,它在系统侧对文本和音频模态进行联合建模,以提高交互质量。

    使用 RQ-Transformer 的分层自回归建模

    ps:关于RQ-Transformer https://zhuanlan.zhihu.com/p/666422373

    Autoregressive Image Generation using Residual Quantization论文截图:RQ-Transformer的流程,输入各个量化器Sstep,i的和作为S-transformer的输入,输出Vstepi,Vstepi作为D-transforemr的输入,输出下一个时间步各个量化器的离散值。
    首先对于图中的下采样得到的编码图,通过Reshape的方式,按照D方向为一个整体,使其减少一个大维度,得到了T×D的矩阵,这里的T=H×W。
    这样就得到了Transformer经典的输入序列,我们直接按照D方向为一个整体输入t-1个序列到Spatial Transformer中可以得到第t个序列ht,然后再经过一系列的操作,将我们的ht加入到vtd中去,具体而言是一个迭代填入信息的过程,具体细节可以去看论文的描述,此处就不赘述了。之后将一个序列v输入到Depth Transformer中得到具体的每个层的值。

    设 U∈{1,…,N}S 为一个离散随机序列,其基数为 N 且序列长度为 S。为方便起见,我们还将 U0​=0 作为一个确定性的初始令牌值。自回归建模的核心在于通过估计条件分布 P[Us​∣U0​,…,Us−1​] 来估计联合分布 P[U1​,…,US​],其中 1≤s≤S。文本语言模型,如GPT(Radford等人,2019)或Helium,符合这一范式。

    图3 :RQ-Transformer将长度为 KS 的扁平化序列分解为 S 个时间步长,供一个大型的时间变换器(Temporal Transformer)处理,该变换器生成一个上下文嵌入,用于条件化一个小规模的深度变换器(Depth Transformer),后者在 K 个步骤上进行操作。这种设计允许通过增加 S来扩展更长的序列,或者通过增加 K 来增加深度,而不是使用单一模型来建模整个扁平化序列。在图中,为了便于说明,我们使用了 K=4。

    在建模口语时,依赖于经过标记化的文本比音频令牌提供了更紧凑的表示:使用Mimi编解码器,假设有8个码本,帧率为12.5Hz,每秒钟的音频生成需要100step的序列长度。要建模5分钟的音频,这将需要30,000个timesteps,这代表了显著的计算成本,并且每秒生成100个令牌与流式推理不兼容。相比之下,一段英语语音的表示大约只需要每秒3到4个文本令牌。

    如何解决:使用RQ-Transformer

    我们不仅对建模单一序列(Us)感兴趣,还对建模多个子序列感兴趣,比如不同的音频码本,以及可选的文本流。我们可以将这些子序列堆叠为Vs,k,其中1 ≤ s ≤ S 且 1 ≤ k ≤ K。同样地,我们定义V0,k = 0,作为所有子序列确定性的初始标记值。对于每个1 ≤ s ≤ S 和 1 ≤ k ≤ K,Vs,k ∈ {1, …, Nk},这里Nk是第k个子序列的基数。可以将这K个序列展平为一个单一序列,从而增加K的预测数量。Lee等人提出沿着K维使用较小的(depth transformer)自回归模型,结合沿时间维度较大的(time transformer)模型,形成RQ-Transformer。之后,Yu等人建议了类似的方法用于字节级建模,而Yang等人(2023)和Zhu等人(2024)将其应用于音频标记建模

    RQ-Transformer。形式上,RQ-Transformer由两个Transformer模型组成,如图3所示。它包括一个时间Transformer(Temporal Transformer),其架构与Helium相同,以及一个较小的深度Transformer。。我们将时间Transformer所代表的功能记为TrTemp,而深度Transformer所代表的功能记为TrDepth。为了简化起见,并对于所有步骤s ≤ S,我们用Vs = (Vs,1, …, Vs,K)表示在步骤s时所有子序列的联合值。对于给定的序列步骤1 ≤ s ≤ S,时间Transformer将(V0, …, Vs−1)映射到一个时间上下文向量。

    如果我们进一步考虑子序列索引1 < k ≤ K对应声学token,用tansformer进行预测),深度Transformer将同时映射zs和(Vs,1, . . . , Vs,k−1)到logits估计。这个过程使得模型能够综合多个子序列的信息,从而生成更准确的预测。

    我们进一步定义第一层ls,1 = Lin(zs) ∈ RN1对应语义token,zs直接接一个liner的输出作为语义token),其中Lin是一个专用的线性层。我们训练TrTemp、TrDepth和Lin,以使得softmax(ls,k)能够很好地近似Vs,k的分布,该分布以前一步的所有子序列以及当前步骤的前子序列作为条件。例如,这种训练方式确保模型能够有效捕捉上下文信息,从而提升生成质量。

    重要的是,时间Transformer中的步骤数始终等于S,而不是K·S,并且深度Transformer中的步骤数最多为K。实际上,时间Transformer在每一步s接收的输入是K个学习到的嵌入表之和,这些嵌入表代表了Vs-1的最后一个值。对于1 < k ≤ K的情况,深度Transformer接收的输入是zs与一个表示Vs,k-1的学习到的嵌入之和。

    如表1所示,我们的深度Transformer有6层,维度为1024,包含16个注意力头。与Lee等人(2022)、Yang等人(2023)、Zhu等人(2024)不同,我们在深度Transformer中对线性层、投影和全连接使用了针对每个索引k的不同参数。确实,不同的子序列可能需要不同的变换。鉴于此Transformer较小的规模,这样做对训练和推理时间没有影响,而表6显示这种深度参数化是有益的。

    表1:模型的超参数。我们7B参数的Helium语言模型和Moshi语音文本对话模型的架构和训练超参数。Moshi的训练分为四个阶段:在无监督数据上进行预训练(使用从Helium初始化的时间变换器);基于分离的多流模拟进行后训练;在Fisher数据集(Cieri等,2004)上进行微调,以实现其全双工能力;在从合成交互脚本构建的自定义数据集上进行指令微调。在预训练阶段,我们一半的时间在与Helium使用的相同数据集上对完整的文本批次进行训练,使用一个独立的优化器状态。

    ps:Fisher电话对话收集协议,该协议旨在解决开发人员构建强大的自动语音识别(ASR)系统时的关键需求。特点是少数说话人拨打电话的时间相对较长,并且整个集合的词汇量很窄。CALLHOME 对话非常自然和亲密。根据费舍尔协议,允许大量参与者最多拨打 3 个 10 分钟的电话。对于每次通话,参与者将与通常不认识的另一参与者配对,以讨论指定的主题。这最大限度地提高了说话者之间的差异和词汇呼吸,同时也增加了正式感。

    音频建模

    音频编解码器Mimi,输出Q个子序列,音频每秒有12.5个步长。我们将这些序列表示为At,q​∈{1,…,NA​}(码本对应的特征向量),其中1≤tTT=12.5×音频时长,1≤qQ,且Q=8。我们将音频子序列插入由RQ-Transformer建模的多序列V中。请记住,第一个码本At,1​对应语义信息,而其他码本对应声学特征。

    声学延迟。我们首先尝试简单地将V设为A进行建模。然而,我们发现在语义和声学标记之间引入轻微延迟能够生成更稳定的结果。Copet等人(2023)表明,这样做可以减少给定时间步长下各子序列之间的依赖性(基于过去的条件),从而允许使用较弱的模型来近似联合分布 P[Vs,k​∣V0​,…,Vs−1​](在他们的情况下,作为条件边缘分布的乘积)。Lemercier等人(2024)进一步展示了在给定步骤中子序列之间的互信息与生成质量之间的联系:自然地,相互依赖关系越复杂,估计这些关系所需的模型就越强大【ps:这里目的就是解构声学和语义之间的强相互依赖关系,作者放弃使用sppechtokenizer 中的多层RVQ,而是分别对声学和语义token并行建模,也会降低相互依赖的关系】

    如第5.3节所示,在语义特征和声学特征之间引入1到 2步的延迟可以极大地提高生成的质量。这使得更大的时间Transformer能够对语义和声学特征之间的相互依赖性进行建模。形式上,给定一个延迟τ∈N,对于所有步骤s,我们有:

    需要注意的是,使用RQ-Transformer来建模音频的方法已被Yang等人(2023)Zhu等人(2024)成功应用。在这里,我们引入了在Depth Transformer中使用每个码本参数的方法,以及声学延迟的使用。与Zhu等人(2024)首先生成所有语义标记的方法相比,我们同时生成语义标记和声学标记,这首次实现了语义标记和声学标记的流式联合建模。

    ps:关于RQ-Transformer建模音频的方法

    Yang等人(2023) UniAudio: An Audio Foundation Model Toward Universal Audio Generation
    Zhu等人(2024) Generative Pre-trained Speech Language Model with Efficient Hierarchical Transformer,先生成语义s token,然后是声学a token

    多流建模

    仅对单一音频流进行建模不足以完全模拟对话。我们的框架可以扩展到双人对话的建模:给定两个音频流(At,q​)和(A′​t,q),我们只需对两者都应用声学延迟,然后将它们 concatenate 成V,从而扩展了公式4。实际上,A将对应于Moshi,而A′则用于建模用户。

    内心独白

    尽管仅在音频领域操作已经能够产生令人信服的结果(见表7),我们观察到让Moshi也对其自身语音的文本表示进行建模,可以提供一个框架,从而提高其生成内容的语言质量。形式上,我们定义了一个文本流W∈{1,…,NW​}T,该文本流是从通过将SentencePiece分词器(Kudo和Richardson,2018)应用于由Whisper(Radford等人,2023)转录的对应于Moshi的音频所获得的文本token序列中导出的我们将W作为V中的第一个子序列插入,使其作为语义标记生成的前缀。这可以看作是Borsos等人(2022)引入的层次化从语义到声学生成方法的一种扩展。需要注意的是,我们不使用与用户音频流相对应的文本表示,因为实时转录这个流会非常具有挑战性,并且依赖外部自动语音识别系统与我们的端到端语音到语音方法相矛盾。第5.3节中的消融研究表明,在为Moshi所做的设计选择中,内心独白对生成语音的质量有着至关重要的影响。

    ps:注意基于whisper的文本流是为了用于训练,以及制作文本和时间戳的label,在推理的时候,moshi输出的V序列中第一个子序列就是对应于文本的token预测结果(用whisper做gt训练),并将其作为第一个输入流进行建模。

    对齐文本和音频token。为了将文本 token 与以恒定帧率12.5Hz运行的音频 token 结合起来,我们需要将它们对齐到这个帧率。为此,我们利用了Whisper提供的word级时间戳。转录中的第 i 个单词word被映射到第 ni​∈N∗个文本toekn :wi,j​ ,其中jni​,以及一个起始索引ti​∈{1,…,T},简单地定义为其起始时间戳除以12.5 Hz的帧率。我们定义了两个特殊的标记:PAD和EPAD,这些标记永远不会出现在任何单词标记中。我们构建W,使得当一个单词开始时,(Wt​)包含它的文本token,之后跟随PAD直到下一个单词。在下一个单词对应的索引之前插入EPAD以指示填充结束。虽然这不是严格必要的,但我们观察到这样做通过将决定一个单词何时结束以及接下来应该跟随哪个单词的过程分为两步,为模型提供了有用的指导。

    首先,序列(Wt​)用PAD标记初始化,例如∀t,Wt​←PAD。然后,我们按照以下方式迭代地修改它。对于每个单词i及其起始索引ti​,我们更新WW如下:

    需要注意的是,如果ti​=1,我们则在索引1处插入EPAD,并将文本标记向后移位如果插入EPAD标记会覆盖前一个单词的文本标记,我们则不插入EPAD标记。由于文本标记比相应的音频标记更紧凑,在Wt​中单词之间通常不会重叠。在英语对话中,我们观察到填充标记大约占总标记的65%。

    推导流式ASR和TTS。可以进一步在文本序列 (Wt​) 和音频token (At,q​) 之间引入一些延迟。这控制了语言模型在生成音频内容时所依据的模态通过将音频提前于文本,文本的内容将由之前步骤中采样的音频决定。具体来说,通过仅采样文本token,同时使用真实的音频token并丢弃模型的预测,可以获得一个流式自动语音识别(ASR)模型并提供精确的单词级对齐。另一方面,通过调整文本延迟,使文本位于音频token之前,音频的内容将由文本内容决定。再次给定一个适当填充的文本token序列,可以获得一个流式文本到语音(TTS)模型。我们在附录C中进一步描述了如何适应带有延迟文本的语言模型推理,以获得zero-shot的适当填充文本token序列。第5.7节展示了如何通过单一的延迟超参数在ASR和TTS模型之间切换,而无需更改损失函数、架构或训练数据。

    Moshi的联合序列建模。将多流和内心独白结合在一起,我们得到用于建模的最终序列集合 V 定义为:

    总共有 K=2Q+1 条流,其中实验中 Q=8。总结见图4

    图4:Moshi建模的联合序列表示。每一列代表联合序列(Vs,k​)在给定步骤中的标记,如公式6中所述,声学延迟τ=1,例如该步骤Temporal Transformer的输入。标记在Depth Transformer中从下到上进行预测。在推理时,虚线以下的标记(对应于Moshi)被采样,而虚线以上的标记则由用户提供。这种设计使得我们的模型能够处理重叠的说话轮次。

    Moshi的推理。由公式6给出的联合序列是我们模型在训练时的目标:在任何时间步s,模型输入为0,V1​,…,Vs−1​,并输出一个估计的概率分布V^s​(0,V1​,…,Vs−1​)。在推理时,我们从V^s,k​中采样所有对应于Moshi输出的子序列索引即对于k=1(对应于Moshi语音的文本标记),以及对于k∈{2,…,2+Q}(对应于Moshi的音频标记)在实际应用中,用户音频(k>2+Q)的预测输出结果实际上被忽略,因为使用的是真实的用户音频,而非模型预测的。然而,将用户流作为输出进行建模可以生成模拟对话,这对于如第5.6节中的离线评估是必要的。

    有趣的是,用户和Moshi之间的轮流发言没有明确的界限:Moshi可以在任何时候说话和倾听,并且在需要时同时进行这两项操作。特别是,当用户说话而Moshi保持沉默时,Moshi流对应的音频标记会解码成“自然静音”,这是一种接近静音的波形,而不是具有固定、明确定义的值;同时,Moshi的文本流将填充PAD标记。因此,文本流可以提供有趣的控制Moshi的方式,例如,强制采样EPAD标记将使Moshi立即开始说话。

    Datasets and Training

    文本数据

    我们的训练数据集由高质量数据源和来自CommonCrawl的过滤网络数据混合而成。更具体地说,我们的数据集中有12.5%来自以下经过整理的来源:维基百科、维基教科书、维基文库、维基新闻、StackExchange以及科学文章集合pes2o。我们使用了2017、2018、2019、2021和2022年的五个不同的维基百科数据转储,而不是对维基百科进行多次访问。其余的87.5%数据来自CommonCrawl,并按照第3.2.2节中描述的管道进行过滤。我们使用了以下十个抓取:2018-30、2019-04、2019-30、2020-05、2020-34、2021-04、2021-31、2022-05、2022-33、2023-40。

    9. https://dumps.wikimedia.org/
    10. https://archive.org/details/stackexchange
    11. https://github.com/allenai/peS2o

    Audio Data

    我们使用一个包含700万小时音频的音频集合,称之为无监督音频数据集这些音频内容大多数为英语语音。我们使用Whisper(Radford et al., 2023)对该数据集进行转录,使用的是large-v3模型。我们在音频预训练阶段使用这些数据,此时不使用第3.4.3节中描述的多流方法,而是使用一个单一的音频流来代表所有说话者。同样,第3.4.4节中描述的文本流代表了来自所有说话者的单词。所有音频都重新采样到24kHz并降混为单声道。

    为了实现多流,我们需要模型具备同时倾听和说话的能力。为此,我们进一步利用Fisher数据集(Cieri et al., 2004)。该数据集由随机配对参与者之间的2000小时电话对话组成,讨论特定主题。Fisher的一个特点是每个对话的一方在不同的通道上录制,这使得可以为Moshi提供真实的分离流。原始音频的采样率为8kHz,我们使用AudioSR(Liu et al., 2023a)将其上采样到24kHz。

    最后,我们收集了170小时的自然对话和脚本对话,这些对话由多个参与者之间的配对录制,且每个说话者使用单独的通道,以提供一个小型数据集,用于微调模型,以超过仅使用 Fisher 时获得的质量。我们称这个数据集为监督多流数据集。我们并不直接在该数据集上训练Moshi,而是利用它训练一个真实的多流TTS模型,并按照第4.3节【 语音-文本指令数据 】和第4.4节【training Stages and Hyper-parameters】中的说明,使用真实对话的转录微调Helium。

    对于Fisher和这个最后的数据集,我们随机选择一个说话者作为主说话者(即Moshi发言),并将另一个说话者放在第二个音频流上。对于Fisher,文本流仅包含主说话者的转录。为了在每个流中尽管存在长时间的沉默仍能获得可靠的时间戳,我们使用 whisper-timestamped 包 (Louradour,2023) 以及中等 Whisper 模型获得的转录。

    语音-文本指令数据

    早期使用基于文本的指令数据集(如Open Hermes,Teknium,2023)进行的实验证明不适合用于口语对话系统的指令微调。特别是,数据格式往往无法通过TTS正确渲染(例如URL无法使用TTS合成正确的语音),并且问题和回答的格式不符合自然的口语流程(例如项目符号、长列举)。相反,我们利用在Open Hermes【主要包含生成的指令和聊天样本】和真实对话转录上微调过的Helium来生成基于语音的AI模型与用户之间的现实交互。然后,我们使用附录C中描述的多流流式TTS合成这些交互,从而生成超过20,000小时的合成语音数据。

    为了给Moshi一个一致的声音,我们还让TTS引擎基于单一演员的声音进行条件化处理,该演员录制了涵盖70多种说话风格的独白,详见表19。第6.3节中报告的关于声音一致性的实验表明,仅在指令微调期间为Moshi使用一致的声音就足以几乎确保它不会使用其他声音,而无需在推理过程中进一步控制相比之下,第二个音频流(用户)的声音在每个示例中随机采样,以增强对不同说话条件和口音的鲁棒性。

    为了从 微调后的Helium 中生成转录,我们使用不同的提示,旨在捕捉用户和 Moshi 之间不同类型的交互。 首先,我们通过从一些维基百科段落或 StackExchange 帖子(我们称之为上下文context)开始,生成关于一般知识的对话。 这确保了 Moshi 的对话涵盖了广泛的主题,例如历史、烹饪建议或流行文化。更具体地说,使用给定的上下文,我们通过以下提示获得潜在讨论的摘要:

    其中{{context}}指的是来自维基百科或StackExchange的段落,而{{title}}是相应的标题。然后,我们使用以下提示生成完整的对话转录:

    同样,为了向 Moshi 提供有关自身及 Kyutai 实验室的信息,我们生成了描述两者的段落,并将其用作额外的上下文。

    其次,我们生成包含关于 Moshi 声音的指令的交互内容,例如另一个说话者要求 Moshi 用愤怒的声音或像海盗一样说话。我们的第一种策略是生成单轮交互,在这种情况下,模型被指示用特定的声音讲述关于某个实体的句子、独白或诗歌,这些实体属于“体育”或“动物”等高级类别。另一位说话者要求的声音和实体是随机采样的,因此它们完全不相关。我们的第二种策略是生成角色扮演情境,涉及不同的情绪或说话风格,使用以下提示:

    编写一个关于{{voice}} {{character}}的10个情境列表。每个情境必须以“一个{{voice}}的{{character}},他/她……”开头,且长度不得超过8个单词。

    声音形容词的示例包括“开心”或“惊讶”,角色的示例则包括“侦探”或“超级英雄”。然后,我们使用以下提示生成交互内容:

    写一段Blake和Moshi之间的对话,{{情景}}。使用大量的回应。

    为了增强 Moshi 对错误发音词汇的鲁棒性,我们还生成包含拼写错误的用户问题指令,接着 Moshi 会要求用户重复问题或澄清问题。我们还生成包含错误或误导性事实的问题(例如“埃菲尔铁塔在北京吗?”),以训练模型回答“否”并纠正用户。除此之外,大多数生成的对话仅包含用户的问题,Moshi 应给出肯定回答。我们生成了基础的数学、语法或小知识的单轮问答,因为我们注意到 Moshi 起初在处理简单的事实任务(如数字相加)时表现不佳。最后,我们生成了安全对话,在这些对话中,用户会提出不道德或不适合公开讨论的问题,而 Moshi 会拒绝回答这些请求。

    训练阶段和超参数

    Helium预训练:表1提供了训练阶段和超参数的概述。对于每个阶段,我们使用AdamW(Loshchilov和Hutter,2019),权重衰减为0.1,动量衰减为0.9,平方梯度平均值的衰减为0.95。所有模型都在H100 GPU上进行训练,并使用FSDP和激活检查点。仅文本的语言模型Helium训练了500,000步,批量大小为420万个标记,采用从3·10^(-4)开始的余弦学习率调度,并带有线性预热。

    Moshi 预训练:我们首先使用 Helium 初始化 Moshi 的时间 Transformer,而 3.4.1 节描述的深度 Transformer 则随机初始化。我们首先在 4.2 节中介绍的700wh无监督音频数据集上进行训练,使用单一音频流,批次大小覆盖 16 小时的音频,每个批次项为 5 分钟序列。我们以 30% 的概率mask相应的文本 tokens,并将文本和音频 tokens 之间的延迟随机化,范围为 -0.6 至 +0.6 秒。为了防止灾难性遗忘,我们还使用与 Helium 相同数据集中的文本数据,进行一半的文本批次训练。总共进行 100 万步训练,时间 Transformer 的学习率为 3·10⁻⁵,深度 Transformer 为 2·10⁻⁴,且有线性预热。为了确保纯文本批次的更新与音频数据集的更新平衡,我们使用两个独立的优化器状态。此外,当在音频批次的文本流上操作时,我们将文本嵌入和文本线性层的学习率乘以 0.75。最后,由于音频批次中的填充 tokens 占主导地位,我们将它们在交叉熵损失中的权重降低 50%。

    Moshi 后训练:在前一阶段模型的基础上,我们训练它的多流能力。首先,我们使用 PyAnnote (Bredin, 2023) 对无监督音频数据集的音频进行分离,随机采样一个说话者作为主要说话者,并在波形上生成二元掩码,当该说话者根据分离结果活跃时,值为 1,其他时候为 0。这个掩码为我们提供了两个波形:一个是主要说话者的,另一个是残留波形(可能有多个说话者),它们分别编码,然后作为 3.4.3 节中描述的两个输入音频流使用。文本流仅包含选定主要说话者的文本 tokens,并且文本和音频 tokens 之间的延迟固定为 0。我们训练了 10 万步,批次大小为 8 小时的音频,时间 Transformer 的固定学习率为 3·10⁻⁶,深度 Transformer 为 5·10⁻⁵。与预训练阶段类似,我们有 10% 的时间采样全文本批次。

    Moshi 微调:前面描述的模拟多流提供了一个良好的预训练任务,但远远不足以捕捉自然对话的复杂性。例如,它不包含不同说话人的重叠部分,并且不活跃说话者的音频流是完全静音的。因此,我们使用 Fisher 数据集 (Cieri et al., 2004) 来训练模型学习真实的多流交互。我们从两个说话者中随机选择一位作为主要说话者,训练 10k 批次,批次大小为 40 分钟的音频,主要和深度 Transformer 的学习率分别为 2 · 10⁻⁶/4 · 10⁻⁶。我们不再采样完整的文本批次。

    指令微调 :最后,我们为第一个说话者流设置了 Moshi 的身份,使其成为一个有用的对话助手,并进行最后阶段的指令微调。我们使用 4.3 节中描述的合成指令数据集,批次大小为 2.7 小时的音频,训练 30k 步,两个 Transformer 的学习率均为 2 · 10⁻⁶。

    在此阶段,我们对用户的音频流进行数据增强,使 Moshi 能够应对各种情况。具体而言,我们在 50% 的时间内对用户音频流应用随机增益,范围为 -24 dB 至 +15 dB。30% 的时间,我们进一步添加来自 Deep Noise Suppression 挑战 (Dubey et al., 2023) 的噪声片段,并将其拼接以覆盖每个示例的整个持续时间。噪声被放大到相对于原始音源的目标音量,范围在 -30 dB 至 +6 dB 之间。每次需要采样新噪声时,我们会以 50% 的概率使用最长 30 秒的随机静音片段,从而使模型能够处理从嘈杂到安静或反之亦然的音频条件。

    我们通过将Moshi的音频流的一个缩小副本[scaled down copy]添加到用户流中来模拟Moshi到用户麦克风的回声,缩放因子在[0, 0.2]之间均匀采样,延迟在[100ms, 500ms]之间均匀采样。最后,我们对用户的音频流(可能已经增加了回声)应用类似于Defossez等人(2020)引入的混响增强。回声和混响一起应用的概率为30%。

    TTS 训练:我们还训练了一个流式的多流文本到语音(TTS)模型,使用 3.4.4 节中描述的方法。音频预训练阶段与 Moshi 共享,而后训练阶段在音频流相对于文本有 2 秒延迟的情况下完成。该模型在包含两个说话者高质量互动录音的监督多流数据集上进行微调,并用于生成 4.3 节中描述的合成微调指令数据集。需要注意的是,Moshi 本身并未在该监督多流数据集上训练。更多详细信息见附录 C。

    训练损失:Moshi 被训练为建模联合序列,如公式 6 所示。给定真实的离散 token (Vs,k​)s≤S,k≤K和来自公式 2 的估计 logits(ls,k​)s≤S,k≤K​,我们使用以下损失,其中 CE 代表交叉熵:

    因此,我们对文本 token (k=1) 和组合音频 tokens 赋予相同的重要性。对于语义 tokens,αk 设置为 100,而对于声学 tokens,αk 设置为 1。

    表 2:文本语言模型评估. 在标准基准上的性能,用于评估大型语言模型,包括闭卷问答,推理和多项选择问答考试。 我们以粗体显示在少于 2.5T 个token上训练的最佳模型。

    Evaluation

    文本语言建模

    评估指标:我们在以下标准基准上评估 Helium(仅使用文本数据训练):AI2 推理挑战(Clark et al., 2018, ARC)、开放书籍问答(Mihaylov et al., 2018, OBQA)、HellaSwag(Zellers et al., 2019, HS)、WinoGrande(Sakaguchi et al., 2021, WG)、物理交互问答(Bisk et al., 2020, PIQA)、社会交互问答(Sap et al., 2019)、TriviaQA(Joshi et al., 2017, TQA)、自然问题(Kwiatkowski et al., 2019, NQ)和大规模多任务语言理解基准(Hendrycks et al., 2020, MMLU)。这些基准涵盖了广泛的任务,包括常识推理、封闭书籍问答或高中和大学科目的多项选择问答。我们遵循 GPT-3 和 Llama 等前期工作的评估协议:在 TriviaQA、NQ 和 MMLU 上进行 5-shot 评估,在其他数据集上进行 0-shot 评估。在 TriviaQA 上,我们报告未过滤和维基百科拆分的性能。

    基准模型:作为基准,我们考虑现有的参数量约为 7B 的大型语言模型,这些模型的训练计算量与 Helium 大致相当。更具体地说,我们包括在少于 2.5T tokens(相比于用于训练 Helium 的 2.1T tokens)上训练的模型,即 MPT(Team, 2023)、Falcon(Almazrouei et al., 2023)、Llama 2(Touvron et al., 2023b)和 OLMo(Groeneveld et al., 2024)。我们还包括 Mistral 和 Gemma,这两个流行的开放权重模型,其训练计算量显著高于 Helium。

    结果:我们在表 2 中报告结果,观察到在大多数基准上,Helium 的表现与使用相似训练计算量的模型相当或更好。即使与使用多达 3 倍计算进行训练的 Mistral 和 Gemma 相比,Helium 在某些基准(如 ARC、开放书籍问答或自然问题)上也获得了具有竞争力的结果。这验证了我们预训练文本数据的质量。

    Audio Tokenization

    指标:接下来,我们评估我们的神经编解码器 Mimi 的语义和声学性能。首先,我们评估其产生的语义 token 是否提供适合语言建模的目标。为此,我们计算基于三音素的 ABX(Schatz et al., 2013)错误率,该指标通过比较同一三音素(如“beg”)的两个实例和一个最小差异的负三音素(如“bag”)之间的距离来表征表示空间的语音可区分性。更精确地说,我们计算“同一说话者”的 ABX,三实例由同一说话者发音,并在 Librispeech(Panayotov et al., 2015)dev-clean 上报告错误率,使用 Librilight(Kahn et al., 2020)库的默认参数。结果显示,该得分是下游音频语言模型产生连贯语音能力的强预测指标(Lakhotia et al., 2021)。由于我们只关心语义 token,因此我们计算量化后仅使用语义 VQ 生成的潜在空间中的距离(即在与声学 tokens 相加之前)。其次,我们评估重建音频的声学质量。作为目标的自动指标,我们依赖于 VisQOL(Hines et al., 2015)——一个完整参考模型的声学相似性——和 MOSNet(Lo et al., 2019)——一个无参考音频质量模型。考虑到自动评估音频质量的局限性,我们还使用 MUSHRA 协议进行人类评估。我们依赖 20 名听众的判断,每位听众对 30 个 10 秒的样本进行评分。表 3 报告了使用客观指标的消融研究,表 4 则提供了与以往工作的比较,包括客观和主观评估。

    表 3:Mimi 编解码器超参数的消融研究。我们通过报告在语音 ABX 可区分性任务上的错误率来评估语义建模。为了评估重建质量,我们计算 VisQOL 和 MOSNet,并使用 MUSHRA 协议收集人类评估。“量化率”指的是在训练过程中仅对潜在空间应用量化 50% 的时间(与量化器 dropout 独立),如 3.3 节所述。
    表 4:音频质量评估。基准神经音频编解码器的客观和主观(MUSHRA)音频质量评估——RVQGAN(Kumar et al., 2024)、SemantiCodec(Liu et al., 2024)和 SpeechTokenizer(Zhang et al., 2024b)——以及 Mimi 的最重要变体。为了与 SemantiCodec 和 SpeechTokenizer 进行公平比较,我们还在 MUSHRA 研究中包含了我们编解码器的下采样版本。fs 是音频采样率,fr 是编解码器帧率。两个 Mimi 编解码器都经过蒸馏训练,并使用与 Encodec 相同的重建和对抗损失组合(见 3.3 节)或仅使用对抗损失。

    基准模型:我们与 RVQGAN(Kumar et al., 2024)、SemantiCodec(Liu et al., 2024)和 SpeechTokenizer(Zhang et al., 2024b)进行比较。RVQGAN 是一个纯声学分词器,因为它不编码语义信息。因此,我们仅在音频质量方面进行评估。RVQGAN 以 75Hz 的速率生成 token,因此我们只保留前两个 RVQ 级别,以获得 1.5kbps 的比特率,更接近于 Mimi 的比特率。另一方面,SpeechTokenizer 依赖蒸馏将语义信息编码到其第一个 token 中,因此我们可以评估其语义和声学属性。我们保留其前三个 RVQ 级别以获得 1.5kbps 的比特率。类似地,SemantiCodec 也编码语义和声学信息,因此可以沿两个轴进行评估。

    结果 – 语义 token:表 3 显示,在没有蒸馏的情况下,Mimi 的语义 token 的语音可区分性较差,与以往工作的声学 token 相当(Borsos et al., 2022):这意味着这些语义 token 不适合捕捉语音中的语言内容。相反,将 WavLM 蒸馏到语义 token 中显著提高了它们的语音可区分性,尤其是在 Mimi 的编码器中使用 Transformer 时。这可以解释为,将大型基于 Transformer 的编码器蒸馏到纯卷积编码器中具有挑战性,而提高编码器的容量和感受野有助于改善。然而,我们观察到声学损失与语义蒸馏之间的冲突,因为改善 ABX 意味着降低重建质量(如 MUSHRA 所测量)。使用 3.3.2 节中描述的分割 RVQ 改善了语义属性与音频质量之间的权衡,使 MUSHRA 从 57.8 提高到 64.0,同时将 ABX 从 6.5% 中等降至 8.1%。

    结果 – 声音token。表 3 还显示,当在解码器中添加 Transformer 时,MUSHRA 评分显著提高。同样,使用 50% 的量化率显著改善了 VisQOL[声学指标]。然而,量化率并未改善主观感知质量。更一般地说,我们观察到 VisQOL 和 MOSNet 之间的相关性较差。特别是,表 4 显示,仅使用对抗损失训练 Mimi 导致非常低的 VisQOL(1.84),这与实际较高的感知音频质量结果相反。因此,我们依赖 MUSHRA,人类评估者被要求判断重建音频与其真实锚点的相似性,得分范围在 0 到 100 之间。该人类评估显示,使用仅对抗损失的 MUSHRA 评分为 81.0,相较于使用 Encodec 的混合损失函数的 58.8,显著提高。此外,尽管以更低的比特率和建模语义信息,Mimi 仍显著优于 RVQGAN(Kumar et al., 2023)。Mimi 的重建质量也高于 SemantiCodec(Liu et al., 2024),同时以 4 倍更低的帧率运行。这一特性对于实现 Moshi 的低延迟至关重要,因为生成一个音频令牌的时间帧需要通过 Temporal Transformer 完成完整的前向传播。最后,RVQGAN 和 SemantiCodec 是非因果的,而 Mimi 是完全因果的,因此兼容流式推理和实时对话建模

    讨论。Mimi 在编码语义信息的同时,整体提供高重建质量,完全因果,且在低帧率和比特率下运行。因此,Mimi 证明是一个适合训练实时音频语言模型的音频标记器。我们研究的一个附带发现是,客观音频质量指标与主观音频质量之间缺乏相关性的令人担忧的现象。特别是,我们发现VisQOL(声学指标)在修改生成器架构时提供了可靠的感知质量代理指标。然而,当改变训练目标(例如移除重建损失)时,VisQOL的评分变化方向与人类感知完全不相关。这一观察强调了设计可靠客观代理指标以反映感知质量的开放挑战。

    生成建模的消融研究

    指标。我们进行了消融研究,以评估使用RQ-Transformer的影响,以及比较不同的延迟模式和各种标记级别的权重。所有模型的时间Transformer都用Helium初始化,并在音频数据上预训练。当比较具有相同延迟模式且没有内部独白(Inner Monologue)的模型时,我们依赖于困惑度(perplexity),并将其在语义和声学标记上取平均。然而,不同延迟的模型之间的困惑度是不可比的,因为它们建模的是不同的条件分布。为了比较不同的延迟模式,我们通过Whisper(Radford等人,2023)转录生成的语音(基于3秒的提示)并用外部文本语言模型对结果进行评分来衡量Moshi生成可理解、一致语音的能力。我们依赖一个轻量级的文本模型——LiteLlama-460M-1T14——因为它更适合于训练过程中的连续评估。我们还报告了转录本的长度(以字符为单位),因为我们发现它是一个强的模型质量预测因子(弱模型通常会崩溃为静音)。

    ps:困惑度(Perplexity)是自然语言处理(NLP)中常用的一种评估语言模型的指标。它衡量的是模型对测试数据的预测能力,即模型对测试集中单词序列出现概率的预测准确度。困惑度越低,表示模型对数据的预测越准确。

    结果 – RQ-Transformer 表5报告了使用RQ-Transformer的消融研究结果。我们首先复制了Copet等人(2023)的设置,使用[0, 1, 2, 3, 4, 5, 6, 7]的延迟模式,这意味着每个RVQ标记级别在前一个级别之后的一个时间步生成。在这种情况下,我们发现使用RQ-Transformer并不是必需的,因为它仅在困惑度上有微小的改进。然而,这种延迟模式导致了8个时间步的理论延迟,即640毫秒,这对于实时对话模型来说是不兼容的。因此,我们将延迟减少到240毫秒,使用模式[0, 2, 2, 2, 2, 2, 2, 2]。在这种情况下,使用RQ-Transformer对RVQ标记进行建模显著提高了困惑度,超过了使用单独分类头的方法。因此,在严格的延迟约束下,RQ-Transformer成为RVQ标记生成模型的关键组件。

    表 5:RQ-Transformer 使用的消融研究。所有模型均以 Helium 初始化,并在音频上预训练。当不使用 RQ-Transformer 时,我们使用独立的分类头预测 8 个级别的令牌,遵循 Copet 等人(2023)的做法。请注意,困惑度仅在具有给定延迟的模型之间可比较,因为对于较高的令牌,分类任务在延迟更多时会更容易。

    额外的消融研究表6报告了额外的消融研究,包括额外的延迟模式、语义标记损失的权重以及我们提出的内部独白程序,所有这些都使用了RQ-Transformer。首先,我们比较了三种与实时对话兼容的延迟配置。[0, 0, 0, 0, 0, 0, 0, 0]模式代表了在12.5Hz Mimi标记下可以获得的最小延迟80毫秒。允许额外80毫秒的延迟(一个时间步的延迟)显著提高了生成语音的质量,而240毫秒【3个step延迟】的延迟则带来了进一步的适度改进。在早期实验中,我们还观察到每个RVQ级别的个别损失之间存在冲突,尽管每个级别在最终的可理解性和音频质量上比下一个级别更重要。因此,我们对架构和训练过程进行了两个更改。首先,我们将预测语义标记的损失权重增加到100,而其他所有音频标记级别的损失权重保持为1。这进一步提高了语音的可理解性。此外,我们通过使用深度参数化(如第3.4.1节所述)减少了RVQ级别之间的竞争,使得每个RVQ级别由Depth Transformer中的自己的一组权重预测,而不是在各级别之间共享权重。最后,启用内部独白对生成语音的质量和长度带来了最显著的改进。

    表 6:延迟模式、语义令牌权重和内心独白的消融研究。所有模型均以 Helium 初始化,在音频上预训练,并使用 RQ-Transformer。我们调整语义令牌的权重,同时将其他令牌(包括使用内心独白时的文本令牌)的权重保持为 1。由于不同的延迟模式无法通过困惑度进行比较,我们从有效集中的 3 秒提示生成续写,用 Whisper(Radford 等人,2023)转换为转录,并报告其与 LiteLlama-460M-1T13 的负对数似然及其长度(以字符为单位),作为语言质量的代理。

    讨论:除了架构和延迟模式的选择,这些消融研究表明,在音频到音频的设置中,将文本令牌建模为音频令牌的前缀(使用 Inner Monologue)是非常有帮助的。鉴于深度参数化和对语义令牌权重设定为100的积极影响,这两者在我们后续的所有实验中均被使用,同时也纳入了最终的训练程序。此外,如表1所述,我们通过以2的声学延迟预训练 Moshi,并以1的声学延迟进行微调,确定了160毫秒【(1+1)*80】的理论延迟。

    Audio Language Modeling

    指标。我们首先测量Moshi在大规模音频数据上进行下一个标记预测训练时,对语音序列建模的能力。为此,我们依赖于“无文本NLP”(Lakhotia等人,2021)指标,这些指标通过比较表示为音频标记的正例和负例语音示例的似然性来评估音频语言模型的语言知识。

    具体指标:

    • sWUGGY: 评估模型从语音中学习词汇表的能力,通过比较一个现有单词和一个无效变体(例如,“oxidation”和“accidation”)的似然性。
    • sBLIMP: 评估语法对比。
    • Spoken StoryCloze (Hassid等人,2023): 通过比较常识性的五句故事,最后一句要么与上下文连贯,要么不连贯,从而评估语义对比。
    • Spoken Topic-StoryCloze (Hassid等人,2023): 这是一个变体,其中负例延续是从不相关的句子中随机采样(而不是微妙地不连贯),从而得到更高的分数。

    对于所有这些指标,我们使用按序列长度归一化的负对数似然来评分。由于我们的模型每个时间步生成多个标记,我们将每个时间步的所有标记用训练时使用的权重相加,即语义标记权重为100,声学标记权重为1。我们不在这些评分中包括内部独白的文本标记,因为这些指标旨在比较未经转录的音频序列,应仅在音频标记上计算。同样,在指令调优后评估多流模型时,我们只对用户流对应的标记进行评分,因为它不包含文本标记。最后,我们还报告了Spirit-LM和Moshi在MMLU(Hendrycks等人,2020)上的文本理解评估(不包括音频标记),以此衡量音频训练如何影响原始检查点的文本知识。

    基准。我们对比了来自音频语言建模文献中的基线模型,在三种设置下进行比较。我们在三个设置中与音频语言建模文献中的基准进行比较。第一类包括从随机初始化开始的仅音频模型,包括GSLM(Lakhotia等,2021)、AudioLM(Borsos等,2022)和TWIST-1.3B(Hassid等,2023)。在这种情况下,我们报告仅在音频数据上随机初始化的单流Moshi的指标,并且没有Inner Monologue。第二类包括从预训练文本语言模型开始,然后仅在音频上训练的模型。这包括TWIST-13B,以及VoxtLM的仅音频版本(Maiti等,2023年,表3的第一行)和Spirit-LM的仅音频版本(在(Nguyen等,2024,表5)中报告为“Speech Only”)。相应的Moshi模型类似于上述提到的模型(仅音频数据,无Inner Monologue),但从预训练的Helium检查点开始。最后一类由实际的多模态模型组成,这些模型在语音和文本数据上联合训练。在这种背景下,我们报告Moshi的三种配置的结果。单流数据预训练:报告Moshi在单流数据上的预训练结果。多流后训练和微调:报告最终模型的结果,该模型经过多流后训练和微调,使用真实录音来调节合成数据的生成。合成声音的Moshi:最后一个模型与前一个相同,只是它使用合成声音。

    请注意,即使这些模型是用内部独白训练的,它们在评估时也不使用内部独白,以提供与基线的公平比较。

    结果。表7报告了音频语言建模的结果。在“仅音频 – 冷启动”设置中,Moshi已经提供了强大的基准,特别是在sTopic-StoryCloze上大幅提高了先前工作的表现。当使用Helium检查点初始化并仅在音频数据上训练时,Moshi在这一类别的大多数指标上超越了以前的工作。最后,尽管多模态训练改善了语音中的常识推理(如sStoryCloze性能所示),但与仅在音频数据上训练的模型相比,我们观察到在词汇和句法判断(sWUGGY和sBLIMP)上的混合效果。特别是,单流预训练在一定程度上降低了sWUGGY和sBLIMP的表现,而指令微调严重影响了sWUGGY,这意味着受指令影响的模型在解决词汇判断时更困难。我们假设这与对不同质量数据的微调有关,并且对用户流(用于为表7中所有音频指标评分的口语对)模拟嘈杂和混响条件,这使得细致的词汇判断更难解决。最后,Moshi在MMLU上的得分比Spirit-LM高出12分,从而展示了更高的常识和文本理解能力。我们还强调,Moshi是表7中唯一将语义和声学令牌集成到单一生成模型中的模型,而AudioLM使用三个独立阶段,VoxTLM、TWIST和Spirit-LM仅建模语义令牌并依赖外部声码器。因此,Moshi是此比较中唯一能够在语音和文本中展示强大语言建模能力的模型,同时能够以任意声音和条件建模语音。

    表7:音频和文本语言建模的性能。我们报告基于负对数似然的准确率,并按序列长度进行标准化。MMLU在5-shot设置下进行评估。沿用Nguyen等(2024)的术语,∅表示不支持的模态,而-表示未报告的数字。

    讨论。尽管“无文本NLP”基准帮助开发了首个音频语言模型,但我们观察到它们在开发像Moshi这样的对话模型时并未始终提供良好的指导。特别是,我们发现常识指标 Spoken StoryCloze 与词汇sWUGGY /句法判断之间缺乏相关性是频繁且易于解释的,原因在于我们在训练中使用的声学条件的多样性。此外,我们没有观察到模型的词汇多样性或可懂性在微调模型时下降,这与sWUGGY的下降相矛盾。这就是为什么我们在下一部分中也评估口语问答,以探测模型的常识、知识和词汇能力。

    口语问答

    指标。我们评估最终多流Moshi模型的口语问答能力。我们依赖于Nachmani等人(2024)提出的口语网页问题和Llama问题。同时,我们合成TriviaQA的音频版本作为另一个基准。在评估Moshi时,我们将问题的音频标记插入用户流中,以模拟用户交互。

    基准。我们与Spectron以及Nachmani等人(2024)使用的基准进行比较,除了SpeechGPT(Zhang等,2024a)外,所有基准已经在第5.4节中介绍。为了衡量内心独白对口语流利度的影响,我们比较了使用和不使用内心独白训练的Moshi与这些基准。由于GSLM、AudioLM和TWIST仅为音频模型,因此不使用内心独白的Moshi提供了公平的比较。另一方面,Spectron和SpeechGPT依赖于链式模式(Chain-of-Modality)——它们首先生成文本答案,然后生成语音——因此我们将其与使用内心独白的Moshi进行比较。此外,为了量化由于在音频数据上训练可能导致的知识下降,我们还将Moshi与Helium进行了比较,后者在评估每个口语数据集的文本对应物时被使用。

    表8:口语问答评估。在Web Questions(Berant等,2013)、LlaMA-Questions(Nachmani等,2024)和Trivia QA(Joshi等,2017)基准上进行口语问答(0-shot),使用TTS引擎合成。对于前两个基准,我们使用Nachmani等(2024)报告的数字。对于LlaMA-Questions,我们使用Nachmani等(2024)提供的音频。对于Web Questions和Trivia QA,我们合成了自己的音频,保留了所有问题。对于Moshi,我们仅在指令微调期间预先添加了一个随机引言。我们还提供了Helium文本模型的性能作为对照。

    结果。表8报告了在三个基准上的准确率。尽管仅使用音频的Moshi在其类别中显著优于基准,但最引人注目的结果是内心独白对Moshi性能的影响,使其在所有基准上的准确率几乎增加了三倍。这一点尤其显著,因为内心独白仅略微增加了推理成本(每个多流时间步需要生成17个标记,而不使用内心独白时为16个)。我们再次强调,在所有比较的模型中,Moshi不仅提供了最佳的口语问答性能,而且是唯一一个能够同时建模语义和音频标记的模型,从而能够在多种条件下处理任意声音之间的交互。此外,不但Moshi显著优于SpeechGPT和Spectron,而且它也是唯一一个与流式推理兼容的模型,因为链式模式需要先生成完整的文本答案,然后再生成语音,而内心独白则以流式方式生成两者。

    讨论。尽管Moshi表现强劲,但我们观察到其性能低于原始的Helium,这与表7中报告的MMLU从Helium的54.3降至49.7相一致虽然Web Questions和Llama Questions上的适度差异可以通过在音频数据上进行训练从而减少用于文本知识的参数量来解释,但在Trivia QA上的巨大差异促使我们更仔细地检查错误模式。我们发现,特别是多句提问(例如:“《怪物的恐惧》是一本畅销小说的早期标题,激发了1970年代中期的一部高票房电影。最终它以什么名字让读者和观众感到恐惧?”)或具有特定句法结构的问题(例如:“在人类身体上,瘢痕是一种什么类型的?”)对Moshi尤其具有挑战性,因为它在以口语风格的对话上进行了微调,而这些对话并没有展示这样的模式。因此,我们假设在微调过程中覆盖更多句法场景可以缩小这个差距。

    生成对话的质量和统计数据

    指标。除了单轮问答外,我们还通过外部语言模型对生成对话的语言质量进行评估,同时关注轮换(turn-taking)指标。我们遵循Nguyen等人(2023)的研究方法。轮换(turn-taking)指标定义如下:

    • 间歇单位(IPU, Inter-Pausal Units):由至少0.2秒的静默分隔的连续语音段。
    • 停顿(Pauses):同一说话者之间的IPU间的静默。
    • 间隙(Gaps):不同说话者之间的IPU间的静默。
    • 重叠(Overlaps):双方都有IPU的时间。

    根据Nguyen等人(2023)的研究,语义评估使用开源的DialoGPT模型(Zhang等,2019),我们通过使用DialoGPT所期望的<|endoftext|>标记将每位发言者分开,计算转录对话的困惑度。我们从Fisher数据集中随机选择1000个10秒的提示,并使用Moshi生成续写。对于每个提示,生成32个续写,并提供3种不同温度的结果,因为温度显著影响结果。

    基线。我们与dGSLM(Nguyen等,2023)进行比较,因为它也是一个全双工生成模型,基于Fisher数据集训练。Nguyen等(2023)使用50个提示,每个提示生成50个续写,并报告他们对话模型的结果以及级联顶线模型(ASR + LM + TTS)。

    结果。表9显示,尽管Moshi是一个音频到音频模型,但在语言质量方面表现与级联模型相当。两者的困惑度均优于真实数据,这可以解释为这些模型训练于与DialoGPT训练数据更相近的数据,而不是Fisher数据集。这相较于Nguyen等(2023)中非级联模型的表现是一个显著改进,该模型在此场景下无法生成连贯的语音。

    表9:生成对话的语言质量和轮换统计数据。由于我们训练多流模型以生成对话的双方,因此可以在无需与真实用户互动的情况下生成对话。这使得评估Moshi学习自然对话动态的能力成为可能。

    流式语音识别(ASR)和文本转语音(TTS)

    指标。 第3.4.4节和附录C描述了如何通过简单地改变文本和音频标记之间的延迟,使用Inner Monologue提供流式TTS或流式ASR系统。我们描述了如何通过简单地改变文本标记和音频标记之间的延迟,使内部独白(Inner Monologue)提供流式TTS或流式ASR系统。具体来说,我们通过将音频标记延迟2秒来训练流式TTS模型,为文本标记提供一些前瞻,并在推理时使用教师强制(teacher forcing)文本标记。类似地,我们通过将文本标记延迟2秒来训练流式ASR模型,允许模型在生成文本标记之前先听取音频内容。在这种情况下,在推理时我们对音频标记使用教师强制。我们在TTS中使用0.6的温度进行生成,而在ASR中使用贪婪解码,并在LibriSpeech(Panayotov等人,2015)的test-clean子集上以词错误率(WER)进行评估。对于TTS,我们首先使用在LibriSpeech 960小时数据上微调的HuBERT-Large(Hsu等人,2021)转录音频,仅考虑4到10秒之间的序列,以便与Vall-E等基线进行比较。我们强调,在我们的ASR和TTS系统的训练过程中没有使用任何LibriSpeech数据。

    结果。 我们的流式TTS模型在LibriSpeech测试集上的WER为4.7%,优于Vall-E的5.9% WER,但不如NaturalSpeech 3(Ju等,2024)的1.81%。然而,Moshi只需2秒的前瞻性,而Vall-E和NaturalSpeech 3则需要访问完整的序列。我们的ASR系统的WER为5.7%,而Streaming FastConformer(Noroozi等,2024)在类似的前瞻性下获得了3.6%。值得注意的是,我们的ASR系统还提供与文本的对齐的时间戳,精度为80毫秒(时序变换器的帧速率)。

    讨论。 这有限的实验并非旨在与最先进的系统(尤其是ASR)竞争,而是旨在展示Inner Monologue的灵活性,可以将多个任务映射到同一框架中。我们还强调,LibriSpeech测试集的标准评估并未提供展示我们TTS系统强大能力的测试平台,特别是在多流建模中建模两个说话者的能力以及生成长达5分钟的一致、自发且富有表现力的对话(而Vall-E只评估4到10秒之间的朗读语音)我们将流式TTS的全面评估留待未来工作。

    压缩Moshi及其对语音质量的影响

    随着大多数现代大型语言模型(LLMs)的参数达到数十亿,模型大小成为在资源受限设备(例如,使用用户级GPU的笔记本电脑)或模型部署(例如,在线网络演示服务多用户)等实际应用中的一个众所周知的瓶颈。为了解决这个问题,后训练量化(PTQ)是一种广泛使用的效率技术,用于压缩模型权重和激活,但可能会导致性能下降。最近的研究表明,LLMs通常可以成功量化为8位整数,有时甚至可以使用更先进的技术来处理异常权重,进一步降低到更低的位宽(Dettmers和Zettlemoyer, 2023; Dettmers等人, 2022; Frantar等人, 2023; Tseng等人, 2024)。然而,关于语音模型量化的文献远少于LLMs。因此,在本节中,我们调查量化Moshi如何影响其性能,特别是在语言学和声学方面,强调某些由于模型量化加剧的音频降质问题。

    量化格式。 为了量化Moshi,我们遵循PTQ文献中的常见设计选择。在以下所有结果中,我们采用以下设置:

    (i)激活以bfloat16精度(BF16)存储,并在每个线性层的输入处动态量化为8位,使用对称量化(即AbsMax);

    (ii)模型权重使用非对称量化(即MinMax)进行不同位宽和块大小的量化。这包括时序 Transformer和深度Transformer的权重。实际上,我们发现深度Transformer对量化具有相当好的鲁棒性,因为仅保持其权重的高精度并不会显著改善音频质量

    (iii)只有初始嵌入层(文本和音频)、RMSNorms和Mimi编解码器保持未量化

    注意:虽然权重范围设置也是常见的做法(Nagel等人, 2021),但我们没有使用均方误差(MSE)微调获得的量化尺度,因为我们发现这对生成样本的质量影响很小。

    结果 – 语言评估。 为了评估量化对模型推理能力的影响,我们在MMLU基准测试上评估了量化模型的性能,包括作为Moshi基础的仅训练文本数据的Helium基础模型(见表10)和Moshi本身(见表11)。一般来说,Helium对量化更具鲁棒性,特别地,假设量化块的大小为32,将Helium权重量化为4位可以得到一个缩小3.43倍的模型,其MMLU评分与浮点基线相差不到2分。该量化格式几乎与llama.cpp的Q4_0相同,因此可以方便地用于高效推理。

    相比之下,对Moshi使用相同的量化方法则导致了性能的显著下降,MMLU评分降低了5到10分。在在线演示中,我们将权重保持在8位格式,因为这导致模型的MMLU下降约2分,而模型大小大约是浮点基线的两倍。

    表10:量化对Helium模型的语言影响,以MMLU衡量。‘WXA8’表示权重量化为‘X’位,激活量化为8位,使用整数标量PTQ。模型大小(以GygaBytes为单位)在括号中给出,基于量化块大小为32,考虑了模型权重和以float16存储的量化参数。通过足够精细的量化块,4位模型的MMLU评分仍在浮点基线的2分之内。
    表11:量化对Moshi模型的语言影响,以MMLU衡量,针对由Inner Monologue直接生成的文本令牌的不同量化Moshi模型进行评估。与之前的表格一样,模型大小以块大小为32时进行指示。

    结果 – 音频质量。为了评估量化模型生成的样本的音频质量,我们使用Lo等人(2019)在speechmetrics中实现的MOSNet指标。具体来说,我们从未量化模型生成一个短提示(64个令牌),然后以温度t = 0.8和序列长度1024个令牌生成每个量化模型的完成。我们重复此过程500次,并报告非重叠窗口的MOSNet得分分布(见图5)。虽然MOSNet得分在样本之间表现出较大的方差,但在将模型权重量化到4位后,音频质量通常几乎没有退化。然而,对于较低的位宽,我们观察到MOSNet得分对一些更严重的音频退化缺乏敏感性,这些退化是由激进量化引起的。例如,它无法区分纯音频伪影(如嘈杂的声音)和语音模式中的伪影(如模型重复性增加)。这与我们在第5.2节中观察到的客观和主观音频质量指标之间缺乏一致性相符。此外,MOSNet是为一种非常不同的基准设计的,即模仿人类对转换语音的评估,因此它对这些伪影不够敏感也不足为奇。相反,为了衡量音频样本中这种退化的存在或缺失,我们首先观察到某些音频伪影可以通过生成的文本和音频令牌的熵谱识别:图6展示了一些示例,附录D中详细描述了伪影类型及其测量方法。

    图5:模型压缩对Moshi的声学影响。对不同位宽压缩模型生成的样本进行MOSNet评估。我们在非重叠的5秒窗口中评估MOSNet得分,并报告每个模型的500个样本的得分分布。
    图6:模型压缩引起的音频伪影。捕捉到由模型量化引起的特定音频伪影的典型熵谱示例。对于每个时间步,我们独立计算过去128个token的熵,分别针对文本和音频代码本的token。然后,我们在非重叠的64个token窗口中测量不同伪影的存在或缺失,具体说明见附录D。

    根据这一见解,我们测量了在与之前MOSNet分析相同的生成音频样本中不同音频伪影的存在或缺失。结果如表12所示,附录D的图11提供了更详细的逐时间步分析。在4位宽度下,我们再次观察到音频降解很少。降到3位格式时,音频降解变得更加明显,并且随着生成时间步的增加而变得更频繁,尽管较细粒度的量化格式通常对这些伪影更具鲁棒性。然而,当权重被激进地量化为2位时,这两种量化格式的音频质量显著下降,我们也在定性上观察到了这一点。

    讨论:Moshi的语言能力对模型权重和激活的量化比输出音频质量更敏感。具体而言,音频质量在精度降到4位时仍接近浮点基线,即使量化了整个模型,包括深度变换器。相比之下,当模型权重量化到6位以下时,仅使用后训练量化,MMLU性能遭遇显著下降。根据最近的量化技术(Tseng等,2024),我们可能期望通过使用量化感知微调而不是PTQ,在较低的位宽下改善性能。然而,由于Moshi的训练管道涉及多个阶段和训练数据集,这需要对设计量化训练阶段和校准数据集进行更深入的研究,以保留量化后丢失的所有Moshi能力。

    安全性

    在Moshi的开发过程中,我们探索与AI生成内容安全相关的不同方向。在本节中,我们具体考虑几个与Moshi生成的内容相关的问题,每个问题都在专门的小节中进行探讨:

    1. 我们的模型在生成有毒内容方面表现如何?
    2. 如何避免模型重复训练集中的音频内容?
    3. 我们如何确保模型使用我们希望赋予Moshi的声音?
    4. 如何识别给定内容是否由Moshi生成?

    有毒性分析

    科学界在过去几年中对文本生成模型的偏见和有毒性问题投入了一些努力。相比之下,音频安全的研究尚不成熟。由于音频和文本模型在使用上有所不同,且通过非语言信号(如讽刺、语调等)传达多重意义,因此进行公平比较并不简单。尽管存在这些局限性,为了便于将Moshi与文本生成模型进行比较,本次分析将我们的有毒性分析限制在模型生成的文本上。我们采用ALERT基准(Tedeschi et al., 2024),该基准在多个类别(仇恨、自残、武器、犯罪、性、物质)下评估安全性。附录D中的表18报告了我们在该基准上的详细有毒性分析结果。Moshi与流行的仅文本模型的综合得分如下:

    通过这项分析,我们发现Moshi在排名中处于中间位置。行业模型表现最佳,这是可以预期的,因为这些模型受益于大量的私人注释、红队测试和反馈循环。

    再现分析

    模型生成其在训练时见过的内容的问题,我们称之为再现,与过拟合密切相关:模型在训练期间看到的序列或子序列越多,它在生成过程中生成该序列的可能性就越大。需要注意的是,对于语音模型,不仅文本可能被再现,语音的音调、语气,以及如果在训练时存在的背景旋律也可能被再现。因此,重要的是要减轻与再现相关的潜在知识产权问题,例如未经许可复制受版权保护的内容或使用某个人的声音进行音频生成。

    评估协议。对于每个模型,我们测量生成中再现训练数据集中最常见音频片段的比例(总共100,000次生成)。为此,我们首先开发了一个匹配系统,以检测整个训练数据集中最频繁的音频片段,详细信息见附录B。我们选择一个足够长(16秒)且易于从文本和音频中检测的最常见片段。我们测量与此最常见片段完全匹配的生成比例。在匹配过程中,我们最初使用音频和文本匹配,但观察到基于文本的匹配在初始匹配步骤中具有更高的召回率。我们手动验证所有生成的内容,以过滤掉不完全匹配的异常值。

    无条件与提示生成。我们首先测量无条件生成的情况,以评估模型在未通过提示引导时是否倾向于生成特定序列。作为补充,我们使用最常见音频片段的前3秒来提示模型,并测量继续生成与该训练集音频相同的次数。表13报告了这些再现结果。

    表13:不同模型在无条件生成中的训练数据再现情况
    我们测量每个模型在生成过程中,重复训练数据中最频繁音频片段的次数,并对不同温度值进行比较。通过数据集去重,我们在100,000次生成中并未观察到最频繁片段的确切再现,即使在使用该音频片段的前三秒进行提示时也是如此。

    结果与微调的影响。我们观察到,预训练模型在原始数据集上训练时,往往会生成训练集中频繁出现的序列。采样温度对再现率有重要影响:通常用于生成的值(0.6–1.0)更容易出现再现现象。在1000次生成中,经过对话微调的模型并未生成最频繁的训练序列。需要说明的是,微调可能会被覆盖,因此可能不足以单独避免再现现象。

    类似于文本模型的情况(Carlini等,2022),再现现象受模型在训练中使用特定序列的次数显著影响。因此,我们通过识别所有频繁的音频片段并在训练时过滤掉这些片段,评估去重训练数据集的影响。在表13中,我们观察到这一预处理步骤[附录B:deduplicated]将最频繁序列的再现次数降至零,即使没有进行微调。

    系统声音一致性

    一个潜在的语音到语音模型的风险是未经授权的声音生成。该模型应该使用其目标声音,而不是可能模仿用户的声音。为了评估Moshi在多大程度上采用用户的声音而不是目标声音,我们使用以下协议:

    • 生成100小时Moshi与第二个合成发言者之间的对话。
    • 在每个段落上运行一个说话人验证模型(WavLM(Chen等,2022)large)以提取说话人嵌入。
    • 计算每个主说话者段落的嵌入与(i)主说话者的第一个段落和(ii)生成说话者的第一个段落之间的余弦相似度。
    • 注意:我们排除所有开始时间在15秒之前的段落,以避免将主说话者的第一句作为参考。

    在生成的数据集中,主说话者的声音在10,249次(98.7%)情况下更接近主说话者的参考段落,而在133次(1.3%)情况下更接近另一说话者的参考段落。我们还关注说话者的一致性随时间的演变。根据Borsos等(2023),我们计算与上述相同的比例,但针对在特定时间开始的段落组,以测量随时间的漂移。表14显示说话者的一致性在时间上保持稳定,这意味着我们没有观察到对话进行时的漂移。这表明,在指令调优期间简单选择使用一致的声音足以在推理时提供稳健性。

    表14:随时间变化的说话者一致性。我们测量在计算远离参考段落的段落的说话人嵌入时,Moshi的段落中的说话人嵌入与其参考段落的相似度有多高,相较于用户的参考段落。

    Moshi生成内容的识别:水印技术

    为了确定给定的音频是否由Moshi生成,我们研究了两种互补的解决方案:索引和水印。第一种,即音频索引,仅在我们能够访问生成内容的机器时适用,例如在Moshi演示的情况下。我们在附录B中描述了我们的音频匹配系统。以下小节中,我们将更具体地讨论水印,其目标是向生成的音频添加不可察觉的标记。

    信号基础水印的评估。我们调查现有的音频水印方法是否可以用作重新识别Moshi生成内容的一种方式。为此,我们分析了Audioseal方法(San Roman等,2024b)在我们上下文中的鲁棒性。该方法作为开源库可用。为了进行评估,我们将音频信号重采样到16kHz,以使采样率与Audioseal说明中推荐的采样率相匹配。我们在以下设置中测量平均标记检测得分:

    • 无水印:测量未添加标记时的检测得分。
    • 无攻击水印:未修改水印音频信号;
    • 粉红噪声:我们向水印音频中添加小幅粉红噪声(σ = 0.2);
    • RVQGAN:我们使用最近的先进自编码器(Kumar等,2023)对音频信号进行压缩和解压缩。我们使用公开可用的预训练16kHz模型,该模型与第5.2节中用作基线的24kHz模型不同。
    • Mimi自编码器:我们使用自己的分词器对信号进行压缩和解压缩。此操作使用24kHz音频进行,因此涉及两个重采样阶段(从16kHz到24kHz,再回到16kHz)。

    我们在表15中报告了结果。我们观察到,当音频未更改时,标记的检测率很高。在激进的粉红噪声下,需要相对较长的序列才能获得高检测得分。然而,标记对强压缩的鲁棒性较差:我们考虑的两个自编码器都具有低比特率,因此会丢弃与信号重构无关的任何内容。因此,我们的Mimi编解码器将mark删除到一个水平,使水印音频与非水印音频难以区分,从而在这种情况下使信号基础水印变得无用。

    关于生成音频水印的讨论。上述基于采样的水印方法缺乏幂等性,这对检测器在测量采样偏差时的可靠性造成了问题。值得注意的是,为了使这些方法正常工作,提供哈希密钥上下文的n元组在多个连续标记期间必须足够稳定。减少上下文长度可以提高稳定性,但会大幅增加产生退化音频序列的可能性,类似于(Holtzman等,2019)观察到的退化问题。

    虽然我们将这种采用基于文本的水印的方法视为一个负面结果,但在此我们讨论了一些可能的绕过上述标记稳定性问题的潜在方法,通过重新编码实现:

    • 仅标记RQ的第一级可以提高稳定性。在我们的初步实验中,将这些索引作为哈希函数中的上下文,并限制对之前时间戳的依赖,显著提高了稳定性(尽管还不够)。
    • 通过在离散潜在空间中添加特定损失,可以改善幂等性,使音频标记在自编码过程中保持稳定。
    • 这种自编码可能被学习为对信号变换具有鲁棒性,类似于学习基于神经网络的图像水印时提出的方案(Zhu,2018;Fernandez等,2022)。根据我们的分析,增加对适度时间偏移的容忍度尤其重要。
    • 可以标记文本而不是音频。一个缺点是,文本作为添加标记的通道容量较低,对于短对话来说并不足够。另一个问题是,检测标记需要可靠的转录。

    最后但并重要的是,需要一些探索,以确保在开源模型时去除水印程序并不简单。举个例子,与稳定扩散模型相关的实现中,去除水印的唯一方法就是注释掉一行代码。22 Sander等(2024)的研究在这方面是一项有前景的工作,他们展示了检测模型是否在水印文本上训练是可能的。San Roman等(2024a)刚刚分享了一种利用这一观察结果的方法:水印是通过训练数据隐式添加的,遵循Sablayrolles等(2020)提出的“放射性数据”的精神。

    结论

    在这项工作中,我们介绍了Moshi,首个实时全双工语音对话系统。Moshi的第一个组成部分是Helium,一个拥有70亿参数的文本LLM,其性能与计算预算相似的开放权重模型竞争。为了将音频编码为适合语言建模的离散单元,我们引入了Mimi,一个语义声学神经音频编解码器,它在低比特率下提供了最先进的音频质量,同时以与实时生成兼容的低帧率运行。接着,我们提出了一种新的层次化多流架构,支持以语音到语音的方式生成任意对话。此外,我们展示了通过Inner Monologue,这种新方法在音频标记前生成文本标记,能够显著改善语音到语音的生成,同时保持流式推理的兼容性。我们的实验表明,Moshi在语音问答和对话建模方面展现了最先进的水平,同时在不生成有害内容和保持声音一致性方面显示出令人满意的安全性。总之,我们介绍了一整套模型和方法,从文本LLM到神经音频编解码器,再到生成音频模型,结合成一个具有160毫秒理论延迟的实时语音对话系统,能够进行长达5分钟的复杂多轮对话。我们发布了Mimi和Moshi,以促进此类应用的发展。此外,我们展示了Inner Monologue方法如何通过改变文本和音频标记之间的延迟,设计流式TTS和流式ASR。我们相信,Inner Monologue和多流建模将在语音到语音和音频到音频的应用中产生积极影响,超越对话建模。

    附录

    附录A. Additional Ablation on Mimi Codec

    表17:Mimi编解码器超参数的消融研究。我们通过报告在音素ABX可区分性任务上的错误率来评估语义建模。为了评估重构质量,我们计算VisQOL和MOSNet。“量化率”指在训练期间仅在50%的时间内对潜在空间应用量化(与量化器丢弃无关)。

    附录B. 音频匹配与去重

    我们开发了一个音频匹配系统,其目标有两个方面:

    1. 源内容去重:去除频繁的重复内容,以避免过拟合和数据集中音频内容的过度再现,如第6.2节所评估。
    2. 索引解决方案:通过在生成时收集样本的签名,我们可以直接检索,判断某些内容是否由我们的在线演示生成。

    我们的音频匹配解决方案受到Wang(2003)工作的启发,因为它在效率和有效性之间提供了良好的折衷。该方法是一个检索系统:给定一个查询,它在预先索引的数据集中检测相似音频。在我们的案例中,签名设计更倾向于去重用例,这需要更高的效率:形式上,我们需要将数据集中每个音频与整个数据集进行比较,这引发了效率问题。签名提取的过程如下。

    星座图:生成签名的第一步涉及计算一组称为星座图的关键点。我们的程序受到Wang(2003)的启发,如图7所示。首先,(1)我们从音频信号计算梅尔谱图,时间以40Hz的频率离散化,频率范围分为64个频段。然后,我们应用三个滤波器以选择时频位置:(2)能量滤波器确保我们仅选择足够鲁棒的位置;(3)时间滤波器和(4)频率滤波器确保我们选择相对于时间和频率的极大值。这些滤波器的组合是(5)一个星座,从中提取哈希值。

    梅尔谱关键点提取。对音频梅尔谱应用三个滤波器,以提取一个关键点的星座,基于这些关键点计算哈希签名

    成对匹配和一对多比较。通过我们的签名提取,我们可以通过比较两个音频的签名集来比较它们,这相当于计算哈希键的交集。当想要将查询音频与一个包含多个音频的数据集进行比较时,使用倒排文件或哈希表进行比较更加高效。在这种情况下,索引结构返回与每个音频匹配的签名列表和匹配时间戳。与 Wang(2003)类似,我们仅保留在时间上具有一致性的匹配,这得益于一个简单的霍夫1D时间投票方案。可选地,我们在匹配签名时在时间戳 tbt_btb​ 和 tft_ftf​ 上引入 ±1 的容忍度。由于这一容忍度增加了复杂性,因此在数据集去重的情况下我们不使用它。

    去重:签名融合集。对于我们的去重策略,我们首先交叉匹配数据集中所有音频片段,并提取足够频繁发生的匹配片段(通常 ≥ 10 次匹配)。由于它们的签名是冗余的,我们删除在相同相对时间戳处发生的所有重复签名,以产生一个单一的重复签名集。在训练时,为了确定某个音频片段是否是要过滤的频繁重复片段,我们只需将其签名集与重复签名集进行比较。换句话说,我们仅在假定的训练片段和合成的重复签名文件之间执行简单的音频到音频匹配。只有在得分低于预定义的匹配阈值时,我们才会使用该片段进行训练。

    附录C 延迟文本语言模型作为zero-shot流式ASR和TTS:

    如第3.4.4节所述,Moshi模型音频标记,并与通过特殊填充标记在音频帧率上对齐的文本流结合,如图4所示。我们可以通过在音频和文本标记之间引入延迟来调整此方法以用于ASR和TTS。在这两种情况下,模型以全流式模式运行,具有固定的延迟(此处为2秒)。

    ASR模式:如果音频领先于文本,我们忽略模型对音频标记的预测,而是使用某些音频输入的标记,并自由采样文本标记。然后,文本流包含音频转录,具有单词级的精细对齐,如图8所示。

    TTS模式:如果文本领先于音频,我们可以对称地推导出一个TTS引擎。为此,我们需要一个正确填充的文本标记集。我们通过允许模型自由采样PAD和EPAD标记以zero-shot方式获得这些。当模型试图采样不同的标记时,我们将输入下一个要生成的单词。需要注意的是,我们可以通过保持填充标记的在线平均比例来进一步控制语音速率。当该比例低于给定目标值时,我们通过在其logits上引入小的奖励,确保在所有情况下保持合理的速率和良好的可懂性。最后,使用同时包含文本和音频标记的前缀,我们可以控制说话者的声音。图9给出了表示。

    多流TTS:我们在单流和多流模式中都使用此机制。在多流模式下,模型输出两组音频标记。文本在单个流中提供,使用<bos>和<eos>标记将文本与两个说话者分开。

    图8:Moshi用于自动语音识别(ASR)时建模的联合序列表示。每一列代表联合序列中某个步骤的标记(Vs,k),类似于公式6中的描述,但经过调整以适应ASR。文本延迟了2秒,同时我们使用声学标记延迟τ = 2。标记从底部到顶部在深度Transformer中进行预测。音频标记与输入音频保持一致,而文本标记则自由采样。这还提供了精确的单词时间戳。

    图9:Moshi在文本到语音(TTS)模式下建模的联合序列表示。每一列代表联合序列中某个步骤的标记(Vs,k),类似于公式6中的描述,但经过调整以适应TTS。音频延迟了2秒,同时我们使用声学标记延迟τ = 2。标记从底部到顶部在深度Transformer中进行预测。文本预测通常被忽略,而是使用要生成的文本的标记。然而,这个文本输入缺乏填充标记。在每个单词结束时,我们允许模型自由采样PAD和EPAD标记。如果模型尝试采样其他标记,我们则使用下一个单词的标记。语义和声学音频标记正常采样,由于使用的延迟而隐式地依赖于文本。通过记录给定单词被模型消耗的时间,这种方法还提供了生成音频中单词的精细对齐。

    附录 F. 合成转录生成用于微调

    合成转录生成用于微调,我们提供合成转录的示例: