社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

利用组织知识开展机器学习

谷歌开发者 • 6 年前 • 615 次点击  

文 / Alex Ratner,斯坦福大学;Cassandra Xia,Google AI


对于机器学习 (ML) 应用的开发而言,其中一个最大的瓶颈在于需要使用庞大的标记数据集来训练现代 ML 模型。创建这些数据集不仅需要投入大量的时间和经费,还需要有掌握相应专业知识的标注者参与。此外,随着实际应用的发展,我们常常需要弃用或重新标记之前标记过的数据集。

我们与斯坦福和布朗大学开展合作并发表《Snorkel Drybell:在工业范围内部署弱监督的案例研究》("Snorkel Drybell: A Case Study in Deploying Weak Supervision at Industrial Scale") 一文。该论文探讨如何将组织中的现有知识用作更具干扰性且级别更高的监督(即人们常说的弱监督),以快速标记大型训练数据集。在此项研究中,我们使用实验性内部系统 Snorkel Drybell。该系统调整 Snorkel 开源框架,以使用不同的组织知识资源(例如内部模型、知识本体、遗留规则、知识图等)生成适用于网页级机器学习模型的训练数据。我们发现该方法与手动标记数万个数据点的效果相当,并揭示了一些关于如何在实践中为现代机器学习模型创建训练数据集的重要经验教训。

Snorkel DryBell 并非手动标记训练数据,而是通过编写标记函数,以编程方式标记训练数据。在此项研究中,我们探索了这些标记函数如何获取工程师有关将现有资源用作弱监督启发方法的知识。例如,假设我们的目标是识别与名人相关的内容。要完成此任务,我们可以利用现有的命名实体识别 (NER) 模型,将任何不包含人的内容标记为与名人无关。该示例说明如何将现有知识资源(在此案例中即为经训练的模型)与简单的程序逻辑结合,从而为新模型标记训练数据。此外,还需要注意的是,该标记函数在许多情况下会返回 None(即弃权),因而只会标记一小部分的数据;而我们的总体目标是使用这些标签训练可以泛化到新数据的现代机器学习模型。


在我们的标记函数示例中,我们并非手动标记数据点 (1),而是将现有知识资源(在此案例中即为 NER 模型)(2) 与代码 (3) 中表示的简单逻辑结合,启发式地标记数据

  

这种用于标记训练数据的程序界面速度比手动标记单个数据点更快,也更灵活,但生成的标签质量显然比手动指定的标签低得多。这些标记函数生成的标签经常会出现重叠和不一致,这是因为标记函数可能不只有任意未知的精度,还可能以任意方式关联(例如,通过共享通用数据源或启发方法)。

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



将不同的知识来源用作弱监督

为了研究 Snorkel Drybell 的成效,我们使用三个生产任务和相应的数据集,旨在分类网页内容中的主题、识别提到特定产品的地方,以及检测特定实时事件。我们能够借助 Snorkel DryBell,利用各种现有或快速指定的信息来源,例如:

  • 启发方法和规则:例如,现有的有关目标域的人类创作规则

  • 主题模型、标注器和分类器:例如,有关目标域或相关域的机器学习模型

  • 汇总统计数据:例如,有关目标域的追踪指标

  • 知识或实体图:例如,有关目标域的事实型数据库


在 Snorkel DryBell 中,目标是训练机器学习模型 (C),例如对网页数据进行内容或事件分类。在 Snorkel DryBell 中,用户并非通过手动标记训练数据来实现这一目标,而是编写表达各种组织知识资源 (A) 的标签函数,然后将这些资源自动重新加权和组合 (B)


我们在基于 MapReduce 模板的管道中使用这些组织知识资源编写标记函数。每个标记函数接受一个数据点,然后弃权或输出标签。这样做的结果是产生了大量以编程方式生成的训练标签。然而,这些标签很多都存在噪声(例如,通过启发方法生成的标签),而且彼此冲突,或者对我们的任务而言粒度过粗(例如主题模型),以至于引发 Snorkel DryBell 的下一阶段。该阶段旨在自动清理标签,并将标签整合到最终的训练集中。



对精度进行建模以组合现有资源并改变其目的

为了处理这些存在噪声的标签,Snorkel DryBell 会在下一阶段针对每个数据点,将标记函数的输出组合成单一置信度加权训练标签。该过程中面临的技术挑战是该任务必须在没有任何实际标签的情况下完成。我们采用生成建模技术,该技术仅使用未经标记的数据来学习每个标记函数的精度。此外,该技术还通过观察标记函数输出之间的一致性和不一致性矩阵来学习,同时考量两者之间的已知(或采用统计数据估计的)关联结构。在 Snorkel DryBell 中,为了处理网页级数据,我们还实现了这种建模方法的新版本,其速度更快且无需采样(已在 TensorFlow 中实现)。

通过在 Snorkel DryBell 中使用此方法对标记函数的输出进行组合和建模,我们可以生成高质量的训练标签。实际上,在手动标记训练数据可用于比较的两个应用中,我们使用 Snorkel DryBell 标签训练模型获得的预测精度与使用 12,000 和 80,000 个手动标记训练数据点训练同一个模型得到的预测精度相同。



将非可投放知识迁移到可投放模型 

在许多情况下,可投放特征(即可以用于生产的特征)和非可投放特征(速度太慢或成本太高以至于无法应用于生产)之间还存在着非常重要的区别。这些非可投放特征可能拥有非常丰富的信号,但其面临的常见问题是:如何使用其训练或者辅助可部署到生产环境的可投放模型?


在许多情况下,用户编写的标记函数利用无法在生产环境中投放的组织知识资源 (a)(例如汇总统计数据、内部模型或者因为速度太慢或成本过高以至于无法在生产环境中使用的知识图),训练仅根据生产可投放特征(例如成本低廉的实时网络信号)进行定义的模型 (b)


在 Snorkel DryBell 中,我们发现用户可以根据非可投放的特征集编写标记函数(即表达其组织知识),然后使用 Snorkel DryBell 生成的训练标签输出训练根据不同可投放特征集定义的模型。这种交叉特征迁移将我们在自己创建的基准数据集上的性能平均提升 52%。更广泛地说,这向我们展现了一种简单而有效的方法,即使用速度很慢(例如,成本高昂的模型或汇总统计数据)、私有(例如,实体或知识图)或者不适合部署的资源来针对廉价的实时特征,训练可投放模型。我们可以将这种方法视作一种新型的迁移学习,不过不是在不同的数据集间迁移模型,而是在不同的特征集间迁移领域知识。这种方法不仅可应用到工业领域,在医学等其他行业中也有应用前景。



后续步骤 

我们非常期待之后能够看到哪些其他类型的组织知识还可以用作弱监督,以及 Snorkel DryBell 所采用的这种方法如何催生出信息重用及跨组织分享的新模式。如需更多详细信息,请查看我们的 论文。如需详细的技术细节、博文和教程,请在snorkel.stanford.edu 查看 Snorkel 的开源实现https://hazyresearch.github.io/snorkel/

注:论文 链接

https://arxiv.org/abs/1812.00417



致谢 

此项研究由 Google、斯坦福大学和布朗大学合作开展。我们要感谢所有参与研究的人士,包括 Stephen Bach(布朗大学)、Daniel Rodriguez、Yintao Liu、Chong Luo、Haidong Shao、Souvik Sen、Braden Hancock(斯坦福大学)、Houman Alborzi、Rahul Kuchhal、Christopher Ré(斯坦福大学)、Rob Malkin。



更多 AI 相关阅读:



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31982
 
615 次点击