如何自动化标注海量数据
简介
斯坦福大学通过编程来标注海量的数据,创建了snorkel系统。我们可以使用例如假设、类比、规则、知识库等方法来编写标注数据的程序。不过,以这样弱监督得到的数据并不准确,比如可能存在多个彼此冲突或重叠的标注信号。
弱监督
领域启发式搜索: 常见模式、经验法则 ;
远程监督:利用已有的标注数据;
众包标注:非专家人标注;
标注函数
常见标注函数
硬编码的推导:通常使用正则表达式
语义结构:例如,使用spacy得到的依存关系结构
远程监督:例如使用外部的知识库
有噪声人工标注:例如众包标注
外部模型:其他可以给出有用标注信号的模型
将领域专家给出的各种各样监督信号编写成标注函数,标注函数中编码了领域相关的推理规则,可以使用正则表达式。经验规则等常见的模式进行标注。不过,这样生成的数据包含噪声,并且可能彼此冲突。
当编写好标注函数后,Snorkel将利用这些不同的标注函数之间的冲突 训练一个标注模型(Label Model)来估算不同标注函数的标注准确度。通过观察标注函数 之间的彼此一致性,标注模型能够学习到每个监督源的准确度。例如,如果一个标注函数的标注结果总是得到其他标注函数的认可,那这个标注函数将有一个高准确率,而如果一个标注函数总是与其他标注函数的结果不一致,那么这个标注函数将得到一个较低的准确率。通过整合所有的标注函数的投票结果(以其估算准确度作为权重),我们 就可以为每个数据样本分配一个包含噪声的标注(0~1之间),而不是一个 硬标注(要么0,要么1)。
接下来,当标注一个新的数据点时,每一个标注函数都会对分类进行投票:正、负或弃权。基于这些投票以及标注函数的估算精度,标注模型能够程序化到为上百万的数据点给出 概率性标注。最终的目标是训练出一个可以超越标注函数的泛化能力的分类器。
优点
可以大规模标注,每个标注函数都可以用于成百上千个数据样本的标注。
可以利用海量的未标注数据,来构建大量虽然不完美但是足够好的大型训练数据集
这些标注可以用于训练一个具有大特征集的强大的判别分类器。即使我们只使用 100个标注函数,每个数据样本依然可以有上千个特征。
总结
整体看来,有点类似于机器学习中的弱监督器堆叠产生强监督器的思想。在这里的弱监督器指的是单一特征标注函数,强监督器指的是经过这些标注函数训练得到的分类器。
公众号粉丝礼包:后台关键词:
python大礼包
整理不易,还请点击在看与分享,谢谢。
我就知道你“在看”