快来了解下Snorkel —— 最新的基于弱监督学习的大规模训练数据标注神器! ? 要快速掌握机器学习应用的开发,推荐汇智网的机器学习系列教程。 斯坦福大学的snorkel系统,就是为了解决数据标注这一机器学习的瓶颈问题而开发的解决方案,它的基本思想就是通过编程来标注海量的数据点。 不可靠的非专家标注人,例如:众包标注 Snorkel是一个围绕数据编程范式(Data Programming paradigm)而构建的系统,用于快速创建、建模并管理用于机器学习的训练数据集。 在Snorkel中,这些标注推断被成为标注函数(Labeling Function),下面是一些常见类型的标注函数: 硬编码的推导:通常使用正则表达式 语义结构:例如,使用spacy得到的依存关系结构 当编写好标注函数后,Snorkel将利用这些不同的标注函数之间的冲突训练一个标注模型(Label Model)来估算不同标注函数的标注准确度。
该项目的最大特点是使用了弱监督技术(Snorkel)来获得海量标注数据,同时使用预训练语言模型进行迁移学习。 ? 在本文中,我使用和Google一样的工具:Snorkel。 斯坦福的Infolab实现的Snorkel框架叫做Snorkel Metal,建议你看一下这个教程以便了解Snorkel的基本工作流程,以及这个教程来进一步了解它。 在Snorkel中,推理逻辑被成为标注函数(Labeling Function)。 Snorkel的提示: 关于LF准确率:在弱监督步骤,我们目标是高精度,所有的标注函数在标注集上应当至少达到50%的准确率。
---- 新智元报道 编辑:时光 拉燕 【新智元导读】Snorkel AI 创始人Alex Ratner认为,办AI公司太费钱了,沟通就是一切。 在短短两年半的时间里,Snorkel AI筹得了1.35亿美元融资。 在接受采访时,Alex 表示,「办一个AI公司可太费钱了。」 「我很喜欢和Snorkel这种企业合作」,Saam说,「一方面是因为Snorkel公司已经有些基础,这样我们就可以聊一聊怎么一起努力,另一方面和Snorkel的合作可以让我们先熟悉和其它公司的合作模式。 Alex Ratner是Snorkel AI公司的联合创始人兼CEO ,早年毕业于斯坦福大学,现在专注于人工智能数据平台。 旗下Snorkel Flow是首个以数据为中心的AI平台,致力于构建AI应用程序平台,它基于程序化标签,消除了手动标签数据的需要。
他们使用一种Snorkel Drybell系统,让开源Snorkel框架适应各种组织知识资源,生成Web规模机器学习模型的训练数据。 Snorkel是由斯坦福大学在2017年开发的系统,它可以在弱监督条件下快速创建训练数据集,该项目已经在GitHub上开源。而Snorkel Drybell的目标是在工业规模上部署弱监督学习。 什么是Snorkel Snorkel是斯坦福大学在2016年为许多弱监督学习开发的一个通用框架,由这种方法生成的标签可用于训练任意模型。 ? 在Snorkel DryBell中,用户发现可以在一个不可服务的特征集上编写标签函数,然后使用Snorkel DryBell输出的训练标签来训练在不同的、可服务的特征集上定义的模型。 资源地址 论文地址: https://arxiv.org/abs/1812.00417 Snorkel项目地址: https://hazyresearch.github.io/snorkel/ 作者系网易新闻
SF (Slicing Functions) 剪切函数 Ref Snorkel简介与入门 1. 第一点更偏向于工程设计,snorkel的代码中对LF进行了很好的抽象和封装,能够满足绝大多数的场景。第二点偏向于算法。 作者通过实验证明 snorkel收集的训练样本进行训练,效果优于远程监督的方法 snorkel收集的训练样本可以与人工标注的样本质量齐平,且标准成本低 snorkel框架非常容易上手(亲测,非常好用,与 LF (Labeling Function) 标注函数 在Snorkel中,推理逻辑被成为标注函数(Labeling Function)。 论文 https://www.snorkel.org/get-started/ https://zhuanlan.zhihu.com/p/55138499 https://www.snorkel.org
除了 SuperGLUE 之外,我们还重点介绍了 Snorkel 在实际应用中的更新,其中包括更多应用——从 Google 的 Snorkel Drybell 的工业规模到 MRI 分类和自动全基因组关联研究 与此同时,我们还在 Snorkel repo 中发布代码: https://github.com/HazyResearch/snorkel 三种关键的抽象方式 一般来讲,在我们的 SuperGLUE Snorkel 的实际应用 这些 Snorkel 编程抽象方法也被用于推动具有高影响力的实际应用的进步。 我们很高兴如果您已经在自己的应用程序中应用了 Snorkel。 有关 Snorkel 开发和应用程序的更新,您可以随时访问 Snorkel 登录页面或开源库: 登录页面:http://snorkel.stanford.edu/ 开源库:https://github.com
弱监督学习框架 Snorkel 便是其中一种。 二、Snorkel 框架介绍 Snorkel 是一种快速产出训练数据的弱监督系统,利用标签函数,可以快速产生、管理、建模训练数据。 选取一小部分数据先让较有经验的员工进行人工标注,需要尽量保证这部分标签的正确性,将这一小部分有标签数据作为测试集,用于测试 Snorkel 标注模型的效果。 3.6 模型效果对比 baseline 模型是我们在使用 Snorkel 之前采用纯规则实现的,可以看到覆盖度和准确率都是最低的。 通过在实际场景上落地 Snorkel 自动标注数据框架的实践,我们探索和验证了采用非人工标注文本数据的方式来建立训练数据集的可行性。 为了能进一步提升模型在实际场景中的性能,我们下一步将继续探索 Snorkel 框架中的转换函数和切片函数这两种范式在实际项目中的效果。
上图中的Snorkel 是使用数据编程的弱监督学习的python库。它提供了易于使用的API来实现和评估步骤1和2。 Snorkel Snorkel可以说是所有弱监督标签模型方法的创始者,可以说是弱监督标签模型方法之母!斯坦福大学的同一位研究人员创造了“数据编程”一词,也发明了Snorkel 。 Snorkel 的前提很简单:给定启发式标签函数(LFS)的集合,将每个函数中的弱标签组合为每个样本的单个标签。Snorkel 提供了一个易于使用的框架,可以汇总多个不同的弱的LFS。 所以Snorkel实现了更复杂的LM,以使用一些数学矩阵逆向导组合单个LF的输出。 启发式LF选择 Snorkel 易于使用,但是在Snorkel 获得的标签上训练的最终模型(EM)的准确性可能会因LFS的质量而变化很大。
当然,Snorkel 存在的一个问题是,标注函数会产生带噪声的输出,这些输出可能会重合并冲突,从而产生不太理想的训练标签。 Snorkel 框架 在斯坦福 AI 实验室最近发表的关于 Snorkel 的论文 (https://arxiv.org/abs/1711.10160)中,他们发现在各种实际应用中,这种与现代机器学习模型交互的新方法非常有效 在 Mobilize Center 主办的一场为期两天的关于 Snorkel 的工作坊的用户调研中,他们比较了教领域专家们使用 Snorkel 的效率,以及花同样的时间仅仅对数据进行手动标注的效率。 同时,他们还发现,使用 Snorkel 构建模型在速度不仅快了 2.8 倍,而且平均的预测性能也提高了 45.5%。 2. 在一个新的多任务感知版本的 Snorkel,即 Snorkel MeTaL 中解决了这些问题,哪个又能够支持为一个或多个相关任务提供带噪声标签的多任务弱监督源?
Snorkel:一个开源的框架 在我们最近发表的关于 Snorkel 的论文 (https://arxiv.org/abs/1711.10160) 中,我们发现在各种实际应用中,这种与现代 ML 模型交互的新方法非常有效 在一个关于 Snorkel 的研讨会上,我们进行了一项用户研究,比较了教 SMEs 使用Snorkel 的效率,以及花同样的时间进行纯手工标记数据的效率。 我们发现,使用Snorkel 构建模型不仅快了 2.8 倍,而且平均预测性能也提高了 45.5%。 2. 我们在一个新的多任务感知版本的 Snorkel,即 Snorkel MeTaL 中解决了这些问题,它可以支持多任务弱监管源,为一个或多个相关任务提供噪声标签。 原文: https://ai.stanford.edu/blog/weak-supervision/ Snorkel: http://snorkel.stanford.edu/
编码为监督:通过编程来训练机器学习 Snorkel 是我们开发的一个系统,用来支持和探索这种与机器学习交互的新类型。 在 Snorkel 中,我们使用没有人工标注的数据,但会要求用户写一些标签函数(LFs),它们是用来标记未标注数据子集的黑盒代码片段。 Snorkel 在实际应用中的一些记录! ? 在最近关于 Snorkel 的论文中,我们发现在很多现实应用中,这种与当代机器学习模型交互的新方法效果很好! 一些亮点包括: 在斯坦福 Mobilize 中心主办的关于 Snorkel 的 workshop(为期两天)中开展了一项用户研究,我们比较了教主题专家用 Snorkel 和花费等价时间来人工标注数据的生产力 我们在 Snorkel 的多任务感知新版本中解决了这些问题,也就是 Snorkel MeTaL,它支持为一个或多个相关任务提供噪声标签的多任务弱监督源。 我们考虑的一个例子是设置不同粒度的标签源。
当然,Snorkel 存在的一个问题是,标注函数会产生带噪声的输出,这些输出可能会重合并冲突,从而产生不太理想的训练标签。 Snorkel 框架 ? 在 Mobilize Center 主办的一场为期两天的关于 Snorkel 的工作坊的用户调研中,他们比较了教领域专家们使用 Snorkel 的效率,以及花同样的时间仅仅对数据进行手动标注的效率。 同时,他们还发现,使用 Snorkel 构建模型在速度不仅快了 2.8 倍,而且平均的预测性能也提高了 45.5%。 2. 在一个新的多任务感知版本的 Snorkel,即 Snorkel MeTaL(https://arxiv.org/abs/1810.02840) 中解决了这些问题,哪个又能够支持为一个或多个相关任务提供带噪声标签的多任务弱监督源
github.com/jiesutd/SUTDAnnotator Paper:https://github.com/jiesutd/SUTDAnnotator /blob/master/lrec2018.pdf • Snorkel Page: https://hazyresearch.github.io/snorkel/ Github: https://github.com/HazyResearch/snorkel Demo Paper: https://hazyresearch.github.io/snorkel/ pdfs/snorkel_demo.pdf • Slate Code: https://bitbucket.org
github.com/jiesutd/SUTDAnnotator Paper:https://github.com/jiesutd/SUTDAnnotator/blob/master/lrec2018.pdf • Snorkel Page: https://hazyresearch.github.io/snorkel/ Github: https://github.com/HazyResearch/snorkel Demo Paper: https://hazyresearch.github.io/snorkel/pdfs/snorkel_demo.pdf • Slate Code: https://bitbucket.org
我们认为,用户应该能够对自己的数据进行一些基本的编程抽象,因此 Snorkel 项目诞生了(然后是公司)。在知识层面,我们由此进入了以数据为中心的 AI 和弱监督时代。 离开探索阶段的用户会带着更清晰任务定义,使用以数据为中心的 AI 并管理训练数据(你自己的数据很重要),以 Snorkel 的方式通过利用和组合多个 prompt 和 / 或基础模型来训练更小、更快的「 或者还可以利用基础模型来改进弱监督技术 —— 一些实验室和 Snorkel 成员还为此获了 UAI 奖。 归根结底,数据关乎模型的最终投产。数据是唯一没有商品化的东西。 我们仍然认为,Snorkel 对数据的看法是未来的发展方向 —— 你需要编程抽象,一种通过表达、组合和反复纠正不同数据源和监督信号的方法,为最终任务训练可部署模型的方法。
我们认为,用户应该能够对自己的数据进行一些基本的编程抽象,因此 Snorkel 项目诞生了(然后是公司)。在知识层面,我们由此进入了以数据为中心的 AI 和弱监督时代。 离开探索阶段的用户会带着更清晰任务定义,使用以数据为中心的 AI 并管理训练数据(你自己的数据很重要),以 Snorkel 的方式通过利用和组合多个 prompt 和 / 或基础模型来训练更小、更快的「 或者还可以利用基础模型来改进弱监督技术 —— 一些实验室和 Snorkel 成员还为此获了 UAI 奖。 归根结底,数据关乎模型的最终投产。数据是唯一没有商品化的东西。 我们仍然认为,Snorkel 对数据的看法是未来的发展方向 —— 你需要编程抽象,一种通过表达、组合和反复纠正不同数据源和监督信号的方法,为最终任务训练可部署模型的方法。
# 示例代码:弱监督学习在情感分析中的应用from snorkel.labeling import labeling_function@labeling_function()def lf_contains_positive_word # 示例代码:弱监督学习在命名实体识别中的应用from snorkel.labeling import labeling_function@labeling_function()def lf_contains_entity
Snorkel AI 最近与一家银行客户合作开展了一个基于 RAG 的项目。该客户需要该系统准确回答有关合同的问题。 我们的工程师随后将 SME 的解释编码为 Snorkel Flow AI 数据开发平台中的标记功能。该平台快速标记了大量文档,然后我们的工程师根据 SME 的基本事实检查了其标记功能的准确性。
Snorkel是一个非常有趣的项目,想要提供了一个通用的框架,来推进这种方法。 项目地址: https://blog.acolyer.org/2018/08/22/snorkel-rapid-training-data-creation-with-weak-supervision/
通过弱监督框架或基于模型的注释自动化标注过程减少人工努力(What Is Snorkel Flow? | Snorkel AI, n.d.)。