自然语言处理(NLP)模型无法理解人类语音并将文本解释为相反的意思,这是业界一直存在的问题。现在微软表示已经针对这个问题开发了解决方案。微软开发了AdaTest方法来测试NLP模型作为跨各种应用基础的大规模模型,或者说平台模型的进步大大提高了AI处理自然语言的能力。但自然语言处理(NLP)模型仍远非完美,有时会以令人尴尬的方式暴露缺陷。例如,有一个顶级商业模式将葡萄牙语的“我不推荐这道菜”翻译成英语的“我强烈推荐这道菜”。这些失败之所以持续存在,部分原因是在NLP模型中查找和修复错误非常困难,以至于严重的错误影响了几乎所有主要的开源和商业NLP模型。目前有两种方法来查找和修复NLP模型中的错误:用户驱动或自动。用户驱动的方法非常灵活,可以测试NLP模型行为的任何方面。但这种方法依赖于人极其参差不齐的想象力和识别错误的能力,而且非常耗费人力,以至于在实践中只能使用少量的输入数据进行测试。另一方面,自动方法速度很快,因此可以处理大部分输入数据。然而,由于缺乏人为控制,他们只能在非常有限的情况下测试模型是对还是错,例如当模型处理稍微改变的输入措辞时,其预测结果不一致。微软研究人员认为,GPT-3等现代大规模语言模型(LLM)为业界提供了一个机会,可以尝试结合用户驱动方法和自动方法的优势,让用户定义被测模型应该做什么在利用现代大规模语言模型的生成能力的同时,要做的是在特定类别的模型行为中生成大规模测试。微软的研究人员将这种人机结合的路径称为“自适应测试和除错”,简称AdaTest。使用AdaTest时,大型语言模型需要针对被测模型中的错误生成大量测试。人工干预通过选择有效测试并将它们组织成语义相关的主题来指导语言模型的生成。这种来自人类的指导极大地提高了语言模型的生成性能,并将它们引向目标领域。因为这些测试实际上是标记数据的一种形式,它们不仅可以识别NLP模型中的错误,还可以用于在类似于传统软件开发的迭代调试循环中修复NLP模型中的错误。AdaTest为专业用户提供了显着的生产力提升,同时足够简单,可以被没有编程背景的普通人有效使用。这意味着专业用户和普通用户都可以更好地理解和控制NLP模型在一系列场景中的行为,这不仅让AI系统表现得更好,也让AI系统更加响应用户需求有效地。使用测试循环发现漏洞AdaTest模式由用于查找错误的内部测试循环和用于修复错误的外部调试循环组成。虽然这个任务看起来很简单,但即使是商业SOTA模型也经常出错。例如,一些SOTA模型会将双重否定句“我认为我一生中没有过更好的时光”归类为情绪消极,甚至更糟糕的是,将“我是少数派”这句话归类为消极。负面情绪。这两种情况都是市面上商业机型出现过的真实失误。为了证明AdaTest可以发现并修复错误,Microsoft研究团队演示了如何测试和修复NLP模型的文本公平性失误。NLP模型的文本公平性错误,即一段文本中对特定属性组的中性描述,可能会导致NLP模型的文本情感分析功能出现错误,错误地降低文本的情感权重.也就是说,该模型可能会更消极地对待特定群体的描述。在测试循环中,微软研究人员从一组关于各种身份的文本单元测试开始,并将这组测试标记为“敏感”。这些初始示例没有显示任何模型错误。但是,AdaTest方法使用GPT-3生成大量具有相似语料库的暗示性测试,以突出测试对象模型的隐藏错误。在生成数百个测试的同时,干预人员只需审查前几个错误或接近错误的测试。然后,人为干预会忽略那些并非真正错误的测试结果,而将其他有效的测试结果添加到当前主题中,偶尔也会将它们组织到其他子主题中。这些手动过滤的测试结果包含在下一个主题中。在轮次输入的语言模型提示中,将下一组输入数据的处理结果推送到用户关注点和模型错误bug的交集处。重复这个内部测试循环可以让NLP模型在没有错误的情况下开始,并慢慢暴露出越来越多的重大错误和错误。因此,即使用户自己找不到模型的错误,他们也可以从一小部分通过的测试开始,然后快速迭代NLP模型,产生大量的测试来揭示被测模型的错误。内部测试循环示例如果测试人员不使用文本情感分析主题,而是针对不同的主题,例如处理否定句与双重否定句,测试人员将发现不同的失败。例如,像“我从来没有像现在这样快乐”这样的简单陈述可以被商业模型正确地归类为积极的。但使用AdaTest方法后,NLP模型很快就会将诸如“我认为我从未见过更好的城市”这样的复杂句子错误地标记为负面。一旦测试人员看到这些错误,这些错误就很明显,但很难被人类直接检测到,因为它们只出现在非常具体的措辞中。微软的研究团队进行了用户研究,以定量评估AdaTest是否使专业和非专业用户能够更好地编写测试并发现NLP模型中的错误。研究人员要求专业用户在两种模型中测试特定主题的功能:商业文本情感分类器和用于下一个词自动完成的GPT-2。此功能用于预测正在键入的电子邮件中的下一个单词等应用程序。对于每个主题和模型,参与者被随机分配使用CheckList(代表用户驱动测试的SOTA)或AdaTest。研究人员观察到AdaTest在不同模型和专业参与者中有五倍的改进。研究者对非专业用户的测试要求是测试NLP模型中有毒语料的内容规制。参与者被要求在语料库中找到模型判断为有毒的无毒内容,即他们个人认为合适的内容。参与者可以使用修改版的Dynabench众包接口进行模型测试,也可以使用AdaTest。结果是AdaTest提供了高达10倍的改进。不同视点的测试参与者测试效果图使用调试循环修复错误一旦发现足够多的错误,模型的测试人员将执行外部调试循环(如下图),修复测试循环中发现的错误,然后重新启动测试模型。调试循环的“重新测试”部分(即再次运行测试循环)在此过程中至关重要,因为一旦使用测试来修复模型,它们就不再是测试数据,而是训练数据。修复错误的过程往往会过度补偿,在调试周期的前几轮中引入捷径或错误,这些错误只能通过一组适应新“固定”模型的测试来捕获。开源RoBERTa-Large情感模型的测试循环过程。我们从图2中的主题“/sensitive/immigration”开始测试,该主题被RoBERTa模型错误地标记为负面。该模型根据这些测试进行了微调(与原始训练数据混合以保持任务性能),结果是一个不再失败的新模型。然而,当测试循环重新运行时,发现几乎所有的移民声明现在都被标记为“中性”,即使根据应用程序和测试场景它们确实是负面的。使用这些新测试再次微调导致模型正确修复了原始错误,而无需添加“每个移民声明都是中立的”快捷方式。当然,这并不能保证模型中不存在另一条捷径,但根据研究人员的经验,经过几轮调试后,在修复原始错误的同时引入的意外错误数量大大减少。测试人员不需要事先详尽地识别每一个可能的错误,AdaTest会自适应地发现并修复在下一轮测试和调试中引入的错误。因此,调试循环推动了当前错误测试规范的界限,直到产生令人满意的模型。实际上,AdaTest可以看作是软件工程中的测试-修复-再测试循环在NLP中的应用。在调试循环迭代期间添加的快捷方式被未来的迭代发现并修复。为了评估调试循环的有效性,使用Quora问题数据集对RoBERTa-Large进行微调以检测两个问题的重复,并使用StanfordSentimentTreebank(SST)对正面/中性/负面情绪分析进行微调数据集。结果发现,基线模型无法识别53个QQP主题中的22个和39个情感主题中的11个。之后,研究人员创建了数据来修复主题。从该主题的数据中提取50个示例,并使用AdaTest运行调试循环,在QQP数据集上平均进行41.6次测试,在情绪数据集上平均进行55.8次测试。结果表明,在绝大多数情况下,AdaTest修复了用于训练的项目和一些看不见的保留项目而没有破坏任何项目,而原始的CheckList数据经常引入破坏其他测试项目的新错误。研究人员还评估了AdaTest在标准开发环境中的有效性。经过三个月的开发、CheckList测试和基于GPT-3的临时数据扩充,在野外收集的未见数据的F1分数为0.66(满分1.00)。使用AdaTest,同一个团队在自己运行调试循环四个小时后,在同一个看不见的数据集上获得了0.77的F1分数。然后将这些分数复制到第二个未见过的数据集上,表明AdaTest可以执行错误修复并在传统方法所及的领域取得更好的结果。人们提供了语言模型所缺乏的问题规范,而语言模型则提供了更大范围和更大范围的高质量测试,并将模型测试和调试打通,有效修复错误,使模型开发成为传统软件开发的迭代。自然更进了一步。人与人工智能的合作代表了机器学习未来的发展方向。希望随着大规模语言模型的能力不断增长,这种合作将继续得到改善。
