今天先来一篇关于缺乏大规模标记数据的机器学习工程实践,源blog地址:利用组织知识进行机器学习

    开发机器学习(ML)应用程序的最大瓶颈之一是需要用于训练现代ML模型的大型标记数据集。创建这些数据集需要投入大量的时间和费用,需要具有正确专业知识的注释者。此外,由于实际应用程序的发展,标记的数据集经常需要被抛出或重新标记。

    我们与斯坦福大学和布朗大学合作,提出了“潜水钟:在工业规模部署弱监管的案例研究”,探讨如何将组织中的现有知识用作更嘈杂、更高级别的监管,或者通常称为弱监管,以快速标记大型培训数据集。在这项研究中,我们使用一个实验性的内部系统Snorkel DryBell,它采用开放源码的Snorkel框架来使用各种组织知识资源,如内部模型、本体、遗留规则、知识图等等,以便在web规模上为机器学习模型生成训练数据。我们发现,这种方法可以匹配手工标注数万个数据点的效果,并揭示了如何在实践中创建现代机器学习模型的训练数据集的一些核心经验。

    Snorkel DryBell不需要手工标记训练数据,而是允许编写以编程方式标记训练数据的标记函数。在这项工作中,我们探索了这些标记函数如何捕获工程师关于如何使用现有资源作为弱监督的启发式方法的知识。例如,假设我们的目标是确定与名人相关的内容。我们可以利用现有的命名实体识别(NER)模型来完成这项任务,方法是将不包含任何人的内容标记为与名人无关。这说明了如何将现有的知识资源(在本例中是一个经过训练的模型)与简单的编程逻辑结合起来,为新模型标记训练数据。还要注意,重要的是,这个标记函数在很多情况下不返回任何值,即弃权,因此只标记数据的一小部分;我们的总体目标是使用这些标记来训练一个现代的机器学习模型,该模型可以推广到新的数据。
    image1.png

    这种用于标记训练数据的编程接口比手工标记单个数据点快得多,也更灵活,但生成的标签明显比手动指定的标签质量低得多。这些标记函数生成的标签通常会重叠和不一致,因为标记函数不仅可能具有任意未知精度,而且可能以任意方式关联(例如,共享公共数据源或启发式)。

    为了解决标签的噪声和相关性问题,Snorkel DryBell使用生成性建模技术,在没有任何地面真实训练标签的情况下,以可证明一致的方式自动估计标签函数的精度和相关性,然后使用该技术重新加权,并将其输出组合为每个数据点的单个概率标签。在较高的层次上,我们依赖于标记函数(协方差矩阵)之间的观测一致性和不一致性,并使用一种新的矩阵完成方式来学习标记函数精度和最能解释该观测输出的相关参数。生成的标签可用于训练任意模型(例如,在TensorFlow中),如下面的系统图所示。

    利用多种知识资源作为薄弱监管
    为了研究Snorkel Drybell的效果,我们使用了三个生产任务和相应的数据集,旨在对web内容中的主题进行分类,识别某些产品的提及,并检测某些实时事件。使用Snokel DryBell,我们能够利用各种现有或快速指定的信息源,例如:

    • 启发式和规则:例如,关于目标域的现有人类编写的规则。
    • 主题模型、标记和分类器:例如,关于目标域或相关域的机器学习模型。
    • 聚合统计:例如,目标域的跟踪度量。
    • 知识或实体图:例如目标域的事实数据库。

    image2.png

    我们使用这些组织知识资源在基于MapReduce模板的管道中编写标记函数。每个标签函数接受一个数据点,然后要么放弃,要么输出一个标签。结果是一大组以编程方式生成的训练标签。然而,这些标签中的许多非常嘈杂(例如,来自启发式),相互冲突,或者对于我们的任务来说过于粗粒度(例如,主题模型),导致了下一阶段的Snokel DryBell,旨在自动清理标签并将其集成到最终的训练集中。

    建模精确性以合并和重新利用现有资源
    为了处理这些嘈杂的标签,Snorkel DryBell的下一个阶段将标签函数的输出合并为每个数据点的单个置信加权训练标签。具有挑战性的技术方面是,这必须在没有任何地面真相标签的情况下完成。我们使用生成建模技术,只使用未标记的数据来学习每个标记函数的准确性。该技术通过观察标记函数输出之间的一致性和不一致性矩阵来学习,同时考虑到它们之间已知的(或统计估计的)相关结构。在Snorkel DryBell中,我们还实现了这种建模方法的一个新的更快、无采样版本,它是在TensorFlow中实现的,以便处理web规模的数据。

    通过在Snorkel DryBell中使用此过程对标记函数的输出进行组合和建模,我们能够生成高质量的训练标签。事实上,在两个可以比较手工标记训练数据的应用程序上,我们使用Snorkel DryBell’s labels对模型进行了与使用12000和80000个手工标记训练数据点对同一模型进行训练时相同的预测精度训练。

    将不可观测知识转化为可观测模型
    在许多设置中,可在生产中使用的可维护功能和不可维护功能之间也有一个重要的区别,这两个功能在生产中使用起来太慢或太贵。这些不可维护的特性可能具有非常丰富的信号,但一般的问题是如何使用它们来训练或帮助可在生产中部署的可维护模型?image3.png

    在Snorkel DryBell中,我们发现用户可以编写标记函数,即在一个不可服务的特性集上表达他们的组织知识,然后使用Snorkel DryBell输出的训练标签来训练在另一个可服务的特性集上定义的模型。在我们创建的基准数据集上,这种跨功能传输将我们的性能平均提高了52%。更广泛地说,它代表了一种简单而强大的方法,可以使用速度太慢(例如昂贵的模型或聚合统计数据)、私有(例如实体或知识图)或其他不适合部署的资源,来训练可服务模型而不是廉价的实时功能。这种方法可以被看作是一种新型的转移学习方法,我们不是在不同的数据集之间转移模型,而是在不同的特征集之间转移领域知识——这种方法不仅在工业领域,而且在医疗领域以及其他领域都有潜在的使用案例。

    下一步
    展望未来,我们很高兴看到哪些其他类型的组织知识可以被用作薄弱的监督,以及Snorkel DryBell使用的方法如何能够实现跨组织的新的信息重用和共享模式。有关更多详细信息,请参阅我们的论文,有关更多技术细节、博客文章和教程,请参阅Snorkel.stanford.edu上的开源Snorkel实现。