Dolphin -支持东方40语种+中国22方言的新SOTA语音大模型

在当今数字化时代,语音识别技术已成为人机交互的关键桥梁,广泛应用于智能客服、语音助手、会议转录等众多领域。然而,对于东方语言的识别如越南语、缅甸语等,现有模型往往表现不佳,难以满足用户的需求。为解决这一难题,海天瑞声携手清华大学电子工程系语音与音频技术实验室,共同推出了Dolphin —— 一款专为东方语言设计的语音大模型

Dolphin 采用的多任务格式,其主要沿用了 OpenAI Whisper的
格式。Dolphin 专注于自动语音识别 (ASR),不支持翻译任务。此外,Dolphin 引入了特定区域的标记,从而支持方言。

Dolphin 是由 Dataocean AI 与清华大学合作开发的多语言、多任务 ASR 模型。它支持东亚、南亚、东南亚和中东地区的 40 种东方语言,同时还支持 22 种中国方言。该模型基于超过 21 万小时的数据进行训练,其中包括 DataoceanAI 的专有数据集和开源数据集。该模型可以执行语音识别、语音活动检测 (VAD)、语音分割和语言识别 (LID)

二、创新技术架构 

  • 模型结构    

Dolphin网络结构基于CTC-Attention架构,E-Branchformer编码器和Transformer解码器,并引入了4倍下采样层,以实现高效的大规模多语言语音识别模型的训练。CTC-Attention架构结合了CTC的序列建模能力和注意力机制的上下文捕捉能力,能够有效提升模型的识别准确性和效率。E-Branchformer编码器采用并行分支结构,能够更有效地捕捉输入语音信号的局部和全局依赖关系,为模型提供了更丰富的特征表示。解码器部分则采用了在序列到序列任务中表现出色的Transformer,能够生成高质量的文本输出。为了进一步提高训练效率和性能,我们在模型中引入了4倍下采样层。这一层可以减少输入特征的序列长度,从而加速计算过程,同时保留关键的语音信息,确保模型的识别效果不受影响。

  • 多任务格式

Dolphin 借鉴了 Whisper 和 OWSM 的创新设计方法,但专注于ASR 进行了若干关键修改。Dolphin 不支持翻译任务,并且去掉了previous text及其相关标记的使用,这简化了输入格式并减少了潜在的复杂性。Dolphin引入了两级语种标签系统,以便更好地处理语言和地区的多样性。第一个标签指定语种(例如: <zh> 、 <ja>),第二个标签指定地区(例如 <CN> 、 <JP>)。这种分层方法使模型能够捕捉同一种语言内不同方言和口音之间的差异,以及同一地区内不同语言之间的相似性,从而提高了模型区分密切相关的方言的能力,并通过在语言和地区之间建立联系增强了其泛化能力。

三、强大的数据基础 Dolphin的训练数据集整合了海天瑞声的专有数据和多个开源数据集,总时长超过20万小时,涵盖40个东方语种。其中,海天瑞声数据集包含137,712小时的音频,覆盖38个东方语种。这些高质量、多样化的数据为模型的训练提供了坚实的基础,使其能够更好地适应不同语言和方言的语音特征。

四、卓越性能表现 通过精心设计的架构和大规模的训练数据,Dolphin在多种语言上的词错误率(WER)显著低于现有开源模型。

例如,在海天瑞声数据集上,Dolphin 模型的平均WER为31.5%,small模型为24.5%,medium模型为22.2%;在CommonVoice数据集上,Dolphin 模型的平均WER为37.2%,small模型为27.4%,medium模型为25.0%。即使与Whisper large-v3模型相比,Dolphin在模型规模更小的情况下,性能也更为出色。以中文为例,Dolphin中模型的WER仅为9.2%,而Whisper large-v3模型为27.9%。 在KeSpeech (包含一个普通话子集和八个中国方言子集)测试集上,Dolphin模型表现出了卓越的效果.

五、开源与社区贡献 为促进语音识别技术的进一步发展,Dolphin的训练模型和推理源代码已公开发布。这一举措不仅为研究人员提供了宝贵的研究基础,也为开源社区注入了新的活力,鼓励更多创新与合作。通过共享技术成果,我们希望能够吸引更多的开发者和研究机构参与到东方语言语音识别的研究中来,共同推动技术的进步。 

支持的语言列表:

Language code

Language CodeEnglish NameChinese Name
zhMandarin Chinese中文
jaJapanese日语
thThai泰语
ruRussian俄语
koKorean韩语
idIndonesian印度尼西亚语
viVietnamese越南语
ctYue Chinese粤语
hiHindi印地语
urUrdu乌尔都语
msMalay马来语
uzUzbek乌兹别克语
arArabic阿拉伯语
faPersian波斯语
bnBengali孟加拉语
taTamil泰米尔语
teTelugu泰卢固语
ugUighur维吾尔语
guGujarati古吉拉特语
myBurmese缅甸语
tlTagalog塔加洛语
kkKazakh哈萨克语
orOriya / Odia奥里亚语
neNepali尼泊尔语
mnMongolian蒙古语
kmKhmer高棉语
jvJavanese爪哇语
loLao老挝语
siSinhala僧伽罗语
filFilipino菲律宾语
psPushto普什图语
paPanjabi旁遮普语
kabKabyle卡拜尔语
baBashkir巴什基尔语
ksKashmiri克什米尔语
tgTajik塔吉克语
suSundanese巽他语
mrMarathi马拉地语
kyKirghiz吉尔吉斯语
azAzerbaijani阿塞拜疆语

Language Region Code

Language Region CodeEnglish NameChinese Name
zh-CNChinese (Mandarin)中文(普通话)
zh-TWChinese (Taiwan)中文(台湾)
zh-WUChinese (Wuyu)中文(吴语)
zh-SICHUANChinese (Sichuan)中文(四川话)
zh-SHANXIChinese (Shanxi)中文(山西话)
zh-ANHUIChinese (Anhui)中文(安徽话)
zh-TIANJINChinese (Tianjin)中文(天津话)
zh-NINGXIAChinese (Ningxia)中文(宁夏话)
zh-SHAANXIChinese (Shaanxi)中文(陕西话)
zh-HEBEIChinese (Hebei)中文(河北话)
zh-SHANDONGChinese (Shandong)中文(山东话)
zh-GUANGDONGChinese (Guangdong)中文(广东话)
zh-SHANGHAIChinese (Shanghai)中文(上海话)
zh-HUBEIChinese (Hubei)中文(湖北话)
zh-LIAONINGChinese (Liaoning)中文(辽宁话)
zh-GANSUChinese (Gansu)中文(甘肃话)
zh-FUJIANChinese (Fujian)中文(福建话)
zh-HUNANChinese (Hunan)中文(湖南话)
zh-HENANChinese (Henan)中文(河南话)
zh-YUNNANChinese (Yunnan)中文(云南话)
zh-MINNANChinese (Minnan)中文(闽南语)
zh-WENZHOUChinese (Wenzhou)中文(温州话)
ja-JPJapanese日语
th-THThai泰语
ru-RURussian俄语
ko-KRKorean韩语
id-IDIndonesian印度尼西亚语
vi-VNVietnamese越南语
ct-NULLYue (Unknown)粤语(未知)
ct-HKYue (Hongkong)粤语(香港)
ct-GZYue (Guangdong)粤语(广东)
hi-INHindi印地语
ur-INUrdu乌尔都语(印度)
ur-PKUrdu (Islamic Republic of Pakistan)乌尔都语
ms-MYMalay马来语
uz-UZUzbek乌兹别克语
ar-MAArabic (Morocco)阿拉伯语(摩洛哥)
ar-GLAArabic阿拉伯语
ar-SAArabic (Saudi Arabia)阿拉伯语(沙特)
ar-EGArabic (Egypt)阿拉伯语(埃及)
ar-KWArabic (Kuwait)阿拉伯语(科威特)
ar-LYArabic (Libya)阿拉伯语(利比亚)
ar-JOArabic (Jordan)阿拉伯语(约旦)
ar-AEArabic (U.A.E.)阿拉伯语(阿联酋)
ar-LVTArabic (Levant)阿拉伯语(黎凡特)
fa-IRPersian波斯语
bn-BDBengali孟加拉语
ta-SGTamil (Singaporean)泰米尔语(新加坡)
ta-LKTamil (Sri Lankan)泰米尔语(斯里兰卡)
ta-INTamil (India)泰米尔语(印度)
ta-MYTamil (Malaysia)泰米尔语(马来西亚)
te-INTelugu泰卢固语
ug-NULLUighur维吾尔语
ug-CNUighur维吾尔语
gu-INGujarati古吉拉特语
my-MMBurmese缅甸语
tl-PHTagalog塔加洛语
kk-KZKazakh哈萨克语
or-INOriya / Odia奥里亚语
ne-NPNepali尼泊尔语
mn-MNMongolian蒙古语
km-KHKhmer高棉语
jv-IDJavanese爪哇语
lo-LALao老挝语
si-LKSinhala僧伽罗语
fil-PHFilipino菲律宾语
ps-AFPushto普什图语
pa-INPanjabi旁遮普语
kab-NULLKabyle卡拜尔语
ba-NULLBashkir巴什基尔语
ks-INKashmiri克什米尔语
tg-TJTajik塔吉克语
su-IDSundanese巽他语
mr-INMarathi马拉地语
ky-KGKirghiz吉尔吉斯语
az-AZAzerbaijani阿塞拜疆语

GigaSpeech 2:三万小时东南亚多语种语音识别开源数据集发布

下载:https://huggingface.co/datasets/speechcolab/gigaspeech2

语言:泰语、印尼语、越南语
GigaSpeech 2 raw:30,000 小时的泰语、印尼语和越南语自动转录语音。
GigaSpeech 2 精炼:泰语 10,000 小时,印尼语和越南语各 6,000 小时。
GigaSpeech 2 DEV 和 TEST:每种语言的 DEV 时间为 10 小时,TEST 时间为 10 小时,由专业人工注释员转录,富有挑战性和现实性。

“Giga”一词源于“gigantic”[“巨大”],互联网上具有海量音频资源,但语音质量良莠不齐,高质量音频文本对数据十分稀缺且标注成本高昂,特别是在小语种领域。GigaSpeech 是一个非常成功的英文开源数据集,以 YouTube 和 Podcast 为音频来源,提供了上万小时的高质量文本标注语音数据集,获得了广泛关注和应用。针对多语言领域仍存在的语音识别性能较差、可用高质量标注数据缺乏等问题,我们提出了利用 in-the-wild 无标注音频,构建高质量大规模语音识别数据集的新范式,制作出面向真实场景的大规模、多领域、多语言的语音识别数据集 GigaSpeech 2基于Gigaspeech 2 数据集训练的语音识别模型在三个东南亚语种(泰语、印尼语、越南语)上达到了媲美商业语音识别服务的性能。我们怀揣着技术应当普惠大众的理念,致力于开源高质量语音识别数据集和模型,促进多语言文化沟通。

GigaSpeech 2 是一个持续扩展的、多领域多语言的大规模语音识别语料库,旨在促进低资源语言语音识别领域的发展和研究。GigaSpeech 2 raw拥有 30000 小时的自动转录音频,涵盖泰语、印尼语、越南语经过多轮精炼和迭代,GigaSpeech 2 refined拥有 10000 小时泰语、6000 小时印尼语、6000 小时越南语。我们也开源了基于 GigaSpeech 2 数据训练的多语种语音识别模型,模型性能达到了商业语音识别服务水平

数据集构建:

GigaSpeech 2 的制作流程也已同步开源,这是一个自动化构建大规模语音识别数据集的流程,面向互联网上的海量无标注音频,自动化地爬取数据、转录、对齐、精炼。这一流程包含利用 Whisper 进行初步转录,使用 TorchAudio 进行强制对齐,经过多维度过滤制作出 GigaSpeech 2 raw。随后,采用改进的 Noisy Student Training (NST) 方法,通过反复迭代精炼伪标签,持续提高标注质量,最终制作出GigaSpeech 2 refined。

GigaSpeech 2 在主题上涵盖了多样化话题领域,包括农业、艺术、商业、气候、文化、经济、教育、娱乐、健康、历史、文学、音乐、政治、两性关系、购物、社会、体育、科技和旅行。同时,在内容形式上涵盖了多种类型,包含声书、解说、讲座、独白、电影电视剧、新闻、访谈、视频博客。

GigaSpeech 2 raw: Automated Crawling and Transcription

音频收集

由于低资源语言中人工标注数据的稀缺性,我们的数据集采集策略仅关注音频内容,而不考虑是否存在或文本配对的质量。这种策略使我们能够收集更广泛范围的音频数据。考虑到低资源语言的资源稀缺性和分布不均,我们有策略地重点爬取 YouTube 频道中的视频,基于两个关键假设:

  1. 优先选择热门频道可以确保一致的领域特征和音频质量
  2. 不同频道之间没有说话人重叠,从而简化后续的数据划分。

数据收集流程首先由人工定义感兴趣的内容类别,所选主题包括:农业、艺术、商业、气候、文化、经济、教育、娱乐、健康、历史、文学、音乐、政治、人际关系、购物、社会、体育、科技和旅游。除了多样的主题外,我们还考虑了不同的内容格式,包括:有声书、评论、讲座、独白、电影、新闻、访谈和 vlog。这种广泛的选择确保了数据集在多个领域的全面性,可支持研究与分析。

在准备好 YouTube 频道列表后,我们使用 yt-dlp 工具下载所有音频文件,格式为 WebM。随后,这些文件被转换为单声道的 WAV 格式,并重采样为 16 kHz 的采样率。


训练 / 开发 / 测试集的划分:为确保各数据集之间没有说话人重叠,我们通过人工方式验证不同频道间无重叠说话人,并将来自不同 YouTube 频道的数据分配至不同的子集。数据集被划分为三个独立的子集:训练集(TRAIN)、开发集(DEV)和测试集(TEST)。

其中,DEV 和 TEST 集各包含 10 小时内容,均由专业人员手动转录,其余部分则分配至训练集。表1展示了这三种语言的数据量分布。更详细的分析见附录B。


使用 Whisper 进行转录:我们使用 OpenAI 的 Whisper large-v3 模型自动转录音频文件。对于每段音频,从中间选择一个 30 秒的片段进行语言识别,仅对与目标语言匹配的音频进行转录。


使用 TorchAudio 进行强制对齐:虽然 Whisper 可生成时间戳,但经过检验发现其精度不足。因此,我们采用了 TorchAudio 中的强制对齐模型【参考多语言数据的强制对齐 CTC 强制对齐 API 教程】,它能为嘈杂的转录文本提供可靠的对齐,支持在 GPU 上高效处理,并能更好地处理较长的音频序列。


文本标准化:对转录文本进行标准化处理,包括:

  • 应用 Unicode NFKC(兼容性分解与合成)规范;
  • 将所有字符转换为大写;
  • 去除标点符号;
  • 将阿拉伯数字映射为对应语言中的文本数字。

多维度过滤:为了排除质量较差的样本,我们在文本和音频两个模态上设计了一系列启发式的过滤规则:

  • 字符集过滤(Charset Filtering):仅保留那些只包含目标语言字符集内字符的片段。
  • 语言置信度过滤(Language Confidence Filtering):使用 fastText 提供的语言识别(LID)模型,根据语言识别的置信度分数进行过滤,仅保留那些置信度高于预设阈值的片段。该方法能有效排除无意义或重复的内容。需要注意的是,基于音频的语言识别在文本转录之前已经完成。
  • 音频时长过滤(Audio Duration Filtering):根据音频时长进行过滤,仅保留长度在预设的最短和最长时间阈值之间的片段。
  • 样本平衡(Balancing):我们对因频道特定内容造成的转录文本重复进行精细控制,同时尽可能保留自然的语言使用模式。

GigaSpeech 2 精炼:迭代标签优化(Iterative Label Refinement)

由于 Whisper 转录的不准确性以及强制对齐边界不精确,部分样本的质量仍然较低。为了解决这个问题,我们设计了一种改进的 神经自监督训练(NST) 方法。如图 1 右下角所示,该方法以一部分质量不佳的伪标签样本为起点训练一个教师模型,并通过迭代方式不断扩展训练集、生成新的伪标签,并对其进行过滤。随后训练一个与教师模型等大或更大的学生模型,使用优化后的伪标签进行训练,并将其作为新的教师模型。

在每次 NST 步骤中,我们引入了 SpecAugmentBypass特征遮盖(feature mask)来注入噪声。其中:

  • Bypass 是一种随机深度机制,它通过学习通道级的标量权重,在模块输入与输出之间进行加权组合;
  • Feature mask 在前馈层和卷积层的隐藏维度上执行 Dropout,但在时间维度上保持共享。

这种有意识地加入噪声的方式,可以使学生模型学习在有噪声扰动下仍能保持与教师模型一致的行为,而教师模型在生成伪标签时则不会受到这些扰动 。

通过这样的迭代过程,数据质量将逐步得到提升。详细的算法步骤见附录 A 中的算法 1。

数据集组成:

GigaSpeech 2 提供了两个版本的数据集,分别为 raw 和 refined 版本,适用于有监督训练任务。训练集时长详情如下表所示:

GigaSpeech 2 开发集和测试集由海天瑞声的专业人员对语音数据人工标注得到,时长详情如下表所示:

主题和内容分布详情如下图所示,外圈表示主题领域,内圈表示内容形式:

实验结果:

我们将使用 GigaSpeech 2 数据集训练的语音识别模型与业界领先的 OpenAI Whisper (large-v3、large-v2、base)、Meta MMS L1107、Azure Speech CLI 1.37.0 和 Google USM Chirp v2 模型在泰语、印尼语和越南语上进行比较。性能评估基于 GigaSpeech 2、Common Voice 17.0 以及 FLEURS 三个测试集,通过字符错误率(CER)或单词错误率(WER)指标进行评估。结果表明:

1)在泰语上,我们的模型展现出卓越的性能,全面超越了所有竞争对手,包括微软和谷歌商用接口。值得一提的是,我们的模型在达到这一显著成果的同时,参数量仅为 Whisper large-v3 的十分之一。

2)在印尼语和越南语上,我们的系统与现有的基线模型相比表现出具有竞争力的性能。

中文NLP资源库

https://github.com/fighting41love/funNLP

在入门到熟悉NLP的过程中,用到了很多github上的包,遂整理了一下,分享在这里。

很多包非常有趣,值得收藏,满足大家的收集癖! 如果觉得有用,请分享并star:star:,谢谢!

长期不定时更新,欢迎watch和fork!:heart::heart::heart:

🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥                  
类ChatGPT的模型评测对比
类ChatGPT的资料
类ChatGPT的开源框架
LLM的训练_推理_低资源_高效训练
提示工程
类ChatGPT的文档问答
类ChatGPT的行业应用
类ChatGPT的课程资料
LLM的安全问题
多模态LLM
LLM的数据集
🍆 🍒 🍐 🍊                  🌻 🍓 🍈 🍅 🍍                    
语料库
词库及词法工具
预训练语言模型
抽取
知识图谱
文本生成
文本摘要
智能问答
文本纠错
文档处理
表格处理
文本匹配
文本数据增强
文本检索
阅读理解
情感分析
常用正则表达式
语音处理
常用正则表达式
事件抽取
机器翻译
数字转换
指代消解
文本聚类
文本分类
知识推理
可解释NLP
文本对抗攻击
文本可视化
文本标注工具
综合工具
有趣搞笑工具
课程报告面试等
比赛
金融NLP
医疗NLP
法律NLP
文本生成图像
其他

文本语料数据平台–CnOpenData

https://www.cnopendata.com/

https://www.cnopendata.com/all-data

CnOpenData是覆盖经济、法律、医疗、人文等多个学科维度的综合型数据平台,并持续提供个性化数据定制服务,现拥有500+个专题数据库,涵盖专利数据(1.4亿+量级)、工商注册企业数据(3.5亿+量级)、上市公司数据、土地数据、政府数据、新冠疫情数据、分地区数据、交通数据、气象数据等几十大数据系列,数值型数据和文本型数据并存,学术研究价值极高。

  本平台集灵活的数据定制服务、专业度极强的数据整合能力、强大的学术性于一体,为各领域中不同主体的研究决策提供优质、专业的数据支持。我们不仅为国内多所高校和著名学者提供持续的数据服务,在海外我们也入选了普林斯顿图书馆“来自中国的数据”系列。同时,我们与Neudata达成战略合作伙伴关系,也致力于为投资管理、私募股权、风险投资和企业领域的客户提供高质量的数据服务。目前,我们已成功入驻福建大数据交易所门户网站,与该司达成友好意向合作。

CnOpenData 是一个综合性的中文开放数据平台,致力于为学术研究、自然语言处理(NLP)和大模型训练提供丰富的文本语料资源。​该平台涵盖了多个领域的文本数据,具有广泛的应用价值。​


📚 CnOpenData 文本语料数据概览

CnOpenData 提供的文本语料数据种类繁多,主要包括以下几个方面:​

1. 法律与政策文本数据

  • 包含中国法律法规、规章、条约、五年规划等文本数据,是研究法律与政策问题的重要资源。

2. 政府工作报告数据

  • 涵盖国务院、省级、市级、县级政府的工作报告文本,时间跨度近20年,反映了国家行政发展的历程。

3. 专利文本数据

  • 提供中国专利的描述信息和权利要求信息,总量超过2300万条,时间范围从1985年到2022年12月31日。

4. 古典文学数据

  • 收录了唐诗宋词等中国古代文学作品,适用于文化研究和古文处理任务

5. 新闻与舆情数据

  • 包括CCTV新闻联播、人民日报文本数据、A股上市公司新闻舆情数据等,适用于舆情分析和新闻研究。​

6. 企业与金融文本数据

  • 涵盖A股上市公司公告、股吧评论、投资者关系管理数据等,支持金融文本分析和情感分析研究。

🔍 数据获取与使用

CnOpenData 提供在线访问和下载服务,用户可以根据研究需求选择相应的数据集。​部分数据可能需要注册或申请权限。​具体信息可参考其官方网站:CnOpenData


CnOpenData 的丰富文本语料资源为中文自然语言处理和大模型训练提供了坚实的数据基础。​无论是法律政策研究、古典文学分析,还是金融文本挖掘,CnOpenData 都是一个值得信赖的数据来源。

Baichuan-Auido端到端训练语音交互大模型

Baichuan-Auido 是Baichuan最新的端到端训练的语音交互大模型,无缝集成了音频理解和生成功能,支持高质量可控的中英双语实时对话。

  • Baichuan-Audio-Base: 为促进语音大模型发展,我们开源了使用高质量海量数据训练的端到端语音基座模型。该模型未经SFT指令微调,可塑性强。
  • Baichuan-Audio: 接受文本、音频作为输入,并生成高质量文本和语音输出,能够在保持预训练 LLM 智商能力下实现无缝的高质量语音交互,和用户进行实时语音对话

Introduction

Baichuan-Audio,这是一款为实时语音交互设计的端到端音频大语言模型。与 MoshiGLM-4-Voice [输出 文本+speech token,speech token 接入cosyvoice解码器合成音频 ] 类似,Baichuan-Audio 扩展了预训练的大语言模型(LLM),以支持端到端的音频输入和输出。该模型通过集成 Baichuan-Audio-Tokenizer 和流匹配解码器来实现上述功能,前者将音频信号离散化为音频标记,后者则将音频标记解码为语音波形。

Baichuan-Audio-Tokenizer 的运行帧率为 12.5 Hz,并采用多码本离散化技术,以保留语义和声学信息,从而支持 LLM 中语音模态的有效建模。Baichuan-Audio 还引入了独立的音频头(audio head),以提升模型处理和捕捉音频特征的能力。

我们在包含约 1000 亿个标记的音频-文本数据上进行了大规模预训练。基于包含 88.7 万小时的大型音频语料库,我们采用了交错数据处理方法,以在 LLM 框架内实现高效的知识迁移。

贡献:

  • 统一且卓越的语音能力:我们设计了一个 8 层 RVQ 音频分词器Baichuan-Audio-Tokenizer),在 12.5 Hz 帧率下实现了对语义和声学信息的最佳平衡,支持高质量、可控的中英文双语实时对话。
  • 端到端语音交互Baichuan-Audio 能够处理文本和音频输入,并生成高质量的文本和语音输出,支持无缝的高质量语音交互,同时保持智能响应能力。
  • 开源支持:我们已开源训练数据和基础模型,为语音交互领域的研究与创新提供了宝贵的资源与工具。

模型

该模型结构围绕三大核心组件构建:Baichuan-Audio分词器音频大语言模型(audio LLM),以及音频解码器

处理流程从音频分词器开始,它通过捕捉语义与声学信息,将原始音频输入转化为离散的token。这一步是通过 Whisper编码器残差矢量量化(RVQ)技术相结合实现的。

随后,音频LLM以交替方式生成对齐的文本与音频token,并借助一个特殊的token实现文本与音频模态间的无缝切换。接下来,这些音频token将由一个独立的音频head进一步处理。

最后,模型通过一个基于Flow-Matching的方法的音频解码器,从这些token中重建出高质量的Mel谱图,再通过 声码器(vocoder)将其转换为音频波形。

Audio Tokenization

当前音频分词器面临的主要挑战,在于如何在捕捉语音信号中的语义信息与声学信息之间取得最佳平衡。相较于像 HuBERT 这样的自监督学习方法,Baichuan-OmniQwen-Audio 这类模型在捕捉语义特征方面提供了更直接的路径。【ASR任务

与此同时,像 EncodecSpeechTokenizer这样的音频分词器则在完整重建音频特征方面表现尤为出色。【音频重建任务

为了结合这两类方法的优点,提出了 Baichuan-Audio-Tokenizer:一个基于 残差矢量量化(RVQ)多目标训练【重建音频任务以及ASR任务】 的音频分词器,如图2所示。Baichuan-Audio-Tokenizer 保留了来自 Baichuan-Omni音频编码器语言模型组件,并在编码器之后新增了一个 音频解码器结构,用于重建输入的 Mel 频谱图。该音频分词器采用多目标优化方法进行训练,从而能够有效捕捉输入语音中的语义信息与声学信息。

Baichuan-Audio-Tokenizer 采用了每秒 12.5 个 token 的帧率设计。高层次的音频特征首先通过 Whisper Large 编码器Mel 频谱图(Mel spectrogram) 中提取,随后通过一个 残差卷积网络 进行 4× 下采样,以获得低帧率的音频特征。

由于 Whisper 编码器输出的音频特征是高维的,在量化过程中需尽可能减少信息损失,因此我们使用了 8 层残差矢量量化(RVQ)。我们设计了逐层递减的码本大小,依次为:{8K, 4K, 2K, 1K, 1K, 1K, 1K, 1K}

音频解码器采用与 Whisper 编码器完全对称的结构,通过一个 反卷积模块(deconvolution module) 对输入进行 4× 上采样。之后,序列经过一系列 Transformer 层,并进一步进行 2× 上采样,最终得到每秒 100 个 token 的粗略 Mel 频谱表示。设计了一个 精细化网络,以提升 Mel 频谱重建的精度,最终获得高质量的精细 Mel 频谱特征。

在音频重建损失函数的设计中,我们,采用 L2 损失与 L1 损失的组合 作为重建损失。其形式定义如下:

为提升音频重建的质量,我们引入了一种 多尺度 Mel 频谱损失(multiscale Mel loss) 方法,使用了两种不同的 hop length(帧移)window size(窗长)。该方法有效缓解了在从解码器输出转换为 Mel 频谱过程中,由于降维和下采样插值所导致的信息损失。通过在多个尺度上进行优化,该方法能够保留更多细粒度的音频特征,从而提升重建的保真度和训练的稳定性。

对于预训练的语言模型(LLM),其目标是在音频理解任务中最大化文本输出的 softmax 概率。为了确保语义对齐,我们在训练过程中保持预训练语言模型参数不更新(冻结),仅最大化其在音频理解任务中预测文本的 softmax 概率。这种做法有助于保持音频分词器与文本LLM之间的语义对齐关系

在选择 LLM 的规模时,我们观察到,在音频理解模型的训练过程中,不同规模的 LLM 对于 ASR(自动语音识别)指标的影响很小。因此,我们最终选用了一个拥有 15亿参数(1.5B) 的预训练 LLM 进行持续训练。这个规模的模型与音频解码器在训练过程中表现出良好的匹配性,两者的梯度范数差距较小,有助于提升整体训练的稳定性。

在量化模块的训练中,我们采用了 指数移动平均(EMA) 策略来更新码本,并使用 直通估计器(STE, Straight-Through Estimator) 来反向传播梯度至编码器。此外,我们还使用了 向量量化承诺损失(VQ commitment loss),以确保编码器的输出能够紧密对齐至码本中的条目。

VQ 承诺损失定义如下:

总损失是多尺度重建损失、文本音频对齐损失(对于LLM)和 VQ 承诺损失的加权组合:

训练数据。 除了自动语音识别 (ASR)、音频查询回答 (AQA) 和语音到文本翻译 (S2TT) 等传统任务外,我们还将一定比例的音频文本交错数据纳入训练过程。此策略旨在增强 VQ 模块对复杂上下文场景进行建模的能力。具体来说,训练数据集包括 135k 小时的 ASR 数据、11k 小时的 AQA 数据、9k 小时的 S2TT 翻译数据和 52k 小时的音频文本交错数据。

Evaluation of Baichuan-Audio-Tokenizer. 我们使用相同的数据和基础模型训练了音频理解模型的非 VQ 版本作为基线。对于 VQ 和非 VQ 模型,LLM 的参数在训练期间保持冻结,以确保公平比较并隔离 VQ 机制对整体性能的影响。从表 1 中,我们可以看到 8 层 vq 更接近基线,并且语义内容损失最少。如表 2 所示,8 层 VQ 模型和基线在多个数据集上的 ASR 结果表明,训练后的 8 层 VQ 模型实现了具有竞争力的性能。

基于流匹配的音频解码器

为了提升合成音频的质量与保真度,我们对音频解码模块进行了增强,引入了 Flow-Matching 模型,在 24 kHz 采样率的音频数据上训练,用于生成目标 Mel 频谱图。该 Flow-Matching 解码器 包括两个主要部分:Pre-Net条件解码器(Conditional Decoder),如图 3 所示。

Pre-Net 负责将中间表示映射为供声码器(vocoder)使用的先验分布,结构上由一个 多层感知机(MLP) 和一个 12 层 Transformer 组成:MLP 将输入的 1280维、50 Hz 的音频特征压缩投影至 512维;接着,Transformer 对其进行精细建模;最后通过一个线性层转换为 80维的 Mel 频谱图

条件解码器(Flow-Matching Conditional Decoder)。该部分采用基于 U-Net 的结构,并结合 OT-CFM(Optimal Transport Conditional Flow Matching) 方法进行训练,灵感来源于 Matcha-TTSCosyVoice

U-Net 结构包括:一个下采样模块、一个上采样模块,以及 12 个中间模块,每个模块由一个 ResNet1D 层 和一个 Transformer 层(256维)组成。最终,再通过一个线性层将特征投影为 80维 Mel 频谱图

需要注意的是,由于模型已通过重建损失编码了声学信息(如说话人音色),因此 不需要额外的说话人嵌入(speaker embeddings)。生成的 Mel 频谱图将通过 HiFi-GAN 声码器转换为音频波形。

训练细节: 流匹配模型在约 27 万小时的音频上进行了训练,包括普通话、英语、各种方言和多语言数据。使用集成 ASR 和 MOS 过滤来改善数据质量。在训练期间,AudioEncoder、VQ 层和 AudioDecoder 是固定的,而流匹配 Pre-Net 和解码器则在 Pre-Net 中添加了先验损失进行训练。

重建性能评估

Audio LLM

Baichuan-Audio 通过整合新推出的 Baichuan-Audio-Tokenizer(包括音频嵌入层和独立的音频头)扩展了预训练的 LLM。具体来说,来自 Baichuan-Audio-Tokenizer 的音频标记首先通过音频嵌入层转换为音频嵌入。音频 LLM 交替生成对齐的文本标记和音频标记,并通过特殊标记实现文本和音频之间的模态切换。生成的音频标记由独立的音频头处理,该头由 3 层深度转换器和 8 个分类头组成。最后,音频嵌入通过音频编码器(例如基于流匹配的音频编码器和声码器)以重建音频波形。

音频嵌入。 首先,将 8 个离散音频标记通过相应数量的嵌入层相加以获得音频嵌入。由于包含一个额外的特殊标记来表示音频标记生成的结束,因此每个嵌入层的输入维度都比相应码本的大小大一。

音频头。生成的音频标记使用独立的音频头进行处理,该音频头由 3 层深度转换器和 8 个分类头组成。深度转换器的深度为 8,可预测 8 个码本的音频嵌入。最后,分类头用于获取与音频标记相对应的每个码本的逻辑值。

与纯文本大模型相比,语音语言模型(speech language models) 往往在生成语义连贯的输出方面存在困难。研究 [36] 指出,这一问题主要源于语音中引入了 时长信息(duration)副语言信息(paralinguistic information),例如语调、语气等。

为了解决这一问题,我们在预训练阶段引入了两种类型的交错数据(interleaved data)音频-文本交错数据(INTLV, Audio-Text Interleaved)文本到语音交错数据(ITTS, Interleaved Text-to-Speech)

这两种数据设计有助于提升模型的音频理解与生成能力

在推理阶段,离散音频 token 会被送入 LLM,模型随后以交替的方式生成对齐的 文本 token音频 token。我们引入了特殊 token,用于在文本与音频模态间切换。这种强制对齐策略(forced alignment approach)确保了模型会优先生成连贯完整的文本内容,再生成对应的音频 token,从而有效引导音频 token 的生成,缓解语义退化问题

Pre-training details

数据: 交错数据由交替的文本和音频模态组成,并用标点符号分隔以促进跨模态知识传输。交错对齐的生成数据由完全对齐的文本和音频内容组成,旨在增强模型在文本监督下生成音频标记的能力。音频-文本配对数据(例如,ASR 和 TTS 数据)提高了基本语音任务的性能。另一方面,纯音频数据增强了独立处理音频模态的能力。交错数据收集流程如图 4 所示,分为爬取数据和合成数据两种,共获取了 14.2 万小时的 ITTS 数据和 39.3 万小时的 INTLV 数据。交错数据采用LLM进行切分,即根据文本内容中的标点符号或自然停顿进行自然切分。对于合成数据的切分文本数据,我们还采用了大型语言模型进行文本归一化 。在预训练过程中,我们排除了音频文本交错数据中音频片段的损失计算,这一设计选择与 GLM-4-Voice 不同。 在当前约 50B 的训练音频数据规模下进行的经验观察表明,计算 INTLV 数据中音频片段的损失会导致性能下降。这一决定的合理性还在于音频和文本之间固有的模态冲突,以及推理过程中不需要文本到音频的延续。因此,我们省略了 INTLV 数据中音频片段的损失计算。对于 ITTS 数据,除了初始文本片段外,还计算了音频和文本片段的损失,以增强模型在文本引导音频生成方面的能力。

两阶段训练策略。 为了解决语音特征与文本特征的不同特征可能导致的LLM中原始文本知识的潜在破坏,我们提出了一种两阶段训练策略来缓解模态之间的训练冲突。在第一阶段,LLM的参数保持不变,只允许更新音频嵌入层和音频头的参数。在第二阶段,除文本嵌入层和 LM 头的参数外,所有参数都可训练

监督微调细节

监督微调阶段旨在增强模型在一系列任务中遵循复杂指令的能力。音频 SFT 数据来自大量文本指令。使用基于指令类型、多样性和整体质量的过滤策略选择高质量指令。使用 10,000 种不同语音音调的精选数据集合成音频指令。在自然对话停顿处生成和分割相应的文本响应,然后使用指定的语音音调转换为音频。这些数据集涵盖多项任务,包含大约 242k 个音频数据对。

为了确保合成音频的质量,自动语音识别 (ASR) 被应用于生成的音频文件。将 ASR 输出与原始文本进行比较以验证质量。此过程可创建高质量的端到端对话数据集。有错误的合成音频文件将添加到文本转语音 (TTS) 数据集,而有 ASR 错误的案例将合并到 ASR 训练数据集中。这种合并具有挑战性的示例的迭代方法可增强 TTS 和 ASR 的性能。

需要特别注意处理文本转音频导致原始文本响应不适合作为音频回复的情况。此问题是由于文本和音频之间的语调、速度和表达方式的差异而产生的。某些文本内容在转换为音频时可能无法传达预期含义或引入歧义。因此,在生成过程中仔细检查和调整此类情况至关重要。这可确保合成数据准确反映现实世界的语音交互场景,从而提高数据可靠性并提高模型的实际适用性。

Experiment

 综合智力测评

基于语音的对话模型面临的一大挑战是,与纯文本对话模型相比,其性能往往会下降。为了评估语音模型的“智能”,我们​​以文本到文本的建模能力为基准,评估预训练的语音到文本模型的性能。评估数据集包括两种类型:故事延续能力和常识推理能力。

Performance in ASR/TTS Tasks

Fleurs 、 WenetSpeech 和 KeSpeech 上的主要结果 

Performance in Audio Understanding Tasks

模型在音频理解基准测试中表现优异,超越了最新的开源模型。

两种不同的设置:1)非级联方式的语音到语音生成(表示为 S → S),其中输入是音频,输出是交错的文本和音频。然后合并输出文本并用于评估。2)语音到文本生成(表示为 S → T,其中输入是音频,输出是文本,用于评估。

总结

Baichuan-Audio,这是一种专为音频设计的端到端大型语言模型,集成了语音理解和生成功能。该模型通过预训练的 ASR 模型对 12.5 Hz 的语音信号进行多码本离散化,从而保留了语音标记中的语义和声学信息。此外,还专门设计了一个独立的音频头来高效处理这些标记。为了平衡音频建模和语言能力保留,采用了交错数据的两阶段预训练策略。所提出的框架通过文本引导的对齐语音生成来支持语音交互,从而进一步保留了模型的基础认知能力。

Qwen2.5-Omni -多模态端到端大模型

这是 Qwen 系列中全新的旗舰级多模态大模型,专为全面的多模式感知设计,可以无缝处理包括文本、图像、音频和视频的各种输入,同时支持流式的文本生成和自然语音合成输出

主要特点

  • 全能创新架构:我们提出了一种全新的Thinker-Talker架构,这是一种端到端的多模态模型,旨在支持文本/图像/音频/视频的跨模态理解,同时以流式方式生成文本和自然语音响应。我们提出了一种新的位置编码技术,称为TMRoPE(Time-aligned Multimodal RoPE),通过时间轴对齐实现视频与音频输入的精准同步。
  • 实时音视频交互:架构旨在支持完全实时交互,支持分块输入和即时输出
  • 自然流畅的语音生成:在语音生成的自然性和稳定性方面超越了许多现有的流式和非流式替代方案。Qwen2.5-Omni 支持修改输出语音的音色类型,目前支持2种音色类型。
  • 全模态性能优势:在同等规模的单模态模型进行基准测试时,表现出卓越的性能。Qwen2.5-Omni在音频能力上优于类似大小的Qwen2-Audio,并与Qwen2.5-VL-7B保持同等水平。
  • 卓越的端到端语音指令跟随能力:Qwen2.5-Omni在端到端语音指令跟随方面表现出与文本输入处理相媲美的效果,在MMLU通用知识理解和GSM8K数学推理等基准测试中表现优异。

摘要:

Qwen2.5-Omni,这是一种端到端的多模态模型,能够感知多种模态信息,包括文本、图像、音频和视频,同时以流式方式生成文本和自然语音响应。为了实现多模态信息输入的流式处理,Qwen2.5-Omni 的音频和视觉编码器采用了 分块处理(block-wise processing) 方法。该策略有效地解耦了长序列多模态数据的处理,将感知任务交由多模态编码器,而将长序列建模任务交由大语言模型(LLM),这种分工机制通过共享注意力机制增强了不同模态的融合。

为同步视频输入的时间戳与音频,我们采用 交错(interleaved) 方式对音视频数据进行序列化,并提出了一种新颖的位置编码方法——TMRoPE(Time-aligned Multimodal RoPE,时间对齐多模态旋转位置编码)ps:关于旋转位置编码

在同时生成文本和语音的过程中,为了避免两种模态之间的相互干扰,我们提出了 Thinker-Talker 架构。在该框架下:

  • Thinker 作为大语言模型,负责文本生成;
  • Talker 是一个 双轨自回归模型(dual-track autoregressive model),它直接利用 Thinker隐藏表示来生成音频标记(audio tokens)作为输出

ThinkerTalker 均以端到端方式进行训练和推理。此外,为了实现流式音频标记解码,我们引入了 滑动窗口 DiT(sliding-window DiT),通过限制感受野来减少初始数据包延迟。

Qwen2.5-Omni 的关键特性可总结如下:

  • Qwen2.5-Omni 是一个 统一多模态模型,能够感知所有模态信息,并以流式方式同时生成文本和自然语音响应。
  • 我们提出了一种新颖的位置编码算法 TMRoPE(Time-aligned Multimodal RoPE),该方法显式融入时间信息,以实现音视频的同步。
  • 我们设计了 Thinker-Talker 架构,以支持 实时理解语音生成
  • 在多模态基准测试中,Qwen2.5-Omni 展示了卓越的性能,相较于类似规模的单模态模型表现更优,尤其在语音指令跟随任务上,其能力可与纯文本输入任务相媲美。
  • 在需要整合多种模态的信息处理任务中(如 OmniBench 评测),Qwen2.5-Omni 达到了 最先进(state-of-the-art) 的性能。
  • 在语音生成方面,Qwen2.5-Omniseed-tts-eval 评测中表现出色,展现出强大的语音生成能力和稳健性。
Thinker 负责 文本生成
Talker 通过直接接收 Thinker 提供的高级表示,专注于 流式语音标记生成

Architecture:

图 2 所示,Qwen2.5-Omni 采用 Thinker-Talker 架构,其中:

  • Thinker 类似于大脑,负责处理和理解 文本、音频、视频 等模态输入,生成高级表示和对应的文本输出。
  • Talker 类似于人类的嘴巴,以流式方式接收 Thinker 生成的高级表示和文本,并顺畅地输出离散语音标记。

架构细节

  • Thinker 采用 Transformer 解码器,并配备 音频编码器图像编码器,以增强信息提取能力。
  • Talker 采用 双轨【同时接收文本token和语音token】自回归 Transformer 解码器 结构(受 Mini-Omni [Xie & Wu, 2024] 启发)。
  • 训练和推理 过程中,Talker 直接接收 Thinker 的高维表示,并共享其全部历史上下文信息,使整个架构作为一个统一模型进行 端到端训练和推理
  • Mini-Omni
  • 感知:

    Qwen2.5-Omni 通过 Thinker文本、音频、图像和视频(无音频) 进行处理,将它们转化为一系列隐藏表示作为输入。具体步骤如下:

    1. 文本输入
      • 对于文本输入,我们采用 Qwen 的分词器(Byte-level Byte-pair Encoding),词汇表包含 151,643 个常规标记。
    2. 音频输入和视频中的音频
      • 音频输入(包括视频中的音频部分)首先被重采样至 16kHz 的频率,然后将原始波形转化为 128 通道的梅尔频谱图(mel-spectrogram),窗口大小为 25ms,步幅为 10ms
      • 音频编码器采用 Qwen2-Audio 的音频编码器(Chu et al., 2024b),每一帧音频表示大约对应于 原始音频信号的 40ms 时长。
    3. 图像和视频输入
      • 对于图像输入,我们采用 Qwen2.5-VL 的视觉编码器(基于 Vision Transformer(ViT) 模型,约 6.75 亿个参数),能够有效处理图像和视频输入。
      • 视觉编码器使用混合训练方法,结合图像和视频数据,确保其在图像理解和视频理解上的高效表现。
      • 为了最大程度地保留视频信息并适应音频采样率,我们采用 动态帧率(dynamic frame rate)进行视频采样。此外,为保持一致性,每个图像都被视为两个相同的帧。

    视频与TMRoPE

    TMRoPE

    我们提出了一种 音视频时间交错算法(time-interleaving),并引入了新的 位置编码方法 —— TMRoPE(Time-aligned Multimodal RoPE)。如 图 3 所示,TMRoPE 编码了多模态输入的三维位置,采用 多模态旋转位置编码(M-RoPE)ps: Qwen2-VL多模态旋转位置编码 多模位置编码】,并结合绝对时间位置。具体方法是将原始的旋转位置编码分解为三个组件:时间、图像高度和宽度。

    • 文本输入 使用相同的位置信息(位置 ID)来处理各组件,使得 M-RoPE 在文本输入中与 1D-RoPE 等效。
    • 音频输入 也使用相同的位置信息,并引入绝对时间位置编码,每 40ms 对应一个时间 ID
    • 图像输入,每个视觉标记的时间 ID 保持不变,而高度和宽度组件则根据标记在图像中的位置分配不同的 ID。
    • 音视频输入 情况下,音频依然使用相同的时间位置 ID 编码,每帧 40ms。视频则作为一系列图像处理,每帧对应的时间 ID 增量,同时高度和宽度组件的 ID 分配与图像一致。由于视频的帧率不是固定的,我们根据每帧实际时间动态调整时间 ID,以确保每个时间 ID 对应 40ms。

    在多模态输入场景下,每种模态的位置信息初始化时会将前一模态的最大位置 ID 增加 1。

    视频与音频时间交错方法

    为了使模型能够同时接收视觉和听觉信息,我们采用 时间交错方法(time-interleaving) 对带有音频的视频进行特殊设计。具体做法是:

    • 将视频的音频表示按 实际时间2 秒 切分为块。
    • 在每个 2 秒块中,先安排视频的视觉表示,再安排音频表示,从而将视频和音频的表示交错排列。

    生成:

    文本生成由 Thinker 直接生成,其逻辑与广泛使用的大型语言模型(LLM)相同,文本通过基于词汇表的概率分布进行自回归采样生成。生成过程中可能会采用一些技术,如 重复惩罚(repetition penalty)top-p 采样以提高文本生成的多样性

    语音生成中,Talker 接收 Thinker 生成的高维表示和采样的文本标记高维表示和离散采样标记的结合是这个过程中的关键。作为流式算法,语音生成需要在整个文本完全生成之前预测文本的语气和态度。Thinker 提供的高维表示隐含了这些信息,使得语音生成过程更自然。此外,Thinker 的表示主要体现语义相似性而非语音相似性,因此,即使是发音上差异较大的词,其高维表示可能非常相似,这就需要输入离散的采样标记来消除这种不确定性。

    我们设计了一个高效的语音编解码器 qwen-tts-tokenizer,它能够高效地表示语音的关键信息,并通过因果音频解码器流式解码成语音。接收到信息后,Talker 开始自回归地生成音频标记和文本标记语音生成过程中不需要与文本进行逐字和逐时间戳的对齐,这大大简化了训练数据的要求和推理过程。

    流式设计:

    在音频和视频流式交互的背景下,初始包延迟是衡量系统流式性能的关键指标。这个延迟受到多个因素的影响:1)多模态信息输入处理引起的延迟;2)从接收到第一个文本输入到输出第一个语音标记之间的延迟;3)将第一个语音段转换为音频的延迟;4)架构本身的固有延迟,这与模型大小、计算 FLOP 数以及其他因素相关。本文将随后讨论在这四个维度上减少这些延迟的算法和架构改进。

    支持预填充(Support Prefilling)

    块状预填充(Chunked-prefills) 是现代推理框架中广泛使用的一种机制。为了支持模态交互中的预填充机制,我们修改了音频和视觉编码器,以支持沿时间维度的 块状注意力(block-wise attention)。具体而言,音频编码器从对整个音频的全局注意力改为对每个 2 秒 的音频块进行注意力计算。视觉编码器则使用 Flash Attention 来实现高效的训练和推理,并通过一个简单的 MLP 层 将相邻的 2×2 标记合并为一个标记。补丁大小设置为 14,允许不同分辨率的图像被打包成一个序列。

    流式编解码器生成(Streaming Codec Generation)

    为了促进音频的流式传输,特别是对于长序列的流式处理,我们提出了一种 滑动窗口块注意力机制(sliding window block attention),该机制限制了当前标记访问的上下文范围。具体来说,我们采用了 Flow-MatchingDiT 模型。输入的code通过 Flow-Matching 转换为 梅尔频谱图(mel-spectrogram),然后通过修改后的 BigVGAN 将生成的梅尔频谱图重建回波形。

    DiT中用于编解码到波形生成的滑动窗口块注意力机制的示意图

    预训练

    Qwen2.5-Omni 由三个训练阶段组成。在第一阶段,我们锁定大型语言模型(LLM)的参数,专注于训练视觉编码器和音频编码器,利用大量的音频-文本和图像-文本对来增强 LLM 的语义理解能力。在第二阶段,我们解冻所有参数,并使用更广泛的多模态数据进行训练,以实现更全面的学习。在最后阶段,我们使用长度为 32k 的数据来提升模型理解复杂长序列数据的能力。

    该模型在一个多样化的数据集上进行预训练,数据类型包括图像-文本、视频-文本、视频-音频、音频-文本和文本语料库。我们将层次标签替换为自然语言提示,遵循 Qwen2-Audio(Chu et al., 2024a)的方法,这可以提高模型的泛化能力和指令跟随能力。

    在初始预训练阶段,Qwen2.5-Omni 的 LLM 组件使用 Qwen2.5(Yang et al., 2024b)中的参数初始化,视觉编码器与 Qwen2.5-VL 相同,音频编码器则使用 Whisper-large-v3(Radford et al., 2023)初始化。两个编码器分别在固定的 LLM 上进行训练,最初都专注于训练各自的适配器,然后再训练编码器。这个基础训练对装备模型具有坚实的视觉-文本和音频-文本关系和对齐的理解至关重要。

    预训练的第二阶段标志着一个重要的进展,它增加了 8000 亿个图像和视频相关的数据标记,3000 亿个音频相关的数据标记,以及 1000 亿个视频带音频相关的数据标记。这一阶段引入了更多的混合多模态数据和更广泛的任务,增强了听觉、视觉和文本信息之间的互动,并加深了理解。加入多模态、多任务数据集对于培养模型同时处理多任务和多模态的能力至关重要,这是一项处理复杂现实世界数据集的关键能力。此外,纯文本数据在保持和提高语言能力方面也起着重要作用。

    为了提高训练效率,我们在之前的阶段将最大标记长度限制为 8192 个标记。随后,我们引入了长音频和长视频数据,并将原始文本、音频、图像和视频数据扩展到 32,768 个标记进行训练。实验结果表明,我们的数据在支持长序列数据方面取得了显著的改进。

    Post-training

    数据格式:

    Thinker

    在后训练阶段,我们采用 ChatML 格式(OpenAI, 2022)进行指令跟随数据的微调。我们的数据集包括纯文本对话数据、视觉模态对话数据、音频模态对话数据以及混合模态对话数据。

    Talker

    我们为 Talker 引入了一个三阶段训练过程,使 Qwen2.5-Omni 能够同时生成文本和语音响应。在第一阶段,我们训练 Talker 学习上下文延续。在第二阶段,利用 DPO(Rafailov et al., 2023)增强语音生成的稳定性。在第三阶段,我们应用了多语者指令微调,以提高语音响应的自然性和可控性。

    上下文学习(ICL) 训练阶段,除了像 Thinker 那样使用文本监督外,我们还通过下一标记预测执行语音延续任务,利用包含多模态上下文和语音响应的广泛对话数据集。Talker 学会了从语义表示到语音的单调映射,同时获得了根据上下文生成具有多样化属性(如韵律、情感和口音)的语音的能力。此外,我们还实施了音色解耦技术,以防止模型将特定的声音与不常见的文本模式关联。

    为了扩大语者和场景的覆盖范围,预训练数据不可避免地包含标签噪声和发音错误,这可能导致模型产生幻觉。为了解决这个问题,我们引入了强化学习阶段来提高语音生成的稳定性。具体来说,对于每个请求和响应文本与参考语音配对的情况,我们构建了一个数据集 D,其中包含三元组数据 (x, yw, yl),其中 x 是输入序列的输入文本,ywyl 分别是良好和不良生成的语音序列。我们根据这些样本的奖励分数进行排名,奖励分数与 词错误率(WER)标点停顿错误率 相关。

    最后,我们对上述基础模型进行了语者微调,使 Talker 能够采用特定的声音并提高其自然性。

    Performance  

    我们对 Qwen2.5-Omni 进行了全面评估,与类似大小的单模态模型和 Qwen2.5-VL-7B、Qwen2-Audio 和 Gemini-1.5-pro 等闭源模型相比,该模型在所有模态中均表现出色。在需要集成多种模态的任务(例如 OmniBench)中,Qwen2.5-Omni 实现了最佳性能。此外,在单模态任务中,它在语音识别(Common Voice)、翻译(CoVoST2)、音频理解(MMAU)、图像推理(MMMU、MMStar)、视频理解(MVBench)和语音生成(Seed-tts-eval 和主观自然度)等领域表现出色。

    DeepSpeed Ulysses: 训练极长序列Transformer模型的系统优化

    从生成性AI到科研模型,长序列训练正在变得非常重要。 在生成性AI领域,会话式AI、长文档摘要和视频生成等任务都需要在空间和时间层面对长上下文进行推理。 例如,多模态基础模型,如同时处理语音、图像和波形的模型,需要对具有极长序列的高维输入进行长上下文推理。 同样,章节和书籍级别的摘要(数万甚至数十万字)在会话式AI和摘要任务中也非常重要。

    对于科学AI来说,长序列同样至关重要,它为更好地理解结构生物学、医疗保健、气候和天气预测以及大分子模拟打开了大门。 例如,通过在基因序列上训练大型语言模型,我们可以创建可以使用极长序列(人类基因组有64亿个碱基对)学习基因组进化模式的语言模型。在医疗保健领域,以所有的患者护理记录为条件的诊断预测模型需要极长序列的上下文。

    尽管对于生成性AI和科学AI来说,长序列长度的重要性逐渐增长,但现有的大型模型训练系统和底层的并行技术(数据、张量、流水线、序列并行)并不能支持高效的长序列训练。现有并行方法存在两个主要挑战。首先,现有的数据、张量和流水线等并行方法无法解决序列维度的扩展问题。其次,由于内存通信效率低下,现有的序列并行方法不够高效。此外,现有方法的易用性不足,需要进行侵入性和复杂易出错的代码重构。

    为了解决这些问题,我们很高兴宣布推出DeepSpeed-Ulysses(或称为Ulysses,一个非常长的小说),这是一种简单、易用且高效的方法,用于支持具有极长序列长度的高效可扩展LLM训练。

    DeepSpeed-Ulysses将各个样本在序列维度上分割给参与的GPU。然后,在attention计算之前,它对已分割的查询(Q)、键(K)和值(V)执行all-to-all通信操作,以使每个GPU接收完整的序列,但仅用于注意力头的非重叠子集。这使得参与的GPU可以并行计算不同的注意力头。最后,DeepSpeed-Ulysses还使用另一个all-to-all来在注意力头上收集结果,同时重新在序列维度上进行分区。

    DeepSpeed-Ulysses及其与此博客一起发布的实现的关键特性如下:

    • 与现有系统相比,序列长度增加了4倍,支持训练超过百万个token的序列。
    • 与现有系统相比,通信减少了超过10倍,导致吞吐量提高了高达2.5倍,并且每个GPU的持续吞吐量超过175 TFlops(超过硬件峰值的54%)。
    • 完全通用的attention:DeepSpeed序列并行支持密集和稀疏的注意力,并可与高效的注意力实现(如FlashAttention v2)一起工作。
    • 支持大规模模型训练:DeepSpeed序列并行不仅支持大序列长度,还可以与ZeRO-3并用支持大模型尺寸。
    • 易于使用和迁移,最小化对现有训练框架的代码更改要求。

    在接下来的章节中,我们详细讨论DeepSpeed-Ulysses的核心设计、通信复杂度分析、实验评估以及与现有工作的比较,并展示其可用性和使用指南。

    DeepSpeed-Ulysses的核心设计

    图1显示了DeepSpeed-Ulysses的核心设计。与已知的Transformer架构一样,设计由N个输入序列在P个可用设备上分区组成。每个本地N/P分区都被投影到查询(Q)、键(K)和值(V)嵌入中。接下来,(QKV) 嵌入通过参与计算设备之间的高度优化的全对全集合(all-to-all collectives)进行全局的 QKV 收集。在全对全集合后,每个头的注意力计算形式为:

    注意力计算后,另一个全对全集合将注意力计算的输出上下文张量转换为序列(N/P)并行,用于Transformer模型层的剩余模块中的后续操作(MLP MatMul、层归一化等)。

    显著的通信量减少

    DeepSpeed-Ulysses与其他现有的长序列方法的区别在于其更小的累积通信量以及随着序列并行度增加而更好的可扩展性,如下所示:

    在具有节点内NVSwitch互连和节点间胖树IB拓扑的现代集群上,针对一个聚合消息大小为M的全对全传输,传输到P个GPU上的每个链接的通信量为M/P。 对于隐藏层大小为h、序列长度为N且并行度为P的Transformer模型,DeepSpeed序列并行会在注意计算之前对QKV投影执行聚合消息大小为3Nh的全对全操作,并在注意计算之后对输出上下文投影执行大小为Nh的另一个全对全操作。因此,DeepSpeed序列并行每个链接的聚合通信量为4Nh/P(或O(N/P)复杂度)。值得注意的是,当N和P成比例增加时,这个通信量是恒定的。

    相比之下,现有的方法,如Megatron-LM,在N线性增长的情况下会导致通信量线性增加,而与P无关,从而导致O(N)的通信复杂度。例如,Megatron-LM对每个Transformer模型层都执行两个大小为Nhall-gather操作,以及两个大小为Nhreduce-scatter操作。然而,当P >> 1时,大小为M的每个all-gather和reduce-scatter的成本仍然是M,而不是M/P。因此,Megatron-LM序列并行会导致每个链接的通信量为4Nh,这比DeepSpeed序列并行大P倍。这使得DeepSpeed序列并行可以在实现显著更高的训练效率的同时支持极长序列训练。我们的实验评估结果与此理论分析相符。

    DeepSpeed-Ulysses的其他亮点

    通用的注意力解决方案

    DeepSpeed分布式注意力模块的实现足够通用,以支持任何类型的注意力,例如自注意、交叉注意和因果注意,无论是它们的密集还是稀疏版本,以及支持局部注意层级上的长序列的各种优化内核,例如不同版本的FlashAttention。

    DeepSpeed-Ulysses的通用性来自其核心设计的模块化性质:一个以注意力为中心的序列并行设计。在注意力计算之前,序列并行性是对N/P分区的,而注意力计算是对每个头的并行性,每个头的注意力全都保留,但头的数量较少,因此注意力计算可以用任何类型的注意力机制替代,例如密集注意力和各种形式的稀疏注意力。

    通过ZeRO-3集成实现更大的模型和更长的序列训练

    尽管DeepSpeed序列并行在使用更长的序列进行训练时减少了激活内存的使用,但并不影响模型状态的内存占用。因此,为了支持具有大序列长度的大语言模型训练,我们实现了DeepSpeed序列并行与ZeRO-3的集成。

    ZeRO Redundancy Optimizer Stage 3 (ZeRO-3) 是一种用于训练大模型的内存优化技术。与传统的神经网络数据并行训练中,模型状态在数据并行等级上进行复制不同,ZeRO-3通过将模型状态在数据并行等级之间进行分区来优化内存使用。然而,使用序列并行时,训练数据可以在批(样本)和序列维度上考虑,相关的并行群组可以组合成一个更大的群组以实现ZeRO并行。

    因此,我们将ZeRO-3分区扩展到数据并行和序列并行等级的组合。换句话说,在DeepSpeed序列并行中,ZeRO将模型状态分区在序列和数据并行组之间,并在需要时收集每个等级分区(allgather)。类似地,梯度将在数据并行和序列并行等级之间进行减少,用于参数更新。ZeRO可以在序列和数据维度上实现巨大的内存节省,并且不仅可以扩展到大序列长度,还可以扩展到大模型。

    评估

    我们在GPT(用于许多NLP任务的基础模型)上使用最多64个A100 GPU(40GB显存)对DeepSpeed-Ulysses进行了评估。我们的评估分为四个方面:i) 序列长度可扩展性,ii) 密集注意力的吞吐量以及与现有系统的比较,iii) 稀疏注意力的吞吐量以及与现有系统的比较,iv) DeepSpeed序列并行的收敛性研究。接下来,我们将对每个类别讨论和展示评估结果。

    序列长度可扩展性

    第一组实验是在12亿参数的GPT模型上将序列长度扩展到100万token。这个评估的结果如图2所示。DeepSpeed序列并行允许随着GPU数量的增加线性增加序列长度,并且序列长度与GPU数量保持线性比例关系,适当的GPU数量下保持相似的计算吞吐量。

    密集注意力评估

    接下来,我们在300亿参数的密集注意力模型上对DeepSpeed序列并行进行了评估,并与Megatron序列并行在64个A100 GPU上进行了对比。这些评估的结果如图3所示。

    我们将DeepSpeed序列并行与Megatron-LM在不同序列长度下的性能进行了比较。对于我们的评估,我们选择了能使DeepSpeed序列并行和Megatron-LM分别达到最佳性能(通过吞吐量或TFLOPs衡量)的序列长度-批大小组合,我们称之为最佳(批大小-序列长度)配置。对于DeepSpeed序列并行,我们始终使用64的ZeRO并行度。

    图3显示,DeepSpeed序列并行在相同序列长度下始终优于Megatron-LM。此外,DeepSpeed序列并行可以运行比Megatron-LM更长的序列。DeepSpeed序列并行的性能优势在于两个方面:(1)DeepSpeed序列并行结合ZeRO-3的内存优化,可以容纳更多的样本,从而提高吞吐量;(2)相对于Megatron-LM序列并行中应用的all-gather通信,DeepSpeed序列并行使用更高效的全对全通信。

    图3:DeepSpeed和Megatron LM序列并行在300亿参数模型上的密集注意力评估。

    稀疏注意力评估

    类似地,我们在300亿参数的稀疏注意力模型上对DeepSpeed序列并行进行了评估,并与Megatron序列并行进行了对比。我们的评估结果如图4所示。稀疏注意力的实验结果与密集注意力实验类似。我们观察到DeepSpeed序列并行的吞吐量性能相对于Megatron-LM提高了2倍以上。通过节省内存,DeepSpeed序列并行结合ZeRO-3可以扩展到比Megatron-LM更长4倍的序列长度。

    DeepSpeed序列并行在相同序列长度下始终优于Megatron-LM。事实上,当前的DeepSpeed吞吐量受到本地稀疏注意力实现的瓶颈,因此DeepSpeed吞吐量随着序列长度的增加而降低。我们预计,随着未来局部稀疏注意力实现性能的改善,DeepSpeed与Megatron之间的性能差距将在更大的序列长度下进一步增加。

    图4:DeepSpeed和Megatron LM序列并行在300亿参数模型上的稀疏注意力评估。

    收敛性研究

    最后,图5显示了1.3亿参数GPT模型在32K序列长度下,使用序列并行度设置为4的情况下,在8个A100 GPU上的收敛性。对于DeepSpeed序列并行,我们使用不同的ZeRO阶段进行了收敛性评估。DeepSpeed序列并行是一种纯系统优化技术,用于实现长序列Transformer模型的训练,因此在训练模型质量上没有(负面)影响,并通过实验得到了验证,如图5所示。

    图5:使用不同ZeRO内存优化阶段的DeepSpeed序列并行的收敛性评估。

    DeepSpeed-Ulysses软件可用性

    DeepSpeed-Ulysses只需进行少量简单代码更改来集成到您的代码中。下面是一个启用它的示例:

    from deepspeed.sequence.layer import DistributedAttention
    
    # 将原始的自注意(attn)替换为DeepSpeed-Ulysses的自注意
    
    dist_attn = DistributedAttention(attn, get_sequence_parallel_group())

    与其他支持序列并行的库(如Megatron-LM)相比,DeepSpeed-Ulysses不需要进行模型重构。 DeepSpeed-Ulysses已经完全与Megatron-DeepSpeed代码库集成并经过测试。这意味着如果您已经 在使用这个代码库来训练大型语言模型,您可以无缝地使用DeepSpeed-Ulysses训练具有极长序列的模型。

    Paraformer-时间戳模型

    参考论文:

  • FunASR: A Fundamental End-to-End Speech Recognition Toolkit   
  • 如图2(a)所示。Paraformer是一个单步非自回归(NAR)模型,结合了基于语言模型的快速采样模块,以增强NAR解码器捕捉标记之间依赖关系的能力。

    Paraformer由两个核心模块组成:预测器和采样器。预测器模块用于生成声学嵌入,捕捉输入语音信号中的信息。在训练过程中,采样器模块通过随机替换标记到声学嵌入中,结合目标嵌入生成语义嵌入。这种方法使得模型能够捕捉不同标记之间的相互依赖关系,并提高模型的整体性能。然而,在推理过程中,采样器模块处于非激活状态,声学嵌入仅通过单次传递输出最终预测结果。这种方法确保了更快的推理时间和更低的延迟。

    Timestamp Predictor:

    准确的时间戳预测是 ASR 系统的关键功能。然而,传统的工业 ASR 系统需要额外的混合模型来进行力对齐 (FA) 以实现时间戳预测 (TP),从而增加计算量和时间成本。FunASR 提供​​了一个端到端的 ASR 模型,通过重新设计 Paraformer 预测器的结构来实现准确的时间戳预测,如图2 (b) 所示。我们引入了一个转置卷积层和 LSTM 层来对编码器输出进行上采样,并通过后处理 CIF 权重 α2 来生成时间戳。我们将两个fireplaces 之间的帧视为前一个标记的持续时间,并根据α₂标出静音部分。此外,FunASR还发布了一个类似强制对齐的模型TP-Aligner,该模型包括一个较小的编码器和一个时间戳预测器。它接受语音和相应的转录作为输入,以生成时间戳。

    我们在AISHELL和60,000小时工业数据上进行了实验,以评估时间戳预测的质量。用于衡量时间戳质量的评估指标是累积平均偏移(AAS)。我们使用了一个包含5,549个手动标记时间戳的测试集,将提供的模型与使用Kaldi训练的FA系统进行时间戳预测性能比较。结果显示,Paraformer-TP在AISHELL上优于FA系统。在工业实验中,我们发现提出的时间戳预测方法在时间戳准确性方面与混合FA系统相当(差距小于10毫秒)。此外,这种单次解决方案对于商业使用非常有价值,因为它有助于减少计算和时间开销。

    DPO为什么会让大语言模型输出变长

    摘自:https://zhuanlan.zhihu.com/p/5830338806

    总的来说,DPO让模型输出变长主要可以分为以下几个原因:

    1. RM和模型评测的长度偏好。不管是Reward Model还是当前用与评测的模型(即便是GPT4)都会存在比较明显的长度偏好,即倾向于给更长的回答一个更高的分数。这一点已经有非常多工作给出过分析了。
    2. 训练数据本身长度分布不均衡。实战过程中往往就是用RM进行排序构造训练数据,RM的长度偏好就是会导致训练数据中容易出现chosen比rejected更长的情况。训练数据的长度差异(chosen比rejected长)就会导致训练后模型输出变长。
    3. 数据长度差异导致的reward被高估或低估。《Eliminating Biased Length Reliance of Direct Preference Optimization via Down-Sampled KL Divergence》中发现,DPO的算法本身也存在对response长度的依赖,chosen和rejected之间的长度差异可能会导致reward被高估/低估(overestimated or underestimated rewards)。即,当chosen过短时,reward会被低估,而当chosen过长时,reward会被高估
    4. DPO算法本身的长度敏感性。《Length Desensitization in Direct Preference Optimization》中提到,response长度会影响到似然概率的大小,并且进一步影响到训练优化方向:当chosen更长时,DPO会往chosen的方向进行优化(增大chosen概率),从而使输出变长;而rejected更长时,DPO会往远离rejected的方向优化(降低rejected概率),但却未必会让输出变短。

    如何解决:

    1. RM的优化:前面讲的都是对DPO进行长度控制的工作,但对RM本身的长度偏好进行优化的工作没有看到太多,如果大家有看到相关的也可以在评论区提供一下。如果将RM本身的长度偏好问题解决的话,那就可以极大程度上解决训练数据的长度分布均衡问题了。
    2. 数据的优化:有些工作会在数据构造时对长度进行综合考虑,如对RM打分进行长度归一后再排序、采样多个答案进行排序时根据均值方差限制chosen的长度等,通过这些方式可以减少长度差距过大的情况。如果数据本身的长度分布均衡了,也能一定程度上减缓这种问题。
    3. 训练算法上的优化:如果从LD-DPO的分析上看,即便数据分布比较均衡,只要存在长度差异,DPO本身的长度敏感性就是会导致模型输出变长,因此可能还是需要一些算法层面的优化,比如在DPO阶段加入SFTloss就是一种简单有效的方法,在很多公开的大模型技术报告中也都有用到该方法。另外R-DPO、SamPO和LD-DPO的长度控制效果都算是比较好的方法。

    DPO面临的一个问题(准确来讲是一种现象)就是会让大模型的输出变长,且多轮DPO的话会让模型输出越来越长。本篇文章我们将结合搜集到的一些相关工作,探讨一下业界对该现象的一些分析,探究这一现象产生的根本原因,以及如何有效地解决。

    首先我们需要思考一个问题,模型输出变长到底是不是一件坏事?一般来说,输出变长可能会使内容更加详细,信息量更丰富,回复质量更高,用户体验更好。但如果过度长,输出了很多冗余信息,回复质量没有明显改善,反而带来了推理成本的增加,回复变得啰嗦,用户体验反而变差了。

    因此,无论是从用户体验的角度还是多轮DPO能否run下去的角度,做好长度控制都是有必要的。

    相关工作

    先简要介绍一些相关工作,然后后面详细总结。

    1.《Disentangling Length from Quality in Direct Preference Optimization》(简称R-DPO)

    在这之前的一些RL的工作也有分析过长度爆炸问题,但该文章可能是第一个提出DPO的长度爆炸问题的。

    文章中发现,无论是RL训练中使用的Reward Model还是用来评测模型效果的打分模型(如GPT-4)都表现出明显的长度偏好,即会给更长的答案一个更高的分数(如下图)。且在一些公开的DPO训练数据集中,chosen的长度往往会比rejected更长,而这可能就是DPO后的模型输出长度明显比SFT模型更长的原因

    为了解决这个问题,该文章提出了一种长度正则化的策略,即在计算loss的时候添加一个长度正则项,从而避免模型对长度的过度拟合,公式如下:

    其中 |yw| 表示chosen的长度, |yl| 表示rejected的长度,从公式中可以看出,当chosen与rejected的长度差距越大,正则项的值越大,从而实现对长度的“惩罚”效果。

    从文章中的实验结果可以看出,该方法确实可以在尽可能减少性能损失的前提下有效解决长度增长问题。(有时还是会损失一定的性能。)

    2.《SimPO: Simple Preference Optimization with a Reference-Free Reward》(简称SimPO)

    陈丹琦团队的工作,直接去掉了reference model,用长度归一的方式实现长度控制。其loss如下:

    文章中提到了很多输出长度相关的内容,但核心贡献并不是做长度控制,而是用一种更简单高效的方法实现偏好训练。从公式上看,和原始DPOloss相比主要有两处不同,一个是分母从reference model的logp替换成了长度,另外就是增加了一个 γ ,类似一个offset的作用。不过其中对chosen和rejected的reward做长度归一的部分,直觉上看起来应该是能起到一定的长度控制效果的。

    不过从论文中的实验结果看,该方法的效果还是比较好的(当时声称训出最强8B大模型),但与标准DPO相比似乎并没有实现长度控制的效果。

    3.《Eliminating Biased Length Reliance of Direct Preference Optimization via Down-Sampled KL Divergence》(简称SamPO

    这篇论文对DPO后长度变长的问题进行了一定的分析,提出的一个核心观点是:DPO的算法本身也存在对response长度的依赖,chosen和rejected之间的长度差异可能会导致reward被高估/低估(overestimated or underestimated rewards)。即,当chosen过短时,reward会被低估,而当chosen过长时,reward会被高估。

    这篇工作中提出的一种方式就是在token级别下采样的概率特征,以计算正则化的KL散度,从而减少因pair长度不同而导致的奖励偏差。其loss的计算如下:

    从公式可以看出,该方法的核心就是在计算reward的时候不再是全部token的条件概率的累乘(取log后就是累加),而是随机采样公共数量的token进行累乘。这样即便chosen和rejected长度不同,参与reward计算的token数是一样的。也就是说,在SamPO训练过程中,魔都看到的chosen和rejected相当于是完全等长的。

    从文章中的实验结果看,该方法确实能有效控制模型输出长度的增长,甚至在多轮DPO依然能有效控制长度。但是在性能上看依然做不到碾压标准DPO的效果。

    但该方法有两个风险便是:

    1. 本身DPO就存在一定的波动,随机下采样可能会导致训练的稳定性不强;
    2. 随机采样必然会导致一些信息缺失,如果采样时舍弃掉了一些非常重要的token可能会影响到训练效果。

    4.《Length Desensitization in Direct Preference Optimization》(简称LD-DPO)

    该论文可能是第一个从理论层面分析DPO后模型输出变长的原因的,其核心分析主要包括两方面:

    1. DPO的梯度优化方向和chosen/rejected的似然概率成反比。
    2. Response长度对似然概率的影响极大,因此长度会直接影响reward的计算,并影响到DPO的优化方向。

    上图是一个对训练数据的统计热力图,图中,横坐标为chosen的长度,纵坐标为rejected的长度,颜色深度表示 log⁡πθ(yl|x)−log⁡πθ(yw|x) 值的大小。第一张图(a)是标准DPO,可以看出长度差距越大时,颜色越深,也就说明长度差距可能会导致reward计算产生bias,且长度差距越大这种bias越大。而这种bias会进一步影响到DPO的优化方向,使其往输出更长的方向进行优化。

    该文章提出的解决方案是在计算似然概率时对长度进行解耦,将更长的答案拆成“公共长度部分”和“额外部分”,并进一步将后者拆分为真实偏好和冗余偏好,并对其中的冗余部分进行降权操作,通过一系列推导后将 πθ(y|x) 转化为如下的形式(可近似理解为完整似然概率部分与公共长度部分似然概率的加权和):

    从公式上看,这种方式可以让长度更长的那个response(不管是chosen还是rejected)实现一定的缩放(),减少长度带来的似然概率的断崖式下滑,使其与另一个短response(不受影响)之间更具可比性,同时又不会像SamPO那样完全舍弃掉额外部分的信息。

    从论文中的实验结果看,这种方法能够实现比较好的长度控制,且模型性能还能有一定提升,并且可以通过调整参数 α 可以实现不同程度的控制效果。另外文章还提出一个比较有意思的发现,就是过度冗余的回答可能反而会损害模型的推理能力,他们通过这种方法控制长度后,模型的推理能力也有明显提升。

    其他工作

    除此之外,还有一些工作直接在数据上做文章,通过控制chosen和rejected的长度差距来实现长度控制,如《Following Length Constraints in Instructions》(简称LIFT-DPO)。以及在一些开源模型的技术报告中我们也能看到一些相关的长度控制方法,如在利用RM打分排序时就综合考虑长度问题等,这些数据工作就不再详细展开了。

    如何实现有效的长度控制?

    1. RM的优化:前面讲的都是对DPO进行长度控制的工作,但对RM本身的长度偏好进行优化的工作没有看到太多,如果大家有看到相关的也可以在评论区提供一下。如果将RM本身的长度偏好问题解决的话,那就可以极大程度上解决训练数据的长度分布均衡问题了。
    2. 数据的优化:有些工作会在数据构造时对长度进行综合考虑,如对RM打分进行长度归一后再排序、采样多个答案进行排序时根据均值方差限制chosen的长度等,通过这些方式可以减少长度差距过大的情况。如果数据本身的长度分布均衡了,也能一定程度上减缓这种问题。
    3. 训练算法上的优化:如果从LD-DPO的分析上看,即便数据分布比较均衡,只要存在长度差异,DPO本身的长度敏感性就是会导致模型输出变长,因此可能还是需要一些算法层面的优化,比如在DPO阶段加入SFTloss就是一种简单有效的方法,在很多公开的大模型技术报告中也都有用到该方法。另外R-DPO、SamPO和LD-DPO的长度控制效果都算是比较好的方法。

    最后结合我自己的一些尝试来直接对比一下上面的四种方法:

    1. R-DPO是通过加正则项的方式实现长度控制,说是正则项,但其实只是一个常数,其原理相当于是对每条数据加上一个权重(文章中也提到了这点),即当chosen和rejected长度差距大时降低该数据的权重。也就是说,该方法其实是让模型减少对长度差距大的数据的学习权重。这种方法确实可以实现一定的长度控制效果,但必然会减少一些数据的利用率,这可能也是训练效果会有一定损失的原因。我自己尝试了一下该方案,实验下来确实可以做到长度控制效果,但大部分情况下性能都会比标准DPO差一些。
    2. SimPO是用长度归一来替换Reference Model的KL约束,理论上和长度控制其实没有太大关系,更多的是简化训练和提升性能。实验结果确实也体现了并不会比标准DPO更短。(该方法热度很高,但网络上褒贬不一,很多人表示无法复现结果。)根据我自己实验经验来看,跑出好的结果需要仔细调参,论文推荐的超参不一定适合所有情况。
    3. SamPO是直接用下采样的方式,强行将模型视角下的长答案变得和短答案一样长,该方法给人的直观感受就是长度控制效果肯定很好,但是很可能会有性能损失。但我自己实验下来,长度控制效果和R-DPO差不多,但是性能也比较不稳定,更换随机种子就会导致性能产生波动。我也尝试过将随机下采样改为top-k采样,即保留概率最大的top-k个token,但效果并不会比随机更好(这么直觉的方法可能论文作者也尝试过了)。
    4. LD-DPO的方法是只对答案过长的部分做了解耦和降权处理,通过降低过长部分的权重来实现整个条件概率的缩放,看起来是四种方法中实现最优雅的一种,既降低了长度差异带来的reward bias问题,又不会丢弃信息,相当于是用极小的代价实现了概率缩放目的。从论文中贴出的结果看,确实也是性能最强的一个,长度控制效果也是最好的。但论文代码没有开源,所以没有实验验证。但从公式上看复现难度应该不是很大,有能力的可以尝试复现一下看看效果。

    transformers 的 generate() 方法实现多样化文本生成:参数含义和算法原理解读

    这个类对外提供的方法是 generate(),通过调参能完成以下事情:

    • greedy decoding:当 num_beams=1 而且 do_sample=False 时,调用 greedy_search()方法,每个step生成条件概率最高的词,因此生成单条文本。
    • multinomial sampling:当 num_beams=1 且 do_sample=True 时,调用 sample() 方法,对词表做一个采样,而不是选条件概率最高的词,增加多样性。
    • beam-search decoding:当 num_beams>1 且 do_sample=False 时,调用 beam_search() 方法,做一个 num_beams 的柱搜索,每次都是贪婪选择top N个柱。
    • beam-search multinomial sampling:当 num_beams>1 且 do_sample=True 时,调用 beam_sample() 方法,相当于每次不再是贪婪选择top N个柱,而是加了一些采样。
    • diverse beam-search decoding:当 num_beams>1 且 num_beam_groups>1 时,调用 group_beam_search() 方法。
    • constrained beam-search decoding:当 constraints!=None 或者 force_words_ids!=None,实现可控文本生成。

    参数列表

    核心代码详见:generate()入口函数定义, GenerationConfig类

    1.控制生成长度的参数

    参数类型缺省值含义
    max_lengthint20表示 prompt + max_new_tokens 累加的最大长度,如果max_new_tokens也设置了,会覆盖这个参数
    max_new_tokensint生成部分的tokens的最大长度 (忽略prompt部分的长度)
    min_length0表示 prompt + min_new_tokens 累加的最小长度,如果min_new_tokens也设置了,会覆盖这个参数
    min_new_tokensint生成部分的tokens的最小长度 (忽略prompt部分的长度)
    early_stoppingbool, strFalse对于beam search方法的控制终止的配置。
    False: 当有’num_beams’个候选生成,则终止
    True: 应用一些启发式规则判断不能找到更好的生成候选,来提前终止生成
    “never”: 当判断没有更好的可生成的candidate, beam search 过程终止
    max_timefloat执行生成的最大时间(s秒数)
    stop_stringsstr, array[str]配置模型生成的终止字符串,当模型生成参数配置的字符串,则终止生成。

    2. 控制生成策略的参数

    参数类型缺省值含义
    do_sampleboolFalseTrue: 生成过程使用采样逻辑
    False: 使用greedy做生成
    num_beamsint1设置beam search 束的数量。如果是1不做beam search 搜索
    num_beam_groupsint1为了保证生成的多样性,将num_beams 设置成多组。参考文献: https://arxiv.org/pdf/1610.02424.pdf
    penalty_alphafloatcontrastive search decoding的配置项,用于平衡生成置信度和衰减的惩罚
    dola_layersstr, List[int]str :
    “None”: 不使用dola
    “low” : 较低的一半layers, 最多20层使用dola
    “high”: 较高的一半layers, 最多20层使用dola
    List[int] : 通过指定一个index数组,指定dola 层
    “low”: 提升长答案的task,
    “high”:提升短答案的task

    3.cache配置参数

    参数类型缺省值含义
    use_cacheboolTrue是否使用KV cache 加速推理速度
    cache_implementationstr指定cache实现的name,在调用generate()时,实例化cache。
    ”static”: [StaticCache]
    “offloaded_static”: [OffloadedStaticCache]
    ”sliding_window”: [SlidingWindowCache]
    “hybrid”: [HybridCache]
    “mamba”: [MambaCache]
    ”quantized”:[QuantizedCache]
    cache_configCacheConfig , dictNonecache类使用的参数
    return_legacy_cacheboolTrue当DynamicCache 被使用时,是否返回历史的和新格式的cache

    4.操作模型输出logit的配置参数

    参数类型缺省值含义
    temperaturefloat1.0这个值用于建模下一个token的概率, 这个值被设置在generation_config.json文件中
    top_kint50筛选最高概率的top k个词, 这个值被设置在generation_config.json文件中
    top_pfloat1.0当设置<1时,筛选概率最高的token,累加概率不超过top_p的token
    min_pfloat配置筛选概率最低的一批token, 累加概率不超过min_p,裁剪掉,该配置相当于top_p的反向操作
    typical_pfloat1.0测量两个分布的相似性: 预测下一个目标token的概率 and 预测下一个随机Token的条件概率期望。如果设置<1,则筛选最典型的token。
    epsilon_cutofffloat0.0按设置的值,卡掉低概率值的token,一般设置为:3e-4 to 9e-4
    eta_cutofffloat0.0混合局部典型性采样和epsilon采样方法
    diversity_penaltyfloat0.0只对group beam search方法生效,如果在某个特定时间生成的token与任何beam 组生成的token一致,则beam的score减去这个值
    repetition_penaltyfloat1.01.0 默认不惩罚
    encoder_repetition_penaltyfloat1.0对于不在原始输入的token,指数级的惩罚
    length_penaltyfloat1.0对于beam 类的生成方法的长度惩罚,由于序列score是 log likelihood , > 0 倾向于更长的 <0 倾向于更短的
    no_repeat_ngram_sizeint0如果大于0, 则对应的size的ngram只能出现1次
    bad_words_idsList[List[int]]列出不允许生成的tokens_id
    force_words_idsList[List[int]] or List[List[List[int]]]必须被生成的words_ids。 如果配置List[List[List[int]]] 设置对于每个token的约束
    renormalize_logitsboolFalse对于所有的logits做后处理后,是否要再做下normalize
    constraintsList[Constraint]通过定义一个List[Constraint] 对象数组,来确保输出是在某些限制的场景下。一般用于安全的场景
    forced_bos_token_idintmodel.config.forced_bos_token_id强制跟在decoder_start_token_id之后的第一个token,对多语言模型是有用的
    forced_eos_token_idint or List[int]model.config.forced_eos_token_id当生成的token达到max_length上限时,最后一位输出的token
    remove_invalid_valuesboolmodel.config.remove_invalid_values是否移出可能生成的nan and inf 值,配置这个会减慢生成速度
    exponential_decay_length_penaltytuple(int, float)指数级增加长度的惩罚,tuple(start_index, decay_factor) start index 指示惩罚的开始i,decay_factor 指数衰减的惩罚因子
    suppress_tokensList[int]通过设置禁止的token的logit为-inf,来禁止token被sample
    begin_suppress_tokensList[int]通过设置首位禁止的token的logit为-inf,来禁止首位这部分token被采样到,进而导致被生成
    forced_decoder_idsList[List[int]]一个整数pair的数组,格式[生成index, token_index]指示固定位置强制生成某个token,例如[[1, 123]] 第二个位置总是生成token 123
    sequence_biasDict[Tuple[int], float]token list -> bias的映射,正的bias提升几率,负的bias降低几率
    token_healingboolFalse对prompt尾部的token做相似替换,以提升生成质量
    guidance_scalefloat是一个缩放因子,当>1时,这个因子越高,越鼓励模型生成与prompt接近的samples 。
    watermarking_configBaseWatermarkingConfig or dict对输出结果增加水印

    5.输出结果配置参数

    参数类型缺省值含义
    num_return_sequencesint1对于batch中的每个元素,设置独立计算的返回的sequence的数量
    output_attentionsboolFalse是否返回所有的attention的向量
    output_hidden_statesboolFalse是否返回所有网络层的隐层状态
    output_scoresboolFalse是否返回prediction scores
    output_logitsbool是否返回未处理过的的logit score
    return_dict_in_generateboolFalse除了返回生成序列,是否还返回a [`~utils.ModelOutput`]

    6.生成时使用的特殊token的配置参数

    参数类型缺省值含义
    pad_token_idintpadding token ID
    bos_token_idintbeginning -of – sequence token ID
    eos_token_idUnion[int, List[int]]end-of-sequence token ID

    6.辅助生成的配置参数(投机采样)

    参数类型缺省值含义
    is_assistantboolFalse指定是否模型是一个assistant(draft) model
    num_assistant_tokensint20投机采样过程,每次迭代 assistant model 要输出多少个token,给到目标模型做check。配置更高的值,如果assistant model 效果好 能带来更好的加速比
    num_assistant_tokens_schedulestrconstant“heuristic” : 当所有投机采样的token都正确时,将num_assistant_tokens增加2,否则减少1。
    “constant”: num_assistant_tokens 保持固定不变
    “heuristic_transient”: 类似于启发式方法,每次生成调用,都置成初始化的num_assistant_tokens值
    assistant_confidence_thresholdfloat0.4当assistant model预估当前token的置信度 小于 阈值时,提前终止assistant model的生成
    prompt_lookup_num_tokensint作为候选token 要输出的token的数量
    max_matching_ngram_sizeint2match prompt的最大ngram的数量
    assistant_early_exitint
    assistant_lookbehindint10如果设置为正整数,则重新编码过程将额外考虑最后的assistant_lookbehind个辅助标记,以正确对齐标记。此设置仅可在推测解码中使用不同的分词器时使用。
    target_lookbehindint10如果设置为正整数,则重新编码过程将额外考虑最后的target_lookbehind个辅助标记,以正确对齐标记。此设置仅可在推测解码中使用不同的分词器时使用。


    如有整理错误,欢迎指正~