大数据的兴起为企业到科学等领域带来了巨大的机遇和巨大的挑战。机遇包括更明智的业务决策、更高效的供应链管理和资源分配、更有效地定位产品和广告、更好地“组织世界信息”、更快地实现科学发现等。
挑战也同样巨大。首先,越来越多的数据以多样化的形式出现:文本、音频、视频、OCR(光学字符识别)、传感器数据等。虽然现有的数据管理系统主要假设数据具有严格、精确的语义,但越来越多的数据(尽管有价值)包含不精确性或不一致性。其次,为了从数据中获得洞察力而不断涌现的算法(名称包括机器学习、数据挖掘和统计分析)对于具有特定数据集和特定目标的开发人员来说通常是令人生畏的:开发人员不仅必须跟上最新的技术水平,还必须花费大量的开发精力来试验不同的算法。
许多应对这些挑战的最新方法在很大程度上是统计性的,并将丰富的数据库与统计分析和机器学习驱动的软件相结合。示例包括谷歌的知识图谱、苹果的 Siri、IBM 赢得 Jeopardy 比赛的沃森系统以及亚马逊和 Netflix 的推荐系统。这些大数据分析驱动的系统,也称为训练系统,其成功引起了公众的想象,并且人们对将此类能力引入企业、医疗保健、科学和政府等其他应用感到兴奋。然而,此类系统的复杂性意味着构建它们非常具有挑战性,即使对于拥有博士学位的计算机科学家来说也是如此。如果此类系统要产生真正广泛的影响,则需要大幅简化构建和维护它们的过程,以便可以将它们变成可以轻松应用于不同领域的商品。到目前为止,研究重点一直放在特定机器学习任务的个别算法上。
相比之下,Hazy 项目 (http://hazy.cs.wisc.edu) 采用系统方法,其假设是:数据分析的下一个突破可能不在于个别算法,而在于快速组合、部署和维护现有算法的能力。为了实现该目标,Hazy 的研究重点是识别和验证构建训练系统中的两大类“通用模式”(也称为抽象)(见图 1):编程抽象和基础设施抽象。将此类抽象识别、优化和支持为原语可以使训练系统的构建变得更加容易。这可以使我们更接近于在各个领域释放大数据分析的全部潜力。
编程抽象。为了确保训练系统平台可以被许多开发人员访问,编程接口必须小巧且可组合,以提高生产力并使开发人员能够尝试许多算法;集成多样化数据资源和格式的能力要求编程接口的数据模型具有通用性。关系数据模型和基于概率规则的语言(如马尔可夫逻辑)的组合满足这些标准。使用这种组合,我们开发了几个基于知识的构建系统(即 DeepDive、GeoDeepDive 和 AncientText)。此外,我们的(开源)软件堆栈已被下载数千次,并被自然语言处理、化学和生物统计学等不同的社区使用。
基础设施抽象。为了构建一个可以容纳许多不同算法并可扩展到大量数据的训练系统平台,关键在于找到应用个别算法时的不变性,在算法和系统之间建立清晰的接口,以及拥有可扩展的数据管理和内存管理子系统。使用这些原则,我们开发了一个名为 Bismarck 的原型系统10,该系统利用了许多统计分析算法在 RDBMS(关系数据库管理系统)中充当用户定义聚合的观察结果。Bismarck 的数据分析方法与 Oracle 和 EMC Greenplum 等商业系统提供商使用的方法类似。此外,这种基础设施级别的抽象使我们能够探索通用技术,以提高许多算法的可扩展性和效率。
一个名为 GeoDeepDive (http://hazy.cs.wisc.edu/geodeepdive) 的应用程序说明了 Hazy 构建训练系统的方法。GeoDeepDive 是一个演示项目,涉及与地质研究人员合作,对数万篇地质学期刊论文的语料库进行深入的语言和统计分析。目标是从该语料库中提取有用的信息,并以促进地质学家研究的方式组织这些信息。当前版本的 GeoDeepDive 提取了岩层提及,尝试为这些岩层提及分配各种类型的属性(例如,位置、时间间隔和碳测量),然后在地质学家的空间和时间维度中组织提取物和文档。图 2 显示了 Hazy 如何构建 GeoDeepDive 的高级概述。
使用 Hazy 方法,GeoDeepDive 开发流程包括以下步骤
1. 开发人员组装可能对 GeoDeepDive 有用的数据资源。
2. 开发人员组合特征提取函数,将数据资源转换为关系信号。
3. 开发人员以概率规则的形式指定关系信号之间的相关性和约束;Hazy 的基础设施自动执行可扩展的统计学习和推理。
4. Hazy 输出 GeoDeepDive 的概率预测。
Hazy 接受所有可能对应用程序有用的数据源。GeoDeepDive 使用 Macrostrat 分类法 (http://macrostrat.org/),因为它提供了感兴趣的实体集,以及特定领域的约束(例如,一个地层只能与某些时间间隔相关联)。谷歌搜索结果用于将位置提及映射到其规范名称,然后使用 Freebase (http://freebase.com) 映射到经纬度 (lat-lng) 坐标。这些坐标可用于针对地层的规范位置(Macrostrat 中的 lat-lng 多边形)执行地理匹配。还有(手动)文档注释的文本提及的地层测量,这些注释充当训练数据。
输入数据源可能不具有所需的格式或语义,无法直接用作统计推理或学习的信号(或特征)。特征提取步骤执行此类转换。开发人员指定所有关系的架构,提供单个提取器,然后指定如何将这些提取器组合在一起。例如,我们(开发人员)对输入语料库执行 NLP(自然语言处理)解析,以生成每句结构化数据,例如词性标记和依存关系路径。然后,我们使用 Macrostrat 分类法和启发式方法来提取候选实体提及(地层、测量等),以及提及之间可能的共指关系。
特征提取产生的信号可能不精确或不一致。为了做出连贯的预测,开发人员提供关于信号的约束和(概率)相关性。Hazy 使用马尔可夫逻辑语言;马尔可夫逻辑程序由一组加权逻辑规则组成,这些规则表示高级约束或相关性。开发人员还可以指定可用的训练数据,Hazy 将使用这些数据来学习规则权重。编程接口将 Hazy 的统计处理内部结构与开发人员隔离开来。Hazy 的基础设施是开发人员可以插入各种算法的地方。
来自 Hazy 统计处理基础设施的输出包括对感兴趣关系的概率预测(例如,位于图 2 中)。一般来说,Hazy 更喜欢具有理论保证的算法(例如,吉布斯抽样)。此类算法确保输出预测得到良好校准(例如,如果检查所有概率为 0.7 的预测,则接近 70% 的预测是正确的)。然后可以将这些预测馈送到 GeoDeepDive 的前端(图 3)。
除了 GeoDeepDive 之外,我们还以类似的方式在其他几个项目中部署了 Hazy 方法——例如,DeepDive (http://hazy.cs.wisc.edu/deepdive),它使用从 Web16 提取的事实来增强维基百科(见图 4)。
编程抽象将开发人员的应用程序特定(逻辑和统计)建模与在执行时用于应用程序的(统计推理或学习)算法解耦。此类抽象的目的是确保:(1)应用程序开发人员可以为同一数据集和/或领域知识或启发式方法尝试许多不同的算法,而无需额外的开发工作;以及(2)当一个算法的效率或质量提高时,所有使用该算法的应用程序都会自动获得改进。关系数据模型和基于概率逻辑的编程语言的组合已被证明可以有效地满足这两个标准。
正如在 GeoDeepDive 示例中看到的那样,Hazy 的统计数据分析方法使用关系数据模型作为编程抽象的基础。除了经过充分研究之外,关系模型还是使用关系式特征向量的大量重要统计和机器学习方法的基础。一个重要的结果是,这种选择自动提供了成熟数据平台(如 RDBMS)的优势。例如,使用 RDBMS 管理 Hazy 管道中的数据(如图 2 所示),开发人员可以轻松地从其他系统加载数据和将数据加载到其他系统。此外,随着 RDBMS 技术的不断成熟和发展,相同的 Hazy 管道将继续自动获得可扩展性和性能的提升。
马尔可夫逻辑18的直观性、灵活性和日益普及使其被采用为 Hazy 的核心编程语言。研究人员已将其应用于广泛的应用。在马尔可夫逻辑中,开发人员可以编写带有权重的谓词逻辑规则(直观地模拟一个人对规则的信心);这允许开发人员捕获可能正确但不确定的规则。马尔可夫逻辑程序(也称为马尔可夫逻辑网络或 MLN)指定哪些数据(证据)可用、要做出哪些预测以及存在哪些约束和相关性。计算给定 MLN 的预测的过程称为推理。有时 MLN 可能缺少权重,开发人员可以提供训练数据,Hazy 可以从中学习规则权重。
在语义上,MLN 表示概率图模型(概念上通过规则实例化),而概率图模型又表示应用程序中关系的所有可能配置的概率分布。因此,马尔可夫逻辑的一个关键优势是其简洁性。另一方面,这种简洁性也带来了有效实例化(或接地)谓词逻辑规则的技术挑战。我们的关键观察是,接地从根本上讲是关系式连接。我们构建了一个基于 RDBMS 的 MLN 接口引擎 Tuffy,它利用经过时间考验的 RDBMS 基础设施进行连接,以实现大规模的高性能14。事实证明,Tuffy 比当时的最新 MLN 推理引擎更快、更可扩展(见图 5)。比较的是 Alchemy 的马尔可夫逻辑的内存接地(即规则实例化)和 Tuffy 的 RDBMS 内接地。这两个代码片段都是由相应系统为上述 MLN 规则自动生成的。由于 Tuffy 利用成熟的 RDBMS 基础设施进行连接,因此 RDBMS 的使用使 Tuffy 比 Alchemy 更具可扩展性并且速度快几个数量级。
马尔可夫逻辑是一种灵活的语言,允许开发人员轻松表示常见的统计模型,例如逻辑回归和条件随机场;此外,开发人员可以通过组合多个“原始”模型或添加额外的相关性或约束来构建更复杂的统计模型18。在内部,Hazy 基础设施能够识别 MLN 中的某些“原始”模型,并相应地选择推理或学习算法。尽管如此,一些有用的统计建模元素不容易在马尔可夫逻辑中表示(例如,涉及连续随机变量或聚合的相关性)。为了支持这些更复杂的建模功能,我们正在扩展 Hazy 的编程接口以支持通用因子图构建。我们还在努力扩展框架以支持用户定义的函数,以实现更丰富的应用程序特定逻辑。
根据我们在 GeoDeepDive 和 DeepDive 中的经验,我们发现调试是开发训练系统的关键任务。调试是纠正或微调应用程序组件(例如,特征提取器或 MLN 程序)的过程。它容易出错且通常很繁琐。为了方便调试过程,我们认为调试是编程中不可或缺的组成部分。以下是通常适用于统计数据处理的两种类型的调试
使用校准图进行宏观调试。
为了使概率预测有意义,它们必须经过良好校准。例如,如果系统输出概率为 0.7 的预测,我们希望该预测的准确度为 70%。校准图描述了预测准确度如何随预测概率变化。在图 6 中,x 轴是估计的预测概率,左侧 y 轴是系统做出的预测数量。这些结果用于在 CoNLL-2000(计算自然语言学习会议)文本分块任务中使用的跳跃链 CRF(条件随机场)模型,该任务包含用于训练模型的训练集和用于评估的测试集。吉布斯抽样运行直到收敛(由 Wald 检验决定),并在测试集上提供推理结果。这种评估可以作为对整个系统的健全性检查;如果我们发现系统未经过良好校准,我们可以查看训练数据采集过程并检查可能存在的过度拟合问题。
使用错误分析进行微观调试。
为了改进或添加更多概率规则,一种有效的方法是分析系统产生的结果中的错误:开发人员将每个预测注释为正确或不正确,将错误分类到不同的组中,然后相应地处理错误组。挑战在于,要注释一个预测,我们可能需要查阅许多相关的关系。幸运的是,使用像马尔可夫逻辑这样的建模语言,可以从每个预测向后追溯到原始信号(以及中间的规则)。我们正在尝试设计和实现调试 IDE(集成开发环境),以支持使用来源信息的此类解释。
Bismarck 项目10 是设计通用基础设施抽象的第一步。基础设施抽象是将算法与实现细节(如数据管理、内存管理和任务调度)解耦的内容。拥有清晰的基础设施抽象可确保:(1)系统构建者在向系统添加新算法时不必重新发明或重新设计轮子,以及(2)当基础设施的某个组件得到改进(例如,更好的内存管理)时,所有算法都会自动受益。此外,清晰的基础设施抽象为研究通用技术以改进广泛的算法类别提供了清晰的角度。
Bismarck 项目的动机是将复杂的数据分析引入依赖于 RDBMS 的企业应用的趋势。通过与 Oracle 和 EMC Greenplum13 的工程师的对话,我们了解到,从头开始构建每种新的分析技术的开销——实现具有新内存要求、数据访问方法等的新求解器——实际上是一个主要的瓶颈。Bismarck 旨在通过统一的基础设施抽象来简化此类系统,以处理多种技术。
我们从数学规划文献中开始一个重要的观察:许多分析技术可以被框架化为凸规划问题。8,12 凸规划是一个优化问题,其中目标函数是凸的(碗状)。示例包括逻辑回归、SVM(支持向量机)、条件随机场等。并非所有问题都是凸的(例如,Apriori1 和一些图挖掘算法),但很大一部分问题是凸的(或凸松弛),包括图 7a 中所示的问题。与现有的 RDBMS 内分析工具(针对不同的分析技术具有单独的代码路径)相比,Bismarck 提供了一个单一框架来实现它们,同时可能保留相同的接口。图 7b 显示了可以使用凸规划(和凸松弛)通过 Bismarck 处理的不完整任务和技术列表。
这种观察在数据分析理论中非常重要,因为研究人员能够统一他们对此类问题的算法和理论研究。凸问题很有吸引力,因为局部解始终是全局最优解,并且有许多经过充分研究的算法可以解决这些问题。由于凸规划允许问题定义与问题解决或实现的方式解耦,因此它是统一分析架构的自然起点。
许多分析技术都具有凸目标函数,这些函数也是线性可分的:形式上,问题是找到一个向量 w∈ ℝd,对于某个 d ≥1,该向量使以下目标最小化
目标函数 F(w) 是项 f(w, zi) 的总和,对于 i = 1, ..., N,其中每个 z 都是一个(训练)数据点。在 Bismarck 中,zi 由数据库元组表示——例如,用于论文分类的(论文,领域)。我们将 f(w, zi) 缩写为 fi(w)。例如,在 SVM 分类中,fi(w) 是模型 w 在第 i 个数据点上的铰链损失,而 P(w) 强制执行分类器的平滑度(防止过度拟合)。我们可以将上述内容推广为通过近端点方法包含约束。还可以推广到矩阵值 w 和不可微函数19。
有许多经过充分研究的算法可以解决凸规划,最流行的是梯度方法。梯度,正式表示为 ∇F,是函数导数的推广。本质上,它给出了曲线在某一点的斜率,如图 8a 所示。梯度是线性的,这意味着 ∇F 可以计算为 N 个单独梯度 ∇f(w,zi) 的总和。
梯度方法是迭代算法,例如上面的算法,它们解决凸规划。它们从 w 的某个初始值开始,然后计算梯度(和/或相关量),并使用它来迈出一步到 w 的下一个值,直到该方法收敛到最优值。流行的梯度方法包括共轭梯度法、牛顿法和 BFGS8。它们都在每次迭代中扫描完整数据集,以计算单个步骤的完整梯度 ∇F。这可能会使它们对于大数据效率低下。我们的目标是选择一种梯度方法,其数据访问属性适合高效的 RDBMS 内实现。一种名为 IGD(增量梯度下降)的经典算法符合要求。IGD 仅使用一个项一次来近似完整梯度 ∇F。形式上,为简单起见,假设 P = 0,IGD 使用如下规则更新迭代 k、w(k) 处的当前值:
在这里,αk ≥ 0 是一个称为步长的参数,而 zi 是一个数据点。在数据库中,每个 zi 对应一个元组,这使我们得出我们的中心观察:IGD 具有逐元组数据访问模式,该模式本质上与 SQL 聚合(如 AVG)相同。本质上,IGD 一次查看数据元组,并执行(非交换)“聚合”。IGD 是一种快速算法,其运行时在数据集大小和维度上都是线性的。毫不奇怪,IGD 最近在 Web 数据和大规模学习社区中变得流行起来6,20。
Bismarck 中的关键系统洞察力在于,IGD 可以使用经典的 RDBMS 抽象(称为 UDA(用户定义聚合))来实现,该抽象几乎在每个主要的 RDBMS 中都可用。我们在 PostgreSQL 和两个商业 RDBMS 上原型化了相同的 Bismarck 架构。使用 UDA 允许 Bismarck 自动利用成熟的 RDBMS 功能,例如内存管理和数据编组。这也意味着 Bismarck 可以随着 RDBMS 软件的发展自动利用对 RDBMS 的改进。
图 8b 通过将 IGD 与 SQL AVG 进行比较,显示了 IGD 中的核心计算如何映射到 UDA。所述状态是聚合的上下文(IGD 中的模型)。所述数据是数据库元组。UDA 具有三个标准函数
•Initialize(state)使用给定值(例如,零或先前的模型)初始化模型。
•Transition(state, data)在每个元组上自动执行。这是各种分析技术的核心逻辑(目标函数和梯度计算)所在的位置。因此,各种技术的实现之间的主要差异主要发生在接下来的几行代码中(图 9),稍后将进行解释。架构的其余大部分在各种技术之间是通用的。与大多数现有系统(每种技术都有不同的代码架构)相比,这可以帮助减少 Bismarck 中数据库内分析的开发开销。
•Finalize(state)返回模型,可能会持久化它。
IGD 与 AVG 等聚合的一个关键区别在于,IGD 可能需要多次(称为epoch7)遍历数据集才能达到最优解。所需的 epoch 数要么给定,要么使用基于目标函数或梯度值的启发式收敛测试来确定3。另一个细节是,Bismarck 可能会随机重新排序数据以提高 IGD 的收敛速度。
借助 Bismarck 的统一架构,我们可以在不到两个人的时间内快速实现和评估四种流行的分析技术——LR(逻辑回归)、SVM(支持向量机)、LMF(低秩矩阵分解)和 CRF(条件随机场)——在三个 RDBMS 上。这是因为,如前所述,很大一部分代码基础设施是通用的且可重用的(在给定的 RDMBS 上)。例如,从 Bismarck 中 LR 的完整实现(在 C 中,在 PostgreSQL 上)开始,只需要更改不到二十行代码即可添加 SVM。(代码、数据集和预装 Bismarck 的虚拟机可供下载:http://hazy.cs.wisc.edu/victor/bismarck-download/。)图 9 显示了TransitionLR 和 SVM 的步骤的代码片段比较,其中主要差异在于。在这里,w是系数向量,并且e是一个训练示例,其特征向量为x和标签y. Scale_And_Add更新w通过将其添加到x乘以标量c。请注意这两个实现之间的最小差异。
类似地,只需增加几十行新代码即可添加更复杂的任务(如 LMF)。这是可能的,因为 Bismarck 将各种技术的实现的不变性抽象为一个少量通用函数。这与大多数现有工具形成对比,在现有工具中,每种技术通常都有专用的代码堆栈。除了减少开发开销外,Bismarck 架构的简单性和可重用性还支持通用的系统级性能优化,这些优化适用于许多分析技术。它们使 Bismarck 在许多任务上实现了相对于许多最先进的商业和开源工具具有竞争力的(通常是卓越的)性能。更重要的是,正如下一节中解释的那样,Bismarck 实现了对大规模数据的自动可扩展性。
对于大数据应用,可扩展性是一个核心挑战,但 Bismarck 的架构能够无缝地实现可扩展性。回想一下,Bismarck 充分利用了用户定义聚合 (UDA) 的强大 RDMBS 抽象(图 8b)。UDA 机制是一种行业标准,它在 RDBMS 基础设施中经过了数十年的发展而成熟。在单个节点上,UDA 可以扩展到磁盘可以容纳的数据量(现代机器上的数百 GB),但 UDA 也可扩展到并行数据库集群,在图 8b 的三函数抽象中添加一个函数:一个Merge(state,state)函数,用于合并在无共享节点中分区数据上计算的部分聚合。尽管 IGD 不是代数11(如 SQL AVG),但我们可以利用文献中的模型平均思想21。因此,Bismarck 为其统一架构中的许多分析技术提供了自动可扩展性。相比之下,在许多定制构建的系统中,要么根本没有考虑可扩展性,要么开发人员必须担心数据管理和可扩展性问题,通常是重新发明轮子。
表 1 显示了一些验证 Bismarck 可扩展性的实验结果。(Bismarck 论文中提供了更全面的实验评估10。)复选标记表示任务完成,X 表示任务崩溃或花费超过 48 小时。N/A 表示不支持该任务。我们将 PostgreSQL 上的 Bismarck 与商业引擎 DBMS A 的本机分析工具以及流行的特定任务内存工具(Weka、SVMPerf、CRF++ 和 Mallet)进行比较。所有内存工具要么因内存不足而崩溃(Weka、SVMPerf 和 CRF++),要么因抖动而甚至在 48 小时后仍未终止(Mallet)。所有 RDBMS 内工具都可以在简单的 LR 和 SVM 任务上扩展(Bismarck 每个 epoch 不到一小时),并且 Bismarck 也可以在 DBMS A 中当前不可用的更复杂任务上扩展。
像 Bismarck 这样的基础设施抽象使我们能够研究适用于许多技术的通用系统优化。一种这样的优化是用于并行化 IGD 的 HogWild! 机制15。现代机器(例如,在企业环境中)通常具有多个内核和每个内核可访问的共享内存。IGD 可以在这些内核上并行运行,模型驻留在共享内存中。
虽然人们可能认为需要锁定以避免竞争条件,但 HogWild! 方法根本不锁定。在某些假设下,HogWild! 保证收敛和相似的质量。这种无锁并行性意味着 HogWild! 可以在图 7b 中的所有分析技术上实现接近线性的加速。我们还将 HogWild! 思想集成到 Bismarck 中,作为本机 UDA 并行性(无共享)的替代方案,并发现前者对于可以驻留在单个节点上的大型数据来说明显更快10。
某些分析技术具有特定的结构,可以进一步利用这些结构来提高性能。矩阵分解是一个很好的例子,其中 Jellyfish 机制利用该结构并优于 HogWild!。Jellyfish 通过使用拉丁方格模式来分块数据矩阵来实现这种加速17。与 HogWild! 不同,这种分块使 Jellyfish 能够在多个内核上并行运行分解,而无需对模型进行任何并发覆盖或平均。
总的来说,正如我们在 Bismarck、HogWild! 和 Jellyfish(及其后继者 HotTopixx5)中的经验表明的那样,基本的基础设施抽象通过将算法与其实现解耦来简化训练系统的开发。这种解耦使我们能够利用现有的成熟代码基础设施(例如 UDA),自动提供可维护性和可扩展性等功能。它还允许我们设计新的性能优化,这些优化可以设计一次并应用于许多技术,而不是一遍又一遍地重新发明轮子。虽然我们在这里专注于使用 RDBMS 的应用程序,但 Bismarck 提供的基础设施抽象也适用于较新的数据平台,例如提供类似 UDA 聚合功能的 MapReduce/Hadoop。我们正在努力将我们在 Bismarck 中获得的经验应用到其中一些数据平台。
Hazy 抽象是一个不断发展和壮大的集合,主要动力和灵感来源是我们自己在开发和部署训练系统(如 GeoDeepDive 和 DeepDive)方面的经验。当我们改进现有抽象并探索新抽象时,以下挑战可能特别有趣(并且我们正在积极朝着这些方向努力)
特征工程。传统观点认为“更多信号胜过复杂的模型”,我们在开发 GeoDeepDive 中的经验证实了这一想法。因此,特征(或统计信号)可以像 Hazy 等框架中的算法一样具有一等公民的地位。与通常是现成的算法相比,特征的有效性通常取决于应用程序。因此,特征工程过程往往是迭代的,并且需要人工参与。我们正在尝试将特征工程抽象为一个循环过程,涉及 E3:(数据)探索、(特征)提取和(结果)评估。
辅助开发。传统上,开发训练系统需要专业知识、经验以及对数据和算法的深刻理解。因此,通常只有少数开发人员觉得自己有资格从事此类应用程序,即使对于这些开发人员来说,开发过程通常也很棘手或费力。为了降低门槛并提高开发此类应用程序的生产力,我们正在探索各种选项来支持辅助开发(例如,自动特征建议、自动参数调整和训练系统的智能诊断2)。
新数据平台。最近的一些项目旨在将统计工具引入 Hadoop 环境4,9。将 Hazy 抽象移植到 Hadoop(以及 HBase 和 Accumulo 等相关系统)将很有趣。由此产生的组合很可能享有庞大而活跃的开发人员用户群。这个方向的一个关键挑战是如何协调 RDBMS 在 Hazy 中在 Hadoop 环境中扮演的角色。我们正在探索可能的解决方案来应对这一挑战。
人们正在竞相充分释放使用统计和机器学习技术的大数据的潜力。许多近期由大数据分析驱动的系统(也称为训练系统)取得了引人注目的成功,这引起了人们对将此类技术能力引入更广泛领域的极大兴趣。实现这一潜力的一个关键挑战是使这些训练系统更易于构建和维护。
Hazy 项目通过识别构建此类系统中的常见模式(也称为抽象)来应对这一挑战。这些抽象允许将应用程序的关注点与所使用的算法以及所需的基础实现解耦。将这些抽象作为原语进行优化和支持,可以更轻松地构建和维护训练系统。我们的想法受到我们自己构建此类系统(DeepDive、GeoDeepDive 和 AncientText)的经验以及我们与主要企业的从业者和主要分析公司的开发人员的反复互动的塑造,并随着这些经验不断发展。
Hazy 研究小组的理念是将我们所有的研究软件都作为开源软件提供。源代码、安装和使用文档、用于我们研究出版物的数据集以及预装了软件工具和数据集的虚拟机可在 http://hazy.cs.wisc.edu 获取。这些工具已被下载数千次。提供 Hazy 项目概述和教程的视频可在 http://www.youtube.com/user/HazyResearch/videos 获取。Hazy 代码已被四家公司采用并投入生产,被许多其他研究小组使用,并已部署在南极的科学观测站。
1. Agrawal, R., Srikant, R. 1994. Fast algorithms for mining association rules in large databases. In Proceedings of VLDB (Very Large Databases).
2. Anderson, M., Antenucci, D., Bittorf, V., Burgess, M., Cafarella, M., Kumar, A., Niu, F., Park, Y., Ré, C., Zhang, C. 2013. Brainwash: a data system for feature engineering. In CIDR (Conference on Innovative Data Systems Research).
3. Anstreicher, K. M., Wolsey, L. A. 2009. Two "well-known" properties of subgradient optimization. Mathematical Programming 120(1): 213-220.
4. Apache Mahout; http://mahout.apache.org/.
5. Bittorf, V., Recht, B., Ré, C., Tropp, J. 2012. Factoring nonnegative matrices with linear programs. In NIPS (Neural Information Processing Systems).
6. Bottou, L., Bousquet, O. 2007. The tradeoffs of large scale learning. In NIPS (Neural Information Processing Systems).
7. Bottou, L., LeCun, Y. 2003. Large scale online learning. In NIPS (Neural Information Processing Systems).
8. Boyd, S., Vandenberghe, L. 2004. Convex Optimization. New York: Cambridge University Press.
9. Das, S., Sismanis, Y., Beyer, K. S., Gemulla, R., Haas, P. J., McPherson, J. 2010. Ricardo: integrating R and Hadoop. In SIGMOD (Special Interest Group on Management of Data).
10. Feng, X., Kumar, A., Recht, B., Ré, C. 2012. Towards a unified architecture for in-RDBMS analytics. In SIGMOD (Special Interest Group on Management of Data).
11. Gray, J., Chaudhuri, S., Bosworth, A., Layman, A., Reichart, D., Venkatrao, M., Pellow, F., Pirahesh, H. 1997. Data cube: a relational aggregation operator generalizing group-by, cross-tab, and sub-totals. Data Mining and Knowledge Discovery 1(1).
12. Hastie, T., Tibshirani, R., Friedman, J. H. 2001. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. New York: Springer-Verlag.
13. Hellerstein, J., Ré, C., Schoppmann, F., Wang, D. Z., Fratkin, E., Gorajek, A., Ng, K. S., Welton, C., Feng, X., Li, K., Kumar, A. 2012. The MADlib Analytics Library or MAD Skills, the SQL. In PVLDB (Proceedings of the VLDB Endowment) 5(12): 1700-1711.
14. Niu, F., Ré, C., Doan, A., Shavlik, J. 2011. Tuffy: scaling up statistical inference in Markov logic networks using an RDBMS. In VLDB (Very Large Databases).
15. Niu, F., Recht, B., Ré, C., Wright, S. 2011. Hogwild!: a lock-free approach to parallelizing stochastic gradient descent. In NIPS (Neural Information Processing Systems).
16 Niu, F., Zhang, C., Ré, C., Shavlik, J. 2012. Elementary: large-scale knowledge-base construction via machine learning and statistical inference. IJSWIS-WEKEX (International Journal on Semantic Web and Information Systems-Workshop on Web-scale Knowledge Extraction).
17. Recht, B., Ré, C. 2011. Parallel stochastic gradient algorithms for large-scale matrix completion. In Optimization Online.
18. Richardson, M., Domingos, P. 2006. Markov logic networks. Machine Learning 62: 107-136.
19. Rockafellar, R. T. 1996. Convex Analysis (Princeton Landmarks in Mathematics and Physics). Princeton University Press.
20. Vowpal Wabbit; http://hunch.net/~vw/.
21. Zinkevich, M., Weimer, M., Smola, A., Li, L. 2010. Parallelized stochastic gradient descent. In NIPS (Neural Information Processing Systems).
Hazy 研究小组是由博士、硕士和本科生组成的团队,他们在 Christopher Ré 教授的指导下工作。Hazy 项目的实现归功于这些学生们无尽的热情和不懈的努力。除了作者之外,以下学生也为本文做出了贡献 - Victor Bittorf、Xixuan Feng 和 Ce Zhang。
我们衷心感谢 DARPA FA8750-09-C-0181 拨款、NSF CAREER 奖 IIS1054009、ONR 奖 N000141210041 以及 American Family Insurance、Google、Greenplum、Johnson Controls, Inc.、LogicBlox、Oracle 和 Raytheon 的捐赠或研究奖励的支持。我们感谢高吞吐量计算中心和 Miron Livny 的 Condor 研究小组的慷慨支持。本材料中表达的任何意见、发现和结论或建议均为作者的观点,不一定反映上述公司、DARPA 或美国政府的观点。
喜欢还是讨厌?请告诉我们
Arun Kumar 是威斯康星大学麦迪逊分校的博士生。他的导师是 Christopher Ré 教授。他的研究兴趣在于管理,重点是数据分析和不确定数据的管理。他于 2011 年获得威斯康星大学麦迪逊分校的理学硕士学位,并于 2009 年获得印度理工学院马德拉斯分校的理学学士学位,均在计算机科学专业。
冯牛 是谷歌公司的软件工程师。他的目标是帮助机器以更少的努力来组织世界上更多结构化、关联性和洞察力的信息。2012 年,他在 Christopher Ré 和 AnHai Doan 的指导下获得了威斯康星大学麦迪逊分校的计算机科学博士学位。他的研究生学习主要由 DARPA 机器阅读计划资助,他的论文题目是“通过统计推断和学习构建网络规模的知识库”。他于 2008 年获得清华大学计算机科学学士学位。
Christopher (Chris) Ré 是威斯康星大学麦迪逊分校计算机科学系的助理教授。他的工作目标是使用户和开发人员能够构建更深入地理解和利用数据的应用程序。Chris 在 Dan Suciu 的指导下获得了华盛顿大学西雅图分校的博士学位。由于他在概率数据管理领域的博士工作,Chris 获得了 SIGMOD 2010 Jim Gray 博士论文奖。Chris 的论文曾四次获得最佳论文或最佳会议引文(PODS 2012 年最佳论文和 PODS 2010 年最佳会议论文两次,以及 ICDE 2009 年一次)。Chris 于 2011 年获得 NSF CAREER 奖。
© 2013 1542-7730/13/0100 $10.00
最初发表于 Queue vol. 11, no. 1—
在 数字图书馆 中评论本文
Ethan Miller, Achilles Benetopoulos, George Neville-Neil, Pankaj Mehra, Daniel Bittman - 远内存中的指针
有效利用新兴的远内存技术需要考虑在父进程上下文之外操作富连接数据。正在开发中的操作系统技术通过公开内存对象和全局不变指针等抽象来提供帮助,这些抽象可以被设备和新实例化的计算遍历。这些想法将使运行在具有分解内存节点的未来异构分布式系统上的应用程序能够利用近内存处理来获得更高的性能,并独立扩展其内存和计算资源以降低成本。
Simson Garfinkel, Jon Stewart - 磨砺你的工具
本文介绍了我们在最初发布十年后更新高性能数字取证工具 BE (bulk_extractor) 的经验。在 2018 年至 2022 年期间,我们将该程序从 C++98 更新到 C++17。我们还进行了完整的代码重构并采用了单元测试框架。DF 工具必须经常更新,以跟上其使用方式的变化。对 bulk_extractor 工具的更新描述可以作为可以并且应该做的事情的示例。
Pat Helland - 自主计算
自主计算是一种使用协作来连接封地及其使节的业务工作模式。这种基于纸质表格的模式已经使用了几个世纪。在这里,我们解释了封地、协作和使节。我们研究了使节如何在自主边界之外工作,并且在保持局外人身份的同时很方便。我们还研究了如何启动、长时间运行并最终完成跨不同封地的工作。
Archie L. Cobbs - 持久性编程
几年前,我的团队正在进行一个用于增强型 911 (E911) 紧急呼叫中心的商业 Java 开发项目。我们试图使用传统的 Java over SQL 数据库模型来满足该项目的数据存储要求,这让我们感到沮丧。在对项目的特定要求(和非要求)进行一些反思之后,我们深吸一口气,并决定从头开始创建我们自己的自定义持久层。