本文为我的 源代码阅读专栏 第一个工程的代码阅读——wukong-robot 一个优秀的开源智能音箱项目。本文解析的源代码文件为robot文件夹中自然语言处理文件——NLU.py和语言对话文件——AI.py

自然语言处理介绍

wukong-robot相关自然语言处理代码放在NLU.py中。ASR.py文件在结构上参考其他技能文件:提取了抽象类AbstractNLU,并基于此类对百度的NLU API进行封装。下面我先对AbstractNLU进行分析,然后对UnitNLU进行简单的解析。自然语言处理实际上是对下一节将要介绍的语言对话的细部处理,可以从中提取出话语的意图,然后用这些意图进行硬件控制,如:音量、切歌、关机等

AbstractNLU类

AbstractASR类提供了SLUG属性用以标识当前对象的具体插件功能,同时提供了以下抽象方法供子类进行个性化实现:

  • parse。进行 NLU 解析
  • getIntent。提取意图
  • hasIntent。判断是否包含某个意图
  • getSlots。提取某个意图的所有词槽
  • getSlotWords。找出命中某个词槽的内容
  • getSay。提取回复文本
  • get_instance。用于实例化不同的语音识别引擎
  • get_config。由各子类实现,用于获取不同引擎的配置

UnitNLU

百度的NLU引擎可以使用百度开放的python包aip,也可以使用百度开放的http接口调用。作者将百度开放的http接口封装在robot/sdk/unit.py中。实际上百度开放的NUL相关http接口只有一个,这个接口在parse方法中调用,其他方法的实现均是对百度接口返回的字符串进行解析得到的

NLU引擎的加载

NLU.py中额外提供了两个方法:get_engines和get_engine_by_slug。
get_engines可以递归搜索并返回所有继承于AbstractASR的类
get_engine_by_slug通过slug参数寻找类,实例化此类为对象并返回

wukong-robot语言对话机器人介绍

wukong-robot相关语言对话代码放在AI.py中。AI.py文件对图灵、竹间、anyq(被注释掉了)的语言对话接口统一封装成语言对话机器人,以方便wukong-robot自有调用。这些机器人都封装成了类,并且继承自抽象类AbstractRobot。下面我先对AbstractRobot进行分析,然后分别对各语言对话机器人进行简单的解析。

AbstractRobot类

AbstractTTS类提供了SLUG属性用以标识当前对象的具体插件功能,同时提供了以下抽象方法供子类进行个性化实现:

  • chat。对话功能
  • get_instance。用于实例化不同的语言对话机器人
  • get_config。由各子类实现,用于获取不同引擎的配置

TulingRobot

作者将HanTTS语音合成引擎中的部分代码拷贝到wukong-robot项目中,主要有atc.py——实现数字转汉字功能;process.py——语音合成处理逻辑。主要处理逻辑为:

  1. 将文字格式化为全汉字,去掉标点符号
  2. 使用pypinyin将文字转换为拼音
  3. 根据拼音从语音库 syllables.zip中找到对应语音
  4. 根据标点符号设定不同的语音间隔,
  5. 通过AudioSegment将语音和语音间隔合成为一段声音

Emotibot

竹间智能的对话机器人可以使用竹间智能开放的http接口来实现

语言对话机器人的加载

AI.py中额外提供了三个方法:get_unknown_response、get_engines和get_robot_by_slug。
get_unknown_response用于当机器人无法回答时的回复
get_engines可以递归搜索并返回所有继承于AbstractTTS的类
get_robot_by_slug通过slug参数寻找类,实例化此类为对象并返回

参考

考虑到项目源代码可能会被作者更新,致使代码与我的总结文档不一致,下面列表中会提供原始代码链接和冻结代码链接。冻结代码链到我自己fork的工程中,大家如果需要找原始源码,可以点击原始代码链接

  • wukong-robot 原始代码
  • wukong-robot 冻结代码(本文参考代码)
  • 语言对话——竹间智能

wukong-robot 自然语言处理对话相关推荐

  1. 交互搜索中的自然语言理解技术

    交互搜索 交互搜索是一种新的产品形态,可以和用户对话,记住用户的购物需求和偏好,提供购物知识和建议.在搜索页面下拉就可以进入了,类似于微信的小程序的进入方式. 自然语言理解 对话和搜索的最大区别就是对 ...

  2. CRSLab:可能是最适合你的对话推荐系统开源库

    随着对话系统和推荐系统的快速发展,新方向--对话推荐系统(Conversational Recommender System,简称CRS)也开始了蓬勃发展,其关注于如何通过基于自然语言的对话来获得用户 ...

  3. 图灵测试70载,回顾对话机器人的经典实践和最新进展

    本文内容整理自 PaperWeekly 和 biendata 在 B 站组织的直播回顾,点击文末阅读原文即可跳转至 B 站收看本次分享完整视频录像,如需嘉宾课件,请在 PaperWeekly 公众号回 ...

  4. 直播 | 华为云卢栋才:对话机器人的应用实践和最新进展

    「PW Live」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和交 ...

  5. 【知识图谱 赵军 学习笔记】第十章 知识问答与对话

    第十章 知识问答与对话 自动问答概述 知识问答 知识问答技术概述 基于语义解析的方法 有监督方法 语义组合模型 语义辞典构造 组合消歧模型 无监督方法 基于搜索排序的方法 基于特征工程的方法 问句特征 ...

  6. 《自然语言处理实践——聊天机器人技术原理与应用》(王昊奋)简要笔记(全)

    第一章 概述 1.对话系统分类 基于实现方式--检索式.生成式 基于功能--问答系统.面向任务的对话系统.闲聊系统.主动推荐系统. 2.框架 自动语音识别--自然语言理解--对话管理(Web,社区问答 ...

  7. ChatGPT不止是对话机器人

    出品 | 何玺 排版 | 叶媛 ChatGPT火爆.它能做什么?它究竟是什么?它又将改变什么? 我们一起来聊聊. 01 火爆的ChatGPT ChatGPT的全网走红,是近几个月来科技产业界的大事.这 ...

  8. 百度世界大会最全官方回顾:今天,百度更懂你!

    百度 百度无人驾驶汽车最快将于2018年实现量产. 百度Apollo疲劳驾驶监测系统问世. 手机百度累计激活用户20亿,信息流日阅读量月复合增长36%,短视频日阅读量月复合增长38%. 未来,百度AI ...

  9. 硬核粉丝 | 清华双胞胎“YCY Dance Now”杀进超越杯编程大赛决赛

    作者 | Jane 出品 | AI科技大本营(id:rgznai100) 从"黄蓉 AI 换脸 杨幂"."首届杨超越编程大赛"."cxk 流量或打篮球 ...

最新文章

  1. “传统”遥感遇上AI,会产生怎样的效果?
  2. Failed to load JavaHL Library(windows和mac)
  3. Google 系两公司联手,要让无人车少“犯错”
  4. 有关子数组最大累加和的算法小结
  5. matlab循环数组里的数据库,用于在matlab的python中循环数组
  6. 前端---JavaScript基础4
  7. python2.7安装pip_RobotFramework安装过程遇到的问题(电脑同时安装python2和3)
  8. 软件项目开发之 软件过程RUP初探
  9. 二级c语言光盘,二级c语言(光盘).doc
  10. maven02-----Maven项目构建的初次使用
  11. 基于JAVA+Servlet+JSP+MYSQL的毕业生离校管理系统
  12. 有趣的6种图片灰度转换算法
  13. KVM安装(RHEL_6.4x64)
  14. html国庆节代码,QQ空间国庆节留言代码_祝大家国庆节快乐
  15. Microsoft Edge浏览器兼容性问题解决方法
  16. ug编程内公差和外公差是什么_UG编程
  17. android时钟计时器代码,android的Handle计时器实现代码
  18. TCP/IP模型背后的内涵
  19. java课程 数独 文库_一次数独生成及求解方案的剖析(Java实现)
  20. 死锁的成因和解决方案

热门文章

  1. 2021特种作业操作证电工作业2021电气试验考试题库
  2. svn基于mysql认证_Svn基于mysql做登陆认证
  3. pytorch学习-从入门到mnist(一)
  4. 蓝牙小车(基于stm32f103c8t6/HAL库/CubeMX/超详细,包含代码讲解和原理图)
  5. 中新金盾软防产品介绍
  6. 常用前端资源网站集合
  7. ABB510变频器通讯故障
  8. 陈莉君老师写的中断絮说
  9. 2007-11-20 日志:光辉岁月
  10. 三级联动显示和回显 ,然后根据地址获得经纬度,并存入后台