Awesome
Lyricist
基于Tensorflow、Seq2Seq、Bahdanau注意力机制的 中文歌词生成研究
训练数据集来自我收集整理的中文歌词数据库: https://github.com/dengxiuqi/ChineseLyrics
基于Pytorch和Luong注意力的另一个项目: https://github.com/dengxiuqi/Lyricist-torch
方法
- 采用Seq2Seq模型, 输入上句或歌名直接生成下句。反复将生成的下句输入网络, 循环往复, 可以得到整首歌曲
- 注意力机制使用的是Bahdanau Attention, 在解码器生成下句的时候, 会根据当前语境信息对上文的一些词汇进行重点关注
- 对词语的向量化编码采用的是提前训练好的Word2Vec模型
- 在测试阶段只展示了根据上句生成下句单个词语的阶段, 如需生成完整歌词, 只需循环进行此步骤即可
工程
Lyricist-tensorflow
│── data 数据集
│ │── songs_cut.json 分词后的歌词数据
│ │── words.json 歌词数据库词典
│ ` ── word2vec.txt word2vec数据, 请从 https://pan.baidu.com/s/1h_7P7Iypv9HAQAJPayCkWw 下载
│── model 存放训练好的模型
│ ` ── ......
│── config.py 数据集合网络结构的一些参数
│── data.py 数据集处理
│── network.py 网络结构
│── train.py 训练
` ── test.py 测试
效果
根据不同上句生成下句单个词语的阶段
1
上句: 迎接早晨灿烂的阳光
下句: 我的……
上句 | 迎接 | 早晨 | 灿烂 | 的 | 阳光 |
---|
注意力 | 0.20360762 | 0.3191696 | 0.14018247 | 0.09243581 | 0.24460447 |
生成的候选词: ['祖国', '阳光', '太阳', '新疆', '家庭']
2
上句: 眼角留着你给的泪水
下句: 我的……
上句 | 眼角 | 留 | 着 | 你 | 给 | 的 | 泪水 |
---|
注意力 | 0.29617822 | 0.0401211 | 0.09877114 | 0.15365875 | 0.07016596 | 0.12643187 | 0.21467307 |
生成的候选词: ['眼角', '眼泪', '心里', '心碎', '泪水']
3
上句: 我在黑夜之中寻找出口
下句: 我的……
上句 | 我 | 在 | 黑夜 | 之中 | 寻找 | 出口 |
---|
注意力 | 0.129262 | 0.08518599 | 0.46715733 | 0.09963258 | 0.09444849 | 0.12431359 |
生成的候选词: ['迷惘', '孤独', '寂寞', '黑夜', '星光']
4
上句: 给我甜蜜笑容
下句: 我的……
上句 | 给 | 我 | 甜蜜 | 笑容 |
---|
注意力 | 0.15871677 | 0.16507187 | 0.32744813 | 0.34876317 |
生成的候选词: ['爱人', '人生', '快乐', '美梦', '小']