基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo
起因
本demo基于基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型而来
无意间发现一个基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型,但由于年代久远代码已经跑不通了,而且采用的是py2,于是边看变改,在自己摸索下,写了一个相对完整的demo且有相对完整的注释,特此开源供各位参考学习
源码与介绍
本项目相较于原项目
实现功能
- 知识库匹配(AIML)回答问题
- 任务型对话系统(Task)
- 利用API完成的闲聊系统回答问题
- 待更新....
特点
- AIML知识库更多(共35个)
- 敏感词库更广(共1.5W个),同时敏感词判断更合理
- 新增NLP功能,用于处理文本相似度。
- 针对文本相似度使用了:音形码算法+余弦相似度算法
- 更多的API接口demo可以调用(支持莉莉、青云客、ownthink、如意、mcenjoy)
使用方法
首先下载解压你会得到一个这样一个目录结构
目录结构
chatbot_aiml_task_demo
├─ init.py
└─ core
├─ init.py
├─ chatbot.py
├─ config.cfg
├─ crawler
│ ├─ init.py
│ ├─ crawl.py
│ ├─ search.py
│ ├─ stationID.json
│ └─ weather.py
├─ deeplearning
│ ├─ NLP.py
│ ├─ .......
│ ├─ SimilarCharactor
│ ├─ init.py
│ └─ deep.py
├─ log
│ ├─ .gitkeep
│ └─ .......
├─ resources
│ ├─ Book.aiml
│ ├─ .......
│ ├─ save.aiml
│ ├─ load.aiml
│ ├─ main.aiml
│ ├─ sensitive.txt
│ ├─ .......
│ └─ .......
└─ tool
├─ init.py
└─ filter.py
其中:
chatbot.py 是主程序
config.cfg 是各种路径的配置文件
tool文件夹 下是存放的是用于敏感词过滤使用的filter.py文件
resources文件夹 建议存放AIML知识库和敏感词库
deeplearning文件夹 存放的是NLP主要代码
crawler文件夹 存放的是任务型对话系统(Task)主要代码
源码介绍与处理流程
- 预处理
限制字数
过滤敏感词(恶心、政治、色情、违法......)当你需要增加敏感词时候直接在sensitive.txt中添加即可
当你需要更改敏感词库位置时候请在config.cfg中修改filter_file
- 知识库匹配(AIML)
基本功能:打招呼、闲聊......
异常处理:问题太长、空白问题、找不到回复......
情绪回答:表情、夸奖、嘲笑......
如果匹配不到回答,进行步骤三 - 任务型对话匹配
如果可以请不要完全依赖于本人提供的任务功能,请自行修改接口和对应的匹配关键词。因为本人提供的接口随时可能失效,无法保证效果。
你可以自行添加功能和匹配关键词。包括但不限制于天气查询、汉字查询、空气质量查询、百科等机器人功能任务型对话系统(Task)功能函数建议放在search.py中
关键词逻辑判断建议写在crawl.py文件中
同时你可要单独写一个功能文件调用,例如给出的例子weather.py用于取天气
- 神经网络
与原作者相同,我也暂时实现不了神经网络部分功能,同样使用了API代替,同时加入了NLP文本相似度计算。如果你需要使用API请到deep.py对应的函数中填入自己的api_key
在deep.py的bot_reply()函数中,你可以选择使用的API接口和个数,同时也支持你自己添加API
学习功能
利用AIML模板+shelve存储,同时修复了已知BUG
学习功能模板为learn.aiml库,可以自定义修改
- 说错 *
- 答错 *
- ......
效果展示:
源码
欢迎Star欢迎━(`∀´)ノ亻!
github
参考
基于人工智能标记语言 (AIML)和开放域问答(WebQA)的深度智能对话模型
中文相似度匹配算法
wenyangchou/SimilarCharactor
敏感词过滤的几种实现+某1w词敏感词库
基于人工智能标记语言 (AIML)和任务型对话系统(Task)的深度智能对话机器人demo的更多相关文章
- 分布式人工智能标记语言(DAIML)示例
DAIML(Distributed Artificial Intelligence Markup Language)是用于分布式人工智能系统中智能语言的标记库.DAIML主要分为Patte ...
- 标记语言XML
标记语言概述 标记语言,是一种将文本(Text)以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码.一部分是标记,一部分是标记中的内容,两部分构成标记语言 <标记 ...
- XML 概述 (可扩展标记语言)
XML:eXtensible Markup Language 可扩展标记语言 概念:可扩展:xml中所有的标签都是自定义的.没有预定义的. 功能: 存储数据 ...
- Razor标记语言介绍
什么是Razor? Razor的中文意思是"剃刀",它不是编程语言,只是一种服务器段的标记语言,与PHP和ASP类似 Razor允许你向网页中嵌入基于服务器的代码(Visu ...
- html标记语言 --格式标记
html标记语言 --格式标记 一.格式标记 1.<br>单标记,强制换行标记,让后面的文字.图片.表格等显示在下一行 2.<p>换段落标记 3.<center>居 ...
- java XML(可扩展标记语言)
XML 是EXtensible Markup Language的缩写,它是一种类似于HTML的标记语言,称为可扩展标记语言,传输数据而不是显示数据,可以自定义标签,具有自我描述性是一种通用的数据交换格 ...
- 模型标准化——预测模型标记语言(PMML)
https://www.cnblogs.com/pinard/p/9220199.html 在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个 ...
- 理解Xaml标记语言
理解XAML XAML基于XAML,因而具有与XAML相似的特性.在XAMl中,同样必须区分大小写,但是Xaml以.xaml作为扩展名,表示这是一个应用程序的标记扩展文件.WPF中的XAML主要用于创 ...
- [Markdown]纯文本标记语言MarkdowPad2--MD语法知识
##1.标题 代码 注:# 后面保持空格 # h1 ## h2 ### h3 #### h4 ##### h5 ###### h6 ####### h7 // 错误代码 ######## h8 // ...
随机推荐
- Swoole 中使用 Table 内存表实现进程间共享数据
背景 在多进程模式下进程之间的内存是相互隔离的,在一个工作进程中的全局变量和超全局变量,在另一个工作进程中是无法读取和操作的. 如果只有一个工作进程,则不存在进程隔离问题,可以使用全局变量和超全局变量 ...
- html基础 button按钮标签
场景:在网页中显示用户点击的按钮标签名:button 注意:form不能少,少了不会出效果 html代码 <form > 昵称: <input type="text&quo ...
- python自动化测试框架的unittest与pytest前后置条件的区别
前言: 笔者先试有用过unittest的前后置条件和pytest的前后置条件,觉得pytest的前后置条件比unittest的要简洁.方便很多.不过在使用unittest的前后置条件时,已经觉得在和每 ...
- Pycharm_关闭PEP8函数名不能包含大写字母的规范
屏蔽PEP8告警 全是小写字母,可能与以往的习惯不大一样,将这样的警告忽略的方法如下: File →Settings→Editor→Inspections→Python→PEP 8 naming co ...
- spring5无法在控制台打印日志的原因
想要在控制台输出spring的日志,却无法输出,log4j2所需要的jar文件都已经导入,log4j2的配置文件也存在,调整日志级别也不行,一通百度后发现是缺少spring的jcl的jar文件,把sp ...
- linux VI命令快捷键
ctrl+f 下一页 ctrl+b 上一页 ctrl+u 上半页 ctrl+d 下半页 数字+空格键 根据当前光标移动多少个字母 0键 光标移动到第一个字母,是当前行的 $键 光标移动到最后一个字母 ...
- Echart可视化学习(八)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 正文: 新增需求 点击 2020年 ...
- sqoop的使用之import导入到HDFS
原文链接: https://www.toutiao.com/i6772128429614563843/ 首先我们已经安装好sqoop了,如果没有安装好参考文档<快速搭建CDH-Hadoop-Hi ...
- 【从小白到专家】 Istio专题之七:30分钟讲透Istio访问与控制
本文为Istio系列专题之七--Istio访问与控制.Istio通过身份认证.授权.多重安全策略,来保证微服务的安全,实现代码无侵入性.有时我们需要对微服务间的相互访问进行控制,比如满足某些条件的微服 ...
- 【刷题-LeetCode】190 Reverse Bits
Reverse Bits Reverse bits of a given 32 bits unsigned integer. Example 1: Input: 0000001010010100000 ...