|
|
|
|
公众号矩阵

十分钟,如何制作一个聊天机器人?

在现实中,聊天机器人的响应时间非常重要。无论是旅游业、银行还是医疗,如果你真的想帮助客户,机器人的响应时间应该更短,并且应与客户服务代表交谈时的真实情况类似。

作者:读芯术来源:读芯术|2021-03-30 17:51

本文转载自公众号“读芯术”(ID:AI_Discovery)

了解聊天机器人的主要用途很重要,每个行业都不能使用同一个聊天机器人,他们有不同的目的和不同的语料库。虽然消息传递组件可以很好地给予答复,但是可能需要时间作出回应。另一方面,考虑到时间问题,可以应用各种其他方法,甚至可以找到一些以规则为基础的系统,以获得适合回答所提问题的语句。

你曾多少次联系旅行社要求退票,得到一个恰当的答复是远远不够的。

现在让我们制作一个简单的聊天机器人,安装以下软件包:

  1. pip install nltk  
  2. pip install newspaper3k 

Package newspaper3k有以下优点:

  • 多线程文章下载框架
  • 可识别新闻URL
  • 可从HTML中提取文本
  • 从HTML中提取顶层图像
  • 可从HTML提取所有图像
  • 可从文本中提取关键词
  • 可从文本中提取摘要
  • 可从文本中提取作者
  • 谷歌趋势术语提取
  • 使用10多种语言(英语、德语、阿拉伯语、中文等)

导入库,如下所示:

  1. #import libraries 
  2. from newspaper import Article 
  3. import random 
  4. import nltk 
  5. import string 
  6. from sklearn.feature_extraction.text import CountVectorizer 
  7. from sklearn.metrics.pairwise import cosine_similarity 

余弦相似度或余弦核将相似度计算为X和Y的标准化点积:

  1. sklearn.metrics.pairwise.cosine_similarity(X, Y=None, dense_output=True

参数

X{ndarray, sparse matrix} of shape (n_samples_X, n_features) 输入数据。

Y{ndarray,sparse matrix} of shape (n_samples_Y, n_features), default=None 输入数据。

如果没有,输出将是X. dense_outputbool中所有样本之间的成对相似性,default =True是否返回密集输出,即使输入是稀疏的。如果为False,则如果两个输入数组都是稀疏的,则输出是稀疏的。

返回

核矩阵:ndarray of shape(n_samples_X, n_samples_Y)

  1. import numpy as np 
  2. import warnings 
  3. warnings.filterwarnings('ignore'

这里从一个医疗保健网站获取数据:

  1. article=Article("https://www.mayoclinic.org/diseases-conditions/chronic-kidney-disease/symptoms-causes/syc-20354521"
  2. article.download() 
  3. article.parse() 
  4. article.nlp() 
  5. corpus=article.text 
  6. print(corpus) 
  7.  
  8.  
  9. #tokenization 
  10. text=corpus 
  11. sentence_list=nltk.sent_tokenize(text) #A list of sentences 
  12.  
  13.  
  14. #Print the list of sentences 
  15. print(sentence_list) 

准备好了语料库之后,你需要考虑用户或客户可能会问或说的问题,这与我们的内容无关。它可以是问候语、感谢语,也可以是拜拜之类的信息。团队需要就这些信息和他们的反应进行考量。

问候机器人响应:

  1. #Random response to greeting 
  2. def greeting_response(text): 
  3.  text=text.lower() 
  4.  
  5.  
  6.  #Bots greeting 
  7.  bot_greetings=["howdy","hi","hola","hey","hello"
  8.  
  9.  
  10.   #User Greetings 
  11.  user_greetings=["wassup","howdy","hi","hola","hey","hello"
  12.  for word in text.split(): 
  13.  if word in user_greetings: 
  14.  return random.choice(bot_greetings) 
  15. #Random response to greeting 
  16. def gratitude_response(text): 
  17.  text=text.lower() 

感谢机器人响应:

  1. #Bots gratitude 
  2.  bot_gratitude=["Glad tohelp","You are most welcome""Pleasure to be ofhelp"
  3.  
  4.  
  5.  #User Gratitude 
  6.  user_gratitude=["Thankyou somuch","grateful","Thankyou","thankyou","thankyou"
  7.  
  8.  
  9.  for word in text.split(): 
  10.  if word in user_gratitude: 
  11.  return random.choice(bot_gratitude)

种类列表:

  1. Default title text 
  2. def index_sort(list_var): 
  3.  length=len(list_var) 
  4.  list_index=list(range(0,length)) 
  5.  x=list_var 
  6.  for i in range(length): 
  7.  for j in range(length): 
  8.  if x[list_index[i]]>x[list_index[j]]: 
  9.  #swap 
  10.  temp=list_index[i] 
  11.  list_index[i]=list_index[j] 
  12.  list_index[j]=temp 
  13.  
  14.  
  15.  return list_index 

聊天机器人响应功能来自于对预定义文本的余弦相似性的响应。

  1. #Creat Bots Response 
  2. def bot_response(user_input): 
  3.  user_input=user_input.lower() 
  4.  sentence_list.append(user_input) 
  5.  bot_response="" 
  6.  cm=CountVectorizer().fit_transform(sentence_list) 
  7.  similarity_scores=cosine_similarity(cm[-1],cm) 
  8.  similarity_scores_list=similarity_scores.flatten() 
  9.  index=index_sort(similarity_scores_list) 
  10.  index=index[1:] 
  11.  response_flag=0 
  12.  j=0 
  13.  for i in range(len(index)): 
  14.  ifsimilarity_scores_list[index[i]]>0.0: 
  15.   bot_response=bot_response+''+sentence_list[index[i]] 
  16.  response_flag=1 
  17.  j=j+1 
  18.  if j>2: 
  19.  break 
  20.  
  21.  
  22.  if response_flag==0: 
  23.  bot_response=bot_response+""+"I apologize, I dont understand" 
  24.  
  25.  
  26.  sentence_list.remove(user_input)  
  27.  
  28.  
  29.  return bot_response 

对于退出聊天,退出列表中的单词写为“退出”,“再见”,“再见”,“退出”。

响应这些话,聊天机器人将退出聊天。

启动聊天机器人,尽情享受吧!

  1. #Start Chat 
  2. print("Doc Bot: I am DOc bot and I will answer your queries about chronickidney disease, if you want to exit type, bye"
  3.  
  4.  
  5. exit_list=['exit','bye','see you later','quit'
  6.  
  7.  
  8. while(True): 
  9.  user_input=input() 
  10.  if user_input.lower() in exit_list: 
  11.  print("Doc Bot: Bye Bye See youlater"
  12.  break 
  13.  elif greeting_response(user_input)!=None: 
  14.  print("Doc Bot: "+greeting_response(user_input)) 
  15.  elif gratitude_response(user_input)!=None: 
  16.  print("Doc Bot: "+gratitude_response(user_input))  
  17.  else
  18.  print("Doc Bot: "+bot_response(user_input)) 

请参见下面聊天机器人的回复:

“谢谢”并不在我们的机器人感谢程序中,因此我们要传达这样的信息。随着时间的推移,你可以扩大这样的词汇表,或者使用正则表达式对其进行微调。

举个小例子,与聊天机器人开始聊天,应该是快速和简单的。你需要针对不同行业对聊天机器人进行微调,这些行业的语料库来自实时数据或云端的一些储存。

此外,需要注意的是,实时数据要面对挑战,聊天必须基于最新的数据作出回应,例如在旅行社订票。

【编辑推荐】

  1. 2021年软考系统架构设计师-上午历年真题解析视频培训课程
  2. Excel公式与函数全套系列课程 基础与提高系统学习
  3. 新型 Android 恶意软件冒充为"系统更新"窃取用户数据
  4. 国家重点研发计划“通用三维CAD系统软件产品”项目 正式启动
  5. 波士顿动力最新仓储机器人,每小时“搬砖”800块
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

7人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

36人订阅学习

数据中心和VPDN网络建设案例

数据中心和VPDN网络建设案例

漫画+案例
共20章 | 捷哥CCIE

230人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微