先上代码:
# 禁用词,包含如下字符的唐诗将被忽略
DISALLOWED_WORDS = ['(', ')', '(', ')', '__', '《', '》', '【', '】', '[', ']']
# 句子最大长度
MAX_LEN = 64
# 最小词频
MIN_WORD_FREQUENCY = 8
# 训练的batch size
BATCH_SIZE = 16
# 数据集路径
DATASET_PATH = './poetry.txt'
# 每个epoch训练完成后,随机生成SHOW_NUM首古诗作为展示
SHOW_NUM = 5
# 共训练多少个epoch
TRAIN_EPOCHS = 20
# 最佳权重保存路径
BEST_MODEL_PATH = './best_model.h5'
DISALLOWED_WORDS:我们的禁词列表是包含多个字符串的列表,用于指定在进行唐诗处理的时候要被忽略的特定字符或词语。显然列表中对应的符号是进行注释或诗词名。
其次我们指定句子的最大长度是64。
最小词频为8表示我们把出现八次一下的词汇指定为出现八次,用于确保每个出现但是频率比较低的词汇都能有一定的权重参与进来,虽然看起来八次已经很高了,但是考虑到我们的训练集中词汇的个数,其实八次的频率算是很低。
训练的batch_size为16,表示每个批次有16个样本。
而后就是我们的数据集路径,这点不用多说。在之前我的资源里面已经上传相关诗词。
SHOW_NUM表示我们输出的诗词,也就是我们经过训练之后生成的。
之后我们定义训练的轮数,在我们的代码中指定为20,也就是共训练20轮,每一轮都会进行一次权重的更新,训练20轮之后得到的权重能更多的综合我们的训练集的信息。
最后我们将权重保存在最佳权重保存路径中,保存的目的是我们在下一次进行生成诗词的时候可以直接利用此权重,不用再重新训练。
下面我们展示一下生成的结果: