Weak Supervision: A New Programming Paradigm for Machine Learning

翻译自斯坦福AI lab博客,添加了一些自己的理解,地址
在这里插入图片描述

前言

机器学习(ML)可以说正在改变世界。但是,在很大程度上,是因为深度学习模型可以自动的提取特征,而不是之前的提取手工特征再做模型训练。考虑到诸如TensorFlow和PyTorch等多个开源ML框架的可用性,以及大量可用的最先进的模型,可以认为高质量的ML模型现在几乎是一种商品化的资源。然而,还有一个隐藏的陷阱:这些模型依赖于大量手工标记的训练数据集。

这些手工标记的训练集创建起来既昂贵又耗时——通常需要几个月或几年的人力来组装、清理和调试——尤其是在需要领域专家的时候,在医疗领域这个问题尤其突出!。最重要的是,任务在现实世界中经常变化和进化。例如,标记指南、粒度或下游用例经常发生变化,需要重新标记(例如,不只是之前的仅仅有阳性和阴性标注,而引入一个中性类别)。由于所有这些原因,从业者越来越多地转向较弱的监督形式,例如使用外部知识库、模式/规则或其他分类器启发式(heuristically)地生成培训数据。本质上,这些都是通过编程生成训练数据的方法,或者更简洁地说,是编程生成训练数据的方法(programming training data)。

我们首先回顾了ML的一些领域,这些领域主要研究的便是数据的标注问题,然后描述了我们对建模和集成各种监督源的研究。我们还讨论了为大规模多任务系统构建数据管理系统的设想,该系统使用数十或数百个弱监督的动态任务以复杂和不同的方式交互。可以查看我们的以前研究博客(目前无法打开),了解更多关于这些主题的详细讨论!

如何获得更多有标签的培训数据?回顾一下

ML中的许多领域也专注于数据标注问题。我们首先将这些其他方法与弱监督区分开来:
弱监管是利用来自领域专家(SME)的更高级别或更嘈杂的标注输入。

weak supervision is about leveraging higher-level and/or noisier input from subject matter experts (SMEs).
在这里插入图片描述
目前主流中小企业直接标记大量数据的关键问题是价格昂贵:例如,为医学成像研究获取大型数据集要困难得多 - 与研究生不同,放射科医师一般不会接受墨西哥卷饼和免费T恤付款来帮你做标注!因此,在ML中,许多经过深入研究的工作线都是由标记训练数据的瓶颈驱动的:

  • 主动学习Active learning中,目标是通过让中小企业为估计对模型最有价值的数据点贴上标签,从而更有效地利用中小企业。在标准监督学习设置中,这意味着选择要标记的新数据点。例如,我们可以选择靠近当前模型决策边界(其实就是当前模型预测错误的数据)的乳房x线照片,并要求放射科医生仅对这些照片进行标记。但是,我们也可以只要求对这些数据点进行较弱的监督,在这种情况下,主动学习与弱监督是完美互补的;作为一个例子,参见Druck, settle, and McCallum 2009
  • semi-supervised学习环境中,我们的目标是用一个小标记训练集和一个更大的无标记的数据集,如何利用这个无标记的大数据集是个问题。基本的思想就是使用在小数据上训练的模型预测未标注的数据,然后添加打上伪标注的数据集再重新训练。从广义上讲,半监督学习的理念是利用与领域和任务无关的假设,利用未经标记的数据,而这些数据通常可以廉价地大量获得,而不是从中小企业那里征求更多的输入。更近期的方法使用生成对抗网络Salimans et al. 2016、启发式转换模型(Laine和Aila 2016)和其他生成方法来有效地帮助规范化决策边界。
  • 在典型的迁移学习设置中,目标是将一个或多个已经在不同数据集上训练过的模型应用于我们的数据集和任务;一个好的概述见(Pan和Yang 2010)。例如,我们可能对身体另一部分的肿瘤进行了大量的训练,并在此基础上训练分类器,希望将其应用到我们的乳房x光检查任务中。在当今的深度学习社区中,一种常见的迁移学习方法是对一个大数据集上的模型进行“预培训”,然后在感兴趣的任务上对其进行“微调”。另一个相关的工作是多任务学习,其中几个任务是共同学习的(Caruna 1993;Augenstein, Vlachos和Maynard 2015)

上述范例可能使我们避免向中小企业合作者索要额外的数据标注。然而,对某些数据进行标注是不可避免的。如果我们可以要求他们提供各种类型的更高层次的,或者不那么精确的监督形式,哪种方式会更快更容易提供呢?
例如,如果我们的放射科医生可以花一个下午的时间指定一组启发式或其他资源,如果处理得当,这些资源可以有效地替换数千个培训标签,那会怎么样?

将领域知识注入人工智能

从历史的角度来看,试图“编程”人工智能(即问这个问题的主要新奇之处在于,人工智能从来没有像现在这样强大,同时在可解释性和控制力方面,它也是一个“黑匣子”。
在这里插入图片描述
在20世纪70年代和80年代,人工智能的重点是专家系统,它结合了领域专家的事实和规则的手工策划的知识库,以及应用它们的推理引擎。20世纪90年代,ML开始作为将知识集成到人工智能系统的载体起飞,并承诺以强大而灵活的方式从标记的训练数据自动实现这一点。经典的(非表示学习)ML方法通常有两个领域专家输入端口。首先,这些模型通常比现代模型的复杂度要低得多,这意味着可以使用更少的手工标记数据。其次,这些模型依赖于手工设计的特性,这些特性为编码、修改和与模型的数据基本表示形式交互提供了一种直接的方法。然而,特性工程过去和现在通常都被认为是ML专家的任务,他们通常会花费整个博士来为特定的任务设计特性。
进入深度学习模型:由于它们具有跨许多领域和任务自动学习表示的强大能力,它们在很大程度上避免了特性工程的任务。然而,它们在大多数情况下都是完整的黑盒子,除了标记大量的训练集和调整网络架构外,对普通开发人员几乎没有什么控制。在许多意义上,它们代表着旧专家系统脆弱但易于控制的规则的对立面——它们灵活但难以控制。这让我们从一个稍微不同的角度回到最初的问题:我们如何利用我们的领域知识或任务专长来编写现代深度学习模型?有没有办法将旧的基于规则的专家系统的直接性与这些现代ML方法的灵活性和强大功能结合起来?

代码监督:编程化的机器学习模型训练

Snorkel是我们构建的一个系统,用于支持和探索这种与ML的新型交互。在Snorkel中,我们不使用手工标记的训练数据,而是要求用户编写标记函数(LFs),即标记未标记数据子集的黑盒子代码片段。
然后,我们可以使用一组这样的LFs来为ML模型标记训练数据。因为标记函数只是任意的代码片段,所以它们可以编码任意的信号:模式、启发式、外部数据资源、来自人群工作者的嘈杂标签、弱分类器等等。而且,作为代码,我们可以获得所有其他相关的好处,比如模块化、可重用性和可调试性。例如,如果我们的建模目标改变了,我们可以调整我们的标记函数来快速适应!

在这里插入图片描述
当然,其中一个问题是标记函数将产生有噪声的输出,这些输出可能会重叠和冲突,从而产生不太理想的训练标记。在Snorkel中,我们使用数据编程方法对这些标签进行降噪,该方法包括三个步骤:

  1. 将标记函数应用于未标记的数据
  2. 我们使用一个生成模型来学习没有任何标记数据的标记函数的准确性,并相应地对它们的输出进行加权。我们甚至可以自动学习它们之间的关联结构。
  3. 生成模型输出一组概率训练标签,我们可以使用这些标签来训练一个强大的、灵活的判别模型(如深度神经网络),它将推广到标记函数中表示的信号之外。

可以认为,这整个管道为ML模型的“编程”提供了一种简单、健壮且与模型无关的方法!

Labeling Functions 标记函数

从生物医学文献中提取结构化信息是最能激励我们的应用之一:大量有用的信息被有效地锁在数百万篇科学论文密集的非结构化文本中。我们想用机器学习来提取这些信息,这样我们的生物合作者就可以用这些信息来诊断基因疾病。

考虑从科学文献中提取某一化学-疾病关系的提及物的任务。我们可能没有足够大(或任何)的标记训练数据集来完成这项任务。然而,在生物医学领域,存在着丰富的整理本体、词典等资源,其中包括各种化学与疾病名称本体、各种类型的已知化学-疾病关系数据库等,我们可以利用这些资源对我们的任务进行弱监督。此外,我们还可以与我们的生物合作者一起提出一系列特定于任务的启发式、正则表达式模式、经验法则和负标签生成策略

在这里插入图片描述

利用生成模型(Generative Model)作为表达(Expressive)工具

在我们的方法中,我们认为标记函数隐含地描述了一个生成模型
快速复习一下:
给定的数据点 x x x,有我们想要预测的未知标签 y y y,在判别方法中,我们直接对 P ( y ∣ x ) P(y|x) P(yx)建模,而在生成方法中,我们对 P ( x , y ) = P ( x ∣ y ) P ( y ) P(x,y) = P(x|y)P(y) P(x,y)=P(xy)P(y)建模。
在我们的例子中,我们正在建模一个训练集标记的过程, P ( L , y ) P(L,y) P(L,y),其中 L L L是对象 x x x的标记函数生成的标记,y是对应的(未知的)真标记。通过学习生成模型,并直接估计 P ( L ∣ y ) P(L|y) P(Ly),我们本质上是在学习标记函数如何重叠和冲突的(注意,我们不需要知道 y y y!)
在这里插入图片描述
我们使用这个估计的生成模型在标签函数上训练一个噪声感知版本的最终判别模型。为了做到这一点,生成模型推断出训练数据未知标签上的概率,然后我们根据这些概率最小化判别模型的期望损失

估计这些生成模型的参数可能非常棘手,特别是当使用的标记函数(用户表示的或推断的)之间存在统计依赖关系时。在我们的工作中,我们证明了给定足够的标记函数,我们可以得到与监督方法相同的渐近缩放(当然,在我们的情况下,对于未标记的数据除外)。我们还研究了如何在不使用标记数据的情况下学习标记函数之间的相关性,以及如何显著提高性能。

Notes from Snorkel in the Wild!(论文图片)

在这里插入图片描述
在我们最近关于Snorkel的文章中,我们发现在各种实际应用中,这种与现代ML模型交互的新方法非常有效!
一些亮点包括:

  • 在一个由动员中心主办的为期两天的关于呼吸管的研讨会上,我们进行了一项用户研究,比较了教中小企业使用呼吸管的效率,以及花同样的时间仅仅手工标记数据。我们发现他们不仅能够以2.8倍的速度构建模型,而且平均具有45.5%更好的预测性能。
  • 在与斯坦福大学、美国退伍军人事务部和美国食品和药物管理局的研究人员合作的两个现实世界的文本关系提取任务以及其他四个基准文本和图像任务中,我们发现,与基准技术相比,Snorkel平均提高了132%。
  • 我们探索了如何对用户提供的标记函数建模的新折衷空间,从而得到了一个基于规则的优化器,用于加速迭代开发周期。

下一步:大规模多任务弱监管

我们实验室正在进行各种努力,将Snorkel中设想的弱监督交互模型扩展到其他模式,如丰富格式的数据和图像、使用自然语言进行监督任务和自动生成标签功能!在技术方面,我们感兴趣的是扩展Snorkel核心的核心数据编程模型,使其更容易指定具有更高级别接口(如自然语言)的标记函数,以及结合其他类型的弱监管(如数据增强)。

多任务学习(MTL)场景的日益流行也引发了这样一个问题:当我们嘈杂的、可能相关的标签源现在标记多个相关任务时会发生什么?我们是否可以通过对这些任务进行联合建模来获益?我们在一个新的多任务感知版本的Snorkel, Snorkel MeTaL中解决了这些问题,它可以支持多任务弱监管源,为一个或多个相关任务提供噪声标签。

我们考虑的一个例子是具有不同粒度的标签源的设置。例如,假设我们打算训练一个细粒度的命名实体识别(NER)模型来标记特定类型的人和位置的提及,并且我们有一些细粒度的嘈杂标签,例如。标记“律师”与“医生”或“银行”与“医院”——有些是粗粒度的,例如标记“人”与“地点”。通过将这些资源表示为标记不同层次相关的任务,我们可以对它们的准确性进行联合建模,并重新加权和组合它们的多任务标签,从而创建更清晰、智能地聚合的多任务训练数据,从而提高最终MTL模型的性能。

在这里插入图片描述

我们相信,为MTL构建数据管理系统的最令人兴奋的方面将围绕处理我们所称的大规模多任务机制,在这种机制中,数十到数百个弱监督(因而高度动态)的任务以复杂和不同的方式交互。虽然大多数MTL工作迄今为止被认为是解决最多的任务,定义为静态的训练集上手写,世界正在迅速推进组织状态——无论是大型企业,学术实验室,或在线社区维护几十几百weakly-supervised,迅速变化和相互依存的建模任务。此外,由于这些任务是弱监督的,开发人员可以在数小时或数天内添加、删除或更改任务(即培训集),而不是数月或数年,这可能需要重新培训整个模型。

在最近的一篇文章中,我们概述了针对上述问题的一些初步想法,设想了一个大规模的多任务设置,其中MTL模型有效地作为一个中央存储库,用于训练数据,这些数据被不同的开发人员弱标记,然后在一个中央“母”多任务模型中组合。不管确切的形式因素是什么,很明显,MTL技术在未来有许多令人兴奋的进展——不仅是新的模型架构,而且还与转移学习方法、新的弱监督方法、新的软件开发和系统范例日益统一。

我们将继续在snorkel.stanford.edu上发布我们的想法和代码——欢迎随时反馈!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值