如何快速读Paper

自从上次介绍了去哪里找paper之后,大家问我的问题就常常变成了:如何快速阅读一篇paper并准确的提取其中有用的信息。在本文中,我将试图为大家简要解答这个问题,争取告诉大家如何在短时间内通过阅读文献的方式了解一个新的领域。

阅读一篇paper通常见的目的有四种:

  1. 面对一个新的领域,我要快速把握这个领域的研究方向和state-of-the-art方法,来给自己或者团队设计一个大致的技术方案。
  2. 这个领域我很熟悉了,我要看看有没有什么新idea。又或者我马上要写一篇类似的文章,先上来探探路看看别人都干了什么、怎么写的;
  3. 老师/编辑非要让我读,然后给大家讲 or 给审阅意见;
  4. 睡前/早起例行关注新闻,跟刷牙时候听新闻联播没啥区别,就是看看热闹。

(​引用自​http://phdcomics.com/comics/archive.php?comicid=963)​

在一一回答以上四个问题之前,先教大家如何避开一个大坑——关于出版机构。虽然正常的人类实在是没什么必要对各种会议组织和出版机构如数家珍,按照出版社级别给paper质量排序就好像根据学校名声给学生确定刻板印象一样在公序良俗上不靠谱,但是我们关起门来说,知道哪个出版方的论文质量比较低、不太值得看确实可以给我们节省不少时间。在这里只举一个大家(包括很多科研水平不错、只是不在英语世界混的学者)常常掉进去的坑:hindawi.com。 非常高产的一个Open Access出版社,主页看上去也很是像那么回事儿,但是很抱歉,其中大部分文章都只会浪费大家的时间。

回到问题1

不妨找一个专业人士,和他大概描述一下自己的问题领域,让他发一篇survey给你。或者自己去google Scholar上自己去找那种以survey/review为题目的文章。这里我以推荐系统为例,大家直接在搜索框里面输入survey recommendation system,点击搜索,就可以得到如下​结果。​

然后挑选前面引用数目破千的来看,基本都不会有什么问题。比如说第一篇​就会给你介绍很重要的几个概念:Content-based recommendations;. Collaborative recommendations;Hybrid approaches。为你之后的论文阅读打下坚实的基础。大部分写过paper的人,包括我在内,总是默认读者知道领域内的一些基础概念的——这也是我总被人告知要说人话的原因。

找不到survey怎么办呢——要知道并不是每一个领域都有靠谱的、现成的survey可以读的。这个时候,请按照下一项的建议,通读个十几篇行业内引用数较高的文章,如果在这个阶段还读不懂也没关系,尝试着找出它们共同引用的文章,从那里开始。找到领域内高产的第一作者(排名第一的作者,常常是论文的主要贡献者)和通讯作者(排名最后但是名字上带个星号的作者,通常为业内大牛或者付钱的那个人)的主页,上去看下这个人最近在干什么,都在什么会议或期刊上,发表了什么主题的文章。

总体来说,是一个“文章-作者(以及reference的作者)-会议/期刊-文章-作者-……” 的一个大雪球,雪球越滚越大的同时,你的知识领域也会越来越丰富。

对于问题2和3

基本建议采用Waterloo大学S. Keshav的“三遍法”(以下为避免翻译不够信达雅,关键字均用英文)。笔者对三遍法基于工程师的阅读习惯做了一些修改——其实这个时候读者已经很熟悉问题背景和常用算法了,Introduction的细读相对来说就不那么重要,需要的是最快速度的十分钟了解文章大概,不过通读Introduction永远是是面对新领域或者没见过上下文的新paper时候的最优选择。

第一遍读Title、Abstract和Conclusion部分,略读Introduction,其他部分只要看章节标题和小标题就可以了。最后快速刷一遍Reference看看有没有自己看过的。这一遍大概只要十分钟,就可以对作者要解决的问题和解决方案有一个大概的把握,进而决定要不要读下去。

对于你觉得值得读的文章,第二遍读文章中的图表和方法,把看不懂的方法和参考文献都标记出来。这一遍大概要花一两个小时,你会详细的知道作者达到的效果,并且对自己的领域(比如说换个数据集或者损失函数什么的)能不能用类似的方案达到类似的效果,做出一个初步的评估。在这一遍成功结束之后,当有其他人问起,你可以大概复述出主要实现方式。

对于实在非常重要的文章,又或者是不得不认真读的文章(比如审稿),我们读第三轮。在这一轮中,往往会亲手根据作者的假设和思路进行一轮推演,发现那些作者不曾写在文章里的思路(常常也是坑),有源码的文章可以把源码搂下来试试看。没有源码的文章可以尝试着把核心部分做个小小的poc。这一遍(我个人)通常也需要带着些批判性思维去做,尽量找出可以提升或者没说清楚的地方——如果让你来做,你会怎么做?有没有看上去更好的解决方案?有哪些细节可以提升一下?

对于问题4

其实也没什么好说的,可以关注几个顺眼的会议列表或者各个企业的公众号。睡前一读娱乐身心,尽量不要搞到一群Reference的Reference的Reference递归看下去睡不着就好。

在最后,再给大家两个小的tips:

  1. 如果对这个领域不够熟悉,真的不要嫌弃排名靠前、引用数多的那几篇“老古董”,相信我,他们比那些2017年之后发布的好懂很多很多很多。越晚发布的,对于高新技术的依赖就越强,引用的参考文献就越是繁杂,对入门者也就越不友好。
  2. 隔行如隔山,很多时候其实你并不清楚你想要寻找的(英语)关键字是什么,比如在预测明天A区域房价的时候,如果你知道的是今天以前的房价,那么你或者应该从“time series survey”开始;而如果你知道的是房子的面积地段楼层户型,那么传统基于特征的预测有可能是你的首选。所以,一个活生生的“人工智能”专家在某些时候能帮你省好多劲儿,不要羞耻的去发问吧!看到哪篇文章实在很感兴趣,直接发信就行!

​P.S.

​分享​一个小插件。点击安装到Chrome里面可以方便随手搜索。

再分享我用的论文管理软件Mendeley​,跨平台,好管理,好标注。回头大家用的多了有疑问,我可以写个评测。​ ​

预祝大家读书愉快。


更多精彩洞见,请关注微信公众号:思特沃克

Share

免费知识哪里来——Arxiv使用指南

如果你非常确定自己想要找什么​,​比如知道论文的名字(算法的名字)或者作者的名字,直接去Google Scholar上搜索是最快的。然而如果你并不是很确定自己想要什么,只是想要看看某个领域的最新发展,知道大家都在干什么,然而​却发现​Google Scholar给你的结果多半不靠谱,请读下去。

引子​

​ ​最近半年,在我身上时常发生下面这类对话: ​

“Hey, 你知道XXXXXXXXXXXXX问题怎么解决吗?”

“哦,我刚好读过两篇相关的论文,等下发给你。”

……

尴尬的沉默,一般来说拿到文章之后对方就再也不会来找我了,虽然我是真心的想要交流,然而有一些好学的孩子会接着问:

“你的论文是哪里找到的呢?”

鉴于论文背景不同,我会丢一个链接过去——这个链接(网站)在大部分数学/物理/计算机/统计领域里面,都是https://arxiv.org/

Arxiv是什么

arxiv设计的初衷是一群物理学家们想要交流自己将要发表的论文,可以想象一下,在上世纪九十年代,人们用的还是软盘(包括5.25吋软盘和3.5寸什么的,存储空间可以说以KB计算),邮箱也不例外,投稿高峰期分分钟几百个KB的邮箱就会被文章塞满。Paul Ginsparg一看这不行,论文如果想要很好的被分享并审核,大约是需要集中存储的,就在1991年于LANL(http://www.lanl.gov/ 洛斯阿拉莫斯国家实验室)建立了arxiv的雏形,如下图所示。

当时有个萌萌的域名:http://xxx.lanl.gov/ ,到现在也可以被访问。不过由于LANL作为一个严谨的科学实验室实在是懒得运营​这个网站​,后来就被康奈尔大学接管支持。

然而,今天当我们谈到arxiv,就不能不说Open Access【开放获取】。 我们都知道,以前看文章是要钱的,直到今天,看大部分的文章也是要钱的。如下图所示,看一篇Nature​一般​要20美元,折合100多人民币。

​这个价格吧,​说贵不贵说便宜不便宜,在大部分有钱公司和牛逼学校买个site license​或者报个销​都是不成问题的,但是对那些有科研兴趣的个人或者是那些落后地区的学校,就很成问题了。像马拉维啊中非啊这种国家,到2016年,官方数据中人均GDP才400美刀(大约20篇文章),你让人家怎么玩嘛。​难道要让知识像财富一样集中在少数人手里么?

就好像我们一直希望互联网拥有中立性​(​电信运营商、有线电视公司等互联网服务提供商应当平等地对待所有通过他们网络的流量,网络服务提供商有区别地对待不同的流量可能会使大公司能够限制消费者的自由)一样,我们并不希望因为钱而阻挡了知识的传播。 ​​ 所以,我们有了布达佩斯宣言:

There are many degrees and kinds of wider and easier access to this literature. By ‘open access’ to this literature, we mean its free availability on the public internet, permitting any users to read, download, copy, distribute, print, search, or link to the full texts of these articles, crawl them for indexing, pass them as data to software, or use them for any other lawful purpose, without financial, legal, or technical barriers other than those inseparable from gaining access to the internet itself. The only constraint on reproduction and distribution, and the only role for copyright in this domain, should be to give authors control over the integrity of their work and the right to be properly acknowledged and cited.

作为开放获取的先驱者,我们要为arxiv——这一开放获取的先驱​鼓掌!为我们带来的好处就是,免费!免费!免费!

基于我的个人访问经验,大家如果想知道都有哪些杂志或者期刊提供免费的资源,可以参考这个列表:https://en.wikipedia.org/wiki/List_of_open_access_journals 图中是“数学”类目下提供开放获取的期刊。

实在找不到免费文章咋办?

我一般会直接发邮件问作者要,顺便聊聊自己的研究领域以及跟这篇文章相关的几个最新问题,成功率还是蛮高的,还可能交到好朋友。

说到Arxiv还有一样不能不说的就是LaTex——个人认为最美的文本编辑器(或者语言?),只是从学术圈儿跳出来之后发现大家好像都懒得用,在此由于篇幅所限,不再赘述。

Arxiv有什么

由于各种历史原因,Arxiv中文献的主要研究领域还是数理哲学,包括数学/物理/计算机/统计/天文/定量生物/定量金融等领域。截止到2016年的发表量统计可以参考下面这张图。

左图中是每年新提交的文章数目,右图是每年的发表量所占百分比(总和为1), “hep-“代表高能物理学,(hep-th+hep-ph+hep-lat+hep-ex), “cond-mat” 代表凝聚态物理学, “astro-ph” = 天体物理学, “math” 代表数学, “other physics” 表示物理学的其他领域( physics+nucl+gr-qc+quant-ph+nlin) “biology” 指的是量化生物学,“finance” 指的是量化金融,“cs”指的是计算机科学。

我们可以看到,在2002年之前,计算机科学领域的占比几乎可以忽略不计,然而到2016年已然占据了近五分之一,并且还在以极快的速度增长。而1992至1996年间占据了大半江山的高能物理学,到了今天地盘几乎被蚕食殆尽,只剩约10%的份额苟延残喘。沧海桑田,可见一斑。

​还有论文发表总量如下图: ​

​(信息来自:https://arxiv.org/help/stats/2016_by_area/index ) ​

从图中,我们可以清楚的发现三个事情:

  1. 所有论文发表量都在时间轴上爆发式的增长,在上面这张历史发表总量图中体现的尤为明显;
  2. 数学一家独大,不管是在年度发表量还是历史发表总量上;
  3. 计算机(cs)在历史发表总量中只占了8.3%,然而2016年的提交量占了18.3%,结合提交数量图的分析,真是长势喜人、值得期待。
  4. 每个月近10000篇文章提交(正式接受的会少一些,如果精准到感兴趣的垂直领域会更少)。

那么,不想只关心数理领域的咋办?

很简单,就好像任何市场一样,arxiv火了之后大批人跟风,所以我们现在有了生物学版本arxiv https://www.biorxiv.org/,心理学版本arxiv https://psyarxiv.com/ ,等等等等。当然,知识的沉淀往往需要时间,这些垂直领域的“arxiv”们到目前为止还不是非常成熟,所以我仍然建议大家结合上文提到的Open Access列表里的机构,去寻找想要的免费资源。

Arxiv怎么用

就像我在本文开头提到的那样,这个引擎最大的效果是当你并不确定自己想要什么的时候,去看看领域的最新发展,知道大家都在干什么。它最大的好处是值得信任。 ​当然,​同样值得信任的还有很多​​——虽然它们大部分都要钱,针对大多数​期刊​们​,可以按照影响因子从大往小排个序(​众所周知,影响因子这个评定标准就像高考成绩一样非常片面​,​然而这也是目前最普遍的解决方案了),前文中提到的Nature系列​和Science系列​,都非常值得信任。不做赘言。

很高兴的一点是,收费(还收的比较贵的)基本都是期刊,然而与其他领域尤其是生物学方向不​太一样​,计算机方向最顶级的往往是会议而不是期刊,而​会议往往是不收费的!这里举个例子,International Conference on Machine Learning 【ICML】,机器学习方面的顶级会议之一,其中所有的文章都可以在下面的链接里找到。https://icml.cc/Conferences/2017/Schedule?type=Poster

太幸福了!​——这个也是我最最最推荐大家找到值得读的文章的办法:盯着领域著名会议列表刷(虽然有个缺点,就是刷到啥算啥)。

但是,往往新入门的人往往没有办法靠关键字搜索【看脸】来分辨哪个期刊哪个会议才是真正有价值的。每年的会议不知凡几,我在wikiCFP上随便搜了一下人工智能,在接下来一年内仅仅这个垂直领域就有3130个会议。平心而论,有多少是真正有价值的呢?每个会议按照50篇paper来算,15万篇paper,​一个人类​就是不吃不睡​不工作全职看一年​paper,能看几篇?

当然,据个人经验,关于计算机方向的会议排名,大家可以参考下面的链接 https://www.aminer.cn/ranks/conf ,我截取了AI/PR (人工智能/模式识别)领域排名靠前的一段,如下图。有想看计算机视觉的可以参考里面带”vision”的,具体会议的分析和比较将另文分析,这里不做赘言。

但是,如果不想这样盯着列表一个一个会议慢慢看下来呢?如果就是想要找一下某个主题或者关键字呢?或者就是想要知道这个月出现了什么新算法呢?——会议可都是一年一次的。 ​​ 这个时候,就是arxiv大放异彩的时候了。它给了我们一个更集中的搜索平台,而且相对来说更​值得信任(反正比​起来​什么都可以搜索的Google Scholar,用户要筛选的噪声少了很多)​。

没有证据都是耍流氓?​ 请点开下面这个链接 https://arxiv.org/list/cs.LG/recent,这是对Machine Learning领域的一个搜索。仅仅看这一页简介那些熟悉的作者​名字,就知道大部分都不会让你失望的。

​尽管arxiv定位是preprint,但​其中​也​囊括了各种已经被NIPS,AAAI等等行业顶级会议接受的文章​​。而且,所有这些,都有直接的pdf原文可以免费下载。搜索和筛选成本都低到极致。同时,只需要点击感兴趣的作者名字,所有他发表过的文章都会被列出来(如下图中的Lei Shu),而完全不用担心其他搜索引擎中常常发生的同名同姓作者的麻烦——这一点相信搜索过中文名拼音的都深有体会——张王李赵遍天下绝对不是说说的。

得数据库如此,夫复何求?

作为对比,下面是我在Google Scholar同样搜索Machine Learning关键字得到的结果。大家可以自行体会时效性,相关度和质量。

当然​,​时效性这个可以通过点击左手边的“Sort by date”来解决,然而点击了之后是这个样子的:

——反正前面Springer家的都是要钱的,质量不提,单单是能下载的pdf也真的不常有。​

​更重要的是,​google作为跨平台老牌全网搜索引擎,看到某个关键字的时候并不会针对特殊的领域进行搜索,所以大批量主题无关的文章(不信的可以搜一下lenet,vgg这类,看看搜索结果)​,就会干扰搜索结果。

所以,当你要​找的参考文献​属于数理领域尤其是AI/ML/Stat相关​,而​Google Scholar又没能给你满意的结果(又或者很贵),​就试试看arxiv吧!

 


更多精彩洞见,请关注微信公众号:思特沃克

Share

建立属于你的智能客服

本文首发于Gitchat,原作者王晓雷,经作者同意授权转发。转载请联系作者或GitChat。

背景

很多人问,对话式交互系统就是语音交互么?当然不是。语音交互本身真的算不上新概念,大家可能都给银行打过电话,“普通话服务请按1,英文服务请按2……返回上一层请按0” 这也算对话式交互系统,我想大家都清楚这种交互带来的用户体验有多低效。那么对话式交互系统已经可以取代人类提供服务了么?也没有,图灵测试还没有过呢,着什么急啊。

不过,随着人工智能的发展,对话式交互穿着语音和文本的外衣,携手模糊搜索引擎,怀抱计算科学和语言学的内核,带着定制化推荐的花环,驾着深度学习和大数据的马车乘风破浪而来——我们就知道,大约是时候了。至少,我们已经可以在十分钟内创造自己的对话式客服了。今天的文章大致分为三部分:历史,今天(chatbot api)和未来(深度学习和智能问答)。

先定义一下交互系统,wiki给出的定义是

Interaction is a kind of action that occurs as two or more objects have an effect upon one another.

即双方或者多方相互影响的过程,那么在咱们的上下文中,我们不妨限定为人机交互。先来讲讲是什么,再来讲讲怎么做吧。

历史和现在

广义上的对话式交互实际上包括所有一问一答形式的人机交互,自始至终,我们都需要从机器拿到信息。在最早的时代用的是文本交互系统TUI,其实直到今天,我相信程序员们在Linux下面完成大部分操作时还是会选用Terminal,这种文本交互非常简洁高效,但是有一个缺点:不熟悉操作的人上手非常困难,需要记住大量的指令和规则,才可以有效的告诉机器想要它做什么——正如一个笑话:“问:如何生成一个随机的字符串? 答:让新手退出VIM”。

直观的,既然“以机器的交流方式告诉机器想要做什么”这件事情给人类带来了很差的用户体验,那我们可以让机器提供可能的选项来让人类选择。所以,人类用了几十年,把交互系统升级成了图形化交互GUI。大家今天看到的桌面系统就是特别典型的一个体现。包括后来的触摸屏幕和智能手机的发展,其实都是图形化交互的不同表现。

现在一切都好了么?并没有。虽然机器可以在瞬间呈现大量的信息,但是人类在同一时刻可注意到的信息却极为有限。心理学研究发现,人类的注意广度其实只有5-9个对象。想象一下上面那张图,如果我在桌面上放100个应用程序呢?1000个呢?随着数据量的发展。如何在大量的信息中,迅速呈现出有效的信息呢?

搜索系统,或者再具体一点——推荐系统,在选项过多的时候,承担起了给用户尽可能高效率的提供想要的信息的任务。如果我们做好了智能搜索,我们就能做好智能交互。本质上都是一样的:在浩瀚的已知数据里,基于一定模型和经验,总结出用户最想要的答案并及时的呈现出来。我问Google一个问题,Google将我想要的答案排在第一个位置返回给我,谁又能说这不是对话式交互呢?

当然,我们希望的对话式UI不仅是一问一答,我们希望对话系统能够有自己的知识数据库,希望它保有对上下文的记忆和理解,希望它具有逻辑推演能力,甚至,颇有争议的,希望它具有一定的感情色彩。

所以,我们有了今天的Conversational UI,对话式交互只是一个壳子。其中的本质是智能和定制化服务,在一段时间的训练之后,你拿起电话拨给银行,应答的智能客服和人类的交互方式是一样的。抛开繁琐的从1按到9的决策路径,直接告诉他你要做什么,银行会直接给你提供最符合你需求的服务。而完成这个任务,我们主要有两条路可以走,一条是专家系统,这里也会给大家介绍几个网络上的引擎,争取在十分钟之内让大家学会建立一个属于自己的智能客服系统。而另外一条,则是智能问答系统,需要一点机器学习和深度学习的知识——教机器理解规则,比教机器规则,要有趣的多。

输入和输出

前面都在讲输入,就是机器如何理解人类的指令。是因为输出这个问题,可以说已经被解决了很久了。文本、图像和语音三大交流方式中,语音被解决的最晚,但是20年前的技术就已经足够和人类进行交流了,虽然我们还是能很容易的听出来语料是不是电子合成的,但是这一点音色上的损失并不影响我们交流的目的。

而语音到文本的识别便要复杂得多。这类工作确切来说始于1952年。从读识数字从1到0,然后把数字的声音谱线打出来,识别说的是哪个数字开始。这个模型虽然达到了98%的精度,但是其实并不具有通用性:数据源空间和目标空间都实在是太小了。

我们都知道当下最著名或者说最好用的语音识别模型是深度学习模型。但是在此之前呢?举一个典型例子:开复老师的博士论文,隐马尔科夫模型,大约三十年前发表,如下图所示:

简单说就是一个时间序列模型。有时间状态,隐藏状态,然后有观测状态。比如我有两个色子,一个六面体色子,从1到6。一个四面体的,从1到4。两个色子之间进行转换的概率都是0.5。现在给出一段极端一点的序列 111122224441111555566666666,大家觉得哪一段是四面体色子、哪一段是六面体色子呢?同理,听到一个语音,我想知道后面隐藏起来的那句话,原理也是和扔色子一样的:根据观测到的状态(声音)来推理后面隐藏的状态(文本)。这类概率模型的效果相当不错,以至于今天还有许多人在用。

chatbot api

按照人工干预的多少,推理引擎的实现大致可以分为两类。一类是人工定义规则,一类是机器从数据里面自动学习规则。对于前者,我们都知道wit.ai和api.ai这两个著名的chatbot开放api, 分属于Facebook和Google两大巨头。先来看一下实现的效果:

(图片来自:http://t.cn/RS17j6U

这里的+表示得分,机器准确的理解了人类的意图。o表示不得分,机器并没有理解。我们可以看到,其实表现并没有想象中的那么好,一些很简单的案例‘i would like to order pizza’ 都没有得分,离普通人类的智能还有些距离。

那么背后的逻辑是怎样的呢?举一个api.ai的例子,我们会定义不同的类型和变量,然后把他们和相关的值与回答链接起来。从而在和用户进行交互的时候,能够按照已知的(人类定义的)规则来存储相应的值,并调用相应的方法。

可能大家会觉得英文读起来比较慢,这里介绍一个中文版api.ai——yige.ai. 并不是广告,我了解这个平台还得益于我的朋友——有一天他跑来跟我说:夭寿啦!你知道吗,有个相亲网站,拿人工智能代替女性用户和人聊天!之后,官方辟谣说并不会这么做。但是yige.ai在新手入门方面的友善程度,实在是我见过中文chatbot API中数一数二好的。

(具体参见:http://t.cn/RcjU8w8

但是也正如图中所示,我们依旧需要人工定义很多事情包括词库,场景,规则,动作,参数等等。在买鞋这样一个小的场景和确定范围的交互期待里面,这样做还是可以为大部分人群所接受的。毕竟简单而直观,精准的实现了“十分钟制作属于自己的chatbot”这一需求,更不需要强大的计算资源和数据量。但我们并不太可能在这样的系统里面,得到定义好的域以外的知识。如果我们的时间和人力足够多的话,能够有专门的一些领域专家来完善这个提问库,将会使得搜索的精度非常高。因为所有可能的提问都已经有了专业的答案。但是,当场景复杂之后,这样做的工作量就会变成很大的压力了。

所以,我们需要深度学习。

深度学习想要达到一个好的表现,需要有两个前提。一个是足量的计算资源,一个是大量的数据。

计算资源不用说,如果没有GPU,图片/语音这种非结构化的原始数据训练的时间基本需要以“周”来作单位。

数据集设计

关于大数据,一个很常见的问题就是,多大才算大,学术一点的说法是:大到包含区分目标值所需要的所有特征就可以了——我们都知道在实践中,这句话基本属于废话。那么举个例子,一般来说训练一个语音识别的模型,数据是以千小时为单位计算的。

而且很抱歉的是,很多商业公司的数据集基本是不公开的。那么对于小型的创业公司和自由研究者,数据从哪里来呢?笔者整理了一些可以用来做自然语言处理和智能问答的公开数据集,这里由于篇幅和主题所限,就不展开讲了。改天会专门开主题介绍免费可用的公开数据,以及在公开数据集上所得到的模型应该如何迁移到自己的问题域当中来。

图片来自:https://rajpurkar.github.io/SQuAD-explorer/

这里用斯坦福大学的著名问答数据集作为例子,SQuAD,可以被称为业内用于衡量问答系统的最棒最典型的数据集。我们可能在高中时代都做过阅读理解,一篇文章带有几个问题,答案来自于文章的信息。那么有了这样一个数据集,我们能做的事情是什么呢?这样一个数据集所训练出的模型可以解决什么样的问题?在各个问题中,人类的表现和机器的表现有什么样的差异?为什么?

我们很高兴的看到,在最新发表的一篇基于r-net的论文中,机器的表现已经可以和人类媲美了。人类在这个数据集所得到的EM得分约82.3,F1得分约91.2。而微软发表的框架EM得分高达82.1,和人类相差不足0.2%。

深度学习

好的,现在数据有了,计算资源有了,模型从哪里来呢?我们很高兴的看到算法正在进化,人工的干预随着技术的进步越来越少。在DeepMind于2017年12月5日发表的最新版本中,AlphaZero没有用到任何人工的特征就打败了用了一堆特征的前任AlphaGo,也打败了人类历经千年沉淀下来的珍珑棋谱。

直观一点,在图像识别的深度网络中,计算机难以理解原始图像像素值的含义,然而神经网络每层的权重实际上学习到了图像的高级特征。越高层的神经网络,成分越具体。第一层可以通过比较像素的亮度来识别边缘,基于此,第二层可以检测边角的集合,第三层可能是小的色泡或者面,第四层可能是嘴巴这类更复杂的对象,再往下可能是更具体的特征,直到物体本身。 神经网络和人脑一样,将原始信号经过逐层的处理,最终从部分到整体抽象为我们感知的物体。图中所示的是一个从图像到物体的感知过程,或者说是一个图像到标签列表的映射模型。

图片来自:http://www.deeplearningbook.org/contents/intro.html

语音转文本或者问题到答案,也是一样的,可以用sequence2sequence作为学习的模型设计。前面说到的api.ai也好,yige.ai也好,规则和变量都是倾向于人工定义的。机器会对未经定义的语法规则给出一些通用的支持,但是正如我们看到的,一旦遇到定义域之外的交互场景,表现就很难尽如人意。

而在端到端的识别中,我们不关心所有的语法和语义规则,所有的输入直接定向为问题,所有的输出直接是答案。当数据足够多,我们就可以做到端到端的识别,而不受人工定义的语义规则的干扰。这件事情,既是好事情,也是坏事情。基于人工规则的机器永远都不可能超过人类的表现,但是纯基于数据的机器学习模型,却可以打败人类——这点在AlphaGo的所向披靡之中,已经被证实过了。

图片来自:http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

如同图示,seq2seq的模型可以基于Sutskever在2014年发表于NIPS的一篇文章设计 ,模型用recurrent neural network每次读入一个token作为输入,并预测应答的token。我们假设第一个人说了ABC,而第二个人回答了WXYZ,那么模型将会建立一个从ABC到WXYZ的映射。模型的隐变量,我们可以叫他“thought vector”,表明在这里机器理解了这个ABC的想法,或者说概念。这个模型在简化程度和通用程度上都是极好的,后面的实验也证明了这一点。

下图是LSTM(一种神经网络)所产生的翻译结果样例,大家可以参考一下效果,并和百度翻译以及谷歌翻译对比一下。

图片来自:http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

深度学习Chatbot开源实现

相信通过前面的介绍,大家对于对话式交互系统,以及现有的api都有了初步了解,那么对于剩下一部分想要自己实现模型的人们,感谢github和arxiv,我们在源代码和原理级别都可以知道当今最聪明的那批人在做什么。

这里是一个颇具代表性的开源框架,纯基于seq2seq,由机器学习实现,并没有任何人工规则干预:https://github.com/Conchylicultor/DeepQA

文章参见:https://arxiv.org/pdf/1506.05869.pdf

和Google一直以来的风格相符,整个代码都是在TensorFlow和python3.5上实现,支持各种开源数据库以及定制化对话数据库,甚至拥有本地的web界面。有现成的权重文件可以下载(无需自己耗时训练),通过 TensorBoard我们也可以轻松监测系统的表现,虽然在部分对话的表现上差强人意,有着诸如在上下文中对同一个问题的回答不统一这种明显的bug,离通过图灵测试更是很遥远,但是其设计原理和实现方式对入门者实在是再友好不过。至少,这个模型告诉了我们,深度学习模型是可以自动从有噪声的开放领域内提取相应知识,并全自动生成答案的。

总结与展望

总结一下,如果我们有更多的领域专家和业务分析师,并且业务上需要进行对话式交互设计的场景相对有限,变量关系都比较简单,那么毫无疑问,各式各样的chatbot API将会是你最好的选择——它设计直观,接口简单,集成容易,而且大多数时候,它在特定问题下的精度将会比端到端的深度学习要高。如果我们有更多的数据科学家和大数据工程师,对和机器一起学习数据中的规则有很大的兴趣,同时业务场景又比较复杂,需要支持更多非结构化的原始数据以及自动化提取特征和规则,那么建议大家借势深度学习,搭建属于自己的智能问答系统。

篇幅所限,这里不再啰嗦,祝大家玩的开心!


更多精彩洞见,请关注微信公众号:思特沃克

Share