这里稍微更改了下《深度学习框架PyTorch:入门与实践》里的demo,去掉稍微繁琐和多次训练的部分,只保留了比较核心的生成连接诗和藏头诗两部分(比较渣太复杂了看不懂)。
目标效果:
连接诗:
机器学习书,局上无酒浆。婆娑珍金盘,缕烂金葳浆。萱草发秋叶,旖旎镂金墙。拳芳既盈薄,禄位不敢匼。揆我不及饱,有时不相并。我为蘧生意,日出狱所宣。徇禄惩未卜,退食何由尝。濡毫若可濯,视事忘忧伤。茍餐偿朽援,亦有糟醨浆。忆来不得意,与我来此方。幽谷荫幽壤,清猨鸣秋霜。因思霖雨霁,始觉风物长。既与物外违,复知辱所并。吾欲顾己仁,岂必死者伤。茍哉吾安适,复道迈一觞。虽遇物外兴,永忻良所侵。
藏头诗:
机心俨不见,金马不可量。器食非所古,此心何足伤。学书三十载,相劝一旬长。习隸不可乐,持斧亦葳裳。书来不可再,稅首皆自忙。
主要面main.py:
import torch as t
from data import get_data
from model import PoetryModel
"""对象"""
class Config(object):
data_path = 'data/' # 诗歌的文本文件存放路径
pickle_path = 'tang.npz' # 预处理好的二进制文件,包含data,形状为(57580,125),共57580首诗歌,每首诗歌长度125,不够补空格,多余丢弃
category = 'poet.tang' # 类别,唐诗还是宋诗歌(poet.song)
max_gen_len = 200 # 生成诗歌最长长度
prefix_words = '细雨鱼儿出,微风燕子斜。' # 不是诗歌的组成部分,用来控制生成诗歌的意境
start_words = '闲云潭影日悠悠' # 诗歌开始
acrostic = True # 是否是藏头诗
model_path = None # 预训练模型路径
opt = Config()
"""给定一句诗,继续生成一首完整的诗"""
def generate(model, start_words, ix2word, word2ix, prefix_words=None):
"""
ix2word:每个序号对应的字
word2ix:每个字对应的序号
prefix_words:诗歌意境
<EOP>:8290
<START>:8591
</s>:8292
<,>:7066
<。>:7435
"""