Keras—AI写诗
LSTM、 中文文本生成、jieba分词、one-hot编码
数据库下载自:基于PaddlePaddle框架利用RNN(循环神经网络)生成古诗句
代码参考:deep-learning-with-python
一、数据处理
1)中文文本,txt格式,使用jieba库分词的的结果进行one-hot编码。
2)需要将原始文本所有的标点符号替换为空格。每一行不能以空格开头
1、文本数据读入与分词
1)读入 .txt 格式的训练数据,并进行分词。
2)以分行符为标准将分词结果整理为一个二维数组。
import jieba
# 读取原始文本
file_src = open("../../poetrys.txt", "r", encoding="utf-8")
file_txt = file_src.read()
file_src.close()
# 使用jieba分词
file_word = jieba.lcut(file_txt)
del file_txt
# 对文本进行整理,使用samples存储所有的词语,每一句作为一个独立元素
# 以'\n'作为断句标准
samples = []
sentence = []
length_text = 0 # 记录总的词语数量
for word in file_word:
if word == ' ':
continue;
else:
if word == '\n':
samples.append(sentence)
sentence = []
else:
length_text = length_text + 1
sentence.append(word)
del file_word
print("总词数:", length_text)
2、生成词索引
1)建立字典,为每个独立的词语建立一个唯一的索引值。注:由于此处所使用数据由原作者处理为了每个字之间都有空格,因此在此的jieba分词结果也是每个字独立的,所以实际上是基于字的文本生成,而非基于词语的文本生成
2)建立训练数据集、预测数据集。其中seq_length为训练数据集每一组所有的词语数,step为隔step个词语采样一个新的序列。如,有数据 “路 漫 漫 其 修 远 兮 吾 将 上 下 而 求 索”,建立的数据集为:
sentences | next_words |
---|---|
路 漫 漫 其 修 远 兮 | 吾 |
漫 其 修 远 兮 吾 将 | 上 |
修 远 兮 吾 将 上 下 | 而 |
兮 吾 将 上 下 而 求 | 索 |
# 为文本中所有词语设置索引
token_index = {
}
# 数据整形,将文本整形为7个词为一个序列的形式,方便作为输入
step = 2 # 每隔一个词组采样一个新序列
seq_length = 7 # 7个词语为一个序列
sentences = [] # 训练数据集