免费英语句子分析器(机器翻译的结构不变测试)
摘要
近年来,机器翻译软件越来越多地融入到我们的日常生活中。人们经常在各种应用程序中使用机器翻译。然而,为现代机器翻译提供动力的神经机器翻译(NMT)模型的复杂性和难处理性使得这些系统的鲁棒性难以评估,更难以保证。机器翻译系统返回低质量的结果会导致误解、医疗误诊、人身安全威胁或政治冲突。尽管其明显的重要性,确认机器翻译系统的鲁棒性是非常困难的,因此,还没有充分的探索。
为了解决这个问题,我们引入了结构不变测试(SIT),一种新的蜕变测试方法来验证机器翻译软件。我们的主要观点是“相似”的原句翻译结果应该典型地表现出相似的句子结构。具体来说,SIT(1)通过将给定句子中的一个词替换为语义相似的词来生成相似的源句;(2)通过语法解析树(通过选区或依赖解析获得)表示句子结构;(3)报告结构数量差异超过某个阈值的句子对。为了评估 SIT,我们使用它来测试谷歌翻译和微软必应翻译,输入 200 个源句,导致 64 个和 70 个 bug,分别是 69.5%和 70%的 top-1 准确率。翻译错误多种多样,包括翻译不足、过度翻译、修改错误、词/短语误译、逻辑不清等。
1 介绍
机器翻译软件在过去的十年中得到了快速的发展:现在用户在各种应用中都依赖机器翻译,比如在国外留学时签订租赁协议、向外国医生描述症状,以及用外语阅读政治新闻。2016 年,谷歌翻译作为使用最广泛的在线翻译服务,吸引了超过 5 亿用户,每天翻译超过 1000 亿字。除此之外,机器翻译服务也嵌入到各种应用软件,如 Facebook 和 Twitter。
机器翻译的发展在很大程度上可以归因于神经机器翻译(NMT)模型,它已经成为许多机器翻译系统的核心组件。根据谷歌和微软的研究报告,就精确度而言,最先进的 NMT 模型正在接近人类水平,即 BLEU。这些最近的突破使得用户开始在日常生活中依赖机器翻译软件(如谷歌翻译和微软必应翻译)。
然而,NMT 模型并不像许多人认为的那样可靠。近年来,以神经网络为核心的软件系统中出现了次优和错误输出的现象。典型的例子包括自动驾驶汽车、情绪分析工具和语音识别服务。这些最近的研究成果表明,神经网络可以很容易地在给定特定的输入(例如,对抗样本)的情况下返回较差的结果(例如,错误的类标签)。NMT 模型也不例外,他们可能会被对抗样本或自然噪音(例如,输入句子中的拼写错误)所愚弄。这些较差的结果(即,次优或错误的翻译)会导致误解、尴尬、经济损失、医疗误诊、对个人安全的威胁或政治冲突。因此,保证机器翻译软件的鲁棒性是一项重要的工作。
然而,测试机器翻译软件是极具挑战性的。首先,机器翻译软件不同于用源代码编码的传统软件的逻辑,它基于复杂的神经网络,有数百万个参数。因此,传统软件(大多基于代码)的测试技术是无效的。其次,测试人工智能(Al)软件的最新研究关注于具有更简单输出格式的任务——例如,测试图像分类器,它输出给定图像的类标签。然而,作为最困难的自然语言处理(NLP)任务之一,机器翻译系统(即翻译的句子)的输出要复杂得多。因为它们不是用来处理这种复杂输出的,所以当应用到 NMT 模型时,典型的 Al 测试方法几乎只能找到“非法”输入,比如有语法错误或明显拼写错误的句子,而这些句子不太可能作为输入给出。然而,这些错误并不是在实践中出现的问题;微信是一个月活跃用户超过 10 亿的社交应用,据报道,其嵌入的 NMT 模型即使在句法正确的情况下也会返回较差的结果。由于很难建立一个有效的、自动化的方法来评估翻译的正确性,目前的机器翻译软件测试方法有很多缺点。
试图解决上述问题的方法仍然有其自身的缺陷——即,无法检测语法错误和缺乏真实世界的测试用例。目前机器翻译软件的测试程序一般包括三个步骤:(1)收集双语句子配对和将它们分为训练数据、验证数据和测试数据;(2)计算训练好的 NMT 模型对测试数据的翻译质量分数(如 BLEU 和 ROUGE);(3)比较分数与预定义的阈值,以确定测试用例是否通过。然而,基于像 BLEU 这样的阈值分数的测试,很容易忽略语法错误。BLEU 是对目标和参照的 n 个字母重叠程度的衡量。另外,在计算翻译质量分数(如 BLEU)时,需要输入双语句子对,事先手工构建。要使用训练集之外的真实用户输入进行测试,需要大量的手工工作来进行基础真值翻译。因此,迫切需要一种能够自动检测机器翻译软件中的错误的有效的测试方法。
为了解决上述问题,本文引入了结构不变测试(SIT),这是一种新颖的、广泛适用的机器翻译软件验证方法。关键的洞察力是类似的来源句子——一个单词不同的句子通常会有相似的句子结构的翻译结果。例如,图 1 展示了三个相似的英语源句和汉语目标句。前两个翻译是正确的,而第三个则不正确。我们可以看到,汉语中第三句的结构与其他两句有明显的不同。对于每一个源句,SIT(1)通过 NLP 技术(即 BERT[19)修改源句中的一个单词,生成一个类似的句子列表;(2)将所有的句子输入待测软件,获取译文;(3)使用专门的数据结构(即选区解析树和依赖解析树)来表示每个翻译句子的语法结构;(4)比较翻译后的句子结构。如果译文的原句和任何一个修改后的句子在结构上存在较大的差异,将修改后的句子和原句一起报告为潜在的错误。
图 1.类似源句和谷歌翻译结果的例子
他们使用 SIT 测试谷歌翻译和微软必应翻译,从网上抓取 200 个源句作为输入。SIT 成功地发现谷歌翻译中 64 个 bug 和微软必应翻译中 70 个 bug(分别为 69.5%和 70%的 top-1 准确率)。报告的错误多种多样,包括翻译不足、过度翻译、不正确的修改、单词/短语错译和逻辑不清楚,这些都不能被广泛使用的度量指标 BLEU 和 ROUGE 检测到。
本文的主要贡献如下:它介绍了结构不变测试(SIT),一种新颖的、广泛适用的机器翻译软件验证方法;它描述了一个 SIT 的实际实现,通过采用 BERT 来生成相似的句子,并利用语法分析器来表示句子结构;仅用从网上抓取的 200 个源句就对 SIT 进行了评估,成功地找到了谷歌翻译中的 64 个 bug 和微软必应翻译中的 70 个 bug,且准确率很高;它讨论了由 SIT 发现的各种错误类别,其中没有一个可以被最先进的度量标准发现。
2 方法和实现
本节将介绍结构不变测试(SIT)并描述其实现。SIT 的输入是一个未标记的单语句子列表,而输出是一个可疑问题列表。对于每个原始的句子,SIT 报告 0(即,没有发现错误的句子)或 1 个问题(即,至少发现了一个错误的句子)。每个问题包含:(1)原句及其译文;(2)top-k 生成的原句及其译文。原句对被报道的原因如下:(1)观察原句是如何被修改的可能可以帮助用户理解翻译系统出错的原因;(2)实际上,错误可能在于原句的翻译。图 2 说明了 SIT 的概述。在这个图中,为了简单和清晰,使用一个源句作为输入。SIT 的关键洞见是相似的源句往往具有相似的句法结构的目标句。基于这一见解,SIT 实施了以下四个步骤:
(1)产生类似的句子。对于每个源句,通过修改句子中的一个单词来生成一个类似句子的列表。
(2)收集目标句子。将原始的和生成的相似的句子输入被测机器翻译系统,并收集它们的目标句子。
(3)表示目标句子结构。所有的目标句都被编码为专门用于自然语言处理的数据结构。
(4)检测翻译错误。将译出的修饰句的结构与句子的结构进行了比较,如果结构之间有很大的差异,SIT 报告一个潜在的错误。
图 2.SIT 的概述
2.1 产生类似的句子
为了测试结构的不变性,必须比较两个句法结构相同但至少有一个标记不同的句子。研究发现,给定一个输入句子,在一定的约束条件下,一次改变句子中的一个词,可以有效地生成一组结构相同、语义相似的句子。
显式地,他们采用的方法是修改输入句子中的单个标记,用另一个具有相同词性的标记(POS)替换它,从而生成一个备用句子。对句子中的每一个候选标记都这样做:为了简单和避免语法上奇怪或错误的句子,他们只使用名词和形容词作为候选标记。
他们需要一个模型来考虑周围的单词,并提出一组替换,当插入这些替换时,就可以创建现实的句子。这样做的模型就是 MLM。MLM 的输入是带有单个标记屏蔽的一段文本(例如,从句子中删除并替换为一个特殊的指示符标记)。然后,模型的工作就是在给定的上下文中预测那个位置的标记。这种方法迫使模型了解不同令牌之间的依赖关系。由于单个单词可以适应许多不同的上下文,因此在某种意义上,该模型允许单个标记具有多个表示形式。继而,得到一组依赖于上下文的替换标记。虽然预测的令牌不能保证具有与原始令牌相同的含义,但如果 MLM 是经过良好训练的,则很可能带有新预测标记的句子在语法上是正确的,而且有意义。
一个句子生成过程的例子如图 3 所示。对于实现,他们使用 BERT,是谷歌最近提出的一种最新的语言表示模型。即用 BERT 模型提供预先训练好的语言表示,可以通过添加额外的轻量级 softmax 分类调整层来创建模型广泛的语言学习任务。
图 3.类似句子的生成过程
2.2 收集目标句子
一旦从原始句子中生成了一个相似的句子列表,下一步就是将所有的源句子输入到机器翻译软件中进行测试,并收集相应的翻译结果(即目标句子),随后分析结果以找出错误。他们使用谷歌和必应机器翻译系统作为实验的测试系统。为了获得翻译结果,他们调用谷歌翻译和微软必应翻译提供的 api,其返回的结果与它们的 Web 接口相同。
2.3 目标句的表示
接下来,必须对从被测试的转换系统中获得的目标句子进行建模,因为这允许他们比较结构以检测错误。选择表达句子的结构会影响进行有意义比较的能力。他们最终想要的是一种精确地为句子结构建模的表示,同时提供两个值之间的快速比较。
最简单和最快的方法是比较句子的原始形式:字符串。他们测试了这种方法,并证明了其性能是合理的。但是,在很多情况下,这种方法都不适用。例如,句子“on Friday, we went to the movies”中的介词短语“on Friday”也可以放在句子的末尾,如“we went to the movies on Friday”。句子是可以互换的,但是字符编辑距离之类的度量标准将表明字符串之间的巨大差异。语法解析克服了上述问题。使用语法分析器,可以对字符串的语法结构和单词或单词组之间的关系建模。例如,如果解析正确,上面的两个示例句子在关系值和解析结构方面应该具有相同的表示。
原始目标句。对于这个方法,他们将目标语句保留为其原始格式,即字符串。在大多数情况下,他们可能会认为,在用一种语言编写的句子中编辑单个标记将导致在已翻译的句子中更改单个标记。假设替换标记的语法角色是相同的,这在所有机器翻译系统中都是理想的。然而,在实践中并不总是这样,因为介词短语、修饰语和其他成分可以经常被翻译系统放置在不同的位置,并生成语义相同、语法正确的句子。不过,这种方法可以作为一个很好的基准。
选区解析树。部分解析是派生字符串语法结构的一种方法。它生成一组群体关系,显示一个词或一组词如何在一个句子中形成不同的单位。这组关系对于 SIT 特别有用,因为它将反映句子中短语类型的变化。选区关系可以可视化为一棵树,如图 4 所示。选区解析树是一种有序的根树,其中非终端节点是组成关系,终端节点是单词。在形式上,在群体解析中,句子根据给定的上下文无关语法所概述的短语结构规则被分解为它的组成部分。在实验中,使用了移位-减少选区解析器,并在斯坦福的 CoreNLP 库中实现,它每秒可以解析 50 个句子。
图 4.表示句子结构;依赖关系和选区关系都可以显示为树
依赖解析树。依赖解析同样派生字符串的语法结构。然而,所产生的关系集描述的是词语之间的直接关系,而不是词语如何构成一个句子。这组关系让我们对结构有了不同的见解,并且直观地对 SIT 很有用,因为它反映了单词之间如何相互作用的变化。在过去的 15 年中,依赖解析已经取得了很大的进展。基于神经网络的解析器的引入极大地提高了解析速度和准确性。与移位-减少选区解析器一样,基于神经网络的依赖关系解析器使用类似堆栈的系统,其中使用分类器选择转换。
在这种情况下,分类器是一个神经网络,同样训练在注释树银行。在实现中,他们使用了 Stanford CoreNLP 提供的最新的基于神经网络的解析器,每秒可以解析大约 100 个句子。此外,他们使用普遍的依赖关系作为注释方案,是基于斯坦福的依赖发展而来的。
2.4 通过结构比较检测翻译错误
最后,为了找出翻译错误,他们通过比较句子表征来寻找结构变异。无论句子被建模为原始字符串、单词嵌入或解析树,都有许多不同的度量来计算两个值之间的距离。这些度量标准往往是非特定于领域的,并且彼此之间可能具有较低的相关性,这使得度量标准的选择非常重要。例如,像 Word Mover's Distance 这样的度量将给一个距离为 0 的两个句子“He went to the store”和“store He the went to”,而字符编辑距离将给一个距离为 14。他们探索了几个不同的度量标准来评估句子之间的距离:字符编辑距离、选区集差异和依赖集差异。
原句之间的编辑距离。Levenshtein 距离通常称为“编辑距离”,它比较两个字符串,并通过计算将一个字符串转换为另一个字符串所需的最小字符编辑(删除、插入和替换)数量来确定它们之间的匹配程度。虽然该方法可能不能很好地展示句子之间的语法相似性,但它利用了这样一种预期,即编辑用一种语言编写的句子中的单个标记通常只会导致翻译句子中的单个标记的更改。因此,Levenshtein 距离可以作为一个很好的基线度量。
选区解析树之间的关系距离。为了评价两组选区关系之间的距离,将两组选区语法表之间的距离计算为每一种短语类型计数的绝对差的总和,从而对句子修改后的变化情况有一个初步的了解。这一启发式背后的动机是,一个句子的成分应该保持相同的两个句子之间只有一个标志的同一部分的词性不同。在一个健壮的机器翻译系统中,这也应该反映在目标句中。
依赖解析树之间的关系距离。类似地,为了计算两个依赖关系列表之间的距离,将每种依赖关系数量的绝对差相加。同样,其动机是当替换单个标记时,理想情况下单词之间的关系将保持不变。因此,在集合中的变化是合理的表明结构不变性已经被违反,推测有一个排序错误。
距离阈值。利用上述指标之一,计算原始目标句和生成的目标句之间的距离。然后必须决定修改后的目标句与其对应的原目标句是否相差甚远,足以表明存在翻译错误。要做到这一点,首先根据距离阈值进行过滤,只保留那些距离原始句子比所选阈值更远的句子。然后,对于给定的原始目标句,报告 top-k (k 也是一个选择参数)对目标句的最远修改。将距离阈值作为一个手动参数,因为用户可能根据他们的目标来优先考虑最小化假阳性报告或最小化假阴性报告。
3 评估
在本节中,通过将其应用于谷歌翻译和微软必应翻译,并使用从 Web 上抓取的真实世界未标记的句子来评估他们的方法。他们主要研究的问题是:
RQ1:在机器翻译软件中找到错误的翻译方法如何?
RQ2:该方法可以发现哪些翻译错误?
RQ3:这种方法的效率如何?
RQ4:在实践中如何选择距离阈值?
3.1 实验配置
为了验证 SIT 的结果,手动检查每个报告的问题,并共同决定:(1)问题是否包含有 bug 的句子;(2)如果是的,它包含怎样的翻译错误。
所有实验都是在 Linux 工作机上运行,配备 6 核 Intel Core i7-8700 3.2GHz 处理器,16GB DDR4 2666MHz 内存,GeForce GTX 1070 GPU。Linux 工作站运行 64 位 Ubuntu 18.04.02, Linux 内核为 4.25.0。
3.2 数据集
通常,为了测试机器翻译系统,开发人员可以采用 SIT,并将任何源句作为输入。因此,为了评估方法的有效性,他们从网络上收集真实世界的源句。具体来说,输入句子是从 CNN(有线新闻网)文章中提取的,分为政治和商业两大类。数据集是从两类文章中收集的,因为打算评估 SIT 是否在不同语义上下文的句子上始终表现良好。
对于每个类别,他们抓取了 10 篇最新的文章,提取了它们的主要文本内容,并将它们分割成一个句子列表。然后从每个句子列表中随机抽取 100 个句子作为实验数据集(共 200 个)。在这个过程中,包含超过 35 个单词的句子会被过滤,因为他们想要证明机器翻译软件即使对于相对简短的句子也会返回较差的结果。所收集数据集的详细信息如表 1 所示。
表 1.用于评价的输入句子的统计。每个语料库包含 100 个句子。
3.3 SIT 的有效性
该方法旨在使用未标记的句子自动查找翻译错误并报告给开发人员。因此,该方法的有效性在于两个方面:(1)报告的结果有多准确;(2)能找到多少错误的句子?在本节中,通过应用 SIT 来评估这两个方面,使用表 1 所示的数据集来测试谷歌翻译和微软必应翻译。
评估指标。SIT 的输出是一个问题列表,每个问题包含(1)一个原始的源句及其翻译:(2)top-k 报告生成的句子及其翻译(即:从源句翻译的 k 最远处翻译)。这里,将 top-k 准确度定义为在 top-k 所报告的句子或原始句子中至少有一个包含错误时所报告的问题的百分比。他们用这个作为 SIT 的精度度量。
结果。Top-k 准确性。结果如表 2 所示。SIT (原始)、SIT(选区)和 SIT(依赖性)是 SIT 实现,它们分别以原始句子、选区结构和依赖结构作为句子结构表示。表中的每个项都显示了 top-k 精度以及发现的错误问题的数量。在随后的讨论中,为了简洁起见,将 SIT(选区)和 SIT(依赖性)分别称为 SIT (Con)和 SIT (Dep)。
表 2.SIT 的 top-k 准确度
他们观察到 SIT (选区)和 SIT (依赖性)始终比 SIT (原始)表现得更好,这说明了句子结构表征的重要性。在 SIT (原始)中使用的度量仅仅基于句子中的字符,是脆弱的,容易出现过多或过少的报道错误。特别是,在测试微软必应翻译时,SIT (依赖)报告了 100 个可疑问题。在这些错误中,有 70 个错误是在第一个报告句子或原文中出现的翻译错误,其准确度达到 70%的第一名。SIT (依赖)在谷歌翻译和必应微软翻译中都有最好的性能。它成功地找到 64 个和 70 个错误问题,准确率分别为 69.5%和 71%。
此外,他们还研究了 SIT 是否会在生成的句子中引发新的错误。如表 3 所示,在所报告的问题中,谷歌翻译和微软必应翻译器对原句的翻译分别出现了 55 和 60 个独特错误。除了这些错误之外,SIT 还发现 79 和 66 个额外的唯一错误,这些错误只在生成的句子对中显示,而在原始句子中没有。因此,考虑到它极高的 top-k 精度和大量额外的独特错误报告,相信 SIT 在实践中非常有用。
表 3.唯一错误的数量
3.4 SIT 报告的翻译错误
SIT 能够发现各种翻译错误。在谷歌翻译和微软必应翻译器的实验中,他们主要发现了 5 种翻译错误:翻译不足、翻译过度、修改错误、词/短语误译、逻辑不清。错误类型来源于机器翻译的错误分类方法。这五种错误中的每一种都是词法错误、语法错误或语义错误的子集。本节重点介绍了所有 5 种错误的示例。表 4 给出了找到的翻译错误的统计数据。SIT 发现的大部分翻译错误都是由于翻译不足、词/短语错译和逻辑不清楚造成的。
表 4.在每个类别中有特定错误的句子的数量
翻译不足。如果有些词没有翻译(即没有出现在翻译中),这是翻译不足的错误。图 5 给出了一个包含翻译错误的句子对。在这个例子中,“to Congress”没有被错误地翻译出来,导致目标句的语义意义不同,“lie to Congress”是违法的,而“lie”只是一种不恰当的行为。
图 5.检测到翻译不足错误的示例
过度翻译。如果有些词不必要地多次翻译,或者目标句中的一些词不是从源句中的任何一个词翻译过来的,这就是过度翻译错误。在图 6 中,目标句中的“thought”并不是由源句中的任何单词翻译而来的,这是一种过度翻译的错误。有趣的是,他们发现过度转换错误经常伴随着一些其他类型的错误发生。该示例还包含一个翻译不足的错误,因为源句中的“were right”错误地没有翻译。
图 6.检测到的过度转换错误示例
不正确的修改。如果某些修饰语在句子中修改了错误的成分,这是一种错误的修饰语错误。在图 7 中,修饰语“new”修饰源句中的“auto manufacturing”。但是,谷歌翻译认为“new”应该修改“hub”。
图 7.检测到的不正确修改错误示例
词/短语误译。如果在目标句中出现了一些符号或短语的翻译错误,那就是词/短语错译错误。图 8 给出了这类错误的两个主要子类别:(1)一词多义的歧义和(2)翻译错误。
一词多义的模棱两可。每个符号/短语可能有多个正确的翻译。例如,admit 的意思是“允许某人加入一个组织”或“勉强同意某事”。然而,通常在特定的语义语境中(例如,一个句子),一个标记/短语只有一个正确的翻译。现代翻译软件对一词多义的处理效果并不理想。在图 8 中的第一个例子中,谷歌翻译认为源句中的“admit”指的是“勉强同意某事”,导致了符号/短语误译的错误。
错误的翻译。一个标记/短语也可能被错误地翻译成另一个语义上似乎不相关的意思。例如,图 8 中的第二个例子中,微软必应翻译认为“South”指的是“South Korea”,导致了一个单词/短语的误译。
图 8.图 9:检测到的单词/短语误译错误示例
不清楚逻辑。如果所有的符号/短语翻译正确,但句子逻辑不正确,这是一个不清楚的逻辑错误。在图 9 中,谷歌翻译正确的翻译了“serve In the elected office”和“country”,但是谷歌翻译产生了“serve In the elected office as a country”而不是“serve In the country In elected office”,因为谷歌翻译不理解两者之间的逻辑关系。NMT 模型的翻译中普遍存在逻辑不清的错误,这在一定程度上反映了模型是否真正理解了某些语义。
图 9.检测到逻辑错误不清楚的例子
句子翻译错误多。所报告的句子对中有一定比例包含多个翻译错误。图 10 给出了一个包含三种错误的句子对。具体来说,源句中的“cover”指的是“报道新闻”。但是,它被翻译成“hold”,导致了一个词/短语的误译。此外,目标句中的“church”并不是源句中任何一个词的翻译,是一种过度翻译的错误。微软必应翻译也误以为主语是“参加葬礼火车”。但是原句的意思是主语是“报道葬礼火车”,所以这是一个不清楚的逻辑错误。
图 10.检测到多个翻译错误的句子示例
3.5 SIT 的运行时间
在本节中,将评估 SIT 在两个数据集上的运行时间。他们使用 3 种不同的句子结构表示 SIT 来测试谷歌翻译和微软必应翻译。他们将每个实验设置运行 10 次,并报告其平均值作为结果。SIT 的总体运行时间如表 5 所示,SIT 在谷歌翻译上每一步的运行时间如图 11 所示(必应的结果与此相似)。我们可以看到,SIT 使用原始句子作为结构表征是最快的。这是因为 SIT (原始)不需要任何结构表示生成时间,使用依赖解析器可以获得与 SIT(原始)相当的运行时间。特别是,SIT (依赖)使用 19 秒解析 2000+个句子,认为这是高效和合理的。
表 5.SIT 在政治和商业数据集中的平均运行时间
图 11.测试谷歌翻译时 SIT 的运行时间细节(不包括翻译时间)
3.6 距离阈值的影响
如果翻译生成的句子和原始目标句子之间的距离大于距离阈值,SIT 就会报告问题中的 top-k 句对。因此,这个距离阈值控制(1)报告的 bug 问题的数量和(2)SIT 的 top-k 精度。直观地说,如果降低阈值,将报告更多的错误问题,但准确性将下降。基于实验结果,他们给出了一些实际使用 SIT 的指导。首先,如果打算发现尽可能多的翻译错误,应该使用一个小的距离阈值。其次,如果想让 SIT 尽可能精确,可以使用一个较大的阈值。当阈值较大时,SIT 报告的问题更少,但准确性非常高。考虑到网络上源句的数量是无限的,可以在很大的距离阈值下运行 SIT,并定期报告问题。因此,他们认为 SIT 在实践中是有效且容易使用的。
3.7 使用 SIT 报告的错误
在本节中,我将研究所报道的错误句子是否可以作为一个微调集来提高 NMT 模型的鲁棒性。微调是 NMT 中常见的做法,因为训练数据和目标数据往往会占据不同的领域。
为了测试 NMT 模型,SIT 在 40 个英语句子上运行,这些句子是从 WMT 17 的验证集中通过删除长句子(即。大于 12 个单词),并确保所有单词都在 NMT 模型的词汇表中。注意,由于模型没有在来自该领域的数据上进行训练或验证,因此我们模拟了实际场景,其中真实世界的输入与模型训练数据不同。根据这些输入,SIT 成功地找到了 105 个有错误的句子。用正确的翻译对它们进行了标注,并对这 105 个句子进行了 15 个时期的 NMT 模型微调,学习率降低。经过这次调整,105 个句子都能被正确翻译。同时,训练中使用的原验证集的 BLEU 分数提高了 0.13,这在一定程度上说明其他句子的翻译也得到了提高。这展示了以高效和简单的方式修复 SIT 报告的错误的能力。
4 讨论
4.1 假阳性
SIT 可以准确检测翻译错误,其精度可以进一步提高。特别是,SIT 的假阳性有三个主要来源。首先,生成的句子可能会产生奇怪的语义,导致目标句的结构发生变化。例如,基于短语“on the fact”,SIT 的当前实现可以生成句子“on the fact”,这自然会有非常不同的中文翻译。使用 BERT 帮助缓解了这个问题。在实验中,BERT 提供了 MLM 模型。其次,尽管现有的语法解析器非常精确,但它们可能产生错误的选区或依赖结构,从而导致错误的报告错误。第三,一个源句可以有多个不同句子结构的正确翻译。例如,目标句“10 years from now”和“after 10 years”,虽然句子结构不同,但可以互换使用。为了降低这些因素的影响,SIT 按与原始目标句的距离排列,返回前 k 个可疑句对。
4.2 构建健壮的翻译软件
与测试传统软件类似,测试机器翻译的最终目标是构建健壮的软件。为此,SIT 的效用如下。首先,所报告的误译通常作为早期警报,因此开发人员可以提前硬编码翻译映射,这是业界采用的最快的错误修复解决方案。第二,所报告的句子可以用作微调集。第三,开发人员可能会发现报告的有问题的句子对进一步分析/调试很有用,因为每对句子中只有句子相差一个字。这类似于通过输入最小化/本地化来调试传统软件。
5 总结
本文提出了一种新的、有效的机器翻译软件测试方法——结构不变测试(SIT)。SIT 的显著优点是它的简单性和通用性,因此具有广泛的适用性。SIT 已经被用于测试谷歌翻译和微软必应翻译器,并成功找到 64 个和 70 个有 bug 的翻译器,准确率分别为 69.5%和 70%。此外,作为一种通用的翻译方法,SIT 可以发现各种先进的翻译方法无法发现的翻译错误。我们相信,这项工作是走向机器翻译软件的系统测试的重要的第一步。
本文由南京大学软件学院 2020 级硕士何云转述
声明:本文由"麦兜"发布,不代表"知识分享"立场,转载联系作者并注明出处:https://www.029ipr.com/zhishi/18521.html