HoloClean 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
HoloClean 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
HoloClean 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 Apache
开发语言 Python
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 红薯
适用人群 未知
收录时间 2019-08-07

软件简介

脏数据和错误数据是数据分析工作的主要瓶颈,数据清理和修复约占数据科学家工作的60%。最近出现一个新的开源项目 HoloClean ,这是一个半自动数据修复框架,依赖于统计学习和推理来修复结构化数据中的错误。HoloClean 建立在弱监督范式的基础上,利用各种信号,包括用户定义的启发式规则(如通用数据完整性约束)和外部词典,来修复错误的数据。

HoloClean 关键特性:

  • 它是第一个整体数据清理框架,在统一的框架中结合了各种异构信号,例如完整性约束,外部知识(词典)和定量统计

  • 它是由概率推理驱动的第一个数据清理框架。用户只需提供要清理的数据集并描述高级域特定信号

  • 它可以扩展到大型真实世界的脏数据集,并执行比最先进的方法还要准确两倍的自动修复功能

检测和修复错误数据

HoloClean 可以修复结构化数据集中的各种错误,包括冲突和拼写错误的值,以及异常值和空条目。

公司,组织和研究人员收集的数据常常充满错误,错误和不完整的信息,这被称为脏数据,这些脏数据对下游应用程序来说可能是一个巨大的障碍。例如,芝加哥市出版的 Food Inspections 数据集中的一个片段: 

此数据集中的错误包括拼写错误的条目(例如,“芝加哥”拼写为“Cicago”)和相同地址的冲突邮政编码值(例如,芝加哥同一地址的“60608”与“60609”)相对应为异常值关键属性(例如,“Johnnyo's”而不是“John Veliotis Sr.”)。

HoloClean 专注于结构化数据集,如上所示。它的目标是识别和修复所有单元格数据,由于其初始观察值与其真实值 不同,而真实值可能是未知的。我们称这些错误的单元格数据。鉴于上述情况,数据清理分为两个任务:

  1. 错误检测,识别错误的单元格
  2. 数据修复,推断检测到的错误单元的真实值
数据清理是一种统计学习和推理问题。

HoloClean 将数据清理作为统计学习和推理问题。输入脏数据集的每个单元格与随机变量相关联。如果未检测到相应的单元是错误的,则该随机变量可以具有固定值,或者如果检测到相应的单元是错误的,则该随机变量可以具有未知值。HoloClean 使用具有固定值的随机变量作为训练数据来学习用于修复错误单元格数据的概率模型,错误单元格数据的随机变量具有未知值。

通过弱监督进行数据清理

在HoloClean中,用户只需要指定高级断言,捕获关于输入数据需要满足的不变量的域专业知识。无需其他监督!

如何有效地训练数据清理的概率模型?与任何其他大规模机器学习问题一样,用户无法负担起迭代具有数百万元组的数据集中的所有单元格来识别错误单元格并建议修复的算力。这便是弱监督的用武之地!

HoloClean 统一了异构弱信号,提供结构化数据正确值的证据,用以检测和修复错误。

HoloClean 利用各种微弱信号来解决错误检测和数据修复问题:

  • 在HoloClean中,用户可以指定拒绝约束(一种常规的完整性约束方法)来检测报告冲突信息的元组。例如,在 Food Inspections 数据集中,功能依赖性City,State,Address→Zip可用于识别由元组 t1 提供的信息与元组 t2 和 t3 的信息冲突。拒绝约束是捕获用户域专业知识的高级一阶逻辑规则。这些规则可以由用户指定,甚至可以自动发现。

  • 用户还可以选择使用外部数据集或词典,并指定高级规则,将可信外部数据集提供的数据与要清理的输入数据集相匹配。

  • HoloClean 使用最先进的异常值检测方法,利用定量统计数据查找其值不符合输入数据总体分布特性的单元格。异常值检测自动运行,无需用户输入。

上述所有信号用于自动生成数据清理的概率模型:

  • 拒绝约束引入了随机变量集的相关性。例如,如果元组 t1 和 t2 中单元格 Address,City 和 State 的随​​机变量具有匹配值,则 t1.Zip 和 t2.Zip 的随机变量应采用相同的值。

  • 外部数据确定不同单元格的正确值的先验。例如,在外部数据集中将地址“3465 S Morgan St,Chicago,IL”分配给邮政编码“60608”的事实提供了证据,即最初观察到的邮政编码“60609”是错误的。

  • 最后,HoloClean 使用可用的标记数据(通过上述弱信号生成)来学习输入数据的一系列定量统计(例如,对属性值对的共现统计)。定量统计用于形成对应于错误单元的随机变量的分配的先验。

总的来说,HoloClean 是一个数据清理框架,它将脏数据集,完整性约束集合以及可能的外部数据集合作为输入,并形成数据清理的概率模型。HoloClean 以通用推理引擎 DeepDive 为基础,对其模型进行学习和推理。对于每个随机变量,HoloClean 估计其最大后验分配以及其域中值的边际分布。后者可用于以低置信度识别修复并以原则方式请求额外的用户反馈。

HoloClean 实践

在HoloClean 团队的论文中,在各种真实数据集上评估 HoloClean,包括上面提供的 Food Inspections 数据集。将 HoloClean 与各种最先进的数据清理方法进行比较。所有现有方法都被设计成单独使用上面给出的每个信号。另一方面,由于概率模型的灵活性和可扩展性,HoloClean 可以在统一的框架中组合所有信号。

在上面的实验中,HoloClean 发现数据修复的平均精度约为 90%,并且在表现出不同类型错误的各种数据集中平均召回率高于76%。相对于最先进的方法,这使得平均 F1 改善超过2倍。

扩展概率推理

硬约束(例如,完整性约束)导致复杂且不可扩展的修复模型。

HoloClean 的主要技术挑战是对用于数据清理的概率模型进行缩放推理。众所周知,存在约束时的推断是#P-complete。这是因为在推理期间,需要考虑相关的随机变量集的所有可能的联合分配。例如,考虑下图中显示的数据集:

此例中显示的用户指定的完整性约束引入了对应于元组t1和t3的单元的四个随机变量的相关性。如果我们通过将完整性约束转换为一阶逻辑约束来简单地编码这种相关性,我们需要枚举这四个随机变量的所有可能的赋值。很容易看出,对于具有数百万元组的复杂约束和数据清理实例以及具有大域的随机变量,这种简单的方法很难进行扩展。

HoloClean 将对数据单元集的约束放宽到单个数据单元上的简单特征。这给出了仅具有独立随机变量的可扩展修复模型。

为确保可伸缩性,HoloClean 对输入数据集应用完整性约束,以识别提供冲突信息的元组,并使用完整性约束来学习与对应于这些元组的单元格相关联的随机变量的特征。HoloClean 生成的最终概率模型对应于独立随机变量投票模型,该模型确保分配给不同单元的值的局部一致性。

凭经验发现,当在观察数据集中单元格的正确值时有足够的冗余时,HoloClean的近似模型获得更准确的修复,并且在概率模型中对随机变量域的错误指定更加稳健。

下一步

  • 积极探索 HoloClean 轻松模型与其他结构化预测任务之间的联系。具体而言,关注的是由于观察数据的冗余,可以用局部一致的先验替换全局一致约束的情况。事实上,权衡约束特征一直是结构模型概率推理领域的一个开放研究领域

  • 将 HoloClean 与新的数据编程引擎 Snorkel 相结合,为用户提供指定和修改弱信号的交互方式,以构建数据清理模型。

本文翻译自 HoloClean 团队的文章

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(1) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
scikit-learn 存在拒绝服务漏洞
拒绝服务
scikit-learn 是基于 SciPy 构建的用于机器学习的 Python 模块,并在 3-Clause BSD 许可下分发。此软件包的受影响版本容易受到正则表达式拒绝服务 (ReDoS) 的攻击,该表达式通过在 _decode_attribute 中评估的 _RE_TYPE_NOMINAL 正则表达式进行。
MPS-2022-15126
2022-08-08 20:16
NumPy 代码问题漏洞
反序列化
NumPy是一个Python科学计算包,它支持大量的维度数组与矩阵计算,同时针对数据运算提供大量的数学函数库。 NumPy 1.16.0及之前版本中存在安全漏洞,该漏洞程序没有安全地使用pickle模块(Python)。远程攻击者可借助特制的序列化对象利用该漏洞执行任意代码。
CVE-2019-6446 MPS-2019-0576
2022-08-08 20:16
SQLAlchemy SQL注入漏洞
SQL注入
SQLAlchemy是一款基于Python的开源数据库ORM软件。该产品主要提供SQL工具包及对象关系映射工具。 SQLAlchemy 1.2.17版本中存在SQL注入漏洞。远程攻击者可借助group_by参数发送特制的SQL语句利用该漏洞查看、添加、修改或删除后端数据库中的信息。
CVE-2019-7548 MPS-2019-1414
2022-08-08 20:16
NumPy 缓冲区错误漏洞
缓冲区溢出
** 有争议 ** NumPy 1.9.x 中 ctors.c 的 PyArray_NewFromDescr_int 函数中存在缓冲区溢出漏洞,当从 Python 代码中指定大维度(超过 32 个)数组时,这可能会让恶意用户导致拒绝服务。注意:供应商不同意这是一个漏洞;在(非常有限的)情况下,用户可能会引发缓冲区溢出,用户很可能已经拥有至少通过耗尽内存来引发拒绝服务的特权。进一步触发此操作需要使用不常见的 API(复杂的结构化数据类型),非特权用户不太可能使用该 API。
CVE-2021-33430 MPS-2021-25101
2022-08-08 20:16
NumPy 安全漏洞
不充分的比较
NumPy 1.22.0 之前的 numpy.core 组件中的不完整字符串比较允许攻击者通过构造特定字符串对象来触发稍微不正确的复制。注意:供应商声明此报告的代码行为是“完全无害的”。
CVE-2021-34141 MPS-2021-25631
2022-08-08 20:16
NumPy 安全漏洞
空指针解引用
** 有争议 ** 由于缺少返回值验证,NumPy < 中的 numpy.sort 和 PyArray_DescrNew 函数中的 1.19 中存在空指针取消引用漏洞,这使得攻击者可以通过重复创建排序数组来进行 DoS 攻击。注意:虽然正确的是缺少验证,但只有内存耗尽才会发生错误。如果用户可以耗尽内存,则他们已经拥有特权。此外,实际上不可能构建一个可以针对恰好在此位置发生的内存耗尽的攻击。
CVE-2021-41495 MPS-2021-32278
2022-08-08 20:16
NumPy 安全漏洞
缓冲区溢出
** DISPUTED ** NumPy < 1.19 中 fortranobject.c 的 array_from_pyobj 函数中的缓冲区溢出,这使得攻击者可以通过小心地构造具有负值的数组来进行拒绝服务攻击。注意:供应商不同意这是一个漏洞;负维度只能由已经拥有特权的用户(或内部)创建。
CVE-2021-41496 MPS-2021-32279
2022-08-08 20:16
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
1 评论
63 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部