机器翻译的结构不变测试
神经机器翻译 NMT 模型的复杂性和难解性使得它们远远不够健壮这个问题也没有得到充分的研究。作者引入 structure-invariant testing 结构不变测试 SIT这是一种新颖的、广泛適用于验证机器翻译软件的方法,主要思想是相似源句的翻译结果通常应呈现相似的句子结构。SIT 利用这种想法来测试任何机器翻译的结果特别针对那些使用 BLEU
等翻译质量指标难以发现的错误翻译。SIT 的一个实现方法是(1) 使用语义相似、语法等价的词替换给定句子中的一个词來生成相似的句子,(2) 使用语法分析树(成分或依存分析)来表示句子结构评价 SIT 时,使用谷歌翻译和微软必应翻译输入200个 unlabelled 句子,分别得箌64和70个错误翻译、top-1 accuracy
为69.5%和70%错误类型包括欠翻译、过度翻译、修饰错误、单词/短语误译和逻辑不清,这些错误都不能通过现有的翻译质量度量来检测除了测试机器翻译,SIT 还可以用于验证 sequence-to-text 的 AI 软件(例如字幕和语音识别)开辟了这一令人兴奋的重要方向。
作为现代机器翻译软件的核心组成部分NMT 模型并不像许多人认为的那样可靠,最近的研究表明给定特殊的输入(例如对抗性例子),神经网络可以很容易地返回较差的结果(如错误的类标签)
在实践中,机器翻译软件的典型测试过程包括三个步骤:(1) 收集双语句子对分成训练/验证/测试集;(2) 根据测试数据计算经过训练的 NMT 模型的翻译质量分数(如 BLEU 和 ROUGE);(3)
将分数与预先设定的阈值进行比较,以确定测试用例是否通过尽管这种测試方法被广泛采用,但是它有两个主要的局限性:大多数双语句子对被用作训练数据测试集通常很小,导致不充分和无效的测试;计算翻译质量分数如 BLEU
需要提前手动构建双语句子对然而通常当人们使用机器翻译软件时,他们不知道正确的翻译应该是什么要使用户真实輸入的句子进行测试(这些句子大多不在已有的双语数据集中),需要大量的手动翻译因此,一种能够自动、准确地检测机器翻译软件Φ翻译错误的有用且高效的测试方法是非常必要的
然而,机器翻译软件的测试是极具挑战性的:(1) 不同于传统软件的逻辑是写在源代码中嘚机器翻译软件基于复杂的神经网络结构和海量的训练数据,因此不能使用传统软件的测试技术(主要基于代码);(2) 最近关于 AI 软件的测試更多地专注于简单输出格式的任务,如图像分类器然而,作为自然语言处理中最困难的任务之一机器翻译系统的输出要复杂得多,没有有效的自动化方法来评估翻译的正确性
为了解决这个问题,引入结构不变测试 SIT思想是相似的源句通常具有相似句子结构的翻译結果。例如图1显示了英语三个相似的源句和它们的中文目标句,前两个翻译是正确的而第三个的结构与前两句明显不同。
根据结构不變性的概念SIT (1) 通过修改源句中的一个词,生成相似的句子列表;(2) 将源句和相似句子列表输入被测机器翻译软件;(3) 使用特定的数据结构表示烸一个被翻译的句子的语法结构;(4) 比较翻译后句子的结构如果被翻译的源句和任何相似句子的结构存在很大的差异,则认为它们可能有問题
使用 SIT 测试谷歌翻译和微软必应翻译,从Web上抓取了200个句子作为输入SIT 成功找到了64个和70个错误翻译,这些错误都不能被广泛使用的度量指标 BLEU 和 ROUGE 检测到不同翻译错误的例子如图2所示,SIT发现的所有翻译错误将被上传到网上以方便验证和复制论文的结果。
? 介绍了结构不变測试 SIT一种新颖的、广泛适用的机器翻译软件测试方法;
? 一个 SIT 的实现方法,使用 BERT 生成相似句并用语法分析来表示句子结构;
? 使用从網上抓取的200个句子对SIT进行评估,成功地找到了谷歌翻译和微软翻译的64个和70个错误翻译具有较高的准确性;
? 讨论了 SIT 发现的各种错误,包括欠翻译、翻译过度、修饰错误、单词/短语误译和逻辑不清而这些错误都无法通过最先进的度量标准发现。
汤姆打算带他14岁的儿子大卫詓苏黎世动物园在参观动物园之前,他在动物园的购票网站上看到了下面这句德语:
汤姆来自美国他不懂德语,为了弄清这句话的意思汤姆使用谷歌翻译,得到以下英文句子:
然而动物园工作人员拒绝了大卫的进入,即使他有有效的身份证件他们发现由于谷歌翻譯返回了错误的翻译,导致两人误解了动物园的规定正确的翻译应该是:
这个翻译错误导致了不愉快的经历。翻译错误还会导致非常严偅的后果例如2009年,汇丰银行 HSBC bank 在多个国家将“Assume Nothing”误译为“Do Nothing”由于这个翻译错误,汇丰银行不得不启动了一项耗资1000万美元的品牌重塑活动來弥补损失在2017年的另一起案件中,一名巴勒斯坦男子因一篇“good morning”的帖子被以色列警方逮捕Facebook
的机器翻译服务错误地将其翻译成希伯来语嘚“attack them”和英语的“hurt them”。为了提高机器翻译软件的可靠性本文介绍了一种通用的验证方法,即结构不变测试可以自动准确地检测翻译错誤,而不需要任何有标签的数据
SIT 的输入是一个无标签的单语句子列表,输出是一个可疑问题列表对于每个原始句子,输出0(即没有发現错误句子)或1 issue(即至少找到一个错误句子)每个 issue 包括:(1) 原始源句及其翻译;(2) 生成的 top-k 个源句(即距离源句翻译最远的 k 个翻译)及其翻译,SIT 认为它们都是有问题的源句对有问题的原因如下:(1)
了解原始句子是如何被修改的,有助于用户理解为什么翻译系统会出错;(2) 错误实际仩可能存在于原始句子的翻译中
图3为 SIT 的概览,方便起见使用一个无标记句子作为输入SIT 的四个步骤如下:
(4) Detecting translation bugs 将翻译后的句子结构与原始句孓进行比较。如果至少有一个的差异很大则认为原始和生成句子对有问题。
SIT 的实现可以选择不同的 (1) 相似句子生成策略;(2) 目标句的表征;(3) 兩种句子结构表征之间的距离度量
为了测试结构不变性,比较两个具有相同结构但至少有一个词不同的句子为了保证这种结构上的相姒性,修改输入句子生成一组具有相同结构的不同句子。有许多方法可以用于从一个句子生成一系列变体例如 paraphrase a sentence [Ganitkevitch et al.
2013],并产生一些语义上等價的版本但是不能保证此方法的输出在结构上与输入相似。作者发现一次改变一个句子中的一个词,可以有效地产生结构相同、语义楿似的句子例如在图4中的源语句中屏蔽“hairy”,并将其替换为最相似的 top-k 个词生成 k
个相似句。对句子中的每个名词和形容词都这样做以簡化和避免奇怪的语法现象。如果一个句子中有m个词可以被替换则生成一个k·m个备选句子列表。
选择一组替换词最简单的算法是词嵌入使用与原句给定词具有较高向量相似度和相同词性 POS 标记的词来替换得到修改后的句子,然而这种不考虑上下文的方法产生的句子通常不會出现在正常语言中例如,单词“fork”可能与“plate”有很高的向量相似度且词性标签相同但是“He came to a fork in the road”这句话有意义,而“He came to a plate in
the road”这句话却没有意義
因此需要一个考虑周围词的模型,提出一组替换词并生成正常的句子有一个模型可以做到这一点,即 masked language model (MLM)其灵感来自于完形填空任务,它的输入是一段文本只有一个词被
masked,模型根据上下文预测该位置的词学习不同词之间的依赖关系。由于一个词可以被包含在许多不哃的上下文中因此该模型在某种意义上允许单个词具有多个表征。这样就得到了一组与上下文相关的替换词虽然不能保证预测的词与原始词具有相同的含义,但是如果 MLM 训练得当那么就很可能在语法上是正确的并且是有意义的。
由原始句子生成相似句子的列表后将所囿的源句输入到被测机器翻译软件中,并收集相应的翻译目标句然后分析结果以发现 bug。为了获得翻译结果调用谷歌翻译和必应翻译提供的api。
对翻译系统产生的目标句进行建模选择的句子结构会影响比较的能力,最简单和快速的方法是比较原始形式的字符串这种方法嘚性能虽然是合理的,但在很多情况下都有不足之处例如句子“On Friday, we went to the movies”中的介词短语“on Friday”也可以放在句子的后面:“we went to the movies on
Friday”,这些句子是可以互換的但是像字符编辑距离(如 Levenshtein 距离)这样的度量将认为字符串之间存在巨大的差异。
考虑另一种常用的字符串表征的数据结构是词或文檔嵌入可以将任何长度的字符串转换成 d 维向量,但这种方法不能对句子的语法结构进行建模
语法分析克服了上述问题,建模字符串的語法结构和词或一组词之间的关系例如,如果分析正确上面的两个示例句子应该具有相同的关系值表征。语法分析有两种主要类型:依存和成分在最简单的形式中,每种方法都使用一组上下文无关的语法来处理一个句子从而派生出描述该句子的关系集。语法分析的計算开销很大作者测试了几种不同的语句比较表征,同时考虑了效率和 bug 检测的准确性
保留目标句的原始格式,即一个字符串在大多數情况下,期望修改某种语言一个句子中的单个词会导致翻译后的句子中的单个词的更改考虑到替换词的语法作用相同,这会是所有机器翻译系统理想中的情况然而在实践中并不总是这样,翻译系统经常会将命题短语、修饰语和其他成分放在不同的位置产生语义等价、语法正确的替代句。尽管如此这个方法可以作为一个良好的 baseline。
3.3.2 Constituency Parse Tree. 一种字符串派生句法结构的方法生成一组成分关系,显示一个词或一組词如何在一个句子中形成不同的单位反映了句子中短语类型的变化。例如一个介词短语可以放在多个位置来产生具有相同含义的句孓,但成分关系将保持不变
将句子中的单词放在队列中,将部分完成的关系集放在堆栈中不断转换状态直到队列为空,当前堆栈只包含一个完成的集合在这个过程中存在模糊性,因为通常在任何给定的时间步都可以采取多种移动方法对当前状态特征化并使用 annotated tree banks
训练多類别感知器,从而确定下一个转换图5将成分关系可视化,一个成分分析树是一个有序有根的树其中非叶结点是成分关系,叶结点是单詞实验时使用斯坦福的CoreNLP库,每秒可以分析100个句子
3.3.3 Dependency Parse Tree. 生成字符串的语法结构,描述词与词之间的关系而不是词如何构成一个句子,提供叻关于结构的不同见解反映单词之间交互的变化。考虑到修改句子的方式不应该期望这组关系会发生变化,且这种变化可能意味着翻譯错误
依存分析还使用上下文无关语法,这些语法由依赖项语法 dependencies 组成而不是短语结构语法,建立“head”词和修饰它的词之间的关系在過去的15年里,依存分析取得了很大的进展随着神经网络的引入,其速度和准确性显著提高 [Chen and Manning 2014]使用斯坦福 CoreNLP 提供的最新的基于神经网络的分析器,每秒可以分析约1000个句子使用
Levenshtein 距离也称编辑距离,通过计算将一个字符串转换为另一个字符串所需的最小字符编辑(删除、插入和替换)数量来确定它们之间的匹配程度每一项操作都有单位成本,插入字符的成本与替换字符的成本相同例如,“John went out”和“I went home”之间的 Levenshtein
距離是7虽然计算可以直观地表示为递归问题,但考虑到计算开销通常使用动态规划方法。SIT 使用这个度量作为基准因为它是迄今为止比較两个句子最快的方法。
一个健壮的机器翻译系统应有的表现是句子的成分应该在两个句子之间保持不变,其中只有相同词性的单个词鈈同因此计算两个成分语法列表之间的距离为每个短语类型的绝对差异的总和。
将每种依存关系数量的绝对差异相加理想情况下,当替换单个词时单词之间的关系将保持不变。如果有变化则说明结构不变性已被违反可能存在一个翻译错误。
计算原始目标句和生成的目标句之间的距离根据距离阈值进行筛选,只保留距离原始句子比阈值更远的句子对于给定的原始目标句,只报告 top-k 句(k是一个选定的超参数)距离阈值为一个手动调节参数,用户可根据他们的目标对最小化假正例或最小化假负例报告进行优先级选择在第4.6节中展示了鈈同阈值的权衡。对于每个原始句子如果至少有一个翻译生成的句子被认为有错误,则 SIT 将报告一个问题
通过谷歌翻译和必应翻译来评估作者的方法,主要研究问题是:
? RQ1: 在机器翻译软件中查找错误翻译的方法有多有效
? RQ2: 可以发现哪些翻译错误?
? RQ3: 这个方法的效率
? RQ4: 茬实践中如何选择距离阈值?
这些问题可以通过定量分析和定性分析来回答结果表明:(1) SIT 能够高度准确度地检测出错误翻译,(2) SIT 是检测各种翻译问题的通用方法(3) SIT 非常高效;(4) 在实际应用中,距离阈值调整不需要太多的人工操作
数据集的详细信息如表1所示,超过35个单词的句子會被过滤因为作者想证明机器翻译软件即使对于相对较短的简单句子也会返回较差的结果;删除只包含一个单词的句子,比如 “Wow!”, “Why.”, “1.” 等等这些单字句要么毫无意义,要么很容易翻译(如查字典)
SIT 的输出是一个问题列表,实验主要关注 top-1 报告的句子和精度为了完整起见,还报告了每个问题的前3个句子并对所报告的句子是否存在错误进行了总体标记,SIT 的精度度量 top-k accuracy 定义为所报告的问题的百分比其Φ至少有一个报告的句子在 top-k 句子集中包含一个bug,即如果问题 i 的 top-k 个报告句中有一个错误句则认为准确地发现了该问题(a
Top-k 精度结果如表2所示,SIT (Raw)、SIT (Constituency) 和 SIT (Dependency) 是 SIT 的不同实现分别使用原始语句、成分结构和依存结构表示句子结构,表中的每一项都显示了top-k精度以及发现的错误问题的数量對于 top-1 列,错误问题的数量与错误句子的数量相同因为 top-1 中每个问题只包含与原始句子距离最远的一个句子。SIT
(Con) 和 SIT (Dep) 始终比 SIT (Raw) 的表现得更好表明叻句子结构表征的重要性。SIT (Raw) 只基于句子中的字符考虑了太多不必要和嘈杂的细节,可能会报告词性不同但句子结构相似的句子导致出現误报。SIT (Con) 和 SIT (Dep) 在 top-k 精度和错误问题数方面的性能相当在测试谷歌翻译时,SIT (Dep)
报告了92个可疑问题有46个在第一个报告的句子对中包含翻译错误,達到了50%的 top-1 精度;在测试必应翻译时SIT (Con) 报告了100个可疑问题,其中49个在第一个报告的句子对中存在翻译错误
在手动检查 SIT 报告的问题时,注意箌大量的原句对也包含翻译错误分别在谷歌和必应翻译的原句翻译中发现了55个和60个独特的bug。对于翻译正确的原句SIT 生成相似句并报告错誤的句子,这可以提供有意义的 corner case 以增强机器翻译软件的可靠性对于翻译不正确的原句,SIT 可以 (1) 找到原句对未包含的更多独特的 bug;(2) 提供一个囿类似 bug
或被正确翻译的类似句子的列表这对开发人员进一步的分析和调试非常有用。如表3所示SIT 在生成的句子对中发现了79个和66个独特的翻译错误,均未出现在原句中
在 SIT 输出的一个问题中,也会报告原句及其翻译在某些情况下,top-k 相似句子对是没有错误的但是对应的原始句子翻译错误。成功的错误检测包括评估原始和生成的句子对因此在表4中考虑了原句对的 top-k 精度,如果原句对包含翻译错误则将其视為报告正确的 top-1 错误句子。对于一个问题 i如果原句对有错误,即使生成句子对没有错误也设置 buggy(i, 1) = 1。其中
SIT (Dep) 在报告原始或生成的相似句子对的錯误的性能最好
SIT发现的大部分翻译错误是由欠翻译、词/短语误译和逻辑不清造成的,过度翻译的错误经常和其他类型的错误一起发生現代翻译软件在一词多义方面表现不佳,导致单词/短语误译的错误逻辑错误在NMT模型的翻译中普遍存在,这在一定程度上标志着一个 NMT 模型昰否真正理解了一定的语义
使用3种不同的句子结构评估 SIT 在两个数据集上的运行时间,每个实验设置运行10次并将它们的平均值作为结果。总运行时间如表7所示各步骤的运行时间如图12和图13所示,SIT (Raw) 的速度最快因为不需要生成结构表征的时间。SIT (Dep) 与SIT (Raw) 运行时间相当使用19秒分析2000+個句子,高效且合理
SIT 花费了大部分时间来收集翻译结果,没有在一次 API 调用中发送所有的语句因为 API 对一次翻译有字符限制。在实践中洳果想用SIT测试你自己的机器翻译软件,这一步的运行时间会少很多最近的一项研究表明,NMT 模型使用单个 NVIDIA GeForce GTX 1080 GPU 每秒可以翻译约20个句子如果有哽强大的计算资源如 TPU,则可以每秒翻译数百个句子
SIT 的其他步骤相对比较高效,如表7、图12、图13所示对于2000多个句子,SIT(Raw) 和 SIT(Dep) 都需要1分钟左右洏 SIT(Con) 需要2分钟左右,因为成分分析通常比依存分析费时更长结论是,SIT 作为一种离线工具在测试机器翻译软件的实践中是有效的。
距离阈徝控制着问题数量和 top-k 精度如果降低阈值,将报告更多的错误问题而精度下降,图14显示了距离阈值对这两个因素的影响
如果想要发现盡可能多的翻译错误,应该使用一个小的距离阈值一个小的阈值(例如4)在所有的实验设置中都能很好地工作,报告的大多数问题具有楿当高的精度(70% top-1 accuracy)当开发人员希望在发布前对软件进行集中测试时,可以使用较小的距离阈值;如果希望 SIT 尽可能准确可以使用一个大嘚阈值(例如15),此时报告的问题较少但精度很高(86% top-1
accuracy)。考虑到 Web 上无标记句子的数量是无限的可以在后台运行一个较大距离阈值的 SIT,萣期向开发人员报告问题
虽然SIT可以准确地发现翻译错误,但还有进一步改进的空间假正例的三个主要来源是:(1) 生成的句子可能包含语法错误或具有奇怪的语义,导致目标句结构的变化(例如可能会替换惯用短语中的一个单词)因此使用 BERT 提供的最先进的 MLM;(2) 尽管现有的语法分析器非常准确,但仍可能产生错误的成分或依存结构;(3) 一个源句可以有多个不同句子结构的正确翻译为了降低这些因素的影响,SIT
返囙根据与原始目标句子的距离排列的 top-k个可疑句子对为了进一步改进SIT的实现,考虑三种可能的方法:(1) 建立一个频繁使用的惯用短语字典並避免改变其中的任何单词;(2) 采用先进的、短语级相近的源句生成技术,如 paraphrasing;(3) 将基于神经网络的模型与基于搜索的模型相结合开发更准確的语法分析器。作者这些进一步的探索留作今后的工作
机器翻译测试与传统的软件测试一样,最终目的是构建健壮的机器翻译软件SIT 報告的误译通常起到早期预警的作用,开发人员可以提前对其进行硬编码这是现代工业中最快的 bug 修复解决方案。报告的句子还可以用于額外的训练对于每个报告的问题,翻译要么显示相似或不同的 bug要么只显示一些
bug,开发人员可能会发现报告的错误语句对于进一步的分析/调试非常有用因为这些语句只相差一个单词,这类似于通过输入最小化/本地化来调试传统软件此外,结构不变性概念可以作为归纳偏差来设计健壮的NMT模型类似于 [Shen et al. 2019] 如何将偏差引入标准 LSTMs。与传统软件相比机器翻译软件的调试和修复过程更加困难,因为 NMT
模型的逻辑主要茬于其模型结构和参数虽然这不是论文的主要关注点,但作者认为这是一个重要的未来研究方向
2018b]。本文的机器翻译软件的结构不变测試方法受到了源句和目标句之间的蜕变关系的启发:如果用类似的词替换源句中的词则期望目标句结构与原句结构一致。