AI搞说唱:双押算什么,我还会4押 | ACL 2021

2021-07-07 13:18:来源:创事记 原文链接:点击获取

来源:量子位

梦晨 发自 凹非寺

量子位 报道 | 公众号 QbitAI

下面这段歌词是AI生成的,你敢信?

第一段句尾单字押韵,第二段双押,第三段甚至能三押,层层递进。

甚至表达出了强烈的情绪,从对长大的地方的回忆讲起,用简朴的菜表现简朴的爱,最后讲到对外婆的思念。

我看哭了,你呢?

这首歌词的作者是一个叫DeepRapper(深度说唱)的AI,由香港科技大学、南京理工、清华、复旦和微软亚洲研究院的研究人员合力打造。

为什么叫Rapper?因为歌词里甚至还考虑到了速度节奏

像下图中,括号里是时间戳,标星号的地方就代表重音。

生成一篇这样的说唱歌词,只需要给出开头第一句,剩下的都交给DeepRapper就行了。

这么神奇?

毕竟语言生成还好说,基于Transformer的语言模型现在已经很成熟了。

但是如何让Transformer掌握节奏感?

研究团队的思路很巧妙,Transformer擅长的就是对序列进行预测。

歌词的文本是一个序列,节奏在时间轴上其实也可以编码成一个序列。

歌词倒着写,双押也不难

押韵的原理其实很简单,用拼音来表示汉字,约束韵母部分就可以了。

但说唱的特点是每句歌词在句尾押韵,每句的长短不定。

按照传统的方法,在训练中还得额外标记哪一步到句尾了,需要添加约束。

DeepRapper的办法是把每一句歌词倒过来,从右向左生成。

这样句尾变成句头,位置编码是0的就需要押韵,想双押就约束0和1,甚至隔行4押也不难实现。

对于节奏问题,研究团队设计了一个指标:总字数与节拍数的比值。

把说唱歌曲按这个指标做统计,然后把比值为3的定义为中速,小于3的是快速,大于3的就是慢速。

这样就可以计算出应该在哪里添加节拍标记。

最终,整个网络架构的设计是这样的:

缺少数据集,那就自己建

这篇论文除了训练出DeepRapper之外,还有一个成果——

第一个兼顾了歌词与节奏编码的中文饶舌数据集D-RAP

先收集大量说唱歌曲,把歌词信息和节拍信息分别在时间轴上编码,再汇合在一起。

等一下,还有一个问题。

尽管说唱近几年很火,但中文说唱歌曲总数量还是太少了,根本喂不饱需要大量训练数据的Transformer。

针对这个问题,研究团队又想出一个好主意:其他流派的歌曲其实也会押韵,甚至还没人唱过的填词都可以加进来。

最后收集到了1.6万首说唱,5万多首其他歌曲,和27万篇没有节拍信息的纯歌词。

用更多歌词和诗的数据集做预训练,最后用说唱数据集微调,就解决了。

还要自己唱,以后会开源

论文中提到,相关代码未来会发在Github上。

下一步改进的方向有扩大数据集,进一步挖掘预训练语言模型的潜力。以及如何避免数据集中的Bias被带到模型中。

还要扩展多语言能力,毕竟Rap起源于国外,要是歌词中时不时加点英语,就更对味了。

不止于此,让AI合成语音直接唱出来也在计划中。

最后,再欣赏一篇DeepRapper创作的歌词吧。

更多歌词示例:

https://deeprapper.github.io

论文地址:

https://arxiv.org/abs/2107.01875

作者:佚名