从零开始用深度学习生成林夕曲风的歌词
歌词是一种用来配合音乐咏唱的文学体裁,好的词作往往只用非常简短的语言就能描绘出丰富的情感。林夕是一位非常有才华的作词人,他善用细腻的描写和大量的修辞手法将深刻复杂、百转千回的情感刻画的入木三分,让人产生强烈的共鸣。而他从1985年开始尝试作词以来就非常高产,作品的质量也都非常高,比如《追》《春秋》《黑择明》《富士山下》《再见二丁目》等都是非常优秀的作品,所以我们试图训练一个Language model来模仿林夕的写作风格,产生新的歌词。
程序可以在我的github上获得,语言模型的部分参考fukuball的project Tom-Chang-Deep-Lyrics:Character-level language models for text generation based-on LSTM.
模型結構如下:
爬取歌词
首先寻找可以爬取的歌词语料,我选择了网易云上数量最多的林夕歌单,截止目前收录了3126首林夕的作品。
使用文件夾里的get_lyrics.ipynb把歌单里的歌词爬取到一个文档里。
数据预处理
得到歌词预料后需要对数据进行清洗,主要进行如下操作。
简繁转换。(用OpenCC实现)
1
opencc -i lx_songlist_preprocess.txt -o lx_songlist_preprocess_zh.txt -c zht2zhs.ini
删除作词、作曲、演唱等噪声。
- 删除文本中的空行。
处理后大约能得到923kB的corpus。
训练模型
环境要求
1 | tensorflow==1.8.0 |
运行如下指令对model进行训练,Config.py里可以调整对应的参数。
1 | python train.py lyrics/lx_songlist_preprocess.txt |
生成歌词
运行generate.ipynb,修改start_sentence就可以生成不同的歌词。在writing活页夹里有之前生成的样例歌词。以下是部分结果展示:
如果
先用“如果”开头测试一下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19如果碰见我
难道你 只需要一个
回头或能面对
如何自爱 如何自欺
难道自己 如何自欺
难道在你在你在你是谁是谁是谁
谁是你最有感觉留下过去
我的身体 你是我最佳听众
好像 很像 心灵相通
我就是你永远也不值得
我要他身边在乎
你的幸福 我是我最佳听众
好像 很像 心灵相通
我的心 你的眼泪
流浪在我的心 为了一直到你的家
越爱越深 越风靡越风流
是你所有的 我就是我一样
忘掉道行 是我的心
我的情人
忘掉种过的花
然后用黄伟文熟悉的作品《喜帖街》第一句歌词作为开头测试,看是否会有不一样的感觉:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16忘掉种过的花
你的爱还是始终
为何为你 为爱而为爱为错 为了什么 期待你
我的心 你的心 我很懂
痛就痛 痛苦快乐吧 也要开心
我的身体跟你思想
在你面前不用口是心非
在最寂寞的关系 永远在左右
事过情迁后 升华以后)升华眼泪后
思念是最漫长的享受(漫长的享受(漫长的享受)
无人的快乐 是我的心情
在我耳边的我 没有所谓
只有你的心跳 还能是真的明白
我的眼泪 埋藏在我的心
我的眼泪 埋藏在我的心
我的眼泪
生似蜉蝣
最后用林夕自己的作品《阿猫阿狗》里的一句话:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22生似蜉蝣
只想你幸福不担心的经过
不必记得失去时期
然后可上天下地
记得三岁何处看戏
不淮记得你
不淮再展一条愁眉
然后跟你玩妒忌
爱不到你还要爱美
期待我情深不死
不淮记得失眠时期
然后可上天下地
记得三岁何处看戏
不淮记得你
合着眼睛 怀着笑意的决定
我的情绪是你的心情
在最寂寞的关心 永远在左右
事过情迁后 升华以后)升华眼泪后
思念是你的心
我的心 我的心
我的眼泪能流浪
流过的泪水 把你的问性
可以看出还是会有一些重复,语义不详,或是直接使用大段现有歌词文本的情况出现,可能还是因为data不够多的问题,本来考虑用林夕的书来作为补充语料pretrain,后来发现林夕文章的风格和词作的差异太大效果反而不好,遂放弃。之后可能会试试其他风格较明显的词作来看看是否能生成文风之间的区别,比如黄伟文、五月天或苏打绿,还可以尝试加入一些诗词的语料作为辅助。
无人的快乐 是我的心情
在我耳边的我 没有所谓
只有你的心跳 还能是真的明白
我的眼泪 埋藏在我的心
我的眼泪 埋藏在我的心
我的眼泪1
2
3
### 生似蜉蝣
最后用林夕自己的作品《阿猫阿狗》里的一句话:
生似蜉蝣
只想你幸福不担心的经过
不必记得失去时期
然后可上天下地
记得三岁何处看戏
不淮记得你
不淮再展一条愁眉
然后跟你玩妒忌
爱不到你还要爱美
期待我情深不死
不淮记得失眠时期
然后可上天下地
记得三岁何处看戏
不淮记得你
合着眼睛 怀着笑意的决定
我的情绪是你的心情
在最寂寞的关心 永远在左右
事过情迁后 升华以后)升华眼泪后
思念是你的心
我的心 我的心
我的眼泪能流浪
流过的泪水 把你的问性
```
可以看出还是会有一些重复,语义不详,或是直接使用大段现有歌词文本的情况出现,可能还是因为data不够多的问题,本来考虑用林夕的书来作为补充语料pretrain,后来发现林夕文章的风格和词作的差异太大效果反而不好,遂放弃。之后可能会试试其他风格较明显的词作来看看是否能生成文风之间的区别,比如黄伟文、五月天或苏打绿,还可以尝试加入一些诗词的语料作为辅助。