AI 技术讲座精选:数学不好,也可以学习人工智能(七)——自然语言处理的奇妙神奇之处

机器都能做到吗? 我现在是任由自动化左右吗? 未来AI会让作家失业吗? 请阅读本文。

编译 | AI100

在本系列的第五部分中发现了卷积神经网络图像识别技术的神奇力量之后,我决定全身心投入到自然语言处理(NLP)中。(如果你还没有阅读之前章节的内容,那么请一定要阅读一下。)

自然语言处理使得计算机能够理解人们是如何谈话的。当你向Siri或者Google Assistant提问时,推动此次对话进行的正是自然语言处理。毫无疑问,作为相关小说和文章的作者,我接下来的工作显而易见就是与语言打交道。

可能我数学不好,但语言却是我的强项!

所以我打算探索一下,NLP在我精通的领域中会带来什么样的见解。

请看,这是吟游诗人的画像。

我有太多的疑问。NLP已经发现书写凄美诗词的隐藏关键点了吗?AI的措辞会比这位吟游诗人(Bard)的更好吗?它们能找到让人忍不住点击的头条的秘诀吗?

幸运的是,我脑海里刚好想到一个测试NLP局限性的项目。我正在给我那史诗般的科幻故事The Jasmine Wars系列的第二本书取书名,可是因为我非常想要一个绝佳的书名,所以我想知道:

假如我用神经网络编写的书名一直都是最棒的,那么其会根据年代编写题目吗?

这并不是我首次尝试利用计算机的辅助来拟定书名,有时候我也会尝试网络上种类繁多的书名随机生成器。

实话实说,这些生成器拟定的书名并不理想。

这些生成器就像是那种只能让你感兴趣几分钟的玩具,然后你会继续找新的玩具。它们通常会将词语随机组合在一起,或者通过诸如“The____of____”这样的基本排列重复起名字。我很怀疑一位作者真的会从这些书名生成器产生的原始词汤结果中选取他或者她的书名。

把词汇丢进一顶帽子里,重新组合,然后再把词汇倒出来,这样得出的书名不会让你有太多收获。在一百万年中,让一百万只猴子在键盘上随意敲打有可能会造就莎士比亚这样的文学天才,可是我没有这么多时间。

AI伸出了援助之手!

神经网络凝视时间的深度

正如我们在第五部分中学习的那样,神经网络拥有神奇的力量,因为他们能够进行自动特征提取。我们不能对机器详述开车的所有具体操作步骤,但是我们可以让它自己理解!

作为一名作者,我会利用各种技巧来博取读者的关注,但试图把这些都归结为一系列原则是根本不可能。这远远超出简简单单地理解名词、动词以及形容词的程度,必须要有语言的韵律。单词可以激发出你脑海中精彩的画面,它们可以让你情绪失控,让你哭到崩溃,甚至让你因期待而颤抖。

机器都能做到吗?

我现在是任由自动化左右吗?

未来AI会让作家失业吗?

为了找寻答案,首先我需要了解我需要哪种神经网络(NN)。神经网络有它们特定的解决问题的类型。人类可能拥有整体学习算法,可是,我们一定对此一无所知。当前最先进的技术聚焦在利用每一个神经网络把某些事做的非常好而其它事情完成的非常糟糕的“狭义人工智能”。

那么哪一种神经网络可以帮助我们理解语言呢?

轻而易举的获悉自然语言处理的主导力量就是循环神经网络(RNN),尤其是LSTM (Long Short Term Memory)。

所以,让我们来了解一下这些网络,看看它们是否可以帮助我解锁写出吸引人题目的秘诀。

循环神经网络的神奇之处

不可避免的,当你开始了解RNN网络时,你发现OpenAI的研究人员Andrej Karpahy的博客《循环神经网络超乎寻常的有效性》(The Unreasonable Effectiveness of Recurrent Neural Networks)。

单是看到这个标题就让我满怀信心。

只是,这些神奇的系统会有多有效呢?

如果这个书名无法吸引我,那么第一行一定是这样写的:

“循环神经网络有魔力吗?”

有魔力!

我知道拟定一个极好的书名不是难事,该网络的能量已经在隐藏的矩阵深处翻滚。

那么是什么让RNN具有“魔力”的呢?首先,递归神经网络特别擅长预测未来。

当你买进股票或者去机场接机,你就正在预测未来。一名棒球运动员试图击中一个高飞的球就必须预测这个球的飞行弧线并立即做出反应在哪里能够击中它。

我们一直在预测,无论我们计划徒步还是开车穿越这座城市。

其他的那些车会撞到你吗?

会有人拐进你的车道吗?

你的朋友会在机场中的哪个位置等你呢?

我们一直试着预测接下来会发生什么,然后提前做好准备应对办法,因为我们已经准备好了。RNN 通过分析时间序列数据也能提前进行预测。

递归神经网络具有前瞻性,而且与其它神经网络不同,它们是可以回顾过去的内容的。递归神经网络储存了过去事件的“记忆”。它们可以查看火箭的升空轨迹或者股票价格变化趋势并且能够预测股票的买卖。谈及自动驾驶汽车,递归神经网络可以预测其运行的轨迹和角度,这就意味着它们能够帮助预防交通事故或者避开斜坡(正如你所见,在发生撞击之前,一辆Tesla汽车发出了警告声)。

https://youtu.be/lFMY5iHkW8U

循环神经网络还擅长使用任意长度的序列数据。因为大部分的神经网络只能输入固定大小的向量/张量并输出固定大小的向量。为了使用卷积神经网络,我们必须将图像损减到特定的尺寸以便它们进行运作。但是文本无效。你无法将一本小说或整个的维基百科挤压成适合所有盒子的大小。这种灵活性让循环神经网络非常适宜自然语言处理,其完成过程包括机器翻译、情感分析、Google's Pixel AI中的所有的事情,它能够理解你的问题。

这甚至赋予了循环神经网络一定水平的“创造力”。通过利用循环神经网络创作音乐来检验文章。这个系统在一系列音乐序列中进行训练并且通过预测下一个可能的序列来“创作”音乐。

除此之外,循环神经网络还能做些什么呢?

如果你正在进行情感分析,尝试分析出人们是否对某些事感觉良好或者对某些事感觉很糟糕,那么我们可以输入电影评论并且输出喜欢(1)和讨厌(-1)的二进制分类得分。

你可以给它输入一个单输入,然后让它传输一系列输出。例如,你可以向网络中输入一个图像(单输入),然后它会产生一个图像的文本摘要(系列输出)。可以查看一下这篇文章(http://cs.stanford.edu/people/karpathy/deepimagesent),不仅讲述了递归网络浏览照片的过程,并且还可以传输诸如“男孩正在做后空翻花式滑水动作”这样的摘要的具体内容。

系统对目标进行定位而且试图以此创建句子,正如我们看到的这张打网球姑娘的图片,如下所示:

我们还可以向网络中输入向量网络的一个序列,调用一个编码器并且反向输出一个序列的向量(我们所说的解码器)

这对机器翻译非常有用处(正如你在这篇很棒的文章中看到的那样,机器学习一点也不好玩,网址:https://medium.com/@ageitgey/machine-learning-is-fun-part-5-language-translation-with-deep-learning-and-the-magic-of-sequences-2ace0acca0aa)。近期,Google利用循环神经网络来更新谷歌翻译系统使其替代之前晦涩难懂的翻译版本,以达到人类的翻译水平。与此同时,2017年4月11日,Google终于公开了名为tf-seq2seq(虽然不是最好的营销名字,但是我们还是决定采用这个名字)并且能支持其翻译器的模型源代码。基本上,我们需要做的事情就是同时利用原文文本和另一种专业的译入语文本(输入和输出)训练这个网络,然后利用训练出的网络帮助机器翻译新的、从未见过的文档。

但是就我们的目的而言,我们需要一款具有专项特征的循环神经网络:

它们非常擅长生成文本。

擅长生成文本这一特征在Karpahy的那篇《神奇的循环神经网络》(magical RNN)博文中也曾提到过,这也是让我十分感兴趣的地方。

让我们先快速地了解一下循环神经网络的工作机制,然后再向大家介绍一下我尝试循环递归神经网络得到下一本伟大的美国小说书名的过程。

反复(Time After Time)

除去循环神经网络指向后端的连接不谈,RNN看起来非常像正向输送的神经网络。如果观察一个简单RNN神经元,就可以了解它在特定的方向中及时的接收输入,我们将其称为“帧”,也可以说是上一步骤Y(t-1)的输出。如图所示:

这个神经网络实际上是由一系列有条不紊的步骤组成的。它跟电影中的帧类似,我们将其中的每一个步骤都称为帧。花费时间来“展开循环神经网络”的过程,与我们在荧幕上播放电影的过程原理一样。如图所示:

我们用“t”来代表时间。我们在中间的帧中看到的,就是此刻的时间点“t”处的帧。上一步骤就是“t-1”(t左边的结构),下一步骤为“t+1”(t右边的结构)。中间结构中的s处于隐藏状态,因此“s”代表状态。它是储存空间(cell)。在前馈神经网络中,输入只是先前输出节点的加权。在循环神经网络中,也要对上一步骤输出加权。自从神经网络利用“空间(cell)”通过时间步骤储存了先前时间的元素,有时我们称它为“储存空间(memory cell)”。换句话说,如我们之前所说的,它不仅能够及时回顾过去而且还能尝试预测下一步的操作。

开发长时记忆

基础的循环神经网络要面临一些挑战性。主要的挑战之一就是利用既简单又老旧的循环神经网络时,如果网络太深,它很容易就会“遗忘(forget)”更早的时间序列中的信息。

为什么会出现这个问题?

好吧,我们假装你拥有处理股票消息的情感分析循环神经网络,它会根据公众对股票涨跌趋势的判断而发出买卖信号。一位股票博主刚开始可能告诉你卖掉股票,然后却在接下来的文章中建议你以后购买潜力股,一旦股票因为当下的消息而股价下跌,它需要好几周才能恢复到原来的股价。基于文章后续的积极情绪,这个系统可能会忘记先前的“卖出”建议,进而强烈建议“购买”。

甚至,它们在通过相对较短的序列来学习长期依赖关系时也是有困难的。这是自然语言处理中一个很严重的问题,因为句子的意义并非总是非常紧密的聚集在一起。

其实,大部分人造不出完美的句子,更无法让他们的小学语法老师感到骄傲。他们使整个句子的句意非常松散,可能会使用比较古怪的语法和俚语进行造句。对于人们来说,这并不是个多大的问题,因为我们拥有非凡的能力来理解那些存在错误的句子。修饰语错位、遗漏单词、错别字以及垂悬分词(dangling participles)等问题并不会拖慢我们人类的阅读速度,但是这些问题却会难倒机器。

例如,如果我说“一个穿着蓝色上衣,戴白色帽子独奏了一曲绝妙的爵士乐”,句子的关键点不是贴近句子主语描述男人的穿戴的这部分内容,而是他独奏了一曲绝妙的爵士乐。如果系统遗忘信息,那么等到音乐响起时,系统已经错失了句子的关键点。

这就是斯坦福深度学习和自然语言处理分类终于解决的被称为梯度消失的问题(https://cs224d.stanford.edu/notebooks/vanishing_grad_example.html)。

在这里,我给你一个快速浏览的摘要以节约你的阅读时间。为了理解梯度消失,你需要对反向传播有所了解。在本系列的第五部分中,我们提起过反向传播如何通过运行错误画面(error landscape)中的最低点来缩小错误。这有助于神经网络适应它的权系数,以便于进入下一个阶段的训练。在3D效果图中,它看起来是这样的,如图所示:

在某种程度上,梯度消失在2D效果图中更容易理解,所以我们来看看这张图片,如下所示:

这个系统正在一小步一小步循序渐进,因为它试图朝着底部的曲线运行。现在,一切正常,但你利用一个定义精密且良好的曲线获得了一个清晰地错误画面(a clean error landscape)。但是如果这条曲线非常平缓呢?让我们来看一下,如图所示:

当曲线非常平缓的时候,我们说这样的神经元处于“饱和状态”(saturated)。此时的神经元并没有去激活并寻找有用的数据,已经丧失了有效性。更糟糕的是,这些神经元对先前的神经元有成指数函数方式的负面影响。请记住,神经网络是矩阵,它们实际上只是增强型试算表(spreadsheets on steroids)。在一长串的方程式中,为下一个空间(cell)添加一个新的空间(cell)或成倍的增加空间(cell)。

顺便提一下,如果你还在矩阵数学(matrix math)中苦苦挣扎的话,我推荐你读一下这本我很喜欢看的名为《The Manga Guide to Linear Algebra》(http://amzn.to/2or8aoA)的漫画书。

日本人只是拥有更好的教学工具。如果我上学的时候就有这本书的话,我可能会更喜欢矩阵数学。

回到数学问题上!

还记得第六部分主要讲述的数学符号吗?

现在想象一下所有这些数字是零或者接近零的数字。一连串的计算结果是什么呢?

当一些神经元的值很小的时候,乘法会导致梯度值以指数函数的方式快速缩减,这就使得链条中所有神经元的梯度值迅速趋近于零。这就意味着,这些神经元已经失去有效性,并且没有发挥作用。它们就像是电视屏幕上再也无法工作的坏点,越深的网络这个问题的后果越严重。

这些年出现了许多解决这一问题的方法。首先使用的是RELU激活函数,而非Tanh或者Sigmoid激活函数。

为什么这么做呢?你只需通过观察Sigmoid曲线来理解就可以了。

注意到这条精密曲线底端和顶端边缘的形状了吗?当我们描绘脸型或者大桥的弧度时,我们期望得到这样的曲线,但是当梯度消失时,底端曲线的斜线率接近零。

现在我们来看RELU 和Sigmoid可视化趋势的对比图,如图所示:

请注意那个生硬的拐角!RELU函数得出的数据是常数0或者常数1,并且如你所见,RELU函数曲线走势生硬而且末端斜率并不平缓,与我们遇到的梯度值消失问题不同。

但是有更好的解决办法。我们来检验一下这个方法。

龙争虎斗(Enter the Dragon)

应对梯度消失问题的真正的解决办法就是不要改变常规循环神经网络(a regular RNN)的激活函数。

在1997年首次提出要转换思路创建更多受欢迎的长短期记忆神经网络(LSTM),2014年阐述了GRUs。

这些结构都是针对梯度消失问题设计的,这也意味着他们在寻找远程依赖性。虽然GRU和LSTM网络控制着该领域,但是在对常规循环神经网络(regular RNN)的训练中,基本用不到远程依赖性,

第一次看见LSTM这个名字时,你可能会觉得有点奇怪,而不会考虑这个网络正在做什么。从本质上来讲,LSTM网络就是一个黑匣子储存单元,其与标准的循环神经网络储存单元类似,但是它实际上拥有双向量的二重状态(dual states in two vectors),包括一个长期状态和一个短期状态。

以下是通过在深度学习4J团队的朋友获得的LSTM的操作实例,如图所示:

图一:左边是一个详细的简单递归网络单元草图,右边是长短期记忆模块都处于一个递归神经网络的隐藏层中。

顺便说一句,我读过很多这方面的内容不错的书籍(包括通用的神经网络/深度学习方面的书籍),刚刚出版的《Hands-On Machine Learning with Scikit-Learn and Tensorflow》(http://amzn.to/2p5t4Ll)就是其中之一。我曾看过其中一些更早的版本,这些书确实能够支持我的测试。无需等待,尽早去读吧!这本书从整体上呈现了循环神经网络,而不是像我这样进行详细的讲解,但是我会给你基础的指引以便让你朝着正确的方向快速学习。

你可以看到这些信息是通过一系列的“门”沿着两条主线进行传输。顶端的这条线被称为“forget line”(“遗忘线”)。依愚人之见,这是一段非常糟糕的时期,所以我没有给它起名字,请不要责怪我。让我们开始使用它吧。

“forget line”记得长期状态。

随着网络的延伸,“forget line”复制向前的信息并将其置于新单元中(cell)。实际上,“forget line”这个名字也不是完全荒谬的。

因为它在运行时,信息变得散漫,所以它被命名为遗忘线(forget line)。

其他线包含短期联想和记忆,接下来会合并到“forget”线中。

进行每一步的时候,有一些记忆会消失,还有一些记忆会增加进来。

基本上,GRU是LSTM网络中的一种简单模式。我们可以查看一下从Jacob Kvita这名计算机专业的学生(前红帽子成员)得到的这张极好的图表,他为了验证自己的论点画了这张图表。

有什么不同吗?

GRU单元产生长短期记忆(long and short term memory)将其合并成一个单独的向量。

为什么要这样做呢?简便而且性能好。这样进一步减少了计算成本,而且从某种角度来看运行速度也提高了。这就是胜利!

这只用到了短期和长期记忆的一个“门”。最后,还添加了一种决定在下一层中显现何种内容的新门。

机器中的猴子

好吧,一切都非常好!但是Dan,我要如何从这里生成一个文本呢?

问得好。

Karpathy的帖子阐述了RNN的“字符”层(a character level RNN)。字符层模型以字符为单位来理解语言。

它是怎么做到的呢?

基本上,所有的神经网络都是复杂的预测机器。所以,我们往系统中输入数以百万的单词,系统储存这些单词把它们当做字符序列。然后,系统开始预测下一个字符。一旦系统能够像我们一样进行预测,我们就可以让系统利用所有技巧,利用我们给它输入的像“种子”一样的一系列单词给我们生成示范文本。不过这都是理论上的推论,现在我们来看一个简单的示例。

首先,让我们假装这个系统只学习了几个单词:

  • hey
  • hello
  • help
  • I
  • there
  • need

我们还教授给系统诸如“。”和“!”这样的标点符号知识。

我们要记得,这一简单的RNN并没有学习过完整的单词。系统只是学习了一系列字符,它知道h-e-l-l-o这几个单独的字符,也知道“e”应该在“h”后面,却无法理解“hello”这个词的整体含义。

现在想象一下我向系统展示一百万个不同的句子,而这些句子都是由我已经教过系统的几个单词组成的。这些句子可能是这样的:

  • Hey, there. Hello!
  • Hello! Help!
  • Help!
  • Help.

然后,我用短语推广这个机器:

“I need he”

请注意我没有写出完整的单词,我希望机器能猜出我要表达的单词。

接下来,系统将会查看它的黑匣子,然后努力猜测下一个字符是什么。在文中这种情况下,可能是“hello”这个单词中的“l”,也可能是“hey”这个单词中的“y”,还有可能是“help”这个单词中的“l”。

如果网络受到了良好的训练,那么我们希望它按照顺序选择“help”这个单词中的“l”和“p”,因为这是少数能讲得通的结构之一。

在Github上展示的示例中,我们会看到RNN的字符层(a character level RNN)在Keras中的执行情况: https://github.com/fchollet/keras/blob/master/examples/lstm_text_generation.py

系统在包含10万个单词的Nietzsche语料库中进行训练。这个实例建议我们在至少含有10万个单词的语料库中训练系统,以便使其更加强健。

我决定给RNN的字符层输入一个我花费了许多天亲自创建出来的数据集,你可以在Github上找到这个数据集:

https://github.com/the-laughing-monkey/learning-ai-if-you-suck-at-math/blob/master/Deep%20Learning%20Examples/GreatBookTitles.txt。我把记忆中、书架上以及大量的推荐阅读的前100名的书单名称逐一输入到系统中。

不幸的是,我很快就将这些经典小说的书名录入完了。

一种选择就是单纯地把我下载的图书目录中的书名尽可能多的录入到系统中,但是我想聚焦那些非常经典的书名,并不像滥竽充数。为了扩大其信息储存量,我会继续往系统里录入非常棒的电影名,然后再输入那些非常棒的歌曲名以及乐队名称。

当我做完这项工作时,我只得到了26K大小的有用单词量,这使得系统非常不值得信任。但是我决定放任不管。所以系统运行结果如何呢?这里有几种结果:

tha ect are dog a9t byta go than wel pt year benc

完全没有魔力!

即使训练了很多很多很多代系统,但是它还是很烂。我让这个系统一晚上进行7000次更迭,它仍然只能生产垃圾信息。

在这点上,我无法分辨是因为我输入系统中的数据太少还是RNN本身的问题。与其强制性的校正系统,在我花费了五个夜晚调试系统让其正常运行之前,我决定看看是否能找到这个问题的解答。

PANDARUS: Alas, I think he shall be come approached and the day When little srain would be attain'd into being never fed, And who is but a chain and subjects of his death, I should not sleep. Second Senator: They are away this miseries, produced upon my soul, Breaking and strongly should be buried, when I perish The earth and thoughts of many states.

他特别兴奋,因为系统好像正在生成像莎士比亚写出的那样的文本,至少第一眼看起来很像。

文本的形成就像是一出戏,有对话也有角色的名字,还会利用像“alas”这样的词汇,文本多少还有点吟游诗人的韵味。

在某种程度上,这真的让人震惊,因为这个系统本身对英语一无所知!系统中没有上下文,它对动词、角色以对话也并不了解,它只是通过运用模式和输出相似的模式进行学习。

无论如何,作为一名作家,比起上述输出结果,我发现为自己更为迷恋Karpathy。

虽然系统确实可以模仿戏剧的基本形式,但是我并不觉得这是特别好的成就。我们对可以自动创作出80年代作家戏剧的系统能力哑口无言。我发现,系统最大的问题就是非常容易形成无用的数据,但是这就意味着一无所有。系统产生单词,但是单词组合在一起变得毫无意义。而这样的句子根本也是没有意义的。

可是,我并没有灰心。

直观地说,我意识到在字符水平上试图训练这些系统毫无意义。

为什么系统试着预测下一个字符竟如此困难,应该生成一些相似的单词吗?

请注意即使是在类似莎士比亚剧本的输出中,系统也会产生像“srain”这样毫无意义的单词,这就意味着即使系统进行了几个小时的训练,它仍会为了避免犯幼稚园水平的错误而苦苦挣扎。我怀疑研究人员是否像我一样意识到,在“单词”水平上训练系统会更有意义。换句话说,就是在“hello”这样的单词中训练系统,而非只是学习其中的字符“h-e-l-l-o”。

事实证明他们真的这样做了。

我发现RNN基本字符的修饰功能把其变成了一个单词水平的怪兽。这个系统还引进了有关LSTM以及GRU网络的更多的先进概念。非常棒!现在系统可以学习整个的单词,而非只是字母了!

同时事实证明,这个领域的发展非常迅猛,现在已经有许多单词水平的RNN系统了,而我是三个月前开始写这篇文章的。我需要先完成其他的工作,而早期发表的一些学习AI的文章看起来更适合现在的情况,所以我就没有继续写这篇文章。现在接着写这篇文章,我已经找到了不同版本的单词水平的RNN供你研究和测试。太棒了!

Play Go The Wide Virgin Me is Teen Scream I, Masque and a Champions The For Is with Myself Tears, the Tropic of the Looking Ugly The Journey of to Big Empire The Red What Adventures The Naked Nails Dirty What's West Twenty Mask in the End of Earth As Dance to the Atlantis Was Be If Even In Me Paradiso Crime Smokestack Mojo Jest The Carpenter The Nightmare of Heights The Golden Twenty House So 1/2 Hand in the Drugs were God The Snows and the Rain Cat Things We Thank My Knew L.A. Did Deep The Goblet in Steal: The an These Along the Bonfire The End of Quarter Halloween Madonna Mote Killshot Way of the River Torturer The Inc. Rex The Anvil of Imagination were Sabbath Wild Morning Angry Mice The Thin Street Tangled Got In Want Pretty a Turning of the Beethoven not Salem's Atuan Break, Lost Red Charlotte's Drummer Giving Ship A Susie On Mars The Night Don't Still Crash Spy In the Ritz The Goblet of Heaven The Cure Good Cosmos The Time's Brigade this Dreams Can't Folsom Dove You Jumping Hide Come is a City Wars in the Taming In Like for the Mind All Above Terra Doom Things Rehab Exit You Lays Heat The Devil Outrageous Cry Clash Place The Ashes Men Side The Toyshop The Velvet in the Red A Road Without Little Red Of Door Comedy Undery Me a Gods The Eden and the Black Badge In Stop the Wall and the Night 96 Captain! Street to Time on the Earth of Bees Steel Why to Empty Got I Want Myself Rolling Iron in Everything Songs Oh, Be nd Folsom A Grifters The Game The Secret Fountainhead The River Nine Germs Nights for Me Are Know You Wear Miles in on Stuff Up Vanity Sleep The Clash A Empire A Lost in a Sex Machine Wake Dazed What Steel Steal: for Chocolate Secret Planet Moment Purple Red Snow Some Are Dark, Me You a Row Suspicious Detective Surrender Will Hound Delicatessen None The Cathedral of Empires What Mary Going Big Whom need by this The Dancer Up Summer Nine Kill Night Fight Dog Cross and the Bob World California I 101 Suede Drummer Book Pyscho Prophet Eye of the River Men Man I War Be Eyed Be Video Dream See Samurai The Widening Baby The Standing Express Untrodden The Man of the

系统输出了一个有点难以处理的巨大的文本模块,所以我写了一个小脚本将其分割成两个含有7个单词的句子,这大约跟一个好书名的长度差不多。一般大部分的好书名都是四个字。 我把得到的好结果储存在了文档里,同时丢弃那些毫无意义的结果。

Sleepless in Cryptonomicon The Sun Rope Delicatessen in the Jungle Daisy the Cloudy Shoplifters Waiting for a Glass Full Blood Agency The China Proposal Beloved Mayor of Horton Walking China The Metropolis Jacket The Steel Beowulf Magnolias Dawn, Little Prarie Sun Fried Castle Blind Sense of Disobedience The Meatballs Dune China Hooker Tomatoes Of Slave Blood In the Usual House Trial Fried Castle Why Eternity Glass The Lovely Wide Evil The Bright Gene The Infinity Half The Lathe of Dr Dispossessed To Murder Proud The Sick Archbishop Gun Man Blue In the Silence The Radio Who Dragons Through Glory of the Dead A Golden Geisha The Sand Woods Gates of Cholera A Right Good Dawn A Rosetta Ruby New Tide Sky The Fire Plan Man to Barbarism The Deception Needle The River Break The Secret Electric Manifesto City of Lost Faces Jude the Key Mystic GermsThe Roman Woods Gold Sweet Death The Brand Morgue Sweet Dreams Piano Loving Shanghai End of Lolita Childhood Cold Geisha The Last Baby Good Journey into the Light The Door Song Song for Want The Bitter Lady I, Samurai In Me, Not Get Proud Mystic Sex The Death of Walter Stop Heaven's Sun One Mystic Cannibal the Cannibal's Candle The Secret Red Sky People of the Fire Stardust Winter's Love Johnny Never Gonna Stop Gone Thunder Rolling The Metamorphosis Fish Snowy Spots the Rainbow The Tabloid Bums The Invisible Deep the Deep and Unbearable Call of FireThe Cuckoo's Jekyll The Red Tenderness The Raven's School The Memories of God The Cave Dragon Jim the Savage Sunset Now on Brooklyn Black Song I Was Toys The Snows Creek Came The Secret Land The Well The Last Lies Lords of the Knife Inside Physics The Galaxy of Gone The Satanic Playlist The Bloody 9 Freakonmics: A Hard Black Dance Stone of Fire A Road Death The Feast Baby Lucifer's Rainbow A Severed Cage Of Summertime Glass Lucky Break in the Night the knife Man Prison Rain The Door to the Cosmos Solitude in the Frost The Clockwork Chamber The Black Queen Back to the Wind The Blind Fields Marathon of Fear Sophie's Dragons The First New Madre Soldier Jurassic Magnolias Seattle Siddhartha The Glass Dawn The Beloved Metropolis The Glass Temple Steel Woods The House of Inception The Tao of the Third Lonesome Winter's Man Sugar Acid The Piano Ashes The Anarchist's Game The Furious Tenderness The Red Hallows Paradise Demons Demons of Time Cosmos, I Ride The Machine King The King's Blue Grass The End of Kashmir The Secret Soldier Love of Sunshine The Night of the Rose Tea House Cowgirls The Vishnu Indigo Death of the Stars In the Red Morning The Star Queen's Face River Demons The Night Runner The Charge of Fire The World of Chocolate Songs A Purloined Cloud The Art of Hanging Ode to the Sleepers The Gold Inside Even the Asphalt Rogue Funeral Sea of the Red God”

有些书名还真不赖!正如我朋友说的,系统变得越来越聪明了。这里还有一些非常棒的书名:

  • The Art of Hanging
  • Lucifer’s Rainbow
  • Sea of the Red God
  • River Demons
  • The Invisible Deep
  • Black Song
  • The Memories of God

还有一些喜剧金句,比如:“中国的圣女果”(China Hooker Tomatoes)!

你还可以看到,收录诸如“Freakonomics”这样的混合词并不是一个好主意。显而易见,这个词来源于某知名作家知名作品的书名,如果你真的打算用这种方式命名一本书,那么你会因为侵犯版权而被告,最好采用普通的单词。虽然我非常喜欢像“Freakonomics:A Hard Black Dance”这样的单词,这个书名是对Steven D. Levitt原创经典一个很好的追随。

我曾对句子水平的RNN抱有更高的期望,但不幸的是,几周前我测试过这个系统,未能找到合适的运行代码来检测。我发现了几篇非常有前途的中国论文。然后,当然,我的尝试中断了,有些人还在继续并且发表了有关于利用代码对句子水平进行分类的非常厉害的博客帖子。在我测试完一些新的代码后,我将会对此做一个追踪。

NLP以及其他技术

如上述所说,我不确定这些系统通过随机词语生成器(random word generators)产生的书名是好还是坏。如果仔细看你会发现,基本上半随机的混搭模式已经创造出非常好的书名了。

如果实话实说,我必须承认我并不觉得这类系统对写出莎士比亚那样的作品和书名会有作用。这种句子水平的生成器无非就是小把戏,不过是让我们忽略了NLP做的就非常好。

事实证明NLP在诸如情感分类这样的更多约束问题集中的表现更好。

实际上,你可以从斯坦福NLP课程介绍的课程中对先进技术进行良好的分类。因为在近几年中,这些问题都解决得很好,所以简介稍微有一点过时了,但是其仍然是该领域非常重要的简介。

那么,什么是先进技术呢?这是视频中的一个片段:

经常解决的任务:

  • 垃圾邮件的鉴别
  • 部分词性标注:(adj/noun/verb)
  • 命名实体识别

取得的良好成绩:

  • 情感分析
  • 共指消解
  • 词义消歧
  • 机器翻译

存在的难题:

  • 问答系统
  • 倒像(Paraphasing)
  • 摘要
  • 对话

正如我利用书名试验所发现的那样,一点也不冲突,当你利用这些系统完成它们所擅长的事情时,这些系统表现突出。

这些任务有什么共同点吗?

从本质上来说,这些系统都擅长在先前理解的序列中预测下一个可能出现的单词。它们可以将一个句子拆开变成更小的部分,也可以分辨句子的情感是积极的还是消极的。

这有什么好处呢?

这个问题的答案可能就在你手中。如果你正在用手机在阅读这篇文章,你可能正盯着答案看呢。我打算讨论一下Google Assistant或者是Siri。

人们讨论这些被训练的系统很久了,这些AI助理可以拿出一个音频样本并且通过预测下一个最可能出现的词是“help”还是“halter”来迅速的消除歧义词。实际上,我正在找一款新的像素手机(Pixel phone),这就需要利用最新版的Google Assistant,它非常擅长这类任务。在我跟它对话的过程中,它预测的单词基本不会出现错误。

更棒的是,它似乎基本上都能理解我问它的语义的上下文。例如,当我对它说“告诉我附近好吃的餐厅在哪”时,它知道向我显示附近评价高的餐厅,而非随意显示没有评价的小饭馆。这点非常棒!

事实证明,我要求还没有经验的人工智能NLP解决的问题特别难,这个难题到现在还是没有解决。依照我的后见之明,对我来说找出成为一名作家的原因并不难。

虽然NLP的实践者把重点放在了将句子分解成最基本的建筑模块,但是一个好的作家知道写作的力量和意义来源于语言的组合,而不是分散词语。

我真的想要检测的模式是非常非常与众不同的,这些模式是有关于诸如诗句措辞和独特词语组合的艺术。让我们看看这些非常好的书名,这样你就能理解我所说的意思了。

中国难题引发的喧嚣与躁动

这下面是Maya Angelou写的一个非常有名的书名,也是我最喜欢的书名中的一个,如下所示:

1)我知道被囚禁的鸟为何歌唱(I Know Why the Caged Bird Sings)

这是一个意想不到的优秀书名,其结构突显出了NLP为什么这么具有挑战性。

首先,机器对结构问题具有非常高的敏感性。例如,书名虽然很押韵但是却没有明确的理由。这个书名没有使用任何诸如“头韵”这样我们非常容易辨别出的明显的文学技巧。如果我们找不到这样的修辞,机器就更找不到了。

这个题目似乎运用了齿音这样的技巧,或许是S音的缘故,或者是话音低沉的缘故,具体的原因不能特别的肯定,因为这里只有一个S。齿音听起来非常性感,甚至有些危险。想象一下情侣之间交耳相谈或者是一只蛇发出嘶嘶声的情景吧!让你感到兴奋亦或害怕的,都是S音的缘故。

实际上,在Angeluo的演讲中,她利用了很多齿音。所以,当我阅读她的文字是,我就好像同时在脑海中听到了她的声音似的。与此同时,这也把我带到了机器翻译的第二个问题:

一个NLP系统只能理解文本中直接包含的意义。

不幸的是,在真空中,机器学习专家无法进行交流。

这个书名真正的力量不是来源于书页上的内容,而是它在读者脑海里创造出来的感受和联想。

我们拥有自己的思想、生活经历以及我们对所读内容的感触。没有这样的上下文,机器是无法进行高阶理解的,这就让书名变得不可思议了。

例如,一只鸟生来会飞翔,飞翔是它最初的目标。可是,这只鸟却受到了限制,被剥夺了生存的理由,那么它也只能在绝望和发狂的时候歌唱了。它歌唱是因为它想要自由,一只鸟的活着的意义就是在这个世界上翱翔,所以这个书名中充满了哀伤。当然,如果你知道这个作家的过去以及在生活中她所经历过的悲伤,那么你就会明白她为自己的自传选这个名字的原因。

有些事情是无法简单利用聚类检测算法梳理出结果的。因为这些来源于人类的联想理解。

但是,还有一线希望。

让我们来看一下另一个很棒的书名,看看我们是否能从我们面前的这个题目中找出更多的意义。

2)午夜善恶花园(Midnight in the Garden of Good and Evil)

这个书名对于基本算法来说跟容易操作。这个题目明显运用了许多诸如押头韵这样的诗歌技巧,这个技巧主要就是重复诸如“g”这样的辅音。由于这个书名确确实实押了头韵,相比那些只是类似押头韵的技巧,系统应该能挑选出相应的模式。

这个书名使用了我称之为“对立单元”(union of opposites)的技巧。你试图在“The Song of Ice and Fire”和“Pretty Little Monsters”这些著名的书名中找出这种动态并列技巧,或者甚至在“War of the Roses”这样的书名中找到历史事件。花朵和毁灭不是对立事件,但是玫瑰非常容易被认为是积极情绪的象征,然而战争则是消极情绪的代表。一些好的书名就是根据这些原则创造出来的,例如《战争与和平》。

书名中还经常使用诸如“午夜”和“花园”这样唤起回忆和伤感的词语。这些词语在作者的脑海中创造出一幅既惊悚又甜美的生动画面。设计一个可以理解这些充满情感的词语是非常容易的,因为市场上早就已经有人挑选好了这些“重点词汇”(power words)。

鸽子哭泣的时候

虽然是构成这篇杰作的核心词,但是NLP系统难以处理模糊词,尤其是在科幻小说、文学作品、电影以及诗歌中的模糊词!

一个办法就是抓住一个基本句子是怎么构成的深层结构。如果你不够幸运,那么上小学的时候就要跟句型结构为伴,你需要学习如何把一个句子分割成小的单元。可是,虽然这对老师、编辑以及学数学的人来说很有意思,但你可能会惊奇地发现,对于作家而言,这却是司空见惯的折磨。

我讨厌语法!

那是因为我的作家朋友们和我都理解源于别处文字的真正的力量。一个办法就是检测修辞。这与检测什么样的措辞让人的内心如此煎熬的方法完全不同。

作者不再创造句型结构。

甚至,这些句子机器也不能理解,基本上就是错误的语法。但是,当你使用它的时候,你会停下来并且关注到这个错误。你必须停下一瞬间来处理这个错误,即使这个错误发生在无意识的水平上。在我希望你密切关注的一本非常棒的小的关键内容处,如果我停下来解决上述这样的问题,你作为一名读者可能会有更多的机会挑选出错误。

那就这样吧

好吧,对于两本The Jasmine Wars系列的书,可能我们都没有找到非常好的书名。

最终,我构思出了我自己书的名字,根据的是译名为《Invisible Planets,Through the Darkening Sky》的中国科幻故事。我想勾起一副风暴来临你无法逃脱的画面,你只能坚持住并且穿越风暴。顺便说一句,这下面是新书的封皮。我喜欢封面中的插画,这是Ignatio Bazan Lazcano这位了不起的画家画的。

但是,不要因为我用自动书名生成器取书名的失败经历而让你对NLP望而却步!

现在已经有数以亿计的资金投入到这个领域的研究中,该领域真正复兴时,应当会推出越来越多的诸如Google Translate以及数码助手这样的基础应用软件,甚至还应该推出耳塞式实时翻译机器。这是我们教授机器更好理解我们的关键。

如果你想学习更多内容,你可以看一下斯坦福大学有关NLP的课程。或者是一直关注这篇文章中的一些博客地址。我不会撒谎:这不是一件容易的事情。正如我们所看到的,语言和数学经常有矛盾。它们似乎存在于大脑的不同区域,这也就是为什么人们经常只能做好SAT考试中的一部分(数学或者英语)的原因。

此处有一个语言和数学的奇怪结合,它们相互缠绕在一起,就像是Haiku的5-7-5法则一样。我忍不住想到,如果系统遍览了人类历史上那些杰出的艺术和文学作品,将来的系统可能会发现所有隐藏的模式。可能在海量词汇下隐藏着某种模式,其运行的如此深入以至于作者也没有发现,除非是不经意间做梦梦到。

可能,只是可能,新型AI即将诞生!总有它凯旋歌唱的一天,全世界都随之附和。

请务必查看本系列的其余部分。

AI技术讲座精选:数学不好,也可以学习人工智能

AI 技术讲座精选: 数学不好,也可以学习人工智能(二)

AI 技术讲座精选:数学不好,也可以学习人工智能(三)

AI 技术讲座精选:数学不好,也可以学习人工智能(四)——图解张量

AI 技术讲座精选:数学不好,也可以学好人工智能(五)——深度学习和卷积神经网络

AI 技术讲座精选:数学不好,也可以学习人工智能(六)——巧用数学符号

原文链接:https://hackernoon.com/learning-ai-if-you-suck-at-math-p7-the-magic-of-natural-language-processing-f3819a689386

版权申明:该文章版权归AI100所有,如需转载、摘编、复制等,请后台留言征得同意。若有直接抄袭,AI100将追究其责任。

原文发布于微信公众号 - AI科技大本营(rgznai100)

原文发表时间:2017-04-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python开发者

基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和...

5286
来自专栏智能算法

主宰这个世界的10大算法

出自linux中文社区 链接:https://linux.cn/article-3125-1.html 什么是算法? 简而言之,任何定义明确的计算步骤都可称为算...

3698
来自专栏牛客网

算法工程师:非科班机器学习工程师养成计划虐心面试实录一点人生经验

这是一篇不太专业的算法工程师面经,希望能给非科班想要从事机器学习工作的同学或学弟学妹一些建议,同时也回馈给予我很大帮助的牛客网。目前拿到的offer有:网易、三...

9486
来自专栏斑斓

统计学中的相关性分析

掌握一点儿统计学介绍了统计学中常用到的函数,特别重点介绍了Standard Deviation(标准差)。接下来结合一个案例来谈谈相关性(Correlation...

3757
来自专栏BestSDK

主宰我们生活的10大算法,经久不衰

什么是算法? 简而言之,任何定义明确的计算步骤都可称为算法,接受一个或一组值为输入,输出一个或一组值。(来源:homas H. Cormen, Chales E...

2913
来自专栏大数据文摘

拓扑学——探寻大数据的内在模式

2115
来自专栏数据结构与算法

模拟退火算法

1600
来自专栏华章科技

烧脑:谷歌微软等巨头107道数据科学面试题,你能答出多少?

来自 Glassdoor 的最新数据可以告诉我们各大科技公司最近在招聘面试时最喜欢向候选人提什么问题。首先有一个令人惋惜的结论:根据统计,几乎所有的公司都有着自...

1041
来自专栏北京马哥教育

实战 | 用 Python 选股票,据说可以多挣个20%

本文将使用Python来可视化股票数据,比如绘制K线图,并且探究各项指标的含义和关系,最后使用移动平均线方法初探投资策略。 数据导入 这里将股票数据存储在sto...

5656
来自专栏量子位

早发arXiv可多获得65%的引用,但……

对研究人员来说,这么做主要有两个好处。一方面尽早占坑,另一方面可以绕过漫长的同行评议时间,加速圈内人交流工作进展。

914

扫码关注云+社区

领取腾讯云代金券