Press "Enter" to skip to content

Snorkel – 可编程的数据标注神器

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

我知道你已经用上了最先进的深度学习模型,不过,还在人工标注数据吗? 这有点过时了!快来了解下Snorkel —— 最新的基于弱监督学习的大规模训练数据标注神器!

 

 

现在的机器学习尤其是深度学习模型很强大,但是训练这些模型需要大量的 标注数据集!传统的人工标注方式成本非常高,而且很耗时间,在有些情况下 根本就是不现实的,例如可能涉及到隐私的问题。当需要领域专家才能够 进行数据的标注时,这一问题变得更加糟糕 。而且,随着时间的推移,标注 任务有可能也会变化,而这些手工标注的训练数据都是静态的,可能无法 应用于变化的任务,造成既往投入的浪费。

 

斯坦福大学的snorkel系统,就是为了解决数据标注这一机器学习的瓶颈问题而 开发的解决方案,它的基本思想就是通过编程来标注海量的数据点。

 

我们可以使用多种方法来编写标注数据的程序,例如使用假设、、规则、 知识库等等。这样得到的训练数据集被称为弱监督(Weak Supervision):标注并不精确, 并且可能存在多个彼此冲突或重叠的标注信号。

 

可以视为弱监督源的示例包括:

领域启发式搜索,例如:常见模式、经验法则等
已有的正确标注的数据,虽然不完全适用于当前的任务,但有一定的作用。这在 传统上被称为远程监督。
不可靠的非专家标注人,例如:众包标注

Snorkel是一个围绕数据编程范式(Data Programming paradigm)而构建的系统, 用于快速创建、建模并管理用于机器学习的训练数据集。

 

数据编程范式是一个简单但强大的方法,我们请领域专家给出各种各样的监督 信号作为标注函数,可以使用标准的像Python这样的脚本函数来编写这些标注函数。 标准函数中编码了领域相关的推理规则,可以使用入正则表达式、经验规则等 常见的模式进行标注。这样生成的标注是包含噪声的,并且可能彼此冲突。

 

在Snorkel中,这些标注推断被成为标注函数(Labeling Function),下面是 一些常见类型的标注函数:

硬编码的推导:通常使用正则表达式
语义结构:例如,使用spacy得到的依存关系结构
远程监督:例如使用外部的知识库
有噪声人工标注:例如众包标注
外部模型:其他可以给出有用标注信号的模型

 

当编写好标注函数后,Snorkel将利用这些不同的标注函数之间的冲突 训练一个标注模型(Label Model)来估算不同标注函数的标注准确度。通过观察标注函数 之间的彼此一致性,标注模型能够学习到每个监督源的准确度。 例如,如果一个标注函数的标注结果总是得到其他标注函数的认可,那幺 这个标注函数将有一个高准确率,而如果一个标注函数总是与其他标注 函数的结果不一致,那幺这个标注函数将得到一个较低的准确率。 通过整合所有的标注函数的投票结果(以其估算准确度作为权重),我们 就可以为每个数据样本分配一个包含噪声的标注(0~1之间),而不是一个 硬标注(要幺0,要幺1)。

 

接下来,当标注一个新的数据点时,每一个标注函数都会对分类进行投票:正、负或弃权。 基于这些投票以及标注函数的估算精度,标注模型能够程序化到为上百万的数据点给出 概率性标注。最终的目标是训练出一个可以超越标注函数的泛化能力的分类器。

 

 

这一方法的三大优点是:

 

 

    1. 可以大规模标注,每个标注函数都可以用于成百上千个数据样本的标注。

 

    1. 可以利用海量的未标注数据,来构建大量虽然不完美但是足够好的大型训练数据集

 

    1. 这些标注可以用于训练一个具有大特征集的强大的判别分类器。即使我们只使用 100个标注函数,每个数据样本依然可以有上千个特征。

 

 

因此,通过这种方法得到海量的低质量监督,然后使用统计技术处理有噪标注,我们 可以训练出高质量的模型。

 

原文链接: Snorkel — A Weak Supervision System

 

Be First to Comment

发表评论

邮箱地址不会被公开。 必填项已用*标注