基于歌词时间标签的相似歌曲推荐模型
有很多类型的歌词文件带有时间标签,如市面上几乎所有的播放器都支持的LRC,以下是辛晓琪《领悟》这首歌LRC的一部分:
[ti:领悟]
[ar:辛晓琪]
[00:00.00]辛晓琪 领悟
[00:01.00]我以为我会哭
[00:05.00]但是我没有
[00:09.00]我只是怔怔望着你的脚步
[00:14.00]给你我最后的祝福
[00:19.00]这何尝不是一种领悟
[00:23.00]让我把自己看清楚
[00:27.00]虽然那共爱的痛苦
[00:30.00]将日日夜夜
[00:32.00]在我灵魂最深处
……
可以看出,LRC歌词的时间标签标注了某句歌词的开头(实际上是可以给每个字加上标签来实现卡拉OK效果的,由于成本太高,所以目前的播放器都是采用标识整句,均分到字的方式),下面来计算每个字所占用的时间:
两个相邻时间标签的时间差值/该句歌词字数=每字时长
通常在歌曲的副歌或是说高潮(也就是我们对这首歌最熟悉的部分,如《领悟》里的“啊!多么痛的领悟,你曾是我的全部”)出现的之前,会有一小段纯音乐的过渡,这段过渡会计入上一句的时长里,影响到每字时长的计算,使计算得到的每字时间变长,为了减少误差,当歌曲某一句的每字时长明显超过其他句每字时长的时候,抛弃该句的计算值。这样,我们就获得了《领悟》这首歌曲的人声分布区域、全曲平均每字时长、单句每字时长这三个数据,接下来利用这三个数据来形成推荐相似歌曲的基础。
1、人声分布区域,这是一个时间段的概念,结合全曲时长,来获得人声演唱的相对时间段。曲风、旋律、节奏相近的歌曲,在人声分布区域上也是相近的(凤凰传奇的歌应该是比较明显了)。
补充:也可以不抛弃计算值,只保存单句每字时长明显超过其他句每字时长的那几句歌词,这几句多半就是副歌开始及歌曲最后的抒情。
2、全曲平均每字时长,这与歌曲的节奏是一致的,通过节奏把歌曲分类为慢、偏慢、偏快、快四个类型或是更多类型,就能实现谷歌音乐挑歌功能里的按节奏挑选。
3、单句每字时长,这描述的是单位时间里歌词的密集程度,用一个图来说明意义(没精确算,只说明思路),如下:
横轴是全曲的时间轴(刻度是相对时间,如全曲的1/50),纵轴是歌词密集程度,越密集值越大,如果在歌曲中有一段rap,那么在图中就会出现一个尖锐的波峰。在相似歌曲的推荐中,就可以采用常见的波形相似性算法了。
注:简化一下,横轴的刻度是“句”,纵轴参数是每句歌词密度,就形成了一个波形图,与时间无关,有利于不同时长歌曲的匹配。
如果所处理的歌词是KMC格式,能更准确的获得每字的时长,可以更精确表现人声分布区域及节奏。下面是一个KMC格式歌词,引自百度百科KMC词条:
<kmc ti="小薇" ar="黄品源" al="精选集" by="某某" offset="0" duration="3:16">
<l t="00:28.556,00:33.752,165,291,2450,163,253,219,315,260,1080">有一个美丽的小女孩</l>
<l t="00:34.515,00:39.383,230,167,291,2063,198,356,483,1080">她的名字叫作小薇</l>
t 属性(time) 表示行内容对应的时间组,用英文逗号,隔开
前两个时间值为行开始和结束时间,格式为:分:秒
后面的时间值对应为行内每一段经历的时间,单位:毫秒
最后,这个推荐模型的歌曲相似性所描述的是曲风、编曲节奏相似的歌曲。
标签:无