python基于nlpia及keras通过LSTM实现智能机器人对话代码
代码语言:python
所属分类:人工智能
代码描述:python基于nlpia及keras通过LSTM实现智能机器人对话代码,通过对电影中的对话的数据的训练,实现了基于LSTM模型的智能机器人对话代码。
代码标签: python nlpia keras LSTM 智能 机器人 对话
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/local/python3/bin/python3 # -*- coding: utf-8 -* import tensorflow as tf from nlpia.loaders import get_data from tensorflow.python.keras.models import Model,load_model from tensorflow.python.keras.layers import Input,LSTM,Dense import os import numpy as np #为训练准备语料库 df=get_data('moviedialog') input_texts,target_texts=[],[]#数组保存从语料文库中读取输入文本和目标文本 input_vocabulary=set()#这个集合保存输入文本和目标文本中出现的字符 output_vocabulary=set() start_token='\t' #目标序列用startstop词条进行注释 stop_token='\n' max_training_samples=min(25000,len(df)-1) #定义了训练使用的行数 for input_text,target_text in zip(df.statement,df.reply): target_text=start_token+target_text\ +stop_token input_texts.append(input_text) target_texts.append(target_text) for char in input_text: if char not in input_vocabulary: input_vocabulary.add(char) for char in target_text: if char not in output_vocabulary: output_vocabulary.add(char) #建立字符字典 #将字符集装换为排序后的字符列表 input_vocabulary=sorted(input_vocabulary) output_vocabulary=sorted(output_vocabulary) input_vocab_size=len(input_vocabulary) output_vocab_size=len(output_vocabulary) max_encoder_seq_length=max([len(txt) for txt in input_texts]) max_decoder_seq_length=max([len(txt) for txt in target_texts]) input_token_index=dict([(char,i)for i,char in enumerate(input_vocabulary)])#创建查找字典,用于生成独热向量 target_token_index=dict( [(char,i) for i,char in enumerate(output_vocabulary)]); reverse_input_char_index=dict((i,char)for char,i in input_token_index.items());#创建反向查询表 reverse_target_char_index=dict((i,char)for char,i in target_token_index.items()); #生成独热码训练集 encoder_input_data=np.zeros((len(input_texts),max_encoder_seq_length,input_vocab_size),dtype='float32'); decoder_input_data=np.zeros((len(input_texts),max_decoder_seq_length,output_vocab_size),dtype='float32'); decoder_target_data=np.zeros((len(input_texts),max_decoder_seq_length,output_vocab_size),dtype='float32'); #将每个时刻字符索引设置为1 for i,(input_text,target_text) in enumerate( zip(input_texts,target_texts)): for t,char in enumerate(input_text): encoder_input_data[i,t,input_token_index[char]]=1. for t,char in enumerate(target_text): decoder_input_data[ i,t,target_token_index[char] ]=1. if t>0: decoder_target_data[i,t-1,target_token_index[char]]=1; #训练序列到序列聊天机器人 batch_size=64; epochs=10; num_neurons=256; encoder_inputs = Input(shape=(None, input_vocab_size)) encoder = LSTM(num_neurons, return_state=True) encoder_outputs, state_h, state_c = encoder(encoder_inputs) encoder_states = [state_h, state_c] decoder_inputs = Input(shape=(None, output_vocab_size)) decoder_lstm = LSTM(num_neurons, return_sequences=True, return_state=True) decoder_outputs, _, _ = decoder_lstm(decoder_inputs, initial_state=encoder_states) decoder_dense = Dense(output.........完整代码请登录后点击上方下载按钮下载查看
网友评论0