机器人--寒暄库(4)
目前智能QA系统都是基于seq2seq模型来开发(如google),seq2seq模型基于one-hot的词嵌入,每个词用一个数字代替不足以表示词与词之间的关系,word2vec通过多维向量来做词嵌入,能够表示出词之间的关系,比如:男-女≈王子-公主。基于seq2seq的思想,利用多维词向量来实现模型,预期会有更高的准确性。(~~说人话:就是把每个汉字按照一定的规则转换为一个多维矩阵表示,联系越紧密的词,在空间上距离越近,那么我们就可以得到各种近义词,如 高兴=开心 等)
so 为什么要基于seq2seq模型来做智能问答,其他模型不行吗?
答案 是yes。其他模型也可以完成一个比较好的QA模型,业界流行2大方法论:1、基于文法规则的NLP,2、基于统计学的NLP。只是这2种方式的实现的代价不一样。基于文法规则的来做NLP,优势是准确率会非常高,你想想,每个组词规则、每句话的主谓宾都给你标出来,这样的NLP如果做出来了是接近完美的;劣势也很明显,工作量太巨大,汉语光汉字就有几万个,组词规则会更多,很难做到完全统计,难以快速迭代应用。相反基于统计学的NLP(seq2seq是统计学模型),他的准确率未必会有前者高,但是他的兑现速度快,可以在实际应用过程不断迭代,提高准确率。这种方法的思路就是基于一批有限规模的语料库,做机器学习,让机器不断学习文法规则,以适用于某一特定领域,达到智能交互的目的。当前比较大厂商的QA都是基于第2中方法的思路来做,比如:京东、图灵、百度等。
接着谈什么是seq2seq,为什么在统计学的诸多模型中,要选用他?
在网上找的一个简洁的说明,主要参考《Sequence to Sequence Learning with Neural Networks》这篇论文,核心思想如下图:
ABC是输入语句,WXYZ是输出语句,EOS是标识一句话结束,图中的训练单元是lstm,lstm的特点是有长短时记忆,所以能够根据输入的多个字来确定后面的多个字,有关lstm的知识可以参考《http://deeplearning.net/tutorial/lstm.html》
上面的模型中编码器和解码器共用了同一个lstm层,也就是共享了参数,牛人们尝试把他们分开像https://github.com/farizrahman4u/seq2seq中提到的样子:
其中绿色是编码器,黄色是解码器,橙色的箭头传递的是lstm层的状态信息也就是记忆信息,编码器唯一传给解码器的就是这个状态信息
我们看到解码器每一时序的输入都是前一个时序的输出,从整体上来看就是:我通过不同时序输入"How are you <EOL>",模型就能自动一个字一个字的输出"W I am fine <EOL>",这里的W是一个特殊的标识,它既是编码器最后的输出,同时又是解码器的一个触发信号
那么我们训练的时候输入的X,Y应该是什么呢?X="How are you <EOL>",Y="W I am fine <EOL>"?
这是不行的,因为在解码器还没有训练出靠谱的参数之前,我们无法保证第一个时序的输出就是"I",那么传给第二个时序的输入就不一定是I,同样第三、四个时序的输入就无法保证是am和fine,那么是无法训练出想要的模型的
我们要这样来做:我们直接把解码器中每一时序的输入强制改为"W I am fine",也就是把这部分从我们训练样本的输入X中传过来,而Y依然是预测输出的"W I am fine <EOL>",这样训练出来的模型就是我们设计的编码器解码器模型了
那么在使用训练好的模型做预测的时候,我们改变处理方式:在解码时以前一时序的输出为输入做预测,这样就能输出我们希望输出的"W I am fine <EOL>"了
我们采用seq2seq模型的最主要原因就是模型拥有长时记忆能力,而且记忆能力可以根据我们的需求进行控制,这种特性在我们汉语处理中至关重要。有时候一句话的意思需要头和尾加在一起我们才能完全理解,这个道理同样适用机器。
下次再谈基于seq2seq模型怎么做寒暄库。经典模型代码
https://github.com/warmheartli/ChatBotCourse/blob/master/chatbotv2/my_seq2seq_v2.py
文献资料:
http://cn.arxiv.org/pdf/1409.3215.pdf
转载于:https://www.cnblogs.com/xulele/p/6973917.html
机器人--寒暄库(4)相关推荐
- 商家编号_caiji_004 机器人词库
聊天机器人词库 查看全文 http://www.taodudu.cc/news/show-4777447.html 相关文章: [PHP + MySQL][分享]搭建网站自动回复机器人 英语不好影响考 ...
- 机器人C++库(12) Robotics Library 之路径规划算法:PRM、RRT、EET算法
机器人C++库(12)Robotics Library 之路径规划算法:PRM.RRT.EET算法 RL库的运动规划(rl::plan)模块集成了以下经典的路径规划算法: PRM算法:概率路线图算法 ...
- 3.2 写一个UR机器人运动学库
本博文属于工程机械臂末端柔顺控制(Ros+Gazebo仿真实现) 注:本文参考文献忘了,参考的是一篇中国学者发表的一篇关于和UR构型一致的6自由度机械臂求逆解规避掉第六个关节可能由于奇异构型无法求解的 ...
- nao机器人python库安装_NAO机器人学习笔记(1)
1 NAO机器人硬件 1.1 红外线 红外线发射角度-60°~+60°,波长940nm. 1.2 超声波(声纳) NAO能够探测前方0.25~2.55m内是否有障碍物,探测角度60°,超声波频率为49 ...
- 立体出库机显示面板维修机器人出库机操作屏维修
工业机器人操作与运维工作站维修包括:工业机器人模块.出库变频输送模块.工业视觉检测模块.变位机夹具模块.作业工件仓储模块.样件摆放平台.搬运编码模块与扩展模块.多种末端工具模块.PLC与人机界面模块等 ...
- 聊天机器人demo库——gradio
介绍: 聊天机器人在自然语言处理 (NLP) 研究中得到广泛研究,并且是 NLP 在工业中的常见用例.由于聊天机器人旨在供客户和最终用户直接使用,因此验证聊天机器人在面对各种输入提示时的行为是否符合预 ...
- 机器人C++库(9)Robotics Library 之机器人建模(VRML)、工作场景Scances建模(VRML)
机器人控制算法九之机器人建模(VRML).工作场景Scances建模(VRML) 1.机器人建模(VRML) 2.工作场景Scances建模(VRML) 开始操作 ------->>> ...
- python 机器人开发库,如何为机器人框架创建自定义Python代码库
I already have Python source files for some custom tasks. Can I create a custom library of these tas ...
- 使用 ChatterBot 库制作一个聊天机器人
作者 | 周萝卜 来源 | 萝卜大杂烩 我们学习一些如何使用 ChatterBot 库在 Python 中创建聊天机器人,该库实现了各种机器学习算法来生成响应对话,还是挺不错的 1什么是聊天机器人 聊 ...
最新文章
- python常用单词下载_python编程词汇
- 探究 Java 应用的启动速度优化
- [转] Java中的static关键字解析
- TypeError: CleanWebpackPlugin is not a constructor
- Android 应用开发---ViewPager----1.相关基本知识
- 解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题
- 使用Postman对Restful接口进行测试
- 【知识图谱】知识图谱嵌入模型简介
- postgresql开启历史查询记录日志
- J9数字科普:Web3.0世界中的J9NFT:仍在发展但未来可期
- CS231n assignment1 KNN部分用到的函数
- 魔塔之拯救白娘子~我的第一个VB6+DX8做的小游戏源码~1游戏引擎
- 手写图片缓存框架 ImageLoader
- NDCG(归一化折损累计增益)
- 使用Navicat导入execl到mysql数据库中日期值显示0000-00-00的问题解决
- 百度地图样式冲突问题
- 高中物理应用计算机教学心得,信息技术在物理教学中运用教学心得
- 做一个海纳百川的方外之人------我的极乐世界观
- 斯蒂夫乔布斯传札记:第五波
- Docker在线管理工具Shipyard
热门文章
- 例题 2 最敏捷的机器人
- 计算机网络课程设计之基于 IP 多播的网络会议程序
- Python笔记-使用U2自动登录某APP及watcher使用
- canvas笔记-使用canvas画圆及点阵的使用
- QML笔记-使用connect界面数据交互(qml中Designer使用)
- java web认证考试_用Java实现Web服务器HTTP协议
- python 定时任务 Apscheduler
- python魔术方法abstract_python学习之面向对象高级特性和魔术方法
- 有关findviewbyid 一个错误用法
- 操作系统之计算机系统概述:1、操作系统概述(定义、功能、作用)