Press "Enter" to skip to content

《释放大数据的力量:图学习的迷人世界》

利用深度学习将未开发的数据转化为长期竞争力的战略资产。

照片由Nathan Anderson在Unsplash上提供

大公司产生和收集了大量的数据,例如,这些数据中有90%是在最近几年创建的。然而,73%的数据仍然没有被利用[1]。然而,正如您所知,对于处理大数据的公司来说,数据是一笔宝贵的财富。

深度学习不断发展,而今天的挑战是将这些新解决方案调整到特定目标,以脱颖而出并增强长期竞争力。

我以前的经理有一种良好的直觉,认为这两个事件可能会同时发生,并共同促进访问、请求,尤其是停止浪费时间和金钱。

为什么这些数据被闲置不用?

访问这些数据需要太长时间,需要进行权利验证,尤其是在向用户授予访问权限之前需要进行内容检查。

可视化数据闲置的原因。(由必应图像创建者生成)

有没有自动记录新数据的解决方案?

如果您对大型企业不熟悉,没关系——我之前也是这样。在这种环境中的一个有趣概念是使用大数据,特别是HDFS(Hadoop分布式文件系统),它是一个设计用于 consad data,通过这个庞大的数据池,您可以找到结构化数据,并且在这些结构化数据中,引用了Hive列。其中一些列用于创建其他表,并且很可能作为各种数据集的源。公司通过传记方式保留一些表之间的信息。

这些列还具有各种特性(领域、类型、名称、日期、所有者…)。这个项目的目标是为被称为物理数据的数据与业务数据进行文档化。

区分物理数据和业务数据:

简单来说,物理数据是表中的列名,而业务数据是对该列的使用。

例如:名为Friends的表包含列(character、salary、address)。我们的物理数据是character、salary和address。我们的业务数据例如:

  • 对于”character” -> 角色的名称
  • 对于”salary” -> 薪水的金额
  • 对于”address” -> 个人的位置

这些业务数据可以帮助访问数据,因为您可以直接获取所需的信息。您会知道这是您项目所需的数据集,您要找的信息在这个表中。因此,您只需询问并找到您需要的内容,及早行动,不浪费时间和金钱。

“在我的最后一次实习期间,我和我的实习生团队一起实施了一个大数据/图形学习解决方案,以记录这些数据。

我们的想法是创建一个图形结构化我们的数据,并最终基于特征预测业务数据。换句话说,从存储在公司环境中的数据中,为每个数据集编写文档,以关联使用情况并在未来降低搜索成本,成为更加数据驱动。

我们有830个标签需要分类,但行数并不多。幸运的是,图形学习的力量发挥作用。我就让你自己阅读吧…”

文章目标:本文旨在理解大数据概念、图形学习、使用的算法和结果。还涵盖了部署考虑因素以及如何成功开发模型的内容。

为了帮助您了解我的经历,本文的大纲包括:

  • 数据获取:获取创建图表所需的基本数据
  • 使用GSage的基于图表的建模
  • 有效的部署策略

数据获取

正如我之前提到的,数据通常存储在Hive列中。如果你还不知道,这些数据存储在大型容器中。我们通过称为ETL的技术来提取、转换和加载这些数据。

我需要什么类型的数据呢?

  • 物理数据及其特性(域名、名称、数据类型)。
  • 血统关系(物理数据之间的关系,如果它们经历了共同的转换)。
  • 将“与业务数据相关的某些物理数据”的映射到算法自行执行。

1. 特性/特征是我们存储数据时直接获取的;一旦存储数据,它们就是强制要求的。例如(取决于你的情况):

主要特征示例(由作者制作)

对于特征,根据经验决定在三列上使用特征哈希算法。

特征哈希算法:机器学习中用于将高维类别数据(如文本或类别变量)转换为较低维度的数值表示,以减少内存和计算需求,同时保留有意义的信息。

如果具有类似模式,你也可以选择使用独热编码技术。如果你要发布模型,我的建议是使用特征哈希算法。

2. 血统关系稍微复杂一些,但并非无法理解。血统关系就像物理数据的历史,我们对已应用的转换有个大致的了解,以及数据存储在其他地方。

在脑海中构想大数据及其中的所有数据。在某些项目中,我们使用来自表格的数据,并通过作业(Spark)应用转换。

Atlas血统关系可视化,来自Atlas网站,链接

我们收集所有物理数据的信息,以在我们的图表中创建连接,或至少其中一个连接。

3. 映射是为我们的项目增加价值的基础。通过它,我们将企业数据与物理数据关联起来。这为算法提供了经过验证的信息,使其可以在最后对新输入数据进行分类。要执行此映射,需要由了解公司流程并具备识别困难模式的能力的人来完成。

根据我亲身经历的机器学习建议:

引用Andrew NG先生的话,经典机器学习中有一个叫做算法生命周期的东西。我们通常想着算法,让它变得复杂,而不仅仅使用一个好用的线性回归(我试过,不奏效)。在这个生命周期中,有预处理、建模和监控的各个阶段…但最重要的是数据聚焦。

我们经常犯的一个错误是认为数据聚焦理所当然,然后开始进行数据分析。我们从数据集中得出结论,有时没有质疑其相关性。朋友们,别忘了数据聚焦,它可以提高性能,甚至导致项目的改变:)

回到我们的文章,获取数据后,我们终于可以创建我们的图表

我们数据集的分布图(networkx绘制),用图表表示。 (作者制作)

这个图考虑了一个批次的2000行,因此数据集和表中有2000列。在中心,您可以找到业务数据,而偏离中心的位置则是物理数据。

在数学中,我们将图表示为G,G(N,V,f)。 N代表节点,V代表顶点(边),f代表特征。假设这三个都是非空集合。

对于节点(我们在映射表中有业务数据ID)以及追踪它们的物理数据。

说到追溯性,它部分作为边,与我们已经通过映射和ID拥有的链接完全相同。我们必须通过使用Apache Atlas APIs进行ETL过程来提取它。

您可以看到,一个大数据问题,在打下基础之后,可以变得容易理解但更具挑战性,特别是对于年轻的实习生来说…

“忍者卡通在电脑上”(由Dall.E 3生成)

使用GSage进行基于图的建模

图学习的基础知识

本节将专门用于解释GSage以及为什么在数学和经验上选择了它。

在实习之前,我并不习惯使用图。这就是为什么我购买了这本书[2],它在描述中也包含了这本书,因为它在我理解原则方面帮助了我很多。

图机器学习:通过应用机器学习技术将图数据推向新的高度…

Noté /5. Retrouvez Graph Machine Learning: Take graph data to the next level by applying machine learning techniques…

www.amazon.fr

原则很简单:当我们谈论图学习时,我们将不可避免地讨论嵌入。在这种情况下,节点及其相似性在数学上转化为减少原始数据集维度的系数,从而使计算更加高效。在减少过程中,解码器的一个关键原则之一是保持最初相近的节点之间的相似性。

另一个启发的来源是Maxime Labonne的[3]关于GraphSages和Graph Convolutional Networks的解释。他展示了极好的教学能力,并提供了明晰可懂的示例,使那些希望深入了解这些概念的人可以理解。

GraphSage的模型

如果您对这个术语不熟悉,放心,就在几个月前,我也和您一样。像注意力网络和图卷积网络这样的架构给我带来了很多噩梦,更重要的是,让我整晚都清醒。

但是为了节省您的整个一天,特别是节省您的通勤时间,我将简化算法给您介绍。

一旦您放置了嵌入,那就是魔法发生的时候。但是,这一切是如何工作的,您会问吧?

基于Scooby-Doo Universe的模式,以解释GSage(作者制作)

你的朋友决定了你的身份”是您必须记住的句子。

这是因为GraphSAGE的一个基本假设是,位于同一邻域中的节点应该具有相似的嵌入。为了实现这一点,GraphSAGE使用聚合函数,将邻域作为输入,并将每个邻居的嵌入与特定权重组合在一起。这就是为什么神秘公司的嵌入将在Scooby的邻域中。

本质上,它从邻域中收集信息,权重根据损失函数可以是学习得到的或固定的。

当学习聚合器权重时,GraphSAGE的真正优势就显现出来了。此时,该架构可以使用节点的特征和邻域生成看不见节点的嵌入,使其成为图推理机器学习中的强大工具。

Architecture, Maxime Labonne’s文章, 链接

从这张图上可以看出,当我们在GraphSage架构上使用相同的数据集时,训练时间减少了。GAT(图注意力网络)和GCN(图卷积网络)也是非常有趣的图形架构。我真的鼓励您往前看!

在第一次计算中,我感到震惊,震惊地看到在数千行中训练1000批需要25秒。

我知道此时你对图学习感兴趣,并且希望学到更多。我的建议是阅读这篇文章。有很棒的例子,很好的建议)。

GraphSAGE:扩展图神经网络

用PyTorch Geometric介绍GraphSAGE

towardsdatascience.com

因为我是VoAGI的读者,所以当我查看一篇新文章时,我对阅读代码很感兴趣。对于您,我们可以使用SAGEConv层在PyTorch Geometric中实现一个GraphSAGE架构。

让我们创建一个具有两个SAGEConv层的网络:

  • 第一个层使用ReLU作为激活函数和一个dropout层
  • 第二个层直接输出节点嵌入

在我们的多类别分类任务中,我们选择采用交叉熵损失作为主要损失函数。这个选择是因为它适用于具有多个类别的分类问题。此外,我们还加入了L2正则化,强度为0.0005。

这种正则化技术有助于防止过拟合并通过惩罚大的参数值来促进模型的泛化。这是一种全面的方法,以确保模型的稳定性和预测准确性。

import torch
from torch.nn import Linear, Dropout
from torch_geometric.nn import SAGEConv, GATv2Conv, GCNConv
import torch.nn.functional as F

class GraphSAGE(torch.nn.Module):
  """GraphSAGE"""
  def __init__(self, dim_in, dim_h, dim_out):
    super().__init__()
    self.sage1 = SAGEConv(dim_in, dim_h)
    self.sage2 = SAGEConv(dim_h, dim_out)#830 for my case
    self.optimizer = torch.optim.Adam(self.parameters(), 
                                      lr=0.01,
                                      weight_decay=5e-4)
  
  def forward(self, x, edge_index):
    h = self.sage1(x, edge_index).relu()
    h = F.dropout(h, p=0.5, training=self.training)
    h = self.sage2(h, edge_index)
    return F.log_softmax(h, dim=1)
  
  def fit(self, data, epochs):
    criterion = torch.nn.CrossEntropyLoss()
    optimizer = self.optimizer
    self.train()
    
    for epoch in range(epochs+1):
      total_loss = 0
      acc = 0
      val_loss = 0
      val_acc = 0
      
      # Train on batches
      for batch in train_loader:
        optimizer.zero_grad()
        out = self(batch.x, batch.edge_index)
        loss = criterion(out[batch.train_mask], batch.y[batch.train_mask])
        total_loss += loss
        acc += accuracy(out[batch.train_mask].argmax(dim=1), 
                        batch.y[batch.train_mask])
        loss.backward()
        optimizer.step()
        
        # Validation
        val_loss += criterion(out[batch.val_mask], batch.y[batch.val_mask])
        val_acc += accuracy(out[batch.val_mask].argmax(dim=1), 
                            batch.y[batch.val_mask])
      
      # Print metrics every 10 epochs
      if(epoch % 10 == 0):
          print(f'Epoch {epoch:>3} | Train Loss: {total_loss/len(train_loader):.3f} ' 
                f'| Train Acc: {acc/len(train_loader)*100:>6.2f}% | Val Loss: ' 
                f'{val_loss/len(train_loader):.2f} | Val Acc: ' 
                f'{val_acc/len(train_loader)*100:.2f}%')

def accuracy(pred_y, y):
  """Calculate accuracy."""
  return ((pred_y == y).sum() / len(y)).item()

@torch.no_grad()
def test(model, data):
  """Evaluate the model on test set and print the accuracy score."""
  model.eval()
  out = model(data.x, data.edge_index)
  acc = accuracy(out.argmax(dim=1)[data.test_mask], data.y[data.test_mask])
  return acc

模型部署:

在我们项目的开发和部署过程中,我们利用了三项关键技术的力量,每项技术都有着独特而重要的作用:

谷歌的三个标志

Airflow:为了高效管理和调度我们项目中复杂的数据工作流程,我们使用了Airflow Orchestrator。Airflow是一个被广泛采用的工具,用于编排任务、自动化流程,并确保我们的数据流水线顺利运行,并按计划安排。

Mirantis:我们项目的基础设施是建立在Mirantis云平台上的。Mirantis以提供强大、可伸缩和可靠的云解决方案而闻名,为我们的部署提供了坚实的基础。

Jenkins:为了简化我们的开发和部署流程,我们依赖于Jenkins,这是在持续集成和持续交付领域中备受信赖的名字。Jenkins自动化了我们项目的构建、测试和部署,确保在整个开发周期中保持高效和可靠。

此外,我们将机器学习代码存储在公司的Artifactory中。那么,到底什么是Artifactory呢?

Artifactory: Artifactory是一个集中的存储库管理器,用于存储、管理和分发各种构件,例如代码、库和依赖项。它作为安全和有组织的存储空间,确保所有团队成员都可以轻松访问所需资产。这使得合作无缝,并简化了应用程序和项目的部署,使其成为高效开发和部署工作流程的有价值的资产。

将我们的机器学习代码存储在Artifactory中,确保我们的模型和数据可以通过Jenkins轻松支持我们的部署。

ET VOILA!解决方案已部署。

我谈了很多基础设施的事情,但关于机器学习和我们所取得的结果却没有讲太多。

结果:

预测的可信度:

对于每个物理数据,我们考虑了两个预测,因为模型的性能。

这怎么可能呢?

probabilities = torch.softmax(raw_output, dim = 1)#torch.topk to get the top 3 probabilites and their indices for each predictiontopk_values, topk_indices = torch.topk(probabilities, k = 2, dim = 1)

首先我使用softmax使输出可比性,并且之后我使用了一个名为torch.topk的函数。它返回给定维度上给定input张量的k个最大元素。

所以,回到第一个预测,这是我们经过训练后的分布。告诉你们,男孩和女孩们,那太棒了!

模型输出概率的图表(来自matplotlib),第一个预测(作者创建)

训练/测试/验证的准确率和损失。

我不会教你什么是机器学习中的准确率和损失,我假设你们都是专业人士… (如果不确定,可以问chatgpt,没有羞耻的)。在培训中,通过不同的尺度,您可以看到曲线的收敛,这是一个很好的表现,说明学习是稳定的。

准确率和损失的绘图(由作者制作)

t-SNE :

t-SNE(t分布随机邻居嵌入)是一种降维技术,用于在较低维空间中保留数据点之间的成对相似性,以可视化和探索高维数据。

换句话说,想象一下训练之前的随机分布:

训练之前的数据分布(作者制作)

记住我们正在进行多分类,所以这是训练之后的数据分布。特征聚合似乎做得不错。形成了聚类并且物理数据似乎已加入组群,说明训练进行得很好。

训练之后的数据分布(作者制作)

结论 :

我们的目标是基于物理数据预测商业数据(我们做到了)。我很高兴告诉您,该算法现在已投入生产,并正在接纳未来的新用户。

虽然出于专有原因我无法提供完整的解决方案,但我相信您已经具备了所有必要的细节或拥有足够的能力自行实施。

我最后的建议,发誓了,要有一个优秀的团队,不仅要有工作能力强的人,还要有能够让您每天开怀大笑的人。

如果您有任何疑问,请随时联系我。随时与我联系,我们可以详细讨论。

如果我看不到您,祝您下午好,晚上好,晚安!

<p您已经理解了一切吗?

正如Chandler Bing所说:

“撒谎总比去进行复杂的讨论好”

别忘了点赞和分享!

参考和资源

[1] Inc (2018), 来自Inc的网络文章

[2] 图机器学习:应用机器学习技术和算法将图数据提升到新的水平 (2021), Claudio Stamile

[3] GSage, 用于扩展图神经网络的方法, (2021), Maxime Labonne

图片来源

</p您已经理解了一切吗?

Leave a Reply

Your email address will not be published. Required fields are marked *