调研了下 AI 作曲,顺便做了期视频...快进来听歌!

839035ad7be818cc2b35946911c6d900.png

文 | 白鹡鸰
编 | 小轶
视频 | 白鹡鸰

嗨,大家好!这里是卖萌屋,我是白鹡鸰。今天和大家聊聊人工智能作曲。人工智能在音乐领域的应用已经非常常见了,像听歌识曲、曲风分类、自动扒谱等等,而 利用机器来替代人类作曲 ?这显然也不是新想法了。

核心问题只在于:

  1. 现在这个任务被做到了什么程度

  2. 用的是什么方法

Illiac Suite是历史上第一段在计算机协助下编曲的古典乐,诞生于1956年[1]。

上面这段音乐则来自2020年1月出版的,第一张由神经网络作曲、人工编辑后发行的音乐专辑Nobody's Song。虽然还达不到让人印象深刻的程度,但若是将它混在一张轻音乐歌单当中,应该没有几个人能够发现,这首曲子的作者不是人类。

c691343db7e7b4afd1ca285f02c70732.png

事实上,音乐区的知名 up 主双琴侠就做过一期视频,请他们的朋友挑选了人类和人工智能作曲的各6首曲子,测试人类能否区分这些音乐之间的差异。结果,两名职业小提琴手的错判率都在50%左右,弹幕中网友的错判率则更高。可见现在人工智能作曲的最佳成果,确实已经能和人类不相上下了

380e267358641630dc49ad68caf26ed2.png原理7355e24d2e36ca30e68442e2058459fd.png

既然现在的人工智能作曲的表现已经如此优秀,我们必然要问,这是怎么做到的呢?为了解释这个问题,需要对音乐的数据特征有初步的了解。

首先是音符的概念。常见的五线谱也好,简谱也罢,都是用来记录音符的。音符的要素是音高音长。音高的本质是指声音的频率,音长则是一个声音持续的时间。显然,没有说一个时刻只能有一个音符,因此就有了和弦;也没有说一个时刻必须至少有一个音符,因此就有了空拍

ba51286909d69348f4ee329260ef5677.png
▲音高的本质是声音的频率

第二个概念则是旋律,一串时间序列上的音符,或者是和弦,组成的就是旋律。由多段旋律组成的完整部分则是乐章。

其实,音乐和自然语言、图像都分别有似与不似之处。拿自然语言作比,音符有点像单字,和弦则像单词,旋律是一句话,乐章则是段落;不仅如此,音乐同样也是依赖时序上的变化才能表达完整含义的。但是,自然语言所能传递的信息远比音乐清晰,歧义显然少了很多。音乐在局部表意的模糊性上,倒是和图像更为类似。

73a763b5a37a56885b1267473c25fe1f.png

▲音乐在局部表意的模糊性上,和图像更为类似

当然,我们也可以说,有规律的数据在模式上必然存在一定相似性。总之,在作曲任务上,将NLP、CV领域的学习模型迁移过来使用,可以说是预料之中的事情了。马尔可夫链、遗传算法、VAE、LSTM,这些算法都被尝试过。不过我们还是着重介绍一下目前效果最好的几个模型分别采用的方法吧。

1f5b99f404394e6a6d02e77551d3e1a1.png算法47e6d81035a204080277160469c85495.png

事先声明,本次讨论中,所谓的“效果最好”完全是由个人喜好判断。如果有不同意见,还请大家自由保留。

Transformer

或许我们不应该感到惊讶,Transformer 又制霸了作曲领域。目前表现最好的谷歌的 Magenta[2],OpenAI 的 Jukebox[3] 都选择了这条道路。不过呢,两个模型在细节上差别很大,它们还恰好代表了现在自动作曲研究的两大风向。

Magenta - Google

Magenta的模型对于Transformer本身没有任何的改动,直接调用了一个自然语言翻译的 Transformer 库 Tensor2Tensor 。它的输入也是作曲任务当中最常用的"类MIDI"格式编码:用编号指代音高,通过占位符(音乐标记中一般用下划线)来表示音长,最下面两行,第一行是指每个占位符在对应一个四分音符中的第几个十六分音符,第二行则是布尔数值,用来标明是否存在延音。大概就是长成这样:

327d9d3d70a087d2d53a94379892aeae.png
▲‘类MIDI’格式编码

由于目前作曲方面最常用的数据库Bach Chorale从选曲的时候就保证了只会包含最多同时存在四个音符的旋律片段,因此四行就足够记录所有关于音高和音长的信息。这种形式编码的乐谱在可视化的时候可以转换成这样:

0ed167def0e5ae48dbbf13e850615959.png

确实能够直观地让人知道整首曲子旋律的变化过程,这也可以证明这种编码方式确实足够高效,难怪会被广泛应用了。Magenta就是把这样一段编码打包成tensor,塞进Transformer里进行训练的。忽略模型没有什么新意的问题,光说效果的话还是不错的。

Jukebox - OpenAI

与Magenta不同,Jukebox的目标是在给定旋律开头和歌词内容后,能够生成歌曲。Jukebox的创作者们认为,通过编码音调生成的声音在单个音符上输出的音色没有变化,因此生成的音乐过于死板。为了解决这个问题,他们决定直接从音频层面对输入进行编码。通过VAE对音频进行多个频率层级的采样,然后转为向量形式的量化特征。根据Jukebox的说法,他们在对不同流派的音乐打上标签之后,模型成功学会了生成不同风格的曲目。但作为听众,我的感受是随着曲子推进到后期,风格会越来越难以维持。而且,以音频作为输入、输出格式的模型,不可避免地导致了乐曲变成了全损音质。

0cb4e9af459d4f4eee5eb479d8cda49c.png
▲Jukebox处理音频的过程

Deep RNN

DeepBach[4]

DeepBach 可以说是深度神经网络模型中作曲效果为数不多比较好的。主要理由是,它专注于生成巴赫风格的曲子,而巴赫的曲子总的来说节奏比较规整,在乐理方面也非常守规矩。

DeepBach的编码方式和现在Magenta的transformer是一样的,模型当中,使用了两个RNN网络,一个用于处理乐谱中过去的旋律,一个用于处理乐谱中将会演奏的旋律,然后和“现在”的音符编码处理好的特征拼接在一起,再经过神经网络。比较有意思的是音乐的生成,在学会了“巴赫的规则”之后,模型就基于伪吉布斯随机采样,用马尔可夫链蒙特卡洛方法随机游走出一条旋律。想想现在你听到的音乐,居然仅仅是基于一些参数由电脑随机生成的,它还这么和谐,这么巴赫,个人而言,感觉非常奇妙。

4ff87cad0d401a0c7a89f508c0ae373c.png
▲DeepBach网络结构

其他

顺便礼节性地提一句,早年GAN网络、LSTM在自动作曲方面同样有所应用,不过就效果而言现在已经完败于Transformer,所以就不展开了。

9f4c9e4591fd6431173bab053a386700.png「最佳应用」- AIVA9e2669ae7603b1c532ab1a96bffbd682.png

除了以上能够较为清楚地了解原理的模型之外,我们还必须提一下世界上的第一位人工智能作曲家,AIVA。AIVA由法国的音乐组织SACEM制作,于2016年2月推出,目前已经发行了五张专辑。我在官网上注册了一个账号,可以看出,它已经能够快速地生成多种风格的音乐旋律。比较可惜的是作为商用软件,在原理方面AIVA并没有公开。根据我个人的猜测,它在模型设计方面未必特别精巧,但是乐理方面人工编写的规则和参数调整比上述模型会更多,网络模型在体量上也会更大。

31121775adccc892688b61ff8c1a5e77.png

▲AIVA

ce7eb3f5962b1656e85bb51466e609ee.png小结28a3551504e5ee40656e83974becb2fc.png

在大致感受完一圈目前人工智能作曲的水平之后,相信大家内心都有了各自的评判。视频的最后,还是要老生常谈一下:人工智能作曲会取代人类吗

我个人对这个问题的回答是:会也不会

按照现在的进度来看,人工智能作曲可以快速地生成很多听起来挑不出大错的旋律,只要稍加编辑,就可以作为日常的背景音乐使用。因此,在一些需要音乐作为调剂,但对音乐本身质量要求不高的场合,人工智能很可能替代人类进行作曲,批量制造氛围音乐。

然而,人工智能最大的弱点在于,它无法理解情感,而音乐是最纯粹地用于传递情感的艺术类别。即使同一段旋律,速度、强弱上的变化能够造成完全不同的效果,更不要说,还有音色的变化,乐器的选择。因为无法理解情感,人工智能只能简单地模仿已有的乐曲,创造出包含类似情感的片段,输出的乐曲中往往有大量的重复,而且旋律到下一段旋律,表达的情感并不一致。

因此,真正能打动人、值得反复欣赏的旋律,恐怕最终还是需要人类来创作。也就是说,人工智能作曲只是拔高了音乐创作的门槛,它的存在将会督促作曲家们不再制造简单粗糙的声音,而是去更仔细地审视音乐中的细节,钻研该如何用这一媒介更好地来传递情感。

欢迎各位关注卖萌屋 b 站账号~卖萌屋今后也将持续(随缘)更新视频。

卖萌屋 b 站链接:
https://www.bilibili.com/video/BV1XP4y1G7Bt?spm_id_from=333.999.0.0

b8b2078d3f257dcdaf001052d95b7cff.png萌屋作者:白鹡鸰

白鹡鸰(jí líng)是一种候鸟,天性决定了会横跨很多领域。已在上海交大栖息四年,进入了名为博士的换毛期。目前以图像语义为食,但私下也对自然语言很感兴趣,喜欢在卖萌屋轻松不失严谨的氛围里浪~~形~~飞~~翔~~

知乎ID也是白鹡鸰,欢迎造访。

作品推荐:

  1. NLP太卷,我去研究蛋白质了~

  2. 谷歌40人发表59页长文:为何真实场景中ML模型表现不好?

  3. 学术&工业界大佬联合打造:ML产品落地流程指南

d750549edae0cd157739d4df6cc97ae6.png后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

3cf3f414656acbe9dd8d94c46c9274d8.gif c917bdc77f45aba1be0af367ce9b4e39.png

[1] Hiller Jr, Lejaren A., and Leonard M. Isaacson. "Musical composition with a high speed digital computer." Audio Engineering Society Convention 9. Audio Engineering Society, 1957.1

[2] Huang, Cheng-Zhi Anna, et al. "Music transformer." arXiv preprint arXiv:1809.04281 (2018). https://magenta.tensorflow.org/music-transformer

[3] Dhariwal, Prafulla, et al. "Jukebox: A generative model for music." arXiv preprint arXiv:2005.00341 (2020). https://www.youtube.com/watch?v=BUIrbZS5eXc

[4] Hadjeres, Gaëtan, François Pachet, and Frank Nielsen. "Deepbach: a steerable model for bach chorales generation." International Conference on Machine Learning. PMLR, 2017.

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1275. 找出井字棋的获胜者(位运算)

1. 题目 A 和 B 在一个 3 x 3 的网格上玩井字棋。 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上。第一个玩家 A 总是用 “X” 作为棋子,而第二个玩家 B 总是用 “O” 作为棋子。“X” 和 “O” 只能放在空方格中,而…

论文浅尝 | DSKReG:基于关系GNN的推荐知识图谱可微抽样

笔记整理:李爽,天津大学硕士链接:https://dl.acm.org/doi/pdf/10.1145/3459637.3482092动机在信息爆炸的时代,推荐系统被广泛研究和应用,以发现用户的偏好信息。RS在冷启动时性能较差,如果将知识图谱(Knowl…

改变世界,改善生活:我从科沃斯扫地机器人X1,看到了AI新的希望

深度学习是当代人工智能的核心,计算机视觉、语音、NLP则是当代人工智能落地的热门应用方向。然而,机器人、智能agent这种看起来更加“人工智能”的话题却在大众视野出现的越来越少,取而代之的热点讨论反而是看似与人工智能关联不是那么直接的…

数据开放平台的配置管理

背景 美团是数据驱动的技术公司, 非常重视使用数据的效率。为了达到这个目标,我们将数据以开放平台的形式开放给需求方。例如,帮助需求方开发报表的报表开放平台,帮助需求方获取数据的自助查询平台,让需求方参与数据建…

LeetCode 1271. 十六进制魔术数字(进制转换)

1. 题目 你有一个十进制数字,请按照此规则将它变成「十六进制魔术数字」:首先将它变成字母大写的十六进制字符串,然后将所有的数字 0 变成字母 O ,将数字 1 变成字母 I 。 如果一个数字在转换后只包含 {“A”, “B”, “C”, “…

评测任务征集 | 全国知识图谱与语义计算大会(CCKS 2022)

评测任务征集全国知识图谱与语义计算大会(CCKS 2022)2022年8月25-28日,秦皇岛http://sigkg.cn/ccks2022/全国知识图谱与语义计算大会(CCKS: China Conference on Knowledge Graph and SemanticComputing)由中国中文信息…

SegmentFault 美团云采访实录

约半年前,美团悄然上线了美团云(Meituan Open Services,简称MOS),这是美团网根据自身虚拟化平台开发和运维经验开放的云计算服务,类似AWS。 美团 CEO 王兴可能是中国最知名的连续创业者,曾创办校…

开局一段扯,数据全靠编?真被一篇“神论文”气到了

文 | 苏剑林(追一科技)编 | 智商掉了一地看来以后我们看论文的时候,不仅要关心论文成绩的可复现性,还要留意它们的求和、均值、方差等有没有算错,否则真的是“无奇不有”!!这篇文章谈一下笔者被…

LeetCode 147. 对链表进行插入排序(链表)

1. 题目 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到…

征稿 | 软件学报专刊征文:知识赋能的信息系统

伴随着人工智能的浪潮,智慧信息系统的发展方兴未艾,正处于由感知智能到认知智能转变的关键时期。要实现认知智能的系统跃升,离不开知识的赋能。在数字化转型背景下,数据对象和交互方式的日益丰富和变化,对以知识图谱为…

基于Flume的美团日志收集系统(二)改进和优化

在《基于Flume的美团日志收集系统(一)架构和设计》中,我们详述了基于Flume的美团日志收集系统的架构设计,以及为什么做这样的设计。在本节中,我们将会讲述在实际部署和使用过程中遇到的问题,对Flume的功能改进和对系统做的优化。 …

LeetCode 462. 最少移动次数使数组元素相等 II(数学)

1. 题目 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。 例如: 输入: [1,2,3] 输出: 2说明: 只有两个动作是必要的(记得每一步仅可…

embedding亦福亦祸?XGBoost与LightGBM的新机遇

文 | 水哥源 | 知乎Saying1. 小的性能差异在容易实现面前一文不值,这一点是XGBoost和LightGBM的最大优势2. 没能与embedding很好地结合无疑是树模型的灾难,吃不下巨量的新数据,也打不过DNN,除了一些规模比较小的公司,树…

论文浅尝 - ACL2022 | 面向推理阅读理解的神经符号方法

转载公众号 | 南大Websoft概述近两年来NLP领域出现了一些富有挑战性的机器阅读理解数据集,如ReClor和LogiQA。这两个数据集中的问题需要对文本进行逻辑推理,然而传统的神经模型不足以进行逻辑推理,传统的符号推理器不能直接应用于文本。为了应…

美团数据仓库的演进

美团数据仓库,在过去的两年中,与我们的业务一起高速发展。在这一演进过程中,有很多值得总结和沉淀的内容。这篇文档回顾下美团数据仓库这两年发展过程中遇到的各种问题,为什么选择了现在的技术方案,每一个功能和模块是…

LeetCode 1026. 节点与其祖先之间的最大差值(二叉树DFS)

1. 题目 给定二叉树的根节点 root,找出存在于不同节点 A 和 B 之间的最大值 V,其中 V |A.val - B.val|,且 A 是 B 的祖先。 (如果 A 的任何子节点之一为 B,或者 A 的任何子节点是 B 的祖先,那么我们认为…

凭“难听”上热搜的 idol 们,不如考虑下让 Transformer 帮您作曲?

视频制作 | 白鹡鸰编 | 小轶考虑到 “AI 音乐”这一主题的特殊性,唯有多媒体的视频形式才能更好地给大家带来视听上的多重感受。于是,小屋的白鸟鸟同学在科研间隙连续肝了好几个晚上,才得以完成这次视频。然而在上周的推送中,不知…

YUI3在美团的实践

美团网在2010年引爆了团购行业,并在2012年销售额超过55亿,实现了全面盈利。在业务规模不断增长的背后,作为研发队伍中和用户最接近的前端团队承担着非常大的压力,比如用户量急剧上升带来的产品多样化,业务运营系统的界…

论文浅尝 - ICLR2022 | OntoProtein:融入基因本体知识的蛋白质预训练

论文题目:OntoProtein: Protein Pretraining With Gene Ontology Embedding本文作者:张宁豫(浙江大学)、毕祯(浙江大学)、梁孝转(浙江大学)、程思源(浙江大学&#xff09…

LeetCode 540. 有序数组中的单一元素(位运算二分查找)

1. 题目 给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。 示例 1: 输入: [1,1,2,3,3,4,4,8,8] 输出: 2示例 2: 输入: [3,3,7,7,10,11,11] 输出: 10注意: 您的方案应该在 O(log n) 时间复杂度 和 O…