本项目在 Ubuntu 16.04 测试通过, 原则上在 Linux/Mac 上也能运行, 但不保证在 Windows 下的使用. 代码于 2017/10 发布于 GitHub, 注释基本为英文注释.
项目的结构如下所示:
.
├── data
│ ├── embedding_word2vec.txt
│ ├── pingshuiyun.txt
│ ├── pingze.txt
│ ├── rnnpg_data_emnlp-2014
│ │ └── partitions_in_Table_2
│ │ ├── poemlm
│ │ │ ├── qts_5.txt
│ │ │ ├── qts_7.txt
│ │ │ ├── qts.arpa
│ │ │ └── qts.klm
│ │ └── rnnpg
│ │ ├── qtest
│ │ ├── qtest_5
│ │ ├── qtest_7
│ │ ├── qtotal
│ │ ├── qtrain
│ │ ├── qtrain_5
│ │ ├── qtrain_7
│ │ ├── qvalid
│ │ ├── qvalid_5
│ │ └── qvalid_7
│ ├── shixuehanying.txt
│ ├── vocab.txt
│ └── word2vec.model
├── nevermore
│ ├── checkpoints
│ │ └── 7
│ │ └── 383_new2.chkpt
│ ├── config.py
│ ├── dataset.py
│ ├── firstline.py
│ ├── generate.py
│ ├── __init__.py
│ ├── model.py
│ ├── train.py
│ ├── util.py
│ └── word2vec.py
└── README.md
data
为数据目录, 包含了除 Model Checkpoints 之外所有本项目使用到的数据;pingshuiyun.txt
- 平水韵shixuehanying.txt
- 诗学含英pingze.txt
- 8 种常用格律embedding_word2vec.txt
- 使用 Gensim 得到的 Word embedding 文件vocab.txt
- 使用 Gensim 得到的词汇表文件word2vec.model
- 使用 Gensim 得到的 Word2Vec 模型rnnpg_data_emnlp-2014
- 本项目使用了 Chinese Poetry Generation with Recurrent Neural Networks 提供的诗词数据, 并未修改原目录结构
nevermore
下为本项目的源代码, 以及 Model Checkpointsmodel.py
- 模型定义脚本train.py
- 模型训练脚本generate.py
- 模型脚本, 使用训练好的模型作诗firstline.py
- 生成诗的首句dataset.py
- 创建数据集的脚本config.py
- 保存了本项目的一些基本配置项util.py
- 常用函数的集合word2vec.py
- 用于生成 word2vec.model, embedding_word2vec.txt, vocab.txt
- Python (3.5)
- Pytorch (0.2.0) (官方未提供 Windows 库)
- NumPy (1.13.3)
- KenLM
- Gensim (3.2.0)
KenLM 的安装比较复杂, 请参考这篇文章
其他 Python 包安装非常简单, 以 pip 为例:
安装 Pytorch (CUDA 8.0)
pip3 install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl
安装 Gensim
pip3 uninstall numpy
pip3 install gensim==3.2.0
Gensim 和 Pytorch 对 NumPy 都有依赖, 因此执行完上面两条命令, 已经安装好 NumPy. 若发现 NumPy 版本不同影响到程序运行, 可执行运行命令:
pip3 uninstall numpy
pip3 install numpy==1.13.3
执行命令python nevermore/firstline.py -n 5 -w 春
将生成首句诗. -n/--qtype
用于指定每句字数, 一般为五言或七言; -w/--qtopic
指定用于作诗的意象, 可使用的意象详见data/shixuehanying.txt.
在nevermore/checkpoints/7/
目录下, 已经提供了一个 Model Checkpoint 383_new2.chkpt
, 可直接使用.
执行命令python nevermore/generate.py -n 7 -w 诗
将生成一首完整的, 以诗为意象的七言绝句.
若希望从头开始训练模型, 可依照以下步骤:
- 执行
python nevermore/word2vec.py
, 得到 word2vec.model, embedding_word2vec.txt, vocab.txt - 执行
python nevermore/train.py
, 训练模型, 不失一般性, 使用 CPU 而非 GPU, 因此训练较慢. - 执行
python nevermore/generate.py -n 7 -w 诗
, 作诗