加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

快来!建立你的第一个Python聊天机器人项目

发布时间:2020-03-02 12:14:24 所属栏目:Unix 来源:站长网
导读:副标题#e# 利用Python,我们可以实现很多目标,比如说建立一个你专属的聊天机器人程序。 聊天机器人程序不光满足个人需求,它对商业组织和客户都非常有帮助。大多数人喜欢直接通过聊天室交谈,而不是打电话给服务中心。 Facebook发布的数据证明了机器人的价

该模型将是一个由3个密集层组成的神经网络。第一层有128个神经元,第二层有64个,最后一层的神经元数量与类数相同。为了减少模型的过度拟合,引入了dropout层。使用SGD优化器并对数据进行拟合,开始模型的训练。在200个阶段的训练完成后,使用Kerasmodel.save(“chatbot_model.h5”)函数保存训练的模型。

# deep neural networds model 

model= Sequential() 

model.add(Dense(128,input_shape=(len(train_x[0]),), activation='relu')) 

model.add(Dropout(0.5)) 

model.add(Dense(64,activation='relu')) 

model.add(Dropout(0.5)) 

model.add(Dense(len(train_y[0]), activation='softmax')) 

# Compiling model. SGD with Nesterovaccelerated gradient gives good results for this model 

sgd= SGD(lr=0.01,decay=1e-6, momentum=0.9, nesterov=True) 

model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy']) 

#Training and saving the model 

hist= model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5,verbose=1) 

model.save('chatbot_model.h5', hist) 

print("model is created") 

第五步:与聊天机器人互动

模型已经准备好聊天了,现在在一个新文件中为聊天机器人创建一个很好的图形用户界面。可以将文件命名为gui_chatbot.py

在GUI文件中,使用Tkinter模块构建桌面应用程序的结构,然后捕获用户消息,并在将消息输入到训练模型之前,再次执行一些预处理。

然后,模型将预测用户消息的标签,从intents文件的响应列表中随机选择响应。

这是GUI文件的完整源代码。

importnltk 

fromnltk.stem importWordNetLemmatizer 

lemmatizer = WordNetLemmatizer() 

importpickle 

importnumpy as np 

fromkeras.models importload_model 

model= load_model('chatbot_model.h5') 

importjson 

importrandom 

intents= json.loads(open('intents.json').read()) 

words= pickle.load(open('words.pkl','rb')) 

classes= pickle.load(open('classes.pkl','rb')) 

defclean_up_sentence(sentence): 

# tokenize the pattern - splittingwords into array 

sentence_words = nltk.word_tokenize(sentence) 

# stemming every word - reducing tobase form 

sentence_words = [lemmatizer.lemmatize(word.lower()) for word in sentence_words] 

returnsentence_words 

# return bag of words array: 0 or 1for words that exist in sentence 

defbag_of_words(sentence, words,show_details=True): 

# tokenizing patterns 

sentence_words = clean_up_sentence(sentence) 

# bag of words - vocabulary matrix 

bag= [0]*len(words) 

fors in sentence_words: 

fori,word inenumerate(words): 

ifword == s: 

# assign 1 if current word is in thevocabulary position 

bag[i] = 1 

ifshow_details: 

print("found in bag:%s" % word) 

return(np.array(bag)) 

defpredict_class(sentence): 

# filter below thresholdpredictions 

p= bag_of_words(sentence,words,show_details=False) 

res= model.predict(np.array([p]))[0] 

ERROR_THRESHOLD = 0.25 

results= [[i,r] fori,r inenumerate(res) ifr>ERROR_THRESHOLD] 

# sorting strength probability 

results.sort(key=lambdax: x[1],reverse=True) 

return_list = [] 

forr in results: 

return_list.append({"intent": classes[r[0]],"probability": str(r[1])}) 

returnreturn_list 

defgetResponse(ints, intents_json): 

tag= ints[0]['intent'] 

list_of_intents = intents_json['intents'] 

fori in list_of_intents: 

if(i['tag']== tag): 

result= random.choice(i['responses']) 

break 

returnresult 

#Creating tkinter GUI 

importtkinter 

fromtkinter import * 

defsend(): 

msg= EntryBox.get("1.0",'end-1c').strip() 

EntryBox.delete("0.0",END) 

ifmsg != '': 

ChatBox.config(state=NORMAL) 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读