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