SongComposer:让大模型像人类一样具有音乐创作力

人工智能咨询培训老师叶梓 转载标明出处

大模型在翻译、复杂语言环境中的推理等任务中展现出了人类级别的能力。这引发了一个问题:这些模型能否在更具情感、抽象性以及需要专业技能的领域中,如音乐创作,展现出人类的创造力呢?香港中文大学、北京航空航天大学和上海人工智能实验室的研究团队的最新研究 "SongComposer" 给出了肯定的答案,这是一个专为歌曲创作设计的创新性大型语言模型,它能够理解并生成旋律和歌词,为音乐产业带来新的变革。

SongComposer系统如何根据指令生成歌曲的概述

数据集

SongCompose-PT 数据集包含了歌词、旋律以及它们之间的配对。这个数据集的目的是为了让大型语言模型(LLM)能够更好地理解音乐和歌词之间的关系,并生成与人类创作方式相似的歌曲。

研究团队从两个在线资源中收集了大量歌词数据。他们首先从 Kaggle 数据集中获取了150,000首带有 Spotify Valence 标签的歌曲的歌词。然后从 Music Lyric Chatbot 数据集中收集了140,000首华语歌曲的歌词。之后,团队进行了一系列的清洗过程,包括去除非英文和非中文的歌词、特殊符号、标点和空格,以及删除重复和无意义的内容。最终整理出了283,000首高质量歌曲的歌词,其中150,000首为英文,133,000首为中文。

收集歌词-旋律配对数据的流程,包括数据抓取、清洗、切片、音乐源分离、声音转录、词边界注释和词级对齐


为了组织旋律数据集,研究者选择了 MIDI 文件作为数据源。MIDI 文件具有结构简单的优点,便于提取和操作旋律,而无需复杂的音频处理。他们从 LMD-matched MIDI 数据集中收集了45,000个条目,并通过网页爬虫获取了大约80,000个条目。使用 pretty midi 库,他们解析了 MIDI 文件,并提取了旋律或声乐轨道。每条旋律被表示为一系列音乐音符属性的三元组,包括音符音高、音符持续时间和休止符持续时间。

配对歌词-旋律数据集对于训练 LLM 进行歌曲创作至关重要,因为它们提供了精确的歌词和旋律之间的同步信息。为了创建这个数据集,研究者首先从先前研究中获取了数据集,包括 LMD-full 数据集的7,998首歌曲和 Reddit 来源的4,199首歌曲。他们还整合了 OpenCpop 和 M4Singer 数据集。为了进一步丰富配对数据,他们通过网页抓取创建了一个包含4,000首经典华语歌曲的数据集。

收集歌词-旋律数据的流程包括以下几个步骤:

源数据抓取:从网络上收集大量 mp3 文件及其对应的歌词文件。

歌词清洗:使用 GPT-4 清洗歌词文本,去除无关细节。

片段切片:根据歌词文件中的时戳,将音频和歌词切成大约10秒的配对片段。

音乐源分离:使用 UVR4 工具分离人声和伴奏。

歌声转录:使用 FL Studio 自动生成初步音乐谱。

词边界注释:通过 Pypinyin 和 Montreal Forced Aligner 确定歌词中每个词的边界。

词级对齐:使用动态时间规整(DTW)算法根据起止时间对齐单词和音符。

他们开发了一个包含15,000个配对歌词-旋律条目的数据集,其中大约5,000个为中文,10,000个为英文。这个数据集为 SongComposer 模型提供了丰富的学习资源,使其能够在多种歌曲生成任务中表现出色。

SongComposer 模型的设计和训练

SongComposer模型的主要策略是将符号化的歌曲表示转换成适合LLM的格式。基于这个基础设置的创新点是两阶段的训练方法。这个方法使用了作者收集的数据集,并使模型能够作曲。

LLM 的符号表示

为了使LLM能够有效处理音乐和歌词,SongComposer模型采用了一种新颖的元组数据格式。这种格式的核心思想是将歌词和旋律的每个元素组合成一个单元,即元组。这样的设计使得模型能够更直观地捕捉到歌词和旋律之间的对应关系。

在处理纯歌词数据时,模型将每个元组中放入一个单词。而在处理纯旋律数据时,每个元组则包含了音符的音高、持续时间和休止符的持续时间。对于那些旋律和歌词同步的数据,模型会将同一元组中的歌词和对应的音符元素合并在一起。这种设计允许一个单词对应多个音符,因此一个元组中可以包含一个单词和几个相应的音符及其持续时间。

为了更有效地处理旋律中的持续时间信息,SongComposer采用了一种对数编码方案。这个方案将连续的持续时间范围转换成一组离散值,这样做的好处是可以更精确地捕捉音乐中的时间变化,并且这种编码方式与人类对时间感知的敏感度相匹配,即对较短时间的区分更细致。

模型还扩展了其词汇表,引入了辅助标记来代表离散化的时间单元和音符值。这些新引入的词汇在整个训练过程中进行了优化,使得模型能够更清晰地理解和生成音乐符号。

通过这种符号化表示方法,SongComposer模型不仅能够生成与人类创作方式相似的旋律和歌词,而且还提高了生成过程的效率和灵活性。

两阶段训练

SongComposer 模型的训练过程分为两个关键阶段:预训练阶段和监督式微调阶段。

两阶段训练的框架,包括预训练阶段和监督微调阶段,以及它们如何使用元组数据格式和基于指令的QA对来训练模型

预训练阶段(Pretraining Stage): 在预训练阶段,SongComposer 模型的目标是获取基本的音乐知识。这个阶段使用了大量纯歌词和纯旋律的数据,通过下一个标记预测的任务来训练模型。为了增加数据的多样性并提高模型的泛化能力,研究者们采用了音高转换技术来扩充数据集,即将旋律的音高上下移动半音,从而扩大了数据集的规模。

模型被训练来处理三种类型的数据:纯歌词、纯旋律和歌词旋律配对。这些数据都以元组的格式输入,其中每个元组包含了歌词或旋律的相关信息。通过这种方式,模型学习到了歌词和旋律之间的基本关系,为后续的微调阶段打下了坚实的基础。

监督式微调阶段(Supervised Finetune Stage): 在模型完成了预训练并吸收了大量音乐和歌词知识之后,它进入到了监督式微调阶段。这个阶段的目的是进一步提升模型遵循指令生成歌曲的能力。研究者们为此准备了10,000个问答对(QA pairs),这些问答对覆盖了多种歌曲生成任务,包括给定歌词生成旋律、给定旋律生成歌词、歌曲片段的扩展以及根据文本描述生成完整歌曲。

在这个阶段,模型会根据这些问答对进行微调,学习如何根据给定的指令生成相应的歌曲部分。例如,如果任务是根据歌词生成旋律,模型就会学习如何根据提供的歌词内容创作出和谐的旋律。这种微调过程使得 SongComposer 能够更精确地理解和执行各种歌曲创作任务。

通过这两个阶段的训练,SongComposer 模型不仅学习了音乐和歌词的基本元素,还获得了根据具体指令创作歌曲的能力。

实验

客观评估指标

研究者构建了一个由1188首歌曲组成的验证集,这个集合被用来测试模型生成的歌曲与真实歌曲的相似度。其中,包含了415首中文歌曲和773首英文歌曲,确保这些歌曲在模型训练阶段没有被使用过,以此来评估模型的泛化能力。

旋律生成评估: 为了评估模型生成旋律的质量,研究者采用了SongMASS提出的评估指标,这包括:

  • 音高分布相似性(PD):衡量生成旋律的音高分布与真实旋律的接近程度。
  • 持续时间分布相似性(DD):衡量生成旋律的音符持续时间与真实旋律的匹配度。
  • 旋律距离(MD):一个综合性指标,用以衡量生成旋律与真实旋律的总体差异。

为了确保评估的准确性,研究者还进行了后处理步骤,对真实旋律和生成旋律的音高进行对齐,并对持续时间进行了标准化处理,以便进行更加一致的比较。

歌词生成评估: 研究者使用CoSENT模型来评估生成歌词与原始歌词在句子级别上的对齐情况,通过计算两者之间的余弦相似性来定量评估。此外,还使用了ROUGE-2分数和BERT分数作为评估歌词生成的补充指标。ROUGE-2分数关注生成文本与原始文本中二元组的重叠程度,而BERT分数则基于上下文嵌入来衡量文本的相似性,这为评估提供了更深层次的语言理解。

主观评估指标

为了从人类角度评估生成歌曲的质量,研究者开展了一项用户研究。这项研究共有30名参与者,他们每个人评估了10个案例。研究者为每项任务设计了两个评估指标,并要求参与者根据1到5的评分标准进行评分,以此来衡量生成内容的质量。

任务特定评估:

  • 对于歌词到旋律生成任务,研究者评估了生成旋律的和谐性(Harmony)以及旋律与给定歌词的匹配度(Melody-Lyric Compatibility)。
  • 对于旋律到歌词生成任务,评估了生成歌词的流畅性(Fluency)以及歌词与提供旋律的匹配度。
  • 对于歌曲延续任务,评估了生成歌曲段的总体质量(Overall Quality)和与给定歌曲提示的连贯性(Coherence to the Song Prompt)。
  • 对于文本到歌曲生成任务,评估了生成歌曲的总体质量以及与输入文本的相关性(Relevance to the Text Input)。

结果

与现有LLMs的比较:

SongComposer的开发不仅仅是为了生成旋律和歌词,更是为了在艺术性和技术性上达到与人类创作相媲美的水平。在与现有LLMs的比较中,SongComposer显示出了其卓越的性能。研究者选择了GPT-4和GPT-3.5等模型作为基准,并通过few-shot prompt方法来引导这些模型生成期望的输出。这种方法通过提供少量的示例,让模型快速理解任务要求,并生成相应的结果。

客观评估结果:

在客观评估中,SongComposer在歌词到旋律生成任务上的表现尤为突出。它在音高分布相似性(PD)和持续时间分布相似性(DD)上都优于GPT-4,这意味着SongComposer生成的旋律在音高和节奏上与真实旋律更为接近。此外,旋律距离(MD)的低数值进一步证明了SongComposer生成的旋律与真实旋律的高相似度。

不同模型在将歌词转换成旋律的任务中的客观评估结果,包括音高分布相似度(PD)、持续时间分布相似度(DD)和旋律距离(MD)

主观评估结果:

主观评估结果进一步证实了SongComposer的优势。在用户研究中,参与者对SongComposer生成的歌曲在和谐度、旋律-歌词匹配度、歌词流畅度、总体质量和与文本输入的相关性等方面给予了更高的评分。这些评分反映了用户对SongComposer生成歌曲的主观感受,显示了其在艺术性和创造性上的优势。

四种任务(歌词转旋律、旋律转歌词、歌曲延续、文本转歌曲)的主观评估结果,评估指标包括和谐度(HMY.)、旋律-歌词兼容性(MLC.)、流畅度(FLN.)、整体质量(OVL.)、与歌曲提示的一致性(COH.)和与文本输入的相关性(REL.)

消融研究

在预训练数据集的影响研究中,通过不同的数据集组合进行训练实验,研究者发现,纯歌词和纯旋律数据集对模型的性能有着显著的影响。当这两种数据集都被排除时,模型的性能显著下降,这表明了基础音乐和歌词知识在模型早期学习阶段的重要性。而当引入任一种数据集时,模型的性能都有了显著提升,尤其是纯旋律数据集对旋律生成任务的提升更为显著。

分析了纯歌词数据集和纯旋律数据集对模型在歌词转旋律和旋律转歌词任务中表现的影响

旋律知识扩展词汇的影响研究中,消融实验显示,离散化的时间标记和音符标记对于模型处理和生成音乐内容的能力至关重要。当模型没有使用这些专用标记时,它无法正确生成旋律;而当引入这些标记时,模型在旋律到歌词任务中的性能得到了显著提升。

扩展词汇表中用于旋律知识的专用标记对模型表现的影响

通过这些详细的实验和评估,SongComposer证明了其在歌曲生成任务中的优越性能,特别是在旋律和歌词的生成质量上超越了现有的大型语言模型。

论文链接:https://arxiv.org/abs/2402.17645

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/803439.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一招轻松解决猫毛 最值得买的浮毛空气净化器排名

作为一名6年资深铲屎官,我常常被朋友问到关于宠物空气净化器的各种问题。有的人认为这是个神器,而有的人则认为这完全是花钱买智商税。其实我刚开始对购买宠物空气净化器也持怀疑态度,心想这么多钱花下去真的有效吗?但使用后&…

Linux文本工具之-Vim(二)

一、编辑 快捷键功能描述i在当前光标所在位置插入,光标后的文本相应向右移动I在光标所在行的行首插入,行首是该行的第一个非空白字符,相当于光标移动到行首执行 i 命令o在光标所在行的下插入新的一行。光标停在空行首,等待输入文…

王牌站士Ⅶ--理解大型语言模型LLM的参数

模型的大小并不一定决定其成功 在学习任何大型语言模型 (LLM) 时,您首先会听到的事情之一就是给定模型有多少个参数。如果您查看下面的图表,您会注意到参数大小范围很广 - 一个模型可能有 10 亿或 20 亿个参数,也可能有超过 1.75 万亿个参数。…

MongoDB综合实战篇(超容易)

一、题目引入 在MongoDB的gk集合里插入以下数据: 用语句完成如下功能: (1)查询张三同学的成绩信息 (2)查询李四同学的语文成绩 (3)查询没有选化学的同学 (4&#xf…

EasyPhoto - 一键训练并生成人像写真,支持参考图生成 独立版 本地一键整合包下载

EasyPhoto最早是作为AI绘画软件StableDiffusion的一款插件备受大家喜爱,今天分享的是 EasyPhoto 的独立版本一键整合包,无需安装StableDiffusion即可解压即用。 和之前分享的腾讯开源的 PhotoMaker 和 阿里开源的 FaceChain 类似,EasyPhoto操…

ArkUI组件——循环控制/List

循环控制 class Item{name: stringprice:number}private items:Array<Item> [new Item("A0",2399),new Item("BE",1999),new Item("Ro",2799)] ForEach(this.items,(item:Item) > {})List组件 列表List是一种复杂的容器&#xff0c;…

C++动态内存的管理

今天来分享C动态内存管理相关知识&#xff0c;闲言勿谈&#xff0c;直接上干货。 1. 动态内存的开辟和销毁(new和delete) (1)前置知识&#xff1a;我们知道c语言有malloc和calloc和realloc三个函数可以进行动态的开辟内存&#xff0c;那么它们有什么区别呢&#xff1f;首先是…

乘积量化pq:将高维向量压缩 97%

向量相似性搜索在处理大规模数据集时&#xff0c;往往面临着内存消耗的挑战。例如&#xff0c;即使是一个包含100万个密集向量的小数据集&#xff0c;其索引也可能需要数GB的内存。随着数据集规模的增长&#xff0c;尤其是高维数据&#xff0c;内存使用量会迅速增加&#xff0c…

自适应巡航控制(ACC)功能—巡航车速控制功能介绍

自适应巡航控制中的跟车行驶功能详解 自适应巡航控制&#xff08;ACC&#xff09;功能—巡航车速控制功能介绍 自适应巡航控制&#xff08;ACC&#xff09;中的跟车车距控制功能&#xff1a;详解与应用 自适应巡航控制中的Cut in & Cut out功能详解 自适应巡航控制中的Stop…

为什么在芯片制造中不能用机械磨削(grinding)代替cmp?

知识星球里的学员问&#xff1a;为什么只有在晶圆背面减薄时会使用griniding工艺&#xff1f;在芯片制程中并未看到该工艺&#xff0c;同样有减薄作用&#xff0c;为什么在芯片制程中用的是cmp&#xff1f; Grinding与cmp的原理&#xff1f; Grinding&#xff0c;机械磨削&…

AV1技术学习:Affine Motion Compensation

一、Affine Model Parameter 除了传统的平移运动补偿&#xff0c;AV1 还支持仿射变换模型&#xff0c;将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x, y). 参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例…

【React笔记初学总结一】React新手的学习流程笔记总结,掰开了揉碎了,下载安装基础结构学习

REACT学习记录 一、React是什么&#xff1a;二、尝试安装下载&#xff1a;三、理解都有什么四、基础网页学习&#xff1a;1.几个比较重要的资源包例子2.第一个react示例&#xff1a;&#xff08;掰开了揉碎了&#xff0c;咱们先看懂它最简单的结构&#xff09;3.第二个react示例…

【数学建模】高温作业专用服装设计(2018A)隐式差分推导

为方便计算&#xff0c;对区域进行离散化处理&#xff0c;采用隐式差分格式进行离散计算。隐式差分格式如图&#xff1a; 每层材料内部 对第 j j j层材料: 其中&#xff0c; λ j \lambda_j λj​表示第 j j j层的热扩散率&#xff0c; c j c_j cj​表示第 j j j层的比热容…

每日练习,不要放弃

目录 题目1.下面叙述错误的是 ( )2.java如何返回request范围内存在的对象&#xff1f;3.以下代码将打印出4.下列类定义中哪些是合法的抽象类的定义&#xff1f;&#xff08;&#xff09;5.以下代码段执行后的输出结果为6.以下代码运行输出的是总结 题目 选自牛客网 1.下面叙述…

Java 快速入门学习 -- Day 2

Java 快速入门 Ⅱ maven&#xff08;图书管理员&#xff09;IDEA使用 maven框架 maven&#xff08;图书管理员&#xff09; maven 仓库&#xff0c;图书馆。要看书的化先从家里找&#xff08;本地仓库&#xff09;&#xff0c;本地找不到就去中央仓库或者镜像仓库找&#xff0c…

用Python实现学生信息管理系统

用Python来实现学生信息管理系统 学生信息管理系统&#xff08;Python&#xff09; 简介&#xff1a;基本信息管理和学生成绩管理。基本信息管理模块的主要功能有学生信息的添加、删除、修改、显示和学生数据的导入导出&#xff0c;学生成绩管理模块的主要功能有统计课程最高分…

推荐 3个小众精品软件,个个能打实力强,快来看看

X-plore X-plore是一个多功能的文件管理工具&#xff0c;广泛应用于Android设备上。它不仅支持多种文件格式和操作&#xff0c;还提供了丰富的功能以满足用户的需求。 X-plore具有强大的文件管理功能&#xff0c;包括查看、复制、移动、删除、压缩到Zip、提取、重命名、共享等…

C++--lambda表达式

介绍 一个lambda表达式表示一个可调用的代码单元。我们可以将其理解为一个未命名的内联函数。和函数类型,lambda有一个返回值,一个参数列表和一个函数体,但比函数多一个捕获列表。具体形式如下: [捕获列表](参数列表) ->返回值类型 {函数体}其中:捕获列表:可以捕获定义lam…

Tita的OKR:高端制造行业的OKR案例

高端设备制造行业的发展趋势&#xff1a; 产业规模持续扩大&#xff1a;在高技术制造业方面&#xff0c;航空、航天器及设备制造业、电子工业专用设备制造等保持较快增长。新能源汽车保持产销双增&#xff0c;新材料新产品生产也高速增长。 标志性装备不断突破&#xff1a;例如…

美式键盘 QWERTY 布局的来历

注&#xff1a;机翻&#xff0c;未校对。 The QWERTY Keyboard Is Tech’s Biggest Unsolved Mystery QWERTY 键盘是科技界最大的未解之谜 It’s on your computer keyboard and your smartphone screen: QWERTY, the first six letters of the top row of the standard keybo…