跨语言之间的对抗博弈,该如何演绎?| 论文访谈间 #08

利用非平行双语语料构建双语词典是一项长期存在的跨语言任务。其实现过程一般需要跨语言信息(如种子双语词典)作为监督信号来建立双语词汇之间的翻译关系,但对于完全缺乏双语资源的小语种和专门领域来说,获取其跨语言信息十分困难,那么如何在不使用任何跨语言监督信号的情况下通过无监督方法构建双语词典呢?来自清华大学的张檬博士、刘洋老师、栾焕博老师和孙茂松老师发表在 ACL2017 上的论文“Adversarial Training for Unsupervised Bilingual Lexicon Induction”利用生成对抗网络(GAN)实现了双语词典构建任务,并取得了良好效果。 

众所周知,词是构成语言的基本单元,词表示方法的改进对很多自然语言处理任务产生了显著影响,词向量(word embedding)因其能够获取语言中的规律而被广泛使用。前人的工作发现利用两种语言的单语语料训练的词向量空间存在近似同态性(如图 1 所示),因而可以使用一个线性映射把这两个向量空间联系起来。那么如何得到这个线性映射呢?在前人的工作中,往往需要使用大量种子翻译词对作为监督信号来学习这个线性映射,而这篇论文则是要针对完全不使用任何双语监督信号的场景,作者需要设计方法来对联系两个向量空间的线性映射进行有效学习,这是本文工作中最大的研究挑战。

▲ 图 1:西班牙语和英语的词向量空间表现出的近似同态性

这篇论文中的方法灵感来自于当前机器学习领域大热的生成对抗网络(GAN),作者针对本文任务设计了生成器 G 和鉴别器 D 之间的对抗游戏,其基本形式如图 2(a) 所示(unidirectional transformation model)。图中,方块代表源语言词向量,圆点代表目标语言词向量。源语言词向量通过 G 映射到目标语言的词向量空间后,如果鉴别器 D 无法分辨出映射过来的词向量与原本属于目标语言的词向量,则说明映射 G 成功把两种语言的词向量空间联系起来了,如果 D 能够分辨,则 D 可以指导 G 如何改善。G 和 D 这种互相竞争、共同进步的关系使得本文的方法不依赖种子双语词典。

▲ 图 2:对抗学习模型架构:(a) 为基本模型(unidirectional transformation model),(b) 为bidirectional transformation model,(c) 为adversarial autoencoder mode

在介绍扩展模型之前,需要明确生成器 G 的构成。这篇论文中的生成器是一个矩阵,而将其约束为正交矩阵有助于训练成功。为了更大程度地节省训练时间,降低训练难度,作者设计了图 2(b)(bidirectional transformation model)和图 2(c)(adversarial autoencoder model)所示的两种扩展模型,这两种模型放宽了正交约束。在如图 2(b) 所示的双向转换模型(bidirectional transformation model)中,生成器 G 将源语言词向量映射到目标语言的词向量空间中,G 的转置也能够将目标语言词向量映射回源语言的词向量空间中去。在如图 2(c) 所示的对抗自编码模型(adversarial autoencoder model)中,生成器 G 将源语言词向量映射到目标语言的词向量空间中输出后,利用 G 的转置将映射回去以重构源语言词向量。将源语言词向量与重构的词向量进行相似度计算(cosine 夹角)加入到生成器的损失函数中。

在实验设计上,作者分别与基于解密的 MonoGiza 系统和基于种子翻译词对的Translation matrix (TM) 和 Isometric alignment (IA) 方法进行了比较,在实验过程中需要保证的是,这些方法输入的词向量与本文中模型的输入一致,均为利用 word2vec 的 CBOW 模型训练得到的词向量。结果发现,MonoGiza 系统的准确率很低,对抗自编码模型(adversarial autoencoder model)则能达到较高的准确率,而基于种子翻译词对的 TM 和 IA 方法若想达到与该模型相同的准确率,需要大量的种子翻译词对。除此之外,作者还探究了词向量维度对实验结果的影响以及大规模数据下模型的表现情况。

对话作者 

关于这篇论文的创新点,作者提到除了上述两个扩展模型的设计之外,另一个创新点是尝试探索了多种训练技术。首先是对鉴别器 D 进行正则化。鉴别器 D 采用标准前馈神经网络,作者尝试了为其输入加入不同类型的噪声,如 dropout、Additive Gaussian noise、Multiplicative Gaussian noise,最后发现最有效的方式是 Multiplicative Gaussian noise。另外,作者发现,在训练结束时保存的模型并不能达到良好的效果,所以为了选择效果最好的模型,作者观察了训练轨迹(如图 3 所示),发现生成器的损失呈现剧烈下降的位置对应的分类正确率下降,这说明该位置通常对应着效果好的模型。有趣的是,重构源语言词向量的损失和的值也呈现同步下降现象。作者表示在实验过程中最大的问题是训练不稳定,为解决这个问题,作者在模型设计和训练技术上进行了多种探索和尝试,并在训练过程中多输出信息以便观察,对一些特别的现象进行分析,这也是作者分享的心得体会。

▲ 图 3:对抗自编码模型的典型训练轨迹

关于模型的应用场景与意义,作者提到,双语词典本身有很多应用场景,一方面它可以直接供人参考,另一方面它是计算机许多跨语言处理任务的重要资源,如机器翻译、跨语言检索、跨语言模型迁移等。而本方法的无监督性质为完全缺乏双语资源的小语种和专门领域开辟了与其他语言连接的可能。此外,只使用单语语料就能构建双语词典意味着语言在词汇层面的某种同态性,佐证了人类语言在概念表示上可能存在的一致性。

来源:paperweekly

原文链接

时间: 2024-08-31 23:46:47

跨语言之间的对抗博弈,该如何演绎?| 论文访谈间 #08的相关文章

求同存异,共创双赢 - 基于对抗网络的利用不同分词标准语料的中文分词方法 | 论文访谈间 #06

在中文信息处理中,分词(word segmentation)是一项基本技术,因为中文的词汇是紧挨着的,不像英文有一个天然的空格符可以分隔开不同的单词.虽然把一串汉字划分成一个个词对于汉语使用者来说是很简单的事情,但对机器来说却很有挑战性,所以一直以来分词都是中文信息处理领域的重要的研究问题.  如今 90% 乃至 95% 以上的中文分词准确率已不是什么难题,这得益于模型和算法上的不断进步.在传统 CRF 中,特征需要人工设定,因此大量繁杂的特征工程将不可避免.近几年深度学习的发展给很多研究问题带

Java跨语言调用实现方案

Java 跨语言实现方案 背景: 在大型分布式 java 应用中,为了方便开发者,通常底层的 rpc 框架都会做一些调用的封装,让应用层开发人员在开发服务的时候只用编写简单的 pojo 对象就可以了,如流行的 spring remoting , jboss remoting 等等,都有这样的效果. 随着业务的需要,可能上层应用希望采用非 java 技术,如 php , ruby on rails ,而由于 java gc 和内存模型的限制,可能有的底层服务又需要采用更高性能和更加灵活的技术,如果

.Net下如何跨语言调用Delphi写的报表引擎

我去年上半年之前一直使用的是Delphi,公司在这上面也积累了很多公共资源.在06年9月实现了一个 功能强大的报表引擎,公司到现在基本每个项目组都在使用它做报表.现在在.Net下,使用 OpenExpressApp,暂时也没有足够精力去重新开发一个报表引擎(OpenReport),所以就想到先重用以前 的报表引擎. 下面就介绍一下如何在WPF中使用Delphi下的功能. 封装Delphi引擎为一个OCX控件 之前的报表引擎是基于Delphi下的,在跨语言应用下,最容易想到的就是使用ActiveX

跨语言和跨编译器的那些坑(CPython vs IronPython)

代码是宝贵的,世界上最郁闷的事情,便是写好的代码,还要在另外的平台上重写一次,或是同时维护功能相同的两套代码.所以才需要跨平台. 不仅如此,比如有人会吐槽Python的原生解释器CPython跑得太慢,或想让Python在.NET或JAVA虚拟机上运行,便开发了IronPython和Jython这样的工具. Jython我并不了解, 就说说Irpy吧,开放源代码,并有动态语言运行时(DLR)加持,这样牛逼的代码焉有不看?!于是看了小一个礼拜,云里雾里,确实还是自己能力有限. 跨语言 回到之前"最

苹果机器学习期刊「Siri 三部曲」之一:通过跨带宽和跨语言初始化提升神经网络声学模型

近日,苹果 Siri 团队在苹果机器学习期刊上连发三文<Improving Neural Network Acoustic Models by Cross-bandwidth and Cross-lingual Initialization>.<Inverse Text Normalization as a Labeling Problem>.<Deep Learning for Siri』s Voice: On-device Deep Mixture Density Net

Hprose 高性能跨语言 RPC —— 微服务首选引擎

Hprose 是高性能远程对象服务引擎(High Performance Remote Object Service Engine)的缩写 -- 微服务首选引擎. 它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件.它不仅简单易用,而且功能强大.你只需要稍许的时间去学习,就能用它轻松构建跨语言跨平台的分布式应用系统了. 它提供了高效的序列化和反序列化库,并在此基础上提供了方便灵活的 RPC 引擎. Hprose 支持众多编程语言,例如: AAuto Quicker Action

Apache Thrift - 可伸缩的跨语言服务开发框架

http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/   前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大,传输效率低,JSON 体积较小,新颖,但还不够完善.本文将介绍由 Facebook 开发的远程服务调用框架 Apache Thrift,它采用接口

转 比较跨语言通讯框架:Apache Thrift和Google Protobuf

    前两天想在微博上发表一个观点:在现在的技术体系中,能用于描述通讯协议的方式很多,xml,json,protobuf,thrift,如果在有如此众多选择的基础上,在设计系统时,还自造协议,自己设计协议类型和解析方式,那么我只能说,您真的落后了,不是技术上,而是思想上.对于xml,和json我们不做过多描述了,参考相关文档就可以了.特别是json,如今在 web系统,页游系统的前后台通讯中,应用非常广泛.本文将重点介绍两种目前在大型系统中,应用比较普遍的两种通讯框架,thrift和Proto

c语言与c++语言之间的相互转化

问题描述 c语言与c++语言之间的相互转化 struct student*p0 scanf("%s",p0->num) scanf("%s",&p0->name) 解决方案 C++也能兼容C,直接编译看有没有什么语法错误 解决方案二: 对的,C++编译器本来就支持几乎所有C语法 你为何还需要改 C --> C++ #include scanf("%s",p0->num); --> std::cin >&