作者:郭晨晨 见知数据科技 (Xencio Data Technology) AI解决方案专家,全栈工程师。曾就职于央企研究院项目经理,负责智慧城市大数据等项目。曾联合创办Byoyo公司。2017年加入见知数据。
去年九月谷歌宣布了一个轰动翻译界的重大消息——神经网络被整合进谷歌翻译并实现了翻译质量的突破性进展。
现在在中国大陆访问谷歌翻译已不需要翻墙,每个人都可以轻松体验这一技术带来的实质性的便利。从实现效果来看,结果真的是非常的惊艳!那么这整合进去的神经网络究竟是什么,技术实现的逻辑是怎样的呢?我们今天就来好好分析解密一下。
实现此强大翻译功能的技术名称叫:循环神经网络(RNN)。在上篇“深度神经网络之美”中对RNN有简单介绍过,本次翻译界的突破就是基于它的进一步拓展应用,论文上称之为seq2seq。它用到两个RNN网络,分别是encode和decode。
seq2seq顾名思义就是sequence to sequence,也就是把一种语言的一段话先通过RNN编码成一个特殊的信息,然后再用另一个RNN去解码这段信息,最后生成另一个种语言的序列,这也就最终实现了翻译的过程。它的这种实现方式非常符合人类大脑的翻译过程。
举个例子,比如说我看到一段英文“Hello World!”,我的大脑接收到这段信息后,理论上就会在大脑的英文处理区神经元上产生某一种特殊的电讯号,这样我就理解了这句话的意思。然后下一步我需要将它用中文翻译过来,那么这一段电讯号就会被传到我的中文处理区域,最后在我脑海中生成对应的中文语句“你好,世界!”。可以看到,中间的这一段编码后生成的特殊的电讯号需要包含之前语言序列的所有信息,这个电讯号起到了一个非常重要的承上启下的作用。
在搭建整个模型之前我们需要做的,就是找到大量的训练数据进行训练,最好是一一对应的正确的中英文翻译句子,比如说电影双语字幕。如果我们要训练从英文翻译到中文,首先需要把英文的一个句子通过词嵌入技术变成一个固定维度的向量,然后把这个向量作为input输入到encode的循环神经网络(RNN)中去。因为RNN具有长短期记忆的能力,所以它就会自动的抽取一段话中的各种信息并不断向前传递,当通过最后一个神经元的层和层输出得到一个编码好的向量,这个向量就是包含了input所有信息的“密码”了。
下一步我们就需要用另一个循环神经网络(RNN)去解码这份信息并生成翻译的结果。decode的网络接收编码得到的向量将被作为一种输入,需要注意的是在训练的时候为了保证翻译的准确度还需要将正确翻译的语言序列错位输入进去。剩下就和一个普通的RNN网络一样了,比如输入是<go> 你 好 !,那么希望的输出就是你 好 !<end>。这里为什么要多一个输入进去而不是仅仅利用encode后的编码呢?接触过时间序列预测模型的人可能更有感触。因为时间序列是相互影响的,如果你前一个预测错了那么后面基本上也就一起全错了,而且往往会越错越离谱。对于翻译更是如此。
如果我们直接使用上一个翻译的结果来作为下一个翻译的输入那么一旦上一个翻译的结果不对后面的翻译肯定也会离的越来越远。所以在训练的时候使用类似监督学习的想法,带着decode网络一点点学显然是一个更准确且训练成本低的办法。decode网络中每一个RNN的神经元输出也是一个固定维度的向量,这个向量再通过词嵌入技术可以转化为要翻译目标语言词典个数数量维度的一个向量,然后这个向量中数值最大的那个值对应的词典中的词就是我们希望得到的正确翻译的词。如此一来有了优化的方向和目标,整个网络就构建完了。最后只要用大量的数据去训练出网络中的各个参数就好。
此外需要特别注意的一点是,decode层在训练后的实际使用时是不接收正确翻译词语作为input的(而且也不可能有嘛,否则还要翻译干嘛),它的input变成了encode的最终编码和自身的每一个神经元输出作为下一个神经元的输入。也就是用“你”来预测“好”,用“好”来预测“!”。
整个模型看下来其实最好的就是翻译可以完全不用语法,只要有对照样本就可以实现对任何语言的翻译。难怪以前听说谷歌内部流传的说法是组内每走一名语言专家,谷歌翻译的准确度就提高10%呢!
seq2seq这种模型给人一种启发就是利用中间编码把一种信息转变成另一种信息的理念。只要使用这种模型,我们就可以让机器自动的把金庸风格的小说变成古龙的,或者把一篇散文自动的生成一首对应的诗词。
可以举一个和我们的产品功能相关的一个例子,当我们依据行业通用指标来预测,当A这个小公司有B公司那么大规模时,它的资金结构和日均流水等现金流指标可以怎么做呢?
首先我要找到和原公司(简称A)同一领域的上市大公司(简称B)的现金流水。然后我可以以周为单位对A和B的流水进行配对,类似于[200,-300,700,60,80,-500,1000] ==> [2w,4w,-10w,9w,-25w,13w,77w,50w,-20w]。然后我把A公司的每个sequence通过encode层进行编码,获取A公司的现金流水特征,再将该编码输入到decode层辅以B公司的现金流sequence进行训练。训练完成之后我再输入A公司新的一周的现金流水信息,就可以预测得到如果A公司有B公司那么大规模时的现金流水的样子了。关键是,得到的数据是非常合理的,因为在模型的训练时我就已经利用了这两个公司的真实信息了,所以新的模型输出的流水就应该是既有A公司自身的特征又能够合理将其放大到B那个规模时可能有的资金结构和流水信息了。
是不是很神奇啊?Let’s do it!
作者: 郭晨晨 见知数据科技
见知数据科技 Xencio 是国内外领先的财务数据分析平台提供包括 收支智能分类、财务风险自动预警、应收系统智能对账、微信发票自助查询、审计现金流数据分析等功能模块并实现财务全自动化,全智能化的愿景。 见知数据目前已经积累了上百家大、中、小、集团企业,其中包括联合利华中国、默克中国、瑞华会计事务所 以及多家新西兰、美国的试营企业客户,其平台现金流流水已逾200万笔,超过1.2万亿。
图片来源:http://mashable.com/2016/11/30/facebook-blocks-prisma-live-video-filters/#cmgCYWY8OSq3