参考自:

(1)构造聊天机器人

https://www.jianshu.com/p/c3ebd99d6fc4

https://zhuanlan.zhihu.com/p/86681217

(2)Chatbot的前世今生

https://zhuanlan.zhihu.com/p/55201625

基于模板匹配模方法:

图灵机器人http://www.turingapi.com/

API接口教程https://www.kancloud.cn/turing/www-tuling123-com/718227

代码1:

from flask import Flask
import requestsapp = Flask(__name__)# 装饰器里面写的是访问路径
@app.route("/")
def hello_world():url = "http://openapi.tuling123.com/openapi/api/v2"data_param = {"reqType": 0,"perception": {"inputText": {"text": "附近的酒店"},"inputImage": {"url": "imageUrl"},"selfInfo": {"location": {"city": "北京","province": "北京","street": "信息路"}}},"userInfo": {
#在上面提供的网址中注册登录获取你的机器人apikey,userId可以随便填写"apiKey": "xxxxxxxxxxxxxxxxxxxxxx","userId": "xxxxxxxxxxxxxxxxxx"}}response = requests.post(url=url,json=data_param)print(response.text)return "贪心学院"if __name__ == "__main__":app.run()

运行结果:

刷新 http://127.0.0.1:5000/

会得到返回的信息:

{"intent":{"code":4003},"results":[{"groupType":0,"resultType":"text","values":{"text":"在外住酒店,还是得小心点好哦~"}}]}

代码2:

from flask import Flaskapp = Flask(__name__)# 装饰器里面写的是访问路径
@app.route("/greedyai/<data>")
def hello_world(data):return dataif __name__ == "__main__":app.run()

运行结果:

代码3:

from flask import Flask
import requestsapp = Flask(__name__)# 装饰器里面写的是访问路径
@app.route("/greedyai/<data>")
def hello_world(data):if "帅" in data:return "大周老师"elif "线上" in data:return "线上课程为主"elif "助教" in data or "服务" in data:return "为提高服务质量,课程配有专业的助教老师"elif "基础" in data:return "http://aijiaoai.greedyai.com/home"elif "优势" in data:return "这你都问,大周老师就是优势"elif "有效期" in data:return "只要你想学,我一直在你身边"else:return "哎哟,小主,我不懂你的意思"if __name__ == "__main__":app.run()

然后跟上面的示例一样,在路径之后输入一句话,如果这一句话里面包含了某个关键词,那么就会输出相应的回复
这是部分输入的回复:

实例代码4:

from flask import Flask
import requestsapp = Flask(__name__)# 装饰器里面写的是访问路径
@app.route("/chat/<data>")
def hello_world(data):url = "http://openapi.tuling123.com/openapi/api/v2"if "帅" in data:return "大周老师"elif "线上" in data:return "线上课程为主"elif "助教" in data or "服务" in data:return "为提高服务质量,课程配有专业的助教老师"elif "基础" in data:return "http://aijiaoai.greedyai.com/home"elif "优势" in data:return "这你都问,大周老师就是优势"elif "有效期" in data:return "只要你想学,我一直在你身边"else:data_param = {"reqType": 0,"perception": {"inputText": {"text": "data"},"inputImage": {"url": "imageUrl"},"selfInfo": {"location": {"city": "北京","province": "北京","street": "信息路"}}},"userInfo": {"apiKey": "6cdbed64eeb14e6ea453538622bc1d74","userId": "582149"}}response = requests.post(url=url,json=data_param)print(response.text)if __name__ == "__main__":app.run()

运行结果:

基于搜索的方法

用户输入 -> 检索模型 -> 输入

如何计算相似度(文本的向量表示)

余弦相似度

课程demo

import jieba
word_vector_list = ["我们", "来", "贪心", "学院", "学习", "人工智能", "和", "python"]# 词典
s1 = "我来贪心学院学习python"
s2 = "我学习人工智能"
s3 = "Python课程的学习周期是多久"
question = "Python学习多久"
# 第一种切分模式:精确模式,比较适合做文本分析,['我来', '贪心', '学院', '学习', 'python']
s1_result_list = list(jieba.cut(s1))
print(s1_result_list)
# 全模式,['我来', '贪心', '学院', '学习', 'python']
s1_result_list = list(jieba.cut(s1, cut_all=True))
print(s1_result_list)
# 搜索引擎模式,['我来', '贪心', '学院', '学习', 'python']
s1_result_list = list(jieba.cut_for_search(s1))
print(s1_result_list)
# 向量转换
import numpy as np
def get_vector(data):vector_list = []for i in word_vector_list:if i in list(jieba.cut(data)):vector_list.append(1)else:vector_list.append(0)print(data)print(vector_list)return np.array(vector_list).reshape(1, -1)
question_vector_list = get_vector(question)#输出:Python学习多久[0, 0, 0, 0, 1, 0, 0, 0]
s1_vector_list = get_vector(s1)            #输出:我来贪心学院学习python[0, 0, 1, 1, 1, 0, 0, 1]
s2_vector_list = get_vector(s2)            #输出:我学习人工智能[0, 0, 0, 0, 1, 1, 0, 0]
s3_vector_list = get_vector(s3)            #输出:Python课程的学习周期是多久[0, 0, 0, 0, 1, 0, 0, 0]
# 相似度计算
from sklearn.metrics.pairwise import cosine_similarity
# print(cosine_similarity([[1, 0, 1]], [[0, 0, 1]]))
print(cosine_similarity(question_vector_list, s1_vector_list))
print(cosine_similarity(question_vector_list, s2_vector_list))
print(cosine_similarity(question_vector_list, s3_vector_list))
#输出[[0.5]],[[0.70710678]],[[1.]]

作业

完成一个完整的项目,能够根据已有的语料库,自动根据输入去计算哪个答案最符合

import jieba
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from flask import Flask# 建立语料库
corpus = {"Python课程是线上课程还是线下课程?": "线上课程为主","Python课程有助教吗?": "为提高服务效率和质量,课程都配备专业的全职助教。","我没有基础应该从哪个课开始学?": "大周老师的Python基础集训营非常适合你哦,""可以在这里学习:http://aijiaoai.greedyai.com/info/5","Python的学习周期是多久?": "如果你没有基础的话两个月可以搞定","Python课程的学习方式是什么呢?": "无需安装环境,在线直接写代码、看视频、看漫画,趣味性学习","Python课程的优势是什么呢?": "全网覆盖最全的Python基础知识体系练与学的深度结合,""每一个知识点都配有练习项目,生动有趣、授课方式多样,视频、文字、图片、在线代码编辑,""在聊天与娱乐中学习","Python课程的有效期是多久呢?": "我们把有效期确定为1年,1年内可无限次学习","Python课程有优惠吗?": "我们定价为开课后是599,现在是针对老学员预售199,开课后恢复原价"
}
# 建立词典,对于所有语料库中的问题进行jieba分词
all_question = ""
for question in corpus:all_question += question
dictionaries = list(set(jieba.cut(all_question)))  # 加上set是为了方便去重# 单个词典转换为向量
def transform_vector(date):vector_list = []for wd in dictionaries:if wd in list(jieba.cut(date)):vector_list.append(1)else:vector_list.append(0)return np.array(vector_list).reshape(1, -1)  # .reshape(1,-1)是为了后期余弦计算# 单个余弦相似度计算
def get_cosine(user_question, corpus_question):similar_list = cosine_similarity(transform_vector(user_question), transform_vector(corpus_question))similar_num = similar_list[0][0]  # 相似度return similar_num# 计算语料库中的所有相似度
def get_corpus_consine(user_question):ori_question_dict = {}ori_answer_dict = {}similar_list = []  # 保存所有余弦值for key in corpus:similar_num = get_cosine(user_question, key)  # 获得余弦值similar_list.append(similar_num)  # 保存所有余弦值ori_question_dict[similar_num] = key  # 获取原问题并储存ori_answer_dict[similar_num] = corpus[key]  # 获取原答案并储存return similar_list, ori_question_dict, ori_answer_dict# 得到最佳回答
def get_best_answer(similar_list, ori_question_dict, ori_answer_dict):max_similar = max(similar_list)if max_similar == 0: # 没有匹配项best_similar = 0best_question = "未检索到相似的问题"best_answer = "对不起,我听不懂你在说什么"else: # 返回值best_similar = max_similarbest_question = ori_question_dict[max_similar]best_answer = ori_answer_dict[max_similar]return [best_similar, best_question, best_answer]# 使用faslk,以接口的形式完成问答
app = Flask(__name__)@app.route("/<user_question>")
def question_for_web(user_question):similar_list, ori_question_dict, ori_answer_dict = get_corpus_consine(user_question)  # 计算所有相似度res = get_best_answer(similar_list, ori_question_dict, ori_answer_dict)  # 得到最佳答案html_ = '<html><body>' \'<p>' \'<h2>问题:{}</h2>' \'</p>' \'<p>' \'<li>最高相似度:{}</li>' \'<li>最高相似度的问题:{}</li>' \'<h2>最佳回答为:{}</h2>' \'</p>' \'</body></html>'.format(user_question, res[0], res[1], res[2])return html_  # 返回html并写入网页if __name__ == "__main__":app.run()

运行结果:

(一)图灵机器人API2.0接口构造聊天机器人相关推荐

  1. 基于 QT5 百度语音API 图灵机器人API 的智能语音聊天机器人

    基于 QT5 百度语音API 图灵机器人API 的智能语音聊天机器人 程序简介 代码一共分为以下几个模块 伪代码形式为 部分代码 源代码下载地址 程序简介 程序界面包含录音和发送两个按钮 点录音将开始 ...

  2. 用深度学习构造聊天机器人简介

    聊天机器人(也可以称为语音助手.聊天助手.对话机器人等)是目前非常热的一个人工智能研发与产品方向.很多大的互联网公司重金投入研发相关技术,并陆续推出了相关产品,比如苹果 Siri .微软 Cortan ...

  3. 如何用tf2.0训练中文聊天机器人chatbot

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 一个可以自己进行训练的中文聊天机器人, 根据自己的语料训练出自己想要的聊天机器人,可以用于智能 ...

  4. 如何用图灵添加一个简单的QQ聊天机器人

    tip:这里是使用简单的软件,添加一个QQ聊天机器人, 如果想要用代码实现, 请按Ctrl + F4 本文比较墨迹, 看的懂的话, 请开3倍速.本文写于2017/05/9,过期就不用看了 1.进入图灵 ...

  5. rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法

    rasa聊天机器人 介绍 (Introduction) When it comes to chatbot improvement, three elements are paramount: 在改善聊 ...

  6. python制作聊天机器人_如何制作一个聊天机器人?

    这样,我们岂安科技的斜杠青年用1100字教你做一个聊天机器人出来吧.关键词Zulip.Python.以下,GO~ ------- Zulip是什么 Zulip是移动和桌面办公聊天解决方案开发商 一个强 ...

  7. Simsimi 小黄鸡机器人最新无限制接口api simsimi机器人接口api 微信公众号

    一.什么是Simsimi? simsimi公司是提供智能服务,其中一个服务是simsimi聊天机器人服务,每天有超过百万的用户聊天,国内最大的搜索引擎--百度的产品siri使用的就是simsimi提供 ...

  8. python自动聊天机器人手机版_Python实现聊天机器人

    一.AIML是什么 AIML全名为Artificial Intelligence Markup Language(人工智能标记语言),是一种创建自然语言软件代理的XML语言,是由RichardS. W ...

  9. 机器人对话常用语模板_聊天机器人的技术原理和未来的发展

    近年来,人工智能越来越火,那你们真的知道人工智能吗? 一.人工智能是什么 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论. ...

最新文章

  1. 西农大许金荣课题组在小麦赤霉病研究领域取得重要突破
  2. go移植linux内核书名叫啥,Go语言移植Linux内核数据结构hlist
  3. 转载-让PIP源使用国内镜像,提升下载速度和安装成功率
  4. word2vec (一) 简介与训练过程概要
  5. 网页如何调用flash的方法
  6. mormot数据库连接+查询+序列为JSON
  7. 电阻(4)之上/下拉电阻
  8. 前两年在MSDN里找到的HTC示例,一直没用过,先在这里存个备份
  9. linux 备份mysql并上传_Linux 网站目录和MySQL备份并上传FTP
  10. the art of seo(chapter seven)
  11. 瑞友天翼服务器ip地址怎么修改,怎么修改这个IP地址
  12. 什么是 Servlet 容器?
  13. vue 项目上传视频到保利威
  14. Github上的1000多本免费电子书重磅来袭!
  15. HTML5 video(PC和移动端)自动播放学习指北
  16. android电视安全模式,电视安全模式怎么解除
  17. 关于花瓣网header条的思考
  18. Android开发——数据库框架Suger遇到的大坑(Gson和Suger的复用Bean请见“大坑三”)
  19. 全网最简单的方法QQ透明头像设置方法(小白教程)几分钟搞定
  20. 大数据小项目之电视收视率企业项目03

热门文章

  1. [Codewar练习-jsc++]N Linear(N线性)
  2. Stata Plus:连老师的 Stata 外部命令集
  3. 目前最好用的云存储?
  4. Android10 高通平台 softap热点基本流程2
  5. VMware超详细安装完整教程
  6. cal java中的用法_Java中static用法
  7. Linux(centos)读取U盘数据
  8. OpenGL 分割窗口,并分别绘图
  9. GIT、GITLAB、GITHUB、GITLIB
  10. 阿里云发布性能测试 PTS 2.0:低成本、高效率、多场景压测