没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
23页
循环神经网络不仅可以用于预测模型,也可以用作生成模型。也就是说,可以使用循环神经网络学习序列问题,并为问题域生成全新的合理序列。生成模型不仅需要对问题本身进行深入研究,还需要了解问题相关的知识领域的信息。在这个项目中,将使用长短期记忆网络为文本创建生成模型。许多古典文本不再受版权保护,这意味着可以免费下载这些图书的所有文本,并在实验中使用它们,如创建生成模型。在本章中,将使用作者最喜爱的一本国外童话书《爱丽丝梦游仙境》进行文本分析,并使用其生成模型生成新的文本序列。《爱丽丝梦游仙境》的文本可以到 https://www.gutenberg.org/ebooks/11 下载。
资源推荐
资源详情
资源评论
文本生成实例:爱丽丝
梦游仙境
循环神经网络不仅可以用于预测模型,也可以用作生成模型。也就是说,可以使用
循环神经网络学习序列问题,并为问题域生成全新的合理序列。生成模型不仅需要对问
题本身进行深入研究,还需要了解问题相关的知识领域的信息。在这个项目中,将使用
长短期记忆网络为文本创建生成模型。
22.1 问题描述
许多古典文本不再受版权保护,这意味着可以免费下载这些图书的所有文本,并在
实验中使用它们,如创建生成模型。在本章中,将使用作者最喜爱的一本国外童话书《爱
丽丝梦游仙境》进行文本分析,并使用其生成模型生成新的文本序列。《爱丽丝梦游仙境》
的文本可以到 https://www.gutenberg.org/ebooks/11 下载。
深度学习:基于 Keras 的 Python 实践
212
22.2 导入数据
下载后的文本文件需要进行预处理,才能用于神经网络的训练。首先将文本导入
Python,然后按照标点符号分割成不同的句子,并将其中无意义的字符(如换行符等)
和每个章节的标题删除,代码如下:
def load_dataset():
# 读入文件
with open(file=filename, mode='r') as file:
document = []
lines = file.readlines()
for line in lines:
# 删除非内容字符
value = clear_data(line)
if value != '':
# 对一行文本进行分词
for str in word_tokenize(value):
# 跳过章节标题
if str == 'CHAPTER':
break
else:
document.append(str.lower())
return document
def clear_data(str):
# 删除字符串中的特殊字符或换行符
value = str.replace('\ufeff', '').replace('\n', '')
return value
22.3 分词与向量化
文本文件导入后,需要将每个单词包括标点符号转换成数字,作为神经网络模型的
输入。在对文本进行分词时使用 NLTK 库来处理,并使用 Gensim 将分词后的单词转化成
整数。NLTK 和 Gensim 可以通过 pip 来进行安装,在这里不再详细介绍。安装完成后,
NLTK 需要先下载词库到本地,然后就可以使用 NLTK 进行分词。首次使用 NLTK,可
22 文本生成实例:爱丽丝梦游仙境
213
以使用如下代码将词库下载到本地:
import nltk
import ssl
# 取消 SSl 认证
ssl._create_default_https_context = ssl._create_unverified_context
# 下载 nltk 数据包
nltk.download()
在安装准备完成后,先使用 NLTK 和 Gensim 进行分词,并将其转化成整数。分词使
用 NLTK 的 word_tokenize()函数,分词的过程与数据导入同步进行。然后使用 Gensim 将
单词转换为整数,并生成一个简单的向量,代码如下:
def word_to_integer(document):
# 生成字典
dic = corpora.Dictionary([document])
# 保存字典到文本文件
dic.save_as_text(dict_file)
dic_set = dic.token2id
# 将单词转换为整数
values = []
for word in document:
# 查找每个单词在字典中的编码
values.append(dic_set[word])
return values
22.4 词云
分词之后,将整个单词序列中的标点符号排除,生成词云看一下哪些单词在书中出
现最频繁。出现越频繁的单词,显示的字体越大,生成词云使用 pyecharts(百度开源的
一个图表显示工具,可以使用 pip 进行安装)。使用 pyecharts 生成词云时,只需要导入
WordCloud 类,传入单词列表和单词出现的频率即可,代码如下:
# 生成词云
def show_word_cloud(document):
# 需要清除的标点符号
深度学习:基于 Keras 的 Python 实践
214
left_words = ['.', ',', '?', '!', ';', ':', '\'', '(', ')']
# 生成字典
dic = corpora.Dictionary([document])
# 计算得到每个单词的使用频率
words_set = dic.doc2bow(document)
# 生成单词列表和使用频率列表
words, frequences = [], []
for item in words_set:
key = item[0]
frequence = item[1]
word = dic.get(key=key)
if word not in left_words:
words.append(word)
frequences.append(frequence)
# 使用 pyecharts 生成词云
word_cloud = WordCloud(width=1000, height=620)
word_cloud.add(name='Alice\'s word cloud', attr=words, value=frequences,
shape='circle', word_size_range=[20, 100])
word_cloud.render()
执行代码,从得到的词云可以看到,在《爱丽丝梦游仙境》中出现频率最高的三个
单词是:the,and 和 to,这三个单词都是连词。词云如图 22-1 所示。
图 22-1
22 文本生成实例:爱丽丝梦游仙境
215
22.5 简单 LSTM
到这里,所有的准备工作全部完成,首先通过一个简单的长短期记忆网络来生成对
《爱丽丝梦游仙境》的文本分析模型,这个模型中包含一个词嵌入层、一个 LSTM 层、一
个 Dropout 层,以及一个使用 softmax 激活函数的输出层。然后将准备的数据按照固定
长度拆分成训练数据集,并使用其训练模型,同时将生成的模型保存到文件中。完整
代码如下:
from nltk import word_tokenize
from gensim import corpora
from keras.models import Sequential
from keras.layers import LSTM
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers.embeddings import Embedding
from keras.layers.convolutional import Conv1D, MaxPooling1D
import numpy as np
from keras.utils import np_utils
from pyecharts import WordCloud
filename = 'Alice.txt'
document_split = ['.', ',', '?', '!', ';']
batch_size = 128
epochs = 200
model_json_file = 'simple_model.json'
model_hd5_file = 'simple_model.hd5'
dict_file = 'dict_file.txt'
dict_len = 2789
max_len = 20
document_max_len = 33200
def load_dataset():
# 读入文件
with open(file=filename, mode='r') as file:
document = []
剩余22页未读,继续阅读
资源评论
好知识传播者
- 粉丝: 498
- 资源: 4204
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功