柘荣资讯网

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

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

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

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

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

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

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

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

image.php?url=0MpLjmQAGD

运行示例

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

image.php?url=0MpLjmeSDG

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

image.php?url=0MpLjmW9QN

对于WiC任务(判断目标词在两个句子中是否具有相同含义),我们可以根据它们是否共享三元组(包括目标词)来考虑弱标记示例。

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

image.php?url=0MpLjmvw6e

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

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

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

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

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

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

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

image.php?url=0MpLjm8nkW

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

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

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

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

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

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

今年3月,我们和Google发布了一篇论文和博客文章,介绍了在行业中部署Snorkel的经验。利用整个组织的不同知识来源启发式,标记,知识地图,遗产系统(数据源系统)等,他们看到了效果的显着增加,使F1值增加了多达17.5分。

image.php?url=0MpLjmF3Hz

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登录页面或开源库:

一些信息可以帮助您跳转到原始文本