虽然AI在艺术领域一直有不少争议,但它一直也没停下各种尝试的步伐:
写歌、画画、写诗……这不,刚又学会了填词。
我们给这个AI放了一首钢琴曲,曲调非常悠扬平和。
然后,它生成的部分词是这样的:
各位感觉如何?
其中,生成过程的动态效果看着还不错:
当然,它可以很好地分辨不同风格的音乐:给安静的钢琴乐生成的词与给嘈杂的摇滚乐生成的会完全不一样。
不过,鉴于目前的填词效果(比如有时无厘头的上下衔接),研究人员也表示:
ps.此处在线cue周杰伦,御用词人试试AI?
这项研究来自滑铁卢大学,研究成果即将发表在ICCC 2021。
项目的动机源于其中一位研究员的个人兴趣。
这名研究员非常喜欢音乐,所以她很好奇机器是否可以生成听起来像她最喜欢的音乐艺术家风格的歌词。
最终做出来的系统叫做LyricJam,已有在线网页版供任何感兴趣的音乐人访问使用。
该系统通过将原始音频文件转换为频谱图,然后使用深度学习模型实时生成与音乐相匹配的歌词。
模型的架构由两个变分自动编码器(VAE)组成,一个用于学习音乐音频的表示,另一个用于学习生成歌词。
训练数据集由18000个原始歌曲的WAV音频片段和7种音乐艺术家的相应歌词组成。
首先使用CNN来根据频谱图将带歌词的音频,按风格分类成不同“艺术家”。
然后训练一个条件VAE(conditional VAE,CVAE)“重建”原始歌词,根据不同类型音乐的歌词用词和表达方式的不同,生成一系列连贯的新歌词。
其中生成条件是前面预先训练的“艺术家”种类。
推理阶段,流程差不多:系统将实时录制的音频片段转换成频谱图,然后进行风格识别,为了生成最匹配的歌词,需要根据“艺术家”的类别从潜在空间中采样并对其进行解码,然后生成对应的歌词表达。
最后,使用基于GAN的对齐模型来对齐两种编码器生成的歌词和音频表示。
最终效果如何呢?
为了评估他们开发的系统,研究人员进行了一项简单的用户研究,请来一批搞音乐创作的人来测试。
测试要求音乐人现场演奏音乐并分享他们对系统所作歌词的反馈。
首先确定该系统是否能更准确地生成与音乐所产生的情绪相匹配的歌词。
研究人员选用了5种不同乐器演奏的不同歌曲的片段,每段约10秒,用该模型的两种变体(下图中每组的第二三行)各生成一行歌词,再用一个基线模型(下图中每组第一行)生成歌词。
生成示例如下:
测试者需对以上3种词,进行打分,选出最匹配当前音乐的一种。
总共有15个人参与了这项研究,从下表可以看出,无论播放的歌曲类型如何,用户都更喜欢后两个模型的歌词,而非基线模型的。
这说明,该系统可以生成匹配音乐风格的歌词。
最后,通过一系列问卷调查显示,大多数参与实验的音乐人都觉得,LyricJam是一个非批判性的即兴演奏“伙伴”,可以鼓励他们即兴创作并尝试不同寻常的歌词表达方式。
另外,即使中间改变音乐风格或尝试加入新的和弦,歌词也能实时做出抒情主题的变化。
最后研究人员表示,如果在更大的数据集上训练,填的词就更具有多样性了。
感兴趣的朋友可戳在线链接试玩,系统操作非常简单,录入一个音频就可以:https://lyricjam.ai/
论文地址:https://arxiv.org/abs/2106.01960
参考链接:
https://techxplore.com/news/2021-06-lyricjam-lyrics-instrumental-music.html
— 完 —
量子位 QbitAI · 头条号签约
关注我们,第一时间获知前沿科技动态
取颜色:或输入颜色值:OK或使用 HTML5: | 选择的颜色:黑色文本阴影白色文本阴影red#ff0000rgb(255, 0, 0)hsl(0, 100%, 50%)hsv(0, 100%, 100%) | 淡 / 暗:100% #ffffff95% #ffe5e590% #ffcccc85% #ffb3b380% #ff999975% #ff808070% #ff666665% #ff4d4d60% #ff333355% #ff1a1a50% #ff000045% #e6000040% #cc000035% #b3000030% #99000025% #80000020% #66000015% #4d000010% #3300005% #1a00000% #000000 |
Hue
Hue | Hex | Rgb | Hsl | Hsv | |
0 | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) | |
15 | #ff4000 | rgb(255, 64, 0) | hsl(15, 100%, 50%) | hsv(15, 100%, 100%) | |
30 | #ff8000 | rgb(255, 128, 0) | hsl(30, 100%, 50%) | hsv(30, 100%, 100%) | |
45 | #ffbf00 | rgb(255, 191, 0) | hsl(45, 100%, 50%) | hsv(45, 100%, 100%) | |
60 | #ffff00 | rgb(255, 255, 0) | hsl(60, 100%, 50%) | hsv(60, 100%, 100%) | |
75 | #bfff00 | rgb(191, 255, 0) | hsl(75, 100%, 50%) | hsv(75, 100%, 100%) | |
90 | #80ff00 | rgb(128, 255, 0) | hsl(90, 100%, 50%) | hsv(90, 100%, 100%) | |
105 | #40ff00 | rgb(64, 255, 0) | hsl(105, 100%, 50%) | hsv(105, 100%, 100%) | |
120 | #00ff00 | rgb(0, 255, 0) | hsl(120, 100%, 50%) | hsv(120, 100%, 100%) | |
135 | #00ff40 | rgb(0, 255, 64) | hsl(135, 100%, 50%) | hsv(135, 100%, 100%) | |
150 | #00ff80 | rgb(0, 255, 128) | hsl(150, 100%, 50%) | hsv(150, 100%, 100%) | |
165 | #00ffbf | rgb(0, 255, 191) | hsl(165, 100%, 50%) | hsv(165, 100%, 100%) | |
180 | #00ffff | rgb(0, 255, 255) | hsl(180, 100%, 50%) | hsv(180, 100%, 100%) | |
195 | #00bfff | rgb(0, 191, 255) | hsl(195, 100%, 50%) | hsv(195, 100%, 100%) | |
210 | #007fff | rgb(0, 127, 255) | hsl(210, 100%, 50%) | hsv(210, 100%, 100%) | |
225 | #0040ff | rgb(0, 64, 255) | hsl(225, 100%, 50%) | hsv(225, 100%, 100%) | |
240 | #0000ff | rgb(0, 0, 255) | hsl(240, 100%, 50%) | hsv(240, 100%, 100%) | |
255 | #4000ff | rgb(64, 0, 255) | hsl(255, 100%, 50%) | hsv(255, 100%, 100%) | |
270 | #7f00ff | rgb(127, 0, 255) | hsl(270, 100%, 50%) | hsv(270, 100%, 100%) | |
285 | #bf00ff | rgb(191, 0, 255) | hsl(285, 100%, 50%) | hsv(285, 100%, 100%) | |
300 | #ff00ff | rgb(255, 0, 255) | hsl(300, 100%, 50%) | hsv(300, 100%, 100%) | |
315 | #ff00bf | rgb(255, 0, 191) | hsl(315, 100%, 50%) | hsv(315, 100%, 100%) | |
330 | #ff0080 | rgb(255, 0, 128) | hsl(330, 100%, 50%) | hsv(330, 100%, 100%) | |
345 | #ff0040 | rgb(255, 0, 64) | hsl(345, 100%, 50%) | hsv(345, 100%, 100%) | |
360 | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) |
HSL Saturation
Sat | Hex | Rgb | Hsl | Hsv | |
100% | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) | |
95% | #f90606 | rgb(249, 6, 6) | hsl(0, 95%, 50%) | hsv(0, 97%, 98%) | |
90% | #f20d0d | rgb(242, 13, 13) | hsl(0, 90%, 50%) | hsv(0, 95%, 95%) | |
85% | #ec1313 | rgb(236, 19, 19) | hsl(0, 85%, 50%) | hsv(0, 92%, 93%) | |
80% | #e61919 | rgb(230, 25, 25) | hsl(0, 80%, 50%) | hsv(0, 89%, 90%) | |
75% | #df2020 | rgb(223, 32, 32) | hsl(0, 75%, 50%) | hsv(0, 86%, 88%) | |
70% | #d92626 | rgb(217, 38, 38) | hsl(0, 70%, 50%) | hsv(0, 82%, 85%) | |
65% | #d22d2d | rgb(210, 45, 45) | hsl(0, 65%, 50%) | hsv(0, 79%, 83%) | |
60% | #cc3333 | rgb(204, 51, 51) | hsl(0, 60%, 50%) | hsv(0, 75%, 80%) | |
55% | #c63939 | rgb(198, 57, 57) | hsl(0, 55%, 50%) | hsv(0, 71%, 78%) | |
50% | #bf4040 | rgb(191, 64, 64) | hsl(0, 50%, 50%) | hsv(0, 67%, 75%) | |
45% | #b94646 | rgb(185, 70, 70) | hsl(0, 45%, 50%) | hsv(0, 62%, 73%) | |
40% | #b34d4d | rgb(179, 77, 77) | hsl(0, 40%, 50%) | hsv(0, 57%, 70%) | |
35% | #ac5353 | rgb(172, 83, 83) | hsl(0, 35%, 50%) | hsv(0, 52%, 68%) | |
30% | #a65959 | rgb(166, 89, 89) | hsl(0, 30%, 50%) | hsv(0, 46%, 65%) | |
25% | #9f6060 | rgb(159, 96, 96) | hsl(0, 25%, 50%) | hsv(0, 40%, 63%) | |
20% | #996666 | rgb(153, 102, 102) | hsl(0, 20%, 50%) | hsv(0, 33%, 60%) | |
15% | #936c6c | rgb(147, 108, 108) | hsl(0, 15%, 50%) | hsv(0, 26%, 58%) | |
10% | #8c7373 | rgb(140, 115, 115) | hsl(0, 10%, 50%) | hsv(0, 18%, 55%) | |
5% | #867979 | rgb(134, 121, 121) | hsl(0, 5%, 50%) | hsv(0, 10%, 53%) | |
0% | #808080 | rgb(128, 128, 128) | hsl(0, 0%, 50%) | hsv(0, 0%, 50%) |
HSL 淡 / 暗
Lum | Hex | Rgb | Hsl | Hsv | |
100% | #ffffff | rgb(255, 255, 255) | hsl(0, 0%, 100%) | hsv(0, 0%, 100%) | |
95% | #ffe5e5 | rgb(255, 229, 229) | hsl(0, 100%, 95%) | hsv(0, 10%, 100%) | |
90% | #ffcccc | rgb(255, 204, 204) | hsl(0, 100%, 90%) | hsv(0, 20%, 100%) | |
85% | #ffb3b3 | rgb(255, 179, 179) | hsl(0, 100%, 85%) | hsv(0, 30%, 100%) | |
80% | #ff9999 | rgb(255, 153, 153) | hsl(0, 100%, 80%) | hsv(0, 40%, 100%) | |
75% | #ff8080 | rgb(255, 128, 128) | hsl(0, 100%, 75%) | hsv(0, 50%, 100%) | |
70% | #ff6666 | rgb(255, 102, 102) | hsl(0, 100%, 70%) | hsv(0, 60%, 100%) | |
65% | #ff4d4d | rgb(255, 77, 77) | hsl(0, 100%, 65%) | hsv(0, 70%, 100%) | |
60% | #ff3333 | rgb(255, 51, 51) | hsl(0, 100%, 60%) | hsv(0, 80%, 100%) | |
55% | #ff1a1a | rgb(255, 26, 26) | hsl(0, 100%, 55%) | hsv(0, 90%, 100%) | |
50% | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) | |
45% | #e60000 | rgb(230, 0, 0) | hsl(0, 100%, 45%) | hsv(0, 100%, 90%) | |
40% | #cc0000 | rgb(204, 0, 0) | hsl(0, 100%, 40%) | hsv(0, 100%, 80%) | |
35% | #b30000 | rgb(179, 0, 0) | hsl(0, 100%, 35%) | hsv(0, 100%, 70%) | |
30% | #990000 | rgb(153, 0, 0) | hsl(0, 100%, 30%) | hsv(0, 100%, 60%) | |
25% | #800000 | rgb(128, 0, 0) | hsl(0, 100%, 25%) | hsv(0, 100%, 50%) | |
20% | #660000 | rgb(102, 0, 0) | hsl(0, 100%, 20%) | hsv(0, 100%, 40%) | |
15% | #4d0000 | rgb(77, 0, 0) | hsl(0, 100%, 15%) | hsv(0, 100%, 30%) | |
10% | #330000 | rgb(51, 0, 0) | hsl(0, 100%, 10%) | hsv(0, 100%, 20%) | |
5% | #1a0000 | rgb(26, 0, 0) | hsl(0, 100%, 5%) | hsv(0, 100%, 10%) | |
0% | #000000 | rgb(0, 0, 0) | hsl(0, 0%, 0%) | hsv(0, 0%, 0%) |
HSV Saturation
Sat | Hex | Rgb | Hsl | Hsv | |
100% | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) | |
95% | #ff0d0d | rgb(255, 13, 13) | hsl(0, 100%, 53%) | hsv(0, 95%, 100%) | |
90% | #ff1919 | rgb(255, 25, 25) | hsl(0, 100%, 55%) | hsv(0, 90%, 100%) | |
85% | #ff2626 | rgb(255, 38, 38) | hsl(0, 100%, 57%) | hsv(0, 85%, 100%) | |
80% | #ff3333 | rgb(255, 51, 51) | hsl(0, 100%, 60%) | hsv(0, 80%, 100%) | |
75% | #ff4040 | rgb(255, 64, 64) | hsl(0, 100%, 63%) | hsv(0, 75%, 100%) | |
70% | #ff4d4d | rgb(255, 77, 77) | hsl(0, 100%, 65%) | hsv(0, 70%, 100%) | |
65% | #ff5959 | rgb(255, 89, 89) | hsl(0, 100%, 68%) | hsv(0, 65%, 100%) | |
60% | #ff6666 | rgb(255, 102, 102) | hsl(0, 100%, 70%) | hsv(0, 60%, 100%) | |
55% | #ff7373 | rgb(255, 115, 115) | hsl(0, 100%, 73%) | hsv(0, 55%, 100%) | |
50% | #ff8080 | rgb(255, 128, 128) | hsl(0, 100%, 75%) | hsv(0, 50%, 100%) | |
45% | #ff8c8c | rgb(255, 140, 140) | hsl(0, 100%, 78%) | hsv(0, 45%, 100%) | |
40% | #ff9999 | rgb(255, 153, 153) | hsl(0, 100%, 80%) | hsv(0, 40%, 100%) | |
35% | #ffa6a6 | rgb(255, 166, 166) | hsl(0, 100%, 83%) | hsv(0, 35%, 100%) | |
30% | #ffb3b3 | rgb(255, 179, 179) | hsl(0, 100%, 85%) | hsv(0, 30%, 100%) | |
25% | #ffbfbf | rgb(255, 191, 191) | hsl(0, 100%, 88%) | hsv(0, 25%, 100%) | |
20% | #ffcccc | rgb(255, 204, 204) | hsl(0, 100%, 90%) | hsv(0, 20%, 100%) | |
15% | #ffd9d9 | rgb(255, 217, 217) | hsl(0, 100%, 93%) | hsv(0, 15%, 100%) | |
10% | #ffe6e6 | rgb(255, 230, 230) | hsl(0, 100%, 95%) | hsv(0, 10%, 100%) | |
5% | #fff2f2 | rgb(255, 242, 242) | hsl(0, 100%, 98%) | hsv(0, 5%, 100%) | |
0% | #ffffff | rgb(255, 255, 255) | hsl(0, 0%, 100%) | hsv(0, 0%, 100%) |
HSV 亮 / 暗
Value | Hex | Rgb | Hsl | Hsv | |
100% | #ff0000 | rgb(255, 0, 0) | hsl(0, 100%, 50%) | hsv(0, 100%, 100%) | |
95% | #f20000 | rgb(242, 0, 0) | hsl(0, 100%, 48%) | hsv(0, 100%, 95%) | |
90% | #e60000 | rgb(230, 0, 0) | hsl(0, 100%, 45%) | hsv(0, 100%, 90%) | |
85% | #d90000 | rgb(217, 0, 0) | hsl(0, 100%, 43%) | hsv(0, 100%, 85%) | |
80% | #cc0000 | rgb(204, 0, 0) | hsl(0, 100%, 40%) | hsv(0, 100%, 80%) | |
75% | #bf0000 | rgb(191, 0, 0) | hsl(0, 100%, 38%) | hsv(0, 100%, 75%) | |
70% | #b30000 | rgb(179, 0, 0) | hsl(0, 100%, 35%) | hsv(0, 100%, 70%) | |
65% | #a60000 | rgb(166, 0, 0) | hsl(0, 100%, 33%) | hsv(0, 100%, 65%) | |
60% | #990000 | rgb(153, 0, 0) | hsl(0, 100%, 30%) | hsv(0, 100%, 60%) | |
55% | #8c0000 | rgb(140, 0, 0) | hsl(0, 100%, 28%) | hsv(0, 100%, 55%) | |
50% | #800000 | rgb(128, 0, 0) | hsl(0, 100%, 25%) | hsv(0, 100%, 50%) | |
45% | #730000 | rgb(115, 0, 0) | hsl(0, 100%, 23%) | hsv(0, 100%, 45%) | |
40% | #660000 | rgb(102, 0, 0) | hsl(0, 100%, 20%) | hsv(0, 100%, 40%) | |
35% | #590000 | rgb(89, 0, 0) | hsl(0, 100%, 18%) | hsv(0, 100%, 35%) | |
30% | #4d0000 | rgb(77, 0, 0) | hsl(0, 100%, 15%) | hsv(0, 100%, 30%) | |
25% | #400000 | rgb(64, 0, 0) | hsl(0, 100%, 13%) | hsv(0, 100%, 25%) | |
20% | #330000 | rgb(51, 0, 0) | hsl(0, 100%, 10%) | hsv(0, 100%, 20%) | |
15% | #260000 | rgb(38, 0, 0) | hsl(0, 100%, 8%) | hsv(0, 100%, 15%) | |
10% | #1a0000 | rgb(26, 0, 0) | hsl(0, 100%, 5%) | hsv(0, 100%, 10%) | |
5% | #0d0000 | rgb(13, 0, 0) | hsl(0, 100%, 3%) | hsv(0, 100%, 5%) | |
0% | #000000 | rgb(0, 0, 0) | hsl(0, 0%, 0%) | hsv(0, 0%, 0%) |
RGB (Red, Green, Blue)
Red | Green | Blue |
---|---|---|
255 | 0 | 0 |
rgb(255, 0, 0) #ff0000
如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
、背景:
为了实现抓取某目标网站的歌曲以及作者,通过python + Xpath方式实现,并将抓取的结果保存到csv格式的excel表格里。
2、实现步骤:
(1)获取该网站的网页源码
(2)使用Xpath方式进行解析,找到要抓取的歌曲和作者所在的段落
(3)将解析后的结果写入到CSV格式的excel中
3、关键技术:
python、requests、Xpath、csv文件写入
4、代码实现:
# ############## 通过python+Xpath实现抓取某网站推荐的歌曲
import requests
import lxml.html
import csv
url="http://www.show160.com/"
html=requests.get(url=url)
htmlContent=html.content.decode("GBK")
selector=lxml.html.fromstring(htmlContent)
#先抓大,找到歌曲信息所在的片段
item_list=selector.xpath('//*[@id="music_con1_1"]/div[@class="cont"]/div[@class="music_list"]/ul/li')
songAndAuthorList=[]
#基于抓取的结果再抓取每个li下面的信息,包括歌曲名和作者
for item in item_list:
name=item.xpath('div[@class="lebox"]/a/text()')
author=item.xpath('div[@class="ribox"]/a/text()')
itemDict={"name":name[0],
"author":author[0]}
songAndAuthorList.append(itemDict)
#将结果存入到excel表格里
with open('songAndAuthor.csv', 'w', encoding='utf-8-sig', newline='') as f:
writer=csv.DictWriter(f, fieldnames=['name','author'])
writer.writeheader()
writer.writerows(songAndAuthorList)
5、代码解析:
下面是源码的截图,
为了看的更清楚一点,将要抓取的结构罗列如下:
6、代码运行结果:
*请认真填写需求信息,我们会在24小时内与您取得联系。