百家乐导航

用编程创建和管理训练数据集难?三种强大的抽象方法呈上!

概述

机器学习从业者更注重培训数据,而不是模型架构或硬件优化所花费的精力。因此,程序员基于不同的抽象技术(即高级设计模板)为其应用程序构建机器学习管道。在本文中,我们介绍了三个强大的抽象,允许从业者以编程方式构建和管理他们的培训数据。

我们进行了一项实验来测试基本训练数据操作的有效性,使用训练集的这一部分的框架,Snorkel(一种通过标签功能快速创建,建模和管理训练数据的系统)以编程方式标记数据)和标准NLP模型(即BERT),在SuperGLUE上实现最佳结果(与公共语言理解技术相关的六个任务的新评估指标)。与自然语言预训练模型(即BERT)的最新发展相比,我们总体上取得了新的最高分,而且在大多数组合任务中,我们已经取得了各方面的最佳结果。

除了SuperGLUE之外,我们还重点介绍了Snorkel在实际应用中的更新,包括更多应用 - 从Google的Snorkel Drybell工业规模到MRI分类和自动化全基因组关联研究(GWAS)。这些应用程序包含在Nature Comms:

与此同时,我们也在Snorkel回购中发布代码:

三个关键的抽象

总的来说,在我们的SuperGLUE结果中,我们发现花时间以编程方式构建和操作训练数据而不是模型训练是一种强大而有效的策略,通过它我们可以获得机器学习。管道机制的高性能。在之前的一篇文章中(阅读地址:因为我们已经在GLUE Benchmark(SuperGLUE的前身)上取得了最先进的成果,我们讨论了监督信号的价值,包括多任务和转移学习等更多来源。在本文中,我们重点关注构建和修改训练数据集的三个关键抽象:

1.使用标记功能(LF)标记数据

2.使用转换函数(TF)转换数据

3.使用切片功能(SF)切片数据(技术报告+博客文章即将推出!)

d7436bc564dacfee003fcdc2918f016d.jpeg

运行示例

对于本文的其余部分,我们使用SuperGLUE的上下文措辞(WiC)任务作为示例:句子中的目标词的用法是否一致?

9a27c3bd89da276f7363ab8a7f974d86.jpeg

1,使用注释函数的弱注释

许多应用场景中存在大量未标记的数据,这些数据可能来自自治车队或大型非结构化数据库。但是出于时间和成本考虑,很难标记这些原始数据,因此现代架构很大程度上无法利用这些可能丰富的数据集。通过使用Snorkel,我们多年来一直致力于研究使用注释函数(LF)来启发性地标记训练样例。 Snorkel中的注释函数(LF)为现场专家或机器学习从业者提供了直观的界面,用于对来自现有数据集,模型和手动注释的监督源进行去噪和组合。

110f413d6687ac5275086cb2079cef88.jpeg

对于WiC任务(确定目标词在两个句子中是否“一致”),我们可以根据它们是否共享包括目标词的三元组来考虑弱标记示例。

2,使用转换功能进行数据增强

通常,人们基于简单的变换进行数据增强,例如随机旋转或拉伸图像,但是它们可以涉及更多样化的操作。我们将传递函数(TF)视为一种强大的抽象,从现有的例子中启发式地生成新的和变化的例子。例如,对于医学成像任务,我们可以编写TF来执行特定于我们的成像模态的变换。例如,重新采样分割的肿瘤块或重新采样背景组织。我们在TANDA工作(学习构建用于数据扩充的特定于域的转换)中探索了这种抽象,旨在学习跨域特定任务的转换组合。谷歌的AutoAugment基于这项工作,自动学习数据增强策略。

c7e3ba48d1649918d0f58b139aff612c.jpeg

3,使用slice函数进行数据切片(新方法!)

在许多数据集中,特别是在实际应用中,有一些数据子集使我们的模型表现不够好,而且有些数据子集比其他数据子集更有趣。例如,低频率医疗保健人口统计数据(例如一些患有癌症的年轻患者),我们的模型可能在这些数据上表现不佳,或者在自动驾驶仪设置下,我们可能更关注一些安全问题。但罕见的场景,如检测骑自行车。我们将此数据称为子集切片。从业者经常面临的技术挑战是在保持整体性能的同时提高这些切片的性能。

切片功能(SF)为用户提供接口,以粗略地识别模型应提供额外呈现能力的数据子集。为了解决特定切片的表示,从业者可以训练多个模型,每个模型特定于特定子集,然后将这些模型与专家组合(MoE)方法组合。

然而,随着机器学习模型的规模不断扩大,教育部通常是不切实际的。另一种策略是通过硬参数共享以多任务(MTL)方式训练单个模型。虽然这种方法在计算上更有效,但它需要性能偏差来提高许多特定切片任务的性能,这通常是不可靠的。作为快速概述(技术报告+博客文章即将推出!),我们以多任务方式对切片进行建模,使用基于切片的“专家头”来学习特定切片的表示。然后,通过向专家头引入注意机制,确定何时以及如何在每个示例的基础上组合由这些切片头学习的表示。

在此方法中,我们考虑以下属性:

我们的方法与模型无关 - 专家负责人在任何骨干架构(例如BERT,ResNET)之上学习。因此,使用切片功能来提高整体性能的从业者可以专注于数据而不是模型架构。

通过以多任务方式学习,我们可以有效地执行表示学习,而无需制作模型的许多副本(例如MoE,这需要太多的内存)!

通过结合注意机制,我们避免了专家头的手动调整 - 这大大节省了开发人员的成本。

dd9777faa9f7b84129fb0d41b410dea6.jpeg

从WiC错误分析中,我们可能会发现,在目标词是名词而不是动词的情况下,我们的模型表现更差。使用切片函数SF,我们告诉模型注意这些切片之间的差异,并在预测它认为是名词的目标词时使用略微不同的表示。

注释函数LFs,转换函数TF和切片函数SF的重要功能

直观的界面:这些抽象为现有的从业者工作流程提供了直观的界面。它们允许在调试/错误分析中直接编写注释以改进模型。

将抽象方法编程为弱监督:在实践中,许多这些技术可以被认为是一种弱监督形式,因为用户指定这些技术是嘈杂的,启发式的,并且是不准确的。处理此问题是我们通过Snorkel解决的核心技术挑战之一。

将监督视为代码:这些输入的类型基于监督模型的方法(即它们指定训练集)。具体来说,它们也是代码,因此它们具有许多优点,例如代码可重用性和可修改性。

SuperGLUE结果

使用这些编程抽象,我们在SuperGLUE Benchmark及其四个组合任务上取得了新的最佳结果。 SuperGLUE类似于GLUE,但包括“更困难的任务.选择最大化难度和多样性,以及.选择在强大的基于BERT的基线和人类表现之间显示巨大的差距。重建BERT ++基线后,我们的模型(基线模型,默认学习率等)经过微调,发现在使用上述编程抽象方法的少数应用程序中,我们看到SuperGLUE基准测试的结果提高了4分。这一点(即差距)人的表现减少了21%)。

Snorkel的实际应用

这些Snorkel编程抽象也被用于推动高影响力的实际应用程序的进步。

今年3月,我们发表了一篇关于谷歌的论文(和一篇博客文章(介绍了在行业中部署Snorkel的经验。整个组织拥有不同的知识来源 - 启发式,注释器,知识地图,遗产系统)数据源系统等等,他们看到了效果的显着改善,使F1的数量增加了17.5分。

4b36c3b8b788e0ef7bb81f114573a77c.jpeg

Snorkel管道机制部署在BAV分类任务中,具有多达4000个未标记的MRI序列数据集。图片由Fries等人提供。人。 2018.

在Nature Communications最近的一项工作中(相关阅读:Snorkel被部署在一个继续与斯坦福大学儿科心脏病学合作的项目中,其中训练数据的标签是开发自动化方法的主要实际障碍。我们关注尖牙主动脉瓣膜(BAV),这是最常见的先天性心脏畸形(一般人群中0.5-2%),有影响下游健康的风险。在这项研究中,我们选择不依赖心脏病专家。昂贵的MRI注释,但工作直接与领域专家一起开发注释函数LF,为下游深度学习模型生成大规模训练集。独立评估确定使用我们的端到端方法诊断的患者的发生。主要不良心脏事件的风险增加了1.8倍。

在另一篇即将发表的Nature Communications论文中(其中我们展示了Snorkel如何应用于自动基因关联研究(GWAS)。数百篇先前发表的关于重要基因型和表型数据对的报告在研究集中,我们仅使用标记功能自动标记结果分类器应用于598项研究的集合,恢复超过3,000个先前记录的开放访问关系(预期召回率60-80)%)和现有人类规划知识库中不存在的2,000多个关联(估计准确率为82-89%)。可以通过用户界面搜索生成的数据库。

后记

Snorkel项目正在积极进行中!我们有许多令人兴奋的持续合作 - 从斯坦福大学医学院的后续工作到国际研究记者协会(ICIJ),帮助记者组织,索引和理解数百万个非结构化文件。

此版本的代码包括重要的基础结构改进和有关如何将LF,TF和SF应用于SuperGLUE和其他任务的教程。如果您已经在自己的应用程序中应用了Snorkel,我们将非常高兴。有关Snorkel开发和应用程序的更新,您可以随时访问Snorkel登录页面或开源库:

登录页面:

开源库:

通过:雷锋网雷锋网雷锋网络