为人工智能和分析生产非结构化数据

2021年5月26日下午05:00(太平洋时间)

大型Delta Lake通常包含结构化和非结构化数据的混合。数据团队使用Apache SparkTM来分析结构化数据,但通常很难将相同的分析应用于非结构化、未标记的数据(例如图像、视频)。团队被迫使用昂贵的手工流程来将非结构化数据转换为更有用的数据——他们要么付钱给第三方来标记他们的数据,要么购买标记数据集,要么缩小项目范围来利用公共数据集。如果数据团队有更快、更具成本效益的方法将非结构化数据转换为结构化数据,他们就可以支持围绕公司独特的非结构化数据集构建的更高级用例。

在这次演讲中,我们演示了团队如何在Databricks中轻松地为AI和分析准备非结构化数据。我们利用LabelSpark库(Databricks和Labelbox之间的连接器)将非结构化数据集连接到Labelbox,以编程方式设置一个本体用于标记,并在Spark DataFrame中返回标记的数据集。标签可以由人类、Databricks中的AI模型或两者的结合来完成。我们还将展示一个模型辅助的标签工作流程,允许人们轻松地检查和纠正模型的预测标签。这个过程可以减少实现强大模型性能所需的非结构化数据量。

Labelbox是一个培训数据平台,允许公司从非结构化数bob体育客户端下载据快速生成结构化数据。结合Databricks和Labelbox为您提供了一个端到端的非结构化数据工作流程环境-一个围绕Delta Lake构建的查询引擎,快速注释工具和强大的机器学习计算环境。

欲了解BOB低频彩更多,请访问www.labelbox.com/databricks-partner

在本节中请注意:
尼克·李,Labelbox的整合主管
Chris Amata, Labelbox解决方案工程师

成绩单

尼克·李:大家好。感谢您参加2021年数据和人工智能峰会,为人工智能和分析生产非结构化数据。我叫尼克·李,是LabelBox LabelSpark项目的集成主管。

克里斯·阿玛塔:我叫克里斯·阿玛塔。我是LabelSpark的解决方案工程师和首席开发人员。

Nick Lee:今天我们非常兴奋地向你们展示我们如何帮助企业获取非结构化数据,并将其用于大规模的机器学习和分析工作流程。

Nick Lee:许多企业拥有大量的数据宝藏,但这些数据是非结构化的。它看起来像这样。大量的图片,视频和文字。都是关于生意中发生的重要事情。问题是,当您以当前状态获取数据时,除非数据被正确格式化,以便算法能够理解它,否则您得到的唯一结果是一个混乱的算法。公司正在为人工智能和分析生产这些非结构化数据,这样他们就可以从这些数据中获得有价值的见解,并训练AI和ML根据这些数据提供建议和预测。好处是巨大的。如果我们能解决这个问题,我们就能制造出识别犯罪的安全摄像头,或者开发出可以帮助医生在医学扫描中识别癌症或其他问题的软件。我们可以通过捕捉产品缺陷来减少制造缺陷,因为它们以每分钟数千个产品的速度在传送带上移动。所以这个问题,如果能大规模有效地解决,就有可能真正改变当今社会的很多事情。

尼克·李:现在在LabelBox,我们和很多客户合作过,他们都做过同样的事情,他们都遵循类似的模式。他们把他们的非结构化数据放在云中,可能是AWS、GCP或Azure,在他们的Lakehouse环境中,他们的数据团队将把这些非结构化数据传递给一个训练数据平台,在那里,标签师和主题专家团队可以添加结构,并通过注释丰富数据。bob体育客户端下载从那里,数据返回到Lakehouse,团队能够通过机器学习来运行它,或者将其传递给分析师团队进行洞察和分析。更先进的公司能够将他们的ML算法应用于新数据,因为它进入到训练数据平台的预标记数据中,同时为人工标记人员提供机会来审计该算法,并查看他们是如何标记数据的。bob体育客户端下载

尼克·李:所以如果一个人可以检查算法的输出,他们可以纠正它,你可以重新训练你的算法。这样就形成了一个良性循环。今天,我们将向你展示如何使用Databricks和LabelBox来运行这一切。废话不多说,让我们进入Databricks,看看它是如何工作的。

Nick Lee:我已经登录到我的Databricks环境中,为了这个演示,我加载了一个名为“非结构化数据”的表。这是一个非常简单的数据集。我这里只有20行但我只是想让你们知道它是什么。这是一堆来自街头摄像头的照片。如果我们看一下其中一个例子。好了。它只是人们在城市环境中外出的照片。今天,我试图建立一个模型,可以识别框架中的人,以及雨伞和汽车。如果图像中有汽车。

尼克·李:这只是一个例子。您的用例可能是在制造业或医药行业,但让我们继续,看看我们是如何做的。现在,数据是非结构化的,它在一个spark表中。我要做的是创建一个LabelBox客户端。和LabelSpark库,我可以传递我的非结构化数据火花表,对LabelBox。我将调用这个命令。只需几行代码,我就已经在LabelBox中注册了该数据集。现在我想指出的是,数据实际上并没有上传到LabelBox。它还在数据湖上。事实上,LabelBox不需要有数据的本地副本。 It can just reference your information right there on the Datalake. No need to move it.

尼克·李:在LabelBox中,我们有一个本体构建器,它允许你通过编程方式为你的非结构化数据集设置本体。本体论就是你要问标注者的一组关于图像、视频或文本的问题。因此,在本例中,我添加了一个边框工具,我希望标签器使用它来选择框架中的所有人。我已经包含了一个分割蒙版工具。人们会画出所有的车然后用这种方法来识别这些车我还添加了一个多边形工具来选择所有的伞。

尼克·李:除此之外,我还加入了一些分类问题。如果可能的话,我希望贴标员能识别图像中的天气以及一天中的时间。这就是本体。ad工具和添加分类,我可以创建这个本体,并将其附加到我的项目。现在数据集和本体已经通过编程的方式在LabelBox中建立起来了我可以打电话给我的朋友Chris,让他帮我标记这些数据并把我标记的数据集拿回来。

尼克·李:克里斯,你能帮帮我吗?

克里斯:首先,我要用多边形工具给这把伞贴上标签。我要把图像放大一点然后开始指向和点击。在这里,我可以在这把伞上做标记。我们可以看到这个用户界面真的是这样做的,标记团队可以快速迭代地建立一个保护伞,缩小一点,抓住一个边界框,开始标记这些人。现在我给我的两个人都贴上了标签。然后我进去。最后一个我想在对象中标注的是我想开始分割这张图像。我用分割工具来放大这些车。我想把图像分开。

克丽丝:这要花很多时间。所以我可以把它作为一个免费的工具。我也可以像多边形一样点击,但在这里,我将快速使用我们的超级像素工具。我想先给后面这两辆车做个标记。它不会马上变得完美但我要使用橡皮擦快速地在所有地方点一下,这样我就可以捕捉到所有的蒙版。所以我很快很容易地在这些车周围画出分割蒙版。任何我遗漏的地方,我可以进来,放大,用钢笔工具填充。我可以点击,捕捉一切。一旦我在这张图中标记好了我想要的所有东西,我就可以开始分类了,所以我们可以看看天气,我们可以知道这是有点雨,因为他们有伞。地上有一些水。

克里斯:也许我不知道这是下雨还是阴天,我可以给评论者留个便条,说:“嘿,尼克,这是在下雨吗?我不知道。”尼克,作为降雨主题的专家,将会进来做这个检查,看看这是下雨还是阴天,这样我们就可以确保它的结构正确。一天的时间,这是未知的。使用LabelBox,一旦你创建了项目,你可以进入队列,它会让它分发给所有不同的标签者。一旦我提交了这张图片,我马上就会收到一张全新的图片,我可以进去做和刚才看到的一样的事情。我可以在人物周围画出边界框。我可以在后面的一些车周围画出分割蒙版。我可以对它进行分类,并对图像进行不同的处理。

Chris:另外,如果我们想要引入所有不同的数据类型来构建一些结构,我们可以看不同的视频。在非结构化数据中,我们真正想要看到的是物体如何在帧中移动以及它们如何能够在整个视频中调整和改变。在LabelBox中,我们可以对所有这些帧进行插值。所以我在这里画了几个水母的包围框,我写得有点快。我们能做的就是控制速度。我会把它调回正常时间。我们可以看到所有这些水母都在移动它们移动得很流畅。这些包围框在追赶它们。在这里,我们可以看到这个可能不是完美的插值。所以我要进来,确保它移动一点。

克里斯:我们还知道,世界上有很多非结构化文本。我们要看一些假期聊天机器人的短信,因为我知道夏天快到了,事情越来越多,我想尽快去度假。所以我们想看名称实体,某些东西在哪里然后我们也想开始分类这个文本。这可以是沉积物。这可以是度假类型和任何我们想要添加上下文到我们的文本聊天,我们的消息,我们的声明和我们的pdf,我们可以在这个平台上做。bob体育客户端下载

克里斯:我想在百慕大找到那个地方。我绝对想去百慕大。进去,把这个高亮。我们可以找到日期。今天是1月1日,我将继续使用这个名称实体识别和标记文本。持续时间,一周。一旦我们有了一些结构化数据,尼克,事情就会有进展。我们也许可以休一个星期的假。

Chris Amata:好的。谢谢你克里斯。

Chris Amata:现在我的数据集已经被标记,我可以通过简单地从LabelSpark调用Get Annotations方法来将它拉到我的Lakehouse环境中。我要把标记好的数据拉进来让我们看一下第一行这样我们就能知道LabelBox返回了什么。我们在这里包括一些元数据列。如果你正在使用LabelBox中的一些更高级的功能,比如Consensus,你可能想要多人标记同一个图像,以防在如何标记它方面存在一些主观性,那么这些功能就很有用。实际上,你可以平均他们的回答,并根据共识为不同的数据行打分。现在我们还得到了关于谁创建了这个标签的信息,它所属的数据集以及这里的文件名,streetview .jpeg。LabelBox也有一个问题和评论的概念,如果我在这个被标记的图像中发现了错误,我可以用一个问题标记它,但它看起来没有问题。

Chris Amata:在这里,让我们跳到标签栏。这是最有价值的一列。它包含了这个特定图像的注释。我们将这些标签以JSON的形式传递给你。这是一个开放的标准,我们不会把你的注释锁定在某种专有格式中。我们以JSON格式提供给你,你可以随意解析它。如果我们把这个JSON分开来看,这张图片有几个分类。这是在白天拍摄的阴天图像,我们在这里有一些物体。看起来像是一些边界框。这里有很多人。 And if we open up one of these bounding boxes within the spark data frame, we actually observe and we include the X and Y coordinates of that bounding box as well as some information like the height and the width.

Chris Amata:所以这对很多数据科学家来说已经很有用了,他们可以处理这个JSON,但LabelSpark还包括一些方法,帮助使这些信息更容易消化。我们将运行表格扁平器将JSON拆分成单独的列。有些列的用处不大。它们更适合那些想要跟踪LabelBox API中标识信息片段的开发人员。但是我们也得到了分类响应的数组或者是框架中对象的数组。如果我滚动到这里,我们会得到一个列表所有的蒙版应用到框架中的对象。如果我从这些蒙版中选择一个。让我们随机选择这个,然后载入这个。它会在这个对象上带来一个带有掩码的PNG文件。

Chris Amata:这是一个文件,你可以用机器学习来识别图像中特定物体出现的位置。你可以使用分割掩码来教机器学习如何在像素完美水平上识别特定的对象,或者你可以使用这样的包围框。看起来这个显然是一个边界框。我们有天气专栏,每天的时间以及人们的汽车和雨伞计数。如果你想找到特定天气或某一天的所有图像或者你只关心人,你可以开始针对这个表编写查询并根据这些特定的数据行进行过滤。例如,让我们运行这个查询来找到所有有人物,汽车,雨伞和雨的照片。看起来这个SQL查询返回了整个数据集中的一张图像。

克里斯·阿玛塔:我可以确认,是的,我的所有条件都满足了。从这里,我可以到其中一列从这个数据行中得到一些对象。在前面,我们看到了一个所有人的数据行示例。这个里面其实有一些雨伞。所以你得到了每个伞的多边形的X和Y坐标。看一下X和Y坐标,边界框和蒙版是很有趣的,但也许我想快速形象化。我可以在这里使用这个链接,并在我的Datalake中跟踪它回到原始资产。在这里的最后一列,我得到了一个回到LabelBox中那个标签的链接。那实际上会加载所有的包围框,分割蒙版和多边形在那个帧上,还有那里的分类。假设你是一名数据科学家,你写了这个查询,你想快速地跳到图像中,看看突出显示了什么。 This is a really easy way to do that.

Chris Amata:让我们做另一个查询作为例子。一天中的时间,我们选择白天的时段,以及人数超过10人的时段。我们开始吧。看来我们有很多人在里面的照片。让我们来看看其中一个最常见的图像。这个里面有19个人。我要转到我的这一列,查看标签。

Chris Amata:哇。那是相当多的人。所以这是一种非常简单的方法来查询你以前的非结构化数据集,并深入检查它们,并为一些机器学习工作流程提供动力。克里斯将向我们展示下一步,我们将训练一个模型来识别人,伞和汽车,并用它来标记一个我们从未见过的例子图像。

Chris:在我的Databricks笔记本上,我将运行一些代码,我将导入一个TensorFlow模型,正如Nick所说,我们用人、车和雨伞的训练数据进行训练。它会进入,它会从Deltalake接收一个新的非结构化数据。它将使用这个TensorFlow模型它可以是任何模型。这就是您的模型环境。这就是训练数据平台的真正意义在于让你的模型能够自动学习和导入这些新数据,这样它就会一直被bob体育客户端下载修改和改进。因此,一旦模型加载,我们将再次使用这个本体构建器,来构建相同的本体。这次我加上了一个手提包,因为我想展示点式工具。

克里斯:然后我们会创建我们的项目。我们有一个新的数据,其中有一些人,有一些车,我们想要开始构建它。所以我用这个新数据创建了我的项目,叫它MAL Demo。如果你想快速检查一下,我打开模型辅助标记。一旦我们打开这个…让我们去快速检查一下。我们会为我们准备一个MAL演示。你可以看到很多人,几辆车,一堆雨伞,把所有这些包围框都放在他们身上,这将是一个非常乏味的时间。现在我想我想把TensorFlow模型包含在这个训练数据中。我会回到这个问题上,引入我的本体论。现在我有了所有的图式。 So my model can relate to the schemas.

Chris:我将把所有这些模式都放在一个NDJSON中,它基本上会接受我们的模型推论,并将它们映射到一个labelbox化的版本。这里我将把所有这些推论加载到labelboxready JSON中。运行这个命令需要一些时间。运行之后,我想展示模型的可视化。我们刚刚看到的是无结构的,稍等一下。现在我们可以看看我们的模型输出,所有这些边界框,这些特定的手提包和这些汽车。现在我想把这些放到LabelBox中。因此,让我们从NDJSON上传我们的模型推论到LabelBox。现在让我们回到平台上。bob体育客户端下载你可以在平台上看到你的模型推论。bob体育客户端下载 And so here, we now have that TensorFlow output as training data and we just saw how it would be really difficult to go in and label all of these people.

Chris:现在我们有了这些人的预标记,作为一个标签器,我现在要成为一个迭代器。我要在边缘情况下交换我的模型。所以如果我放大,我看到我漏了一把伞,这个包围框捕捉了一些人,太多了。现在我可以进来修改一下。所以我现在要修正我的模型推理。我在训练这个模型,这是一个个体,这是另一个人。所以我用这些新的训练数据来改进我的模型。一旦我提交了这个,它将会非常棒,因为我将会直接返回。现在我们要回到我们开始的地方在LabelSpark库中,我现在从我的项目中引入,我现在要去显示我现在修改过的所有注释。所以我有了这个迭代的活动工作流,我改进了我的模型输出。 I brought it back in and now it’s living in a new Deltalake for that next cycle of better performance.

Chris Amata:谢谢你精彩的演示。我们刚才看到的是一个模型辅助标记工作流的例子,我们取一些非结构化数据,对其进行注释,然后生成一个火车模型,并使用该模型预标记模型从未见过的资产。然后我们进入LabelBox,修正输出,从那里,我们可以重新训练模型并改进它。我们今天没有时间讲MLflow或Deltalake,但如果你想把它带到下一个层次,你可以想象一个完全自动化的MLflow工作流,管理大量的编配和Deltalake与时间旅行,拍摄你的训练数据的快照,以及你在这个模型辅助标记工作流中对数据所做的修正。

克里斯:尼克,我们今天学了很多很酷的东西。在我们结束之前,我们有什么方法可以让它变得更好?我们怎么才能更进一步呢?LabelSpark的下一步是什么?

克里斯·阿玛塔:嗯,我很高兴你提出这个问题。本着今年会议主题“开放”的精神,我们很高兴地宣布,我们将在Apache 2.0许可下发布LabelSpark库作为开源库。bob下载地址

Chris Amata:你今天看到的LabelBox Python SDK已经获得了Apache 2的许可。所以继续吧,把它用在你的产品和项目中。我们期待看到你们用我们的技术能做些什么。

Chris Amata:访问www.labelbox.com/databricks-partner获取库和文档。我们欢迎来自开源社区的贡献,我们期待着与您合作,帮助我们突破非结构化bob下载地址数据、人工智能和机器学习的界限。

Chris Amata:谢谢。我们希望你们有一个很棒的数据和人工智能峰会。

尼克•李

尼克•李

Nick Lee是Labelbox的高级客户成功经理,他帮助人工智能团队解决计算机视觉和自然语言处理方面的挑战性问题。尼克还领导LabelSpark项目,…
阅读更多

克里斯·阿

克里斯·阿

Christopher Amata是Labelbox的解决方案工程师,他为人工智能团队设计和部署技术解决方案。他也是LabelSpark项目的主要开发人员,一个Labelbox倡议交流…
阅读更多