#使用LSTM生成序列。回头可以测试唐诗生成。
#蚂蚁金服的自动客服问答就是这样做的。而且效果不好简直是人工智障!
#根据不同的softmax温度值,对概率分布进行重新加权。
import numpy as np
def reweight_distribution(original_distribution,temperature=0.5):distribution = np.log(original_distribution) / temperature#log(原始分布)/softmax温度。 log是幂的逆运算。#原始分布式概率值组成的一维numpy数组,这些概率值之和是1.distribution = np.exp(distribution)return distribution / np.sum(distribution)
#返回原始分布重新加权后的结果。distribution的求和可能不再是1了。
#因此需要将它除以求和,以得到重新的分布。
#温度值更高就更不可预测。表现的更有创造性。
##############################################################
#就算AI能实现的功能有限,但有科技封装概念的加持,产品的品牌
#效应、让人认可的效果也更好。
#下载尼采的作品。
import keras
import numpy as np
path = keras.utils.get_file('nietzsche.txt',origin='https://s3.amazonaws.com/text-datasets/nietzsche.txt')
#
#text = open(path).read().lower()#英文读不懂换成还珠格格,文本文件大小差不多,但是内容
#应该比英文少,因为汉字字符bytes长,但是维度会很高。
#原来的尼采文集有:586kb,60万字,20万句话,58个唯一字符。中文肯定字符要多很多。
#还珠格格信息:603kb,Cropus length: 320503
#Number of sequences: 106815
#Unique charachters: 2992
#直接卡死了。
#坏蛋是怎样练成的有3.85MB.
#改用流浪地球部分,才68kbCropus length: 24363
#Number of sequences: 8101
#Unique charachters: 1581
#text = open('./data/还珠格格.txt').read().lower()
text = open('./data/流浪地球部分.txt',encoding='utf-8').read().lower()
print('Cropus length:',len(text))
#Cropus 全文
##################################################################
#提取长度为maxlen 的序列(这些序列之间存在部分重叠),对它们进行
#one-hot 编码。
#准备一个数组y,其中包含对应的目标,即在每一个所提
#取的序列之后出现的字符(已进行one-hot 编码)。用来训练和预测。
maxlen = 60#提取60个字符组成序列
step = 3#每3个字符采样一个新序列(类似卷积窗口).1-10的单词采样后为:123456、456789两句话。
sentences = []#保存所提取的序列.sentences句子。
next_char = []#保存目标(即训练和预测的下一个字符)
for i  in range(0,len(text) - maxlen,step):sentences.append(text[i:i + maxlen])#加入一句话。next_char.append(text[i + maxlen])#加入这句话下一个字符。
print('Number of sequences:',len(sentences))chars = sorted(list(set(text)))#语料中唯一字符组成的集合,然后转为list然后排序。
print('Unique charachters:',len(chars))
char_indices = dict((char,chars.index(char)) for char in chars)#构建string,int字典。
####################################################################
print('Vectorization...')#向量化
x = np.zeros((len(sentences),#samples样品句子maxlen,#每个句子多少句话len(chars)#可能的维度)                ,dtype=np.bool)#独热编码
y=np.zeros((len(sentences),#多少个目标len(chars)#多少个可能),dtype=np.bool)#独热编码
for i,sentence in enumerate(sentences):#每句话for t,char in enumerate(sentence):#每句话中的t索引和char字符x[i,t,char_indices[char]]=1#训练张量中句子、字符、单词设置对应的索引。y[i,char_indices[next_char[i]]]=1#目标张量中的句子、对应的下个单词设置对应索引。
###############################################################
print('构建网络模型')
from keras import layers
model=keras.models.Sequential()
model.add(layers.LSTM(128,input_shape=(maxlen,len(chars))))
#输出参数格式,输入形状。
model.add(layers.Dense(len(chars),activation='softmax'))
#输出参数len(chars);得到一个chars的可能的概率一维张量。
#结果是独热编码过的,所以要用categorical_crossentropy
#作为损失函数。
optimizer=keras.optimizers.RMSprop(lr=0.01)
model.compile(loss='categorical_crossentropy',optimizer=optimizer)
#训练模型,并从中采样#############################################
#对模型得到的原始概率分布进行重新加权,并从中提取一个字符索引作为下一个字符。
def sample(preds,temperature=1.0):#preds预测的句子张量,概率分布;temperature是softmax温度值preds=np.asarray(preds).astype('float64')preds=np.log(preds)/temperatureexp_preds=np.exp(preds)preds=exp_preds/np.sum(exp_preds)#重新加权probas=np.random.multinomial(1,preds,1)#随机采样return np.argmax(probas)
import random
import sys
for epoch in range(1,60):#模型训练60轮print('\nEpoch:',epoch)model.fit(x,y,batch_size=128,epochs=1)#训练一次start_index=random.randint(0,len(text)-maxlen-1)#随机初始化一个序列,范围是0-(len(text)-maxlen-1)比如:一共100个字符,那么start_index就是39,这是#下一个字符的索引。generated_text=text[start_index:start_index+maxlen]#生成的内容是下一个字符到下一句话print('Generating with seed:\n'+generated_text)#print('--生成通过:'+generated_text)for temperature in [0.2,0.5,1.0,1.2]:#使用不同的softmax温度值采样print('')print('temperature',temperature,':')#sys.stdout.write(generated_text)#输出到控制台但是没有换行。#for i in range(400):#从种子文本开始,生成400个字符for i in range(40):#从种子文本开始,生成40个字符,太多sampled=np.zeros((1,maxlen,len(chars)))#对生成字符one-hot编码for t,char in enumerate(generated_text):sampled[0,t,char_indices[char]]=1.preds=model.predict(sampled,verbose=0)[0]#对下一个字符采样next_index=sample(preds,temperature)next_char=chars[next_index]generated_text+=next_chargenerated_text=generated_text[1:]sys.stdout.write(next_char)

使用LSTM生成序列、自动问答使用?分割即可!相关推荐

  1. R语言丨根据VCF文件自动填充对其变异位点并生成序列fa文件

    根据VCF文件自动填充对其变异位点并生成序列fa文件 首先提出一个问题: 假如有一个重测序结果VCF文件,里面包含了很多个样本在几百个突变位点(snp和iad)的基因型数据,现在想根据这份原始数据,得 ...

  2. 【UE4】通过动画序列自动生成蒙太奇(In Code)

    本文使用 UE4.26 版本,ActionRPG 教程为例,通过代码实现通过动画序列自动生成蒙太奇的功能. 包括: 批量通过动画生成对应蒙太奇(UE4 自带,但是需要改) 通过多个动画拼成一个蒙太奇, ...

  3. dm数据库无法用序列自动生成主键,无法解析的成员访问表达式【SEQ_STU_CON_NEXTVAL】

    报错信息: 无法解析的成员访问表达式[SEQ_STU_CON_NEXTVAL] select SEQ_STU_CON_NEXTVAL 这种错的解决方案,在dm数据库中创建一个序列叫SEQ_STU_CO ...

  4. Paper:RNN之《Generating Sequences With Recurrent Neural Networks用循环神经网络生成序列》的翻译和解读

    Paper:<Generating Sequences With Recurrent Neural Networks>的翻译和解读 目录 Generating Sequences With ...

  5. python神经网络风格_[Deep-Learning-with-Python]使用LSTM生成尼采风格文章

    github地址repos LSTM生成文本 使用循环神经网络生成序列文本数据.循环神经网络可以用来生成音乐.图像作品.语音.对话系统对话等等. 如何生成序列数据? 深度学习中最常见的方法是训练一个网 ...

  6. KG-开源项目:QASystemOnMedicalKG【以疾病为中心的一定规模医药领域知识图谱,并以该知识图谱完成自动问答与分析服务】

    QABasedOnMedicaKnowledgeGraph self-implement of disease centered Medical graph from zero to full and ...

  7. 一个关于LSTM生成歌词的练习

    说明 这是一个个人练习笔记,使用Python语言,Keras搭建神经网络 数据使用的是王力宏的歌词,包含91首歌,共2列属性:歌曲名(Title),歌词(Lyrics)(来源:网易云音乐) 导入各种包 ...

  8. 自动问答研究进展、现状及趋势

    (摘自<中文信息处理发展报告(2016)>) 1. 任务定义.目标和研究意义 自动问答(Question Answering, QA)是指利用计算机自动回答用户所提出的问题以满足用户知识需 ...

  9. 使用LSTM生成文本

    使用LSTM生成文本 概述 如何生成序列数据 生成文本的采样策略 文本序列生成程序流程 准备并解析初始文本 将字符序列向量化 构建神经网络模型 训练语言模型并采样 用模型生成文本 概述 我们的感知模式 ...

  10. 【CIPS 2016】(13-14章)自动问答、机器翻译 (研究进展、现状趋势)

    CIPS 2016 笔记整理 <中文信息处理发展报告(2016)>是中国中文信息学会召集专家对本领域学科方向和前沿技术的一次梳理,官方定位是深度科普,旨在向政府.企业.媒体等对中文 信息处 ...

最新文章

  1. leetcode1. 两数之和--每天刷一道leetcode系列!
  2. R方差分析(anova)以及Tukey检验
  3. Pacbio三代基因组组装简介
  4. preact源码学习(2)
  5. Realm数据库存储 使用详解
  6. golang插入字符串_golang 几种字符串的连接方式
  7. python猜数字循环_python-练习实现猜数字的循环
  8. HDU - 4757 Tree(LCA+可持久化trie树)
  9. xampp浏览php出现乱码,dvwa+xampp搭建显示乱码的问题及解决方案
  10. salt-api安装与配置
  11. matlab将txt数据分类,MATLAB读取txt文件,txt里面有字符串和数值两种类型
  12. 毕业3年,我换了4份工作:好工作,是这样“熬”出来的
  13. 深度学习自学(十八):caffe网络调试设置-调参相关技巧
  14. Linux-2.6.32 NUMA架构之内存和调度
  15. Redhat7 安装 yum
  16. 微信jsapi支付流程
  17. 阿里云同一账号下ECS服务器的克隆操作方法,你get到了吗
  18. 谷歌浏览器设置启动页被hao123劫持_win10系统打开chrome主页会被hao123劫持的故障原因及解决方法...
  19. 【数据分析与挖掘】基于Apriori算法的中医证型的关联规则挖掘(有数据集和代码)
  20. 小白学习,歌词解析(半成品)

热门文章

  1. storm启动报错,storm-ui界面显示不正常
  2. 学生想学信息学奥赛: DEV-C++的安装与介绍
  3. 单机版fifa11显示ea服务器,游戏新消息:EA服务器出问题所有EA游戏在线功能无法正常运行...
  4. JavaScript中 new 一个对象过程详解
  5. COOL EDIT PRO 消原声
  6. dell5580bios恢复出厂_戴尔笔记本bios如何恢复出厂设置
  7. 腾讯等公司python工程师面试题曝光!涨知识了
  8. 善领dsa2020最新车机ce版_科技测丨需要在车机和手机中“二选一”的凯迪拉克
  9. wince植入胎压监测_【精】创酷一个月实际用车感受+轻松解决仪表盘失灵问题+胎压监测...
  10. 【Jmeter配合switchyomega 脚本录制】