机器人--寒暄库(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

时间: 2024-10-23 20:41:30

机器人--寒暄库(4)的相关文章

机器人--寒暄库(数据准备2)

上次说了机器人的寒暄库需要基于seq2seq模型来做训练,训练的前提是我们准备好了足够的数据. 这次来说一下数据准备工作. 数据的来源一般分为内部已有的积累数据,另一个就是互联网数据,比如百度...百度几乎就是互联网的一个镜像.内部积累的文本数据有限,远不如网络数据丰富.so我们就要考虑怎么获取到网络文本数据了,可能你已经猜到了,那就是爬虫. python的scrapy是一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据 安装 yum install lib

机器人--寒暄库(数据准备)

上次说了机器人的寒暄库需要基于seq2seq模型来做训练,训练的前提是我们准备好了足够的数据. 这次来说一下数据准备工作. 数据的来源一般分为内部已有的积累数据,另一个就是互联网数据,比如百度...百度几乎就是互联网的一个镜像.内部积累的文本数据有限,远不如网络数据丰富.so我们就要考虑怎么获取到网络文本数据了,可能你已经猜到了,那就是爬虫. python的scrapy是一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据 安装 yum install lib

机器人--寒暄模型

上次说到了 智能推荐是怎麽做的,这次聊一下寒暄库的建设思路. 目前智能QA系统都是基于seq2seq模型来开发(如google),seq2seq模型基于one-hot的词嵌入,每个词用一个数字代替不足以表示词与词之间的关系,word2vec通过多维向量来做词嵌入,能够表示出词之间的关系,比如:男-女≈王子-公主.基于seq2seq的思想,利用多维词向量来实现模型,预期会有更高的准确性.(~~说人话:就是把每个汉字按照一定的规则转换为一个多维矩阵表示,联系越紧密的词,在空间上距离越近,那么我们就可

机器人--推荐系统(1)

430的目标是完成机器人的推荐系统,提高机器人回答问题的准确率,关于过程碰到的问题以及解决方案与大家分享一下,(请轻喷!) 那么这个推荐系统到底应该怎么做呢? 最开始的第一个思路是 根据用户 进入到ERP的模块 推荐该模块下的相关问题.其实就是根据用户的轨迹来推荐问题,这是一个思路但是不太完整.因为很有可能用户就从ERP的桌面就进入了机器人,但他实际要咨询的是销售系统的相关知识,那么此时的推荐就不太满足用户的咨询需求. 因此参考一些业界其他公司的做法,可以基于内容的协同过滤(Collaborat

机器人--推荐系统

430的目标是完成机器人的推荐系统,提高机器人回答问题的准确率,关于过程碰到的问题以及解决方案与大家分享一下,(请轻喷!) 那么这个推荐系统到底应该怎么做呢? 最开始的第一个思路是 根据用户 进入到ERP的模块 推荐该模块下的相关问题.其实就是根据用户的轨迹来推荐问题,这是一个思路但是不太完整.因为很有可能用户就从ERP的桌面就进入了机器人,但他实际要咨询的是销售系统的相关知识,那么此时的推荐就不太满足用户的咨询需求. 因此参考一些业界其他公司的做法,可以基于内容的协同过滤(Collaborat

机器人程序设计——之如何正确入门ROS | 硬创公开课(附视频/PPT)【转】

转自:http://blog.exbot.net/archives/2966 导语:本期公开课面向想入手ROS却又不知从何下手的小伙伴,为大家梳理好学习思路. ROS和Android一样是开源的,功能上也是相差无几,它可以提供硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理.其独特之处在于,能够支持多种语言,如C++.Python.Octave和LISP,甚至支持多种语言混合使用,这可以简化开发者的工作.因为它是基于Linux的系统,其可靠性也会更高,体积可以做到更小,适合嵌入式设

Python 库大全

作者:Lingfeng Ai链接:http://www.zhihu.com/question/24590883/answer/92420471来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Awesome Python中文版来啦! 本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:github.com.欢迎加入翻译组. 原文链接:Python 资源大全 1200+收藏,600+赞,别只顾着自己私藏呀朋友们 ------------

推荐一些相见恨晚的 Python 库 「一」

原创 2017-08-14 马超 DeveloperPython 扯淡 首先说明下,这篇文章篇幅过长并且大部分是链接,因此非常适合在电脑端打开访问. 本文内容摘自 Github 上有名的 Awesome Python.这是由 vinta 在 14 年发起并持续维护的一个项目. Awesome Python 涵盖了 Python 的方方面面,主要有 Web框架.网络爬虫.网络内容提取.模板引擎.数据库.图片处理.数据可视化.文本处理.自然语言处理.机器学习.日志.代码分析等.学会这些库,保证你在

Python常用库大全,看看有没有你需要的

作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. virtualenv – 创建独立 Python 环境的工具. virtualenvwrapp