阅读更多
【编者按】Jonathan Mugan写了两篇博文来解释计算机如何理解我们在社交媒体平台上使用的语言,以及能理解到何种程度。本文是其中的第二篇。

在深度学习出现之前,我们书写的文字所包含的意思是通过人为设计的符号和结构传达给计算机的。我在上一篇博文里详细阐述了这个实现过程。这里先回顾一下几种符号方法:WordNet、ConceptNet和FrameNet,通过对比来更好地理解深度学习的能力。然后我会讨论深度学习如何用向量来表示语义,以及如何更灵活地表示向量。接着我将探讨如何用向量编码的语义去完成翻译,甚至为图片添加描述和用文字回答问题。最后,我总结了用深度学习技术真正地理解人类语言还需要哪些改进。

WordNet可能是最著名的象征意义的语料库,由普林斯顿大学研发。它将意思相近的单词归为一组,并且表示组与组之间的层次联系。举个例子,它认为“轿车”和“汽车”指的是同一个物体,都是属于一类交通工具。

ConceptNet是来自麻省理工学院的语义网络。它表示的关系比WordNet更广。例如,ConceptNet认为“面包”一词往往出现在“烤面包机”附近。然而,词语间的这种关系实在是不胜枚举。理想情况下,我们会说“面包机”不能被“叉子”插入。

FrameNet是伯克利大学的一个项目,它试图用框架对语义归档。框架表示各种概念及其相关的角色。正如我在上一篇博文里写到的,孩子生日聚会框架的不同部分有着不同的角色,比如场地、娱乐活动和糖源。另一个框架是“购买”这个行为,包括卖方、买方和交易商品。计算机能够通过搜索触发框架的关键词来“理解”文字。这些框架需要手动创建,它们的触发词也需要手动关联。我们可以用这种方式来表示大量知识,但是很难一五一十地明确写出来。因为内容实在太多,完完全全写出来也太费神了。

符号也可以用来创建语言模型,计算某个单词将会出现在句子中的概率。举个例子,假设我刚刚写下“我吃了”,那么下一个词语是“庆丰包子”的概率,可以用语料库中“我吃了庆丰包子”出现的次数除以“我吃了”出现的次数来计算。此类模型相当有用,但我们知道“庆丰包子”与“狗不理包子”非常相似,至少比“电饭锅”相似,但是模型并没有利用这种相似性的优势。使用的词语有千千万万,若是存储所有三词短语需消耗(词语数量 x 词语数量 x 词语数量)存储空间,这也是使用符号所带来的问题,因为词语以及词语的组合实在太多。所以,我们需要一种更好的方式。

使用向量表示语义

深度学习使用向量来表示语义,因此概念不再是由一个庞大的符号来表示,而是由特征值表示的一个向量来表示。向量的每个索引代表神经网络训练得到的一个特征,向量的长度一般在300左右。这是一种更加有效的概念表示方法,因为这里的概念是由特征组成的[Bengio and LeCun, 2007]。两个符号只有相同或者不同两种情况,而两个向量可以用相似性来衡量。“庆丰包子”对应的向量与“狗不理包子”对应的向量很接近,但是它们和“轿车”对应的向量差别很大。如同WordNet处理方式一样,相似的向量被归为同一类。

向量还存在内部结构。如果你用意大利向量减去罗马向量,得到的结果应该与法国向量减去巴黎向量的结果非常接近[Mikolov et al., 2013]。我们可以用一个等式来表示:
引用
意大利 - 罗马 = 法国 - 巴黎

另一个例子是:
引用
国王 - 皇后 = 男人 - 女人

我们通过训练神经网络来预测每个词语附近的词语,得到带有这些属性的向量[Mikolov et al., 2013]。你可以从谷歌或者是斯坦福直接下载已经训练好的向量,或是用Gensim软件库自己训练。令人惊讶的是这种方法竟然有效,而且词向量有如此直观的相似性和联系,但事实上确实是有效。

由词向量构成语义

我们已经有了原来表示单个词语的向量,该如何用这些词表示语义,甚至形成完整的句子呢?我们使用一种称为递归神经网络(recurrent neural network, RNN)的技术,如下图所示。用RNN把句子“The woman ate tacos.”编码为向量,记作h4。单词“the”的词向量记作h0,然后RNN把h0与表示“woman”的词向量结合,生成新的向量h1。然后向量h1继续与下一个单词“ate”的词向量结合,生成新的向量h2,以此类推,直到向量h4。向量h4则表示了完整的句子。



一旦信息被编码为一个向量,我们就能将其解码为另一种形式[2],如下图所示。比如,RNN随后可以将向量h4表示的句子翻译(解码)成西班牙语。它先根据已有向量h4生成一个最有可能的单词。向量h4与新生成的单词“La”一起又产生了向量h5。在向量h5的基础上,RNN推出下一个最有可能出现的单词,“mujer”。重复进行这个过程直到产生句号,网络结构也到此为止。



使用这种编码器—解码器模型来做语言转换,需要用一个包含大量源语言与目标语言的语料库,基于这个语料库训练RNN网络。这些RNN通常含有非常复杂的内部节点[3>,整个模型往往有几百万个参数需要学习。

我们可以将解码的结果以任何形式输出,例如解析树(parse tree)[6],或是图像的描述,假设有足够多包含描述的图像素材。当给图片添加描述时,你可以用图片训练一个神经网络来识别图像中的物体。然后,把神经网络输出层的权重值作为这幅图像的向量表示,再将这个向量用解码器解析出图像的描述[4,7]。(点击这里这里查看示例)

从合成语义到关注、记忆和问答

刚才的编码器—解码器方法似乎像是小把戏,我们接着就慢慢的来看看其在实际场景的应用。我们可以把解码的过程想象成回答问题,“这句话该怎么翻译?”或者,已经有了待翻译的句子,并且一部分内容已经翻译了,那么“接下去该怎么写?”

为了回答这些问题,算法首先需要记住一些状态。在之前提到的例子中,系统只记住当前向量状态h以及最后写下的单词。若是我们想让它能运用之前全部所见所学该怎么办?在机器翻译的例子里,这就意味着在选择下一个单词时,要能够回溯之前的状态向量h0、h1、h2和h3。Bahdanau et al. [1]创造了能满足这种需求的网络结构。神经网络学习如何在每个决策点确定之前哪个记忆状态是最相关的。我们可以认为这是一个关注记忆的焦点。

它的意义在于,由于我们可以将概念和语句编码为向量,并且我们可以使用大量的向量作为记忆元素,通过搜索能找到问题的最佳答案,那么深度学习技术就能用文字来回答问题了。举一个最简单的例子[8],用表示问题的向量与表示记忆的向量做内积运算,把最吻合的结果作为问题的最佳回答。另一种方法是把问题和事实用多层神经网络进行编码,并把最后一层输出传给一个函数,函数的输出即为答案。这些方法都是基于模拟问答的数据来训练,然后用下文Weston[8]所示的方法回答问题。



下一个前沿方向是准确理解语义

刚刚讨论的方法是关于如何以读故事的方式回答问题,但是故事的一些重要情节一目了然,我们不必都写下来。设想桌上放着一本书。计算机如何才能知道你挪动桌子的同时也挪动了书本?同样的,计算机怎么知道屋外只是下雨了呢?就如Marvin Minsky所问,计算机如何知道你能用一根绳索拉箱子而不是推箱子呢?因为这些事实我们不会都写下来,故事将只限于能被我们算法所表示的知识。为了获取这部分知识,我们的机器人(robot)将通过实景体验或者模拟体验来学习。

机器人必须经历这种实景体验,并用深度神经网络编码,基于此可以构建通用语义。如果机器人总是看到箱子从桌上掉下来,它则会根据这一事件创建一条神经回路。当妈妈说“天啊,箱子跌落下来了”,这条回路将会和单词“跌落”结合。然后,作为一个成熟的机器人,当它再遇到句子“股票跌落了10个点”,根据这条神经回路,它就该理解其中的意思了。

机器人还需要把一般的实景体验与抽象推理相结合。试着来理解这句话的含义“他去了垃圾场。”(He went to the junkyard.)WordNet只能提供一组与“went”相关的单词。ConceptNet能把“went”和“go”联系在一起,但是永远也不明白“go”的真正意思是什么。FrameNet有一个self-motion的框架,已经非常接近了,但还是不够。深度学习能把句子编码成向量,然后回答各种问题,诸如用“垃圾场”回答“他在哪儿”的问题。然而,没有一种方法能够传递出一个人在不同位置这层意思,也就是说他既不在这里,也不在其它地方。我们需要有一个连接自然语言和语言逻辑的接口,或者是用神经网络对抽象的逻辑进行编码。

实践:深度学习的入门资源

入门的方法有很多种。斯坦福有一门用深度学习做NLP的公开课。也可以去看Hinton教授在Coursera Course的课程。另外,Bengio教授和他的朋友们也编写了一本简明易懂的在线教材来讲解深度学习。在开始编程之前,如果你使用Python语言,可以用Theano,如果你擅长Java语言,就用Deeplearning4j

总结

计算机性能的提升和我们生活的日益数字化,推动了深度学习的革命。深度学习模型的成功是因为它们足够大,往往带有上百万的参数。训练这些模型需要足够多的训练数据和大量的计算。若要实现真正的智能,我们还需要走得更深。深度学习算法必须从实景体验中习得,并概念化这种经验,然后将这些经验与抽象推理相结合。

关于作者



Jonathan是21CT的首席科学家。他主要研究机器学习和人工智能如何使用在文本和知识中让计算机变得更智能。他在德克萨斯农工大学获得心理学学士学位和工商管理硕士,在德克萨斯大学获得计算机博士学位。他也是《 Curiosity Cycle: Preparing Your Child for the Ongoing Technological Explosion》一书的作者。

参考文献

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. Neural machine translation by jointly

learning to align and translate. arXiv preprint arXiv:1409.0473, 2014.

[2] Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre, Fethi Bougares, Holger Schwenk, and

Yoshua Bengio. Learning phrase representations using RNN encoder-decoder for statistical machine translation. arXiv preprint arXiv:1406.1078, 2014.

[3] Sepp Hochreiter and Jürgen Schmidhuber. Long short-term memory. Neural computation, 9(8):1735–1780, 1997.

[4] Andrej Karpathy and Li Fei-Fei. Deep visual-semantic alignments for generating image descriptions. arXiv preprint arXiv:1412.2306, 2014.

[5] Baolin Peng, Zhengdong Lu, Hang Li, and Kam-Fai Wong. Towards neural network-based reasoning. arXiv preprint arXiv:1508.05508, 2015.

[6] Oriol Vinyals, Lukasz Kaiser, Terry Koo, Slav Petrov, Ilya Sutskever, and Geoffrey Hinton.

Grammar as a foreign language. arXiv preprint arXiv:1412.7449, 2014.

[7] Oriol Vinyals, Alexander Toshev, Samy Bengio, and Dumitru Erhan. Show and tell: A neural

image caption generator. arXiv preprint arXiv:1411.4555, 2014.

[8] Jason Weston, Sumit Chopra, and Antoine Bordes. Memory networks. arXiv

preprint arXiv:1410.3916, 2014.

[9] Yoshua Bengio and Yann LeCun. Scaling learning algorithms towards AI. Large-scale kernel machines, 34(5), 2007.

[10] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. Efficient estimation of word

representations in vector space. arXiv preprint arXiv:1301.3781, 2013.

原文链接:DEEP LEARNING FOR NATURAL LANGUAGE PROCESSING(译者/赵屹华 审校/刘帝伟、朱正贵 责编/周建丁)

译者简介:赵屹华,计算广告工程师@搜狗,前生物医学工程师,关注推荐算法、机器学习领域
  • 大小: 15.7 KB
  • 大小: 19.6 KB
  • 大小: 4.3 KB
  • 大小: 133.5 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • java串口通讯开发rxtxSerial.dll的闪退问题解决

    java串口通讯开发遇到的问题排查过程、解决办法

  • java串口开发基于 windows、Linux和树莓派的使用配置

    随着java的使用越来越普遍,很多时候在和物接入打交道时难免会遇到一些串口相关的操作,下面将平时基于各种操作系统的串口使用方法整理下(重点是第三条,基于树莓派的使用经历)。 一:windows windows操作系统...

  • 银河麒麟龙芯mips64架构集成RXTX串口通讯兼容问题

    银河麒麟操作系统、龙芯处理器下rxtx串口通讯,librxtxSerial.so、librxtxParallel.so库文件兼容问题,龙芯openjdk下兼容问题

  • 程序包java.awt不存在,Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在...

    安装了jdk11,习惯性的设置了一下环境变量: JAVA_HOME=D:\tool\jdk-11.0.2。JAVA_HOME=D:\Program Files\Java\jdk1.8.0_201设置完了,忘记改回去了。 项目中其实使用的是jdk8,结果运行 mvn 遇到了这么一个问...

  • Java读取串口数据,发送指令给超简单的两种方式

    要实现的是利用java读取串口数据

  • java串口读取数据(转载)

    如何用Java语言向串口读写数据 串口, RS-232-C(又称EIA RS-232-C,以下简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。RS232是一个...

  • k8s docker java amd64 串口通信

    根据不同操作系统下载RXTXcomm包,根据install.txt拷贝相应文件到jdk目录 官网地址:http://fizzed.com/oss/rxtx-for-java 下载的2.2版本在amd64会报以下异常 # # A fatal error has been detected by the Java ...

  • Java使用RXTX进行串口SerialPort通讯

    RXTX项目提供了Windows,Linux,Mac os X,Solaris操作系统下的兼容javax.comm串口通讯包API的实现,为其他开发人员在此类系统下开发串口应用提供了相当的方便。 RXTX的使用上与sun提供的comm.jar基本相同,编程时最明显...

  • Java(八)常用类与正则表达式

    此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中...

  • Java常见问题集锦

    与jdk1.1不同的是:设置好java_home环境变量后,jvm将自动搜索系统类库以及用户的当前路径. java 2环境变量的设置如下例所示: solaris平台: setenv java_home java2的安装路径 setenv path $java_h

  • Java常用开源jar包

    Java常用开源jar包 转:http://blog.csdn.net/kevingao/article/details/8125683 activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体...

  • java基础知识(java基础知识刷题软件)

    自学Java 怎么入门 在学习Java前,你有必要思考一下: 你对学习Java是否有兴趣2....Java不是一门独立存在的一门编程语言,它与其他语言都有共同之处也有不同之处。技术的联系都是千丝万缕的。就好比现在J...

  • 如何用Java语言向串口读写数据

    【赛迪网讯】串口, RS-232-C(又称EIA RS-232-C,以下简称RS232)是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。RS232是一个全双工的通讯协议,...

  • java jar包收集

    activation~与javaMail有关的jar包,使用javaMail时应与mail.jar (mail.jar和activation.jar)一起加入到lib中去,具体负责mail的数据源和类型等。 ApacheActiveMQ~Apache出品,最流行的,能力强劲的开源消息总线。...

  • JAVA:最基础部分的学习笔记

    day01课堂笔记(第一章 Java的开发环境的搭建) 1.常用的DOS命令 win+r (组合键):可以打开“运行”窗口 1.1、怎么打开DOS命令窗口 在运行窗口文本框中输入:cmd 然后回车 1.2 什么是DOS命令呢? 在DOS...

  • Java常见问题集锦(来自Sun中国官方站)

    发表日期:2003年11月28日 已经有91位读者读过此文 Java常见问题集锦 问: 如何设置Java 2(JDK1.2)的环境变量? 答: Java 2安装后,需要设置PATH和JAVA_HOME环境变量.与JDK1.1不同的是:设置好JAVA_HOME环境变量后,JVM...

  • Java面试题整理

    2023Java核心知识汇总

  • python入门-30.寻找列表中只出现一次的数字-寻找单身狗.py

    python入门-30.寻找列表中只出现一次的数字——寻找单身狗.py

  • 布尔教育linux优化笔记

    linux优化笔记,配套视频:https://www.bilibili.com/list/474327672?sid=4496133&spm_id_from=333.999.0.0&desc=1

Global site tag (gtag.js) - Google Analytics