在第 1 章中,我们带你初探了企业环境中的图学习世界,讨论了其多种用例,并在章节结尾强调了它所带来的挑战。随着本书的推进,我们将对整条将要深入探讨的 GML 流水线做一个高层概览。这条流水线从头到尾覆盖了从收集图数据到将其用于 GML 服务的全过程。
本章将从基础阶段——图数据流水线——开始。这个初始阶段对整个流程至关重要,指的是一系列为高效处理、加工与分析图结构数据而设计的过程,它为随后的所有工作奠定基础。接下来,我们将讨论 GML 训练流水线,即为特定图任务(如节点分类或链接预测)选择、训练并评估图学习算法的一系列步骤。最后,我们会介绍图推理流水线,用于检验新模型是否已准备好推广到生产环境;若已就绪,模型将被部署以供下游系统使用。比如,在构建电商图推荐系统时,模型会被集成进更大的电商解决方案中,为平台用户提供个性化推荐。这三条子流水线如图 2-1 所示。
值得注意的是,除本章对图数据流水线的高层概览外,本书不会对数据流水线这一方面进行细致展开。关于该主题已有优秀资源可供参考,例如 O’Reilly 的《The Practitioner’s Guide to Graph Data》等。相应地,本书将主要聚焦于图训练与推理两条流水线。
图数据流水线
在本节中,我们将深入图学习流水线的第一阶段——图数据流水线(见图 2-2)。但在介绍该流水线的各个组成部分之前,我们先来定义什么是图数据,以及图数据的类型。
图数据的定义与图数据层级
图数据是指以由边连接的节点集合来表示的数据。图数据可以刻画多种类型的信息,包括交通网络、生物网络、社交网络、推荐系统等。
在现代应用中广泛使用的图数据,其特点是实体之间具有高度的连通性。尽管社交媒体网络图或许是最为人所知的示例,但许多其他现象和应用同样可以用图来建模。我们可以根据将原始数据转化为图所需的变换程度,将图数据划分为不同层级。
如图 2-3 所示,这些层级构成了一个按对图建模“就绪度”组织的四层层级体系,分别为:
- 天然图数据:本身具有类图结构的数据
- 具有动态结构、可用图表示的现象
- 结构化数据
- 可转换为结构化格式的非结构化数据
在这一层级体系中,天然图数据位于第 1 层,表示此类数据本身已具有类图结构。第 2 层表示“可用图表示的现象”,即对具备动态行为的问题或现象进行图数据表示之后得到的图。第 3 层代表结构化数据(如各类数据库中的数据),第 4 层则代表无任何结构的非结构化数据(如文本)。下方的箭头表示转换的方向。举例而言,若我们从非结构化数据出发并希望将其表示成图,必须先将其转换为结构化数据。在本节余下部分,我们将逐一探讨这些类别并进行详尽说明。
天然图数据
我们多次提到自然界中的“可图化”数据,也称为“天然图”或“自然网络”。在天然图中,底层数据以图的形式呈现,符合图的定义:由节点(实体)与边(关系)组成的网络。因此,天然图数据指的是自然界中客观存在、且具有类图结构的数据。^1
自然及其生物组成本身就是数据,因此用图来表示是一种顺理成章的方法。动物、植物与人类之间及其相互间的交互都可以表示成一张图。一个例子是食物网:它刻画了食物链之间的自然连接,并以图形方式呈现生态群落中的“谁吃谁”。
化学分子也是天然类图数据的另一个例子:原子可视为节点,化学键可视为边。总体而言,生物医学领域包含大量天然可图的数据——基因与蛋白质共同调控生物过程,它们的相互作用可以用图来建模(见图 2-4)。
人类神经系统也可以被视为一个复杂图。我们大脑中神经元之间的连接本质上以网络方式运作,其中受体充当节点、神经元充当边。将这些庞大的系统表示为图网络,可以抽象掉许多复杂性,从而简化分析。
可图表示的现象
图具有极强的表达能力,使得大多数问题都能用图的方式表示与建模。凡是体现事物之间动态交互的现象,都可以用图来建模。这类现象的共同点在于,其底层数据满足图结构的基本要求——由边连接的节点——而且数据在不断演化。
这一类别的一个例子是道路网络:由道路片段及其交互构成(参见图 1-5)。社交网络与社会本质上也是由数百万乃至数十亿个个体(节点)及其关系(边)构成的集合。其他例子还包括电话通话、电子设备之间的通信与交易,以及金融交易。
结构化数据
结构化数据是指具有明确定义结构、可用图结构表示的数据。例如关系型数据库、本体(ontology)与知识图谱。尽管其表示形式各异(如关系数据库中的表,或资源描述框架(Resource Description Framework,RDF)^2 中的元组),但大多数此类数据都可以被视作图。事实上,通过一定的映射,可以在不同表示之间相互转换。
考虑一个以表组织数据的关系数据库(见图 2-5)。若要把这种关系型结构表示成图,可以先识别数据中的实体(或对象),并将其表示为图中的节点。图 2-5 中的实体集合为(groups、users、posts、comments)。接着,识别这些实体之间的关系,并用连接相应节点的边来表示(在图 2-5 中,friendship 与 membership 两张表表示实体之间的关系)。还可以用属性或标签来表示关于实体与关系的附加信息。
再想一想一个表示社交网络的简单关系型数据结构:每条记录代表一个人,包含其姓名、年龄以及其朋友的姓名。若将其表示成图,可以为每个人创建一个节点,并为每一条“朋友”关系添加一条边。这样得到的图由一组表示社交网络中人的节点,以及一组表示他们之间友谊关系的边构成。
你还可以在节点和边上添加属性或标签,用来表示关于数据中实体与关系的附加信息。比如,你可以用人的姓名和年龄标注每个节点,用关系类型(如朋友、家人等)标注每条边。图 2-6 展示了如何将结构化数据顺畅地映射为图表示:图中,表示关系型结构中实体的表被映射为节点并以圆形显示;而表示实体间关系的表则以带有关系说明标签的连线来表示。
非结构化数据
非结构化数据未标准化——它没有明确定义的结构,因此无法直接以数据模型或模式(schema)的形式呈现。文本数据就是非结构化数据的一个例子。为了创建结构化格式,需要对其进行转换或表格化处理。一个从文本数据中抽取结构的常见过程,是使用自然语言处理(NLP)来识别命名实体。^3 一旦从非结构化文本中抽取出这些有意义的命名实体,便可将其存入数据库或其他类型的结构化格式。随后得到的结构化数据就可以表示为图。为说明我们的方法,我们制作了一个概念性示意图(图 2-7),展示了将非结构化数据转换为图数据的主要流程。
从根本上说,为企业数据构建图表示所采用的最佳方法取决于组织的具体需求与目标。为找到合适方案,可能需要尝试不同的方法与工具。
图数据的获取与理解
如前所述,图数据可以来源于不同的数据类型。下面我们将深入讲解如何使用这些数据类型。
构建图数据流水线的第一步是获取并理解图数据。这两步对图分析都至关重要。图数据获取指从多种来源收集数据;而理解则通常通过可视化来完成。图可视化的主要目标,是借助各类工具探索与分析数据,识别模式、趋势与异常。下面分别展开说明。
图数据获取(Graph data sourcing)
企业级图数据获取是指从多种来源获取图数据的过程,其中包括识别相关数据源。通常会先进行探索性抽取,以判断数据是否相关,再进行大规模抽取。其还与后续步骤(数据准备/数据摄取)相衔接,即将数据抽取并准备好,存入图数据库或知识图谱进行集成。图数据可来自多种渠道,概括而言包括:
- 内部数据来源
涵盖企业内部的数据源,如专有数据库、企业内部应用与其他企业级数据仓库,既包括离线存储,也包括实时或准实时的数据流。 - 外部数据来源
包括行业数据提供方、公共数据库、开放数据或与企业领域相关的其他外部数据。还可扩展为使用网页爬取或数据 API(应用程序编程接口)来获取在线数据。
企业在进行数据获取时需重点考虑两方面:数据治理与合规以及数据质量。从企业角度,必须确保遵从数据治理政策、隐私法规与数据安全措施。数据获取应置于数据质量流程下,以保证完整性、正确性与相关性。为保持高质量获取,可能需要进行数据剖析(data profiling) ,即分析图数据以了解其结构、内容与质量,从而暴露出不一致、重复或缺失值等问题。
一旦确定了图数据,我们即可开始探索,以评估其适用性与质量。可视化是实现这一目的的常用方法。
通过可视化来理解图数据(Understanding visual graph data)
图可视化与探索虽属可选,但在图学习流水线的多个阶段都建议使用且十分有益。在图数据理解中,视觉化的图探索可帮助我们在不做过多深入细节的前提下,更直观、即时地把握图数据的结构与内容。此步骤通常包括:对数据进行可视化、查看关于图数据结构与行为的摘要统计,并在大规模图数据中识别原生连接、趋势、相关性与离群点。
可视化还可用于识别由相似关系连接而成的数据簇。它对发现数据中的异常或离群点尤为有用。例如,在社交网络中,某个拥有极多连接的个体可能是关键影响者,或者潜在高风险点。
根据应用的具体需求与约束,存储用于探索与可视化的图数据有多种方式。一般而言,图可视化方法与底层数据存储以及用于生成图形的前端紧密相关。基于这两个维度,我们将图可视化技术分为三类(依据其与相关数据存储和可视化语言的耦合程度):
- 图数据库可视化工具(Graph database visualizers)
图数据库是专门用于存储与查询图数据的数据库,通常对图的快速遍历进行了优化,并支持强大的查询能力,非常适合探索与可视化大规模图。示例包括 Neo4j 与 Amazon Neptune。它们通常搭配可视化工具(如 Neo4j Bloom),帮助用户理解图数据中的各类事件与模式。 - 图可视化软件(Graph visualization software)
此类工具用于图数据的可视化,通常是开箱即用的软件,不需要编程知识。示例有 Gephi 与 Graphviz。它们常支持以多种格式(如 CSV 或 JSON)导入图数据,并提供多样的可视化选项与交互能力,用于探索与分析数据。 - 自定义存储与可视化方案(Custom storage and visualization solutions)
根据具体需求,也可选择自建方案:用通用数据库(如 MySQL 或 MongoDB)存储数据,并使用编程语言(如 Python 或 JavaScript)构建自定义可视化工具,或集成现有可视化库(如 D3.js)。
每一类可视化方式都有其优缺点。因此,选择何种图数据存储与可视化方法,应综合考虑数据的规模与复杂度、应用的既定需求,以及可用的资源与专业能力。
图数据准备(Graph Data Preparation)
图数据处理通常包含若干子步骤,用于为图学习训练做好准备。具体步骤会因图数据的特性与图学习的目标而异,但常见环节包括:图数据摄取(ingestion) 、图数据存储(storage)与图数据预处理(preprocessing) 。
图数据预处理的首要目标,是确保数据对当前图问题而言准确、完整、一致且可用。下面逐一回顾这些常见的图数据准备步骤。
图数据摄取(Graph data ingestion)
图数据摄取关注数据源的选择、抽取,并将其标准化为系统可处理的统一格式。此过程需要仔细考虑可用数据集——包括其格式、规模与结构。同时需要搭建一条流水线,从内部或外部来源获取数据,例如数据库、文件、网页爬取以及API 调用。
图数据存储(Graph data storage)
当收集到所有相关数据后,下一步是存储这些数据。存储位置取决于系统需求,既可以是通用的持久化存储,也可以是针对图数据优化的系统,例如图数据库(如 Neo4j)或分布式图处理系统(如 Apache Giraph) 。
企业场景中常见的图数据存储方案还包括 Amazon Neptune、Dgraph 与 Microsoft Azure Cosmos DB。
图数据预处理(Graph data preprocessing)
在获取图数据后,接下来是预处理,用于提升数据集质量。该过程包括清洗噪声数据与对数据值进行归一化,以确保分析的一致性与准确性。预处理的产出主要体现在两方面:
- 干净的图数据集
指已经消除或纠正错误、无关信息与异常的数据集。干净的数据集对 GML 至关重要,它确保图中的实体与关系能真实反映现实世界的连接与属性,不被噪声或错误所扭曲。清洗工作可能包括去重边、校正节点标签、以及丢弃与当前问题无关的数据点等。 - 特征列表
为 GML 模型开发定义特征是关键步骤。图中的特征指与节点和边相关的属性或变量,模型据此学习模式。例如,在社交网络图中,节点特征可包含用户的人口统计属性、活动度指标或内容偏好;边特征可表示用户间交互的强度或频率。特征选择由 GML 模型的具体目标(如分类、推荐、聚类等)所驱动。合理定义的特征有助于模型基于图的结构与属性做出更准确的预测或分类。
如前所述,图数据常具备体量大、来源多样的特点。企业数据亦然:企业级图数据通常结合本地部署数据(on-premises)与第三方数据。因此,我们先讨论在企业场景下为何需要引入第三方数据进行丰富,然后再说明这种集成在数据准备层是如何实现的。
为什么要用外部数据丰富图数据?
将第三方数据与企业图数据集成,可以为 GML 带来多方面收益,包括提升模型精度与效果、增强特征工程能力、增强处理缺失/不完整数据的能力,以及提升可扩展性。具体如下:
- 提升模型的精度与有效性
外部数据提供额外的上下文与信息,帮助模型更深入地理解数据集中的潜在模式,从而做出更准确的预测。 - 增强特征工程
与企业数据结合后,可以构建更加全面且信息量更高的特征集,使模型更准确地捕捉数据中的关系与模式,进而提升性能。 - 更好地处理缺失或不完整数据
外部数据可用于填补空缺,即使部分企业数据缺失,模型仍能保持较高的预测准确度。 - 提升可扩展性
融合外部数据后,可构建更大且更全面的数据集来训练 GML 模型,增强模型在更大规模与更复杂数据集上的适应能力。
既然我们了解了用外部数据丰富企业图数据的潜在好处,接下来看看这种集成在数据准备层是如何实现的。首先,我们将讨论**数据一致化(data harmonization)**的过程。
图数据一致化(Graph data harmonization)
数据一致化(亦称数据清洗或数据归一化)是将来自不同来源的数据整合为统一格式,并在设计图模式与将其摄入图数据库之前,确保数据一致、干净且高质量的过程。该过程通常包括标准化数据格式、解决数据冲突与去重,以便实现无缝的分析与处理。
所谓图模式(graph schema) ,指的是定义图中节点与边的类型,以及每种节点/边类型所关联的属性或特征的结构。以图 1-7 的欺诈检测示例为例:我们的交易网络由账户(节点)构成,账户之间的关系由交易(边)表示。账户可分为持卡人与商户。持卡人节点可包含姓名、账号或所在地等属性;商户节点可包含名称、地址或所提供商品/服务类型等属性。持卡人与商户之间的关系是购买,因此边被标注为purchase,并具有金额、日期时间、购买的商品/服务类型等属性。
在明确模式定义之后,问题变为如何设计该模式。第一步是识别图数据中最重要的实体与关系,以便聚焦关键要素,避免给图引入不必要的复杂度。第二步是为节点与边采用清晰一致的命名约定,并为每类节点/边定义一致的属性集合,这样既有助于所有用户阅读与理解,也更有利于后续的可扩展性与效率。
随着图的规模增长——即所表示的关系与实体在复杂度与体量上的提升——必须应对模式在性能与可扩展性方面的挑战。这种增长可能源自数据的持续积累、图的范围扩展(涵盖新的实体与关系类型),或引入更多数据源。更大的图会显著影响查询性能:由于需要遍历更多节点与边,查询执行时间可能延长;同时,存储更多节点、边及其属性会推高内存占用,从而给系统带来压力。
为缓解这些潜在的性能瓶颈与可扩展性挑战,可采用以下策略:
- 精简模式(Refining the schema)
在可能的情况下减少节点/边类型数量并去除不必要的属性,以降低图的复杂度并提升性能。 - 图分区(Graph partitioning)
通过将大图划分为更小、可管理的子图实现跨多台服务器的分布式部署,有助于分摊负载并实现横向扩展。 - 索引与缓存(Indexing and caching)
为高频访问的节点与边建立索引可显著加快查询;对常用结果进行缓存可减少重复查询、改善响应时间。
在将图模式部署到生产环境之前,务必对其进行测试与验证,以确保满足应用需求。通常做法是加载样本数据并执行各类查询,验证模式在性能与准确性上的表现。比如,对于一个电商网络(用户与商品为节点,购买为边),可以使用如下查询^4:
MATCH (user:User)-[:PURCHASED]->(product:Product)
WHERE user.name = 'Ali'
RETURN product.name
该查询用于检查模式能否正确找出名为 Ali 的用户购买过的所有商品,从而验证其处理真实检索场景的能力。
回到数据一致化本身及其重要性,之所以需要一致化,主要原因包括:
- 数据质量(Data quality)
在摄取前确保数据一致、符合相关标准/规范且干净,可提升数据质量并降低图中出现错误或不一致的风险。 - 数据集成(Data integration)
对多源数据进行一致化处理,确保以统一标准完成集成,从而支持更先进的图学习技术。 - 性能与可扩展性(Performance and scalability)
在摄取前完成一致化,可降低数据复杂度,便于采用更高效的存储与处理技术,从而提升图数据库的性能与可扩展性。
图 2-8 展示了数据一致化常涉及的流程:数据转换、数据清洗与预处理、数据存储、数据安全。
- 数据转换指将数据转化为更适合分析或与其他数据集集成的形式,例如多源关联/合并、聚合计算、特征工程等。
- 数据存储则是将清洗后的一致化数据以便于后续分析或与其他系统集成的方式进行保存,既可以落地为文件,也可以存入数据库或数据仓库。
图训练与推理流水线
企业级图训练与推理流水线是在企业环境中,基于图数据构建与部署机器学习模型的框架。该框架旨在处理大规模、复杂的图,并为训练与部署基于图的模型提供灵活且可扩展的平台。
GML 训练流水线概览
当图数据已可被消费/使用后(consumable),流程将进入 GML 训练流水线(见图 2-9),在这一阶段你将开始构建 GML 模型,以解决特定的图学习任务。该阶段涵盖特征工程与模型构建等活动。
图特征工程(Graph feature engineering)
并非所有数据特征或属性对 GML 模型同等重要。此时需要进行特征工程,即创建与变换图中节点或边的特征,以供机器学习模型使用。该步骤的产出是一份特征清单,通常存放于**特征库(feature store)**中,其中对模型贡献最大的特征会被注册/提供给图学习算法。
图模型构建循环(Graph model building cycle)
在完成特征选择后,进入 GML 模型构建阶段。模型构建是一个迭代过程,包含三大组成部分:模型设计、模型训练、模型评估。其内部步骤如下:
-
GML 模型设计
在此步骤中,需要确定训练算法、模型架构、优化器、损失函数、参数与超参数以及评估指标。在后续章节中,我们将演示如何设计一套面向特定任务的 GML。 -
GML 模型训练
在此步骤中,需要选定可用于解决目标任务的候选图学习算法;选择机器学习框架/库(如 TensorFlow 或 PyTorch),搭建训练流水线,并开始训练模型。 -
GML 模型评估
随后对已训练模型的性能与准确性进行评估。此步骤相当于检查点,用于判断模型是否达到业务可用性阈值。若未达标,可通过以下方式改进性能,例如:- 获取更多数据
扩充图数据可显著提升模型表现。新增节点与边可丰富图结构,为模型提供更全面的学习素材。 - 增加节点与边的属性
为节点与边引入更多属性,可帮助模型更深入地理解图中实体与关系。这些属性可作为关键特征,提升模型的预测或分类能力。 - 特征工程
改进或新增特征常常能带来更好的效果。对图数据而言,可提取更复杂的图指标(如中心性度量——动手示例见第 3 章),以挖掘连接结构中的新洞察。 - 选择不同的图学习算法
若性能问题仍然存在,可考虑替换为其他图学习算法。不同算法各有优势,适应的数据与任务类型也不同。尝试替代算法或许能与问题更契合,从而提升整体表现。
- 获取更多数据
当完成训练并选出表现最佳的模型后,会将模型工件(artifacts)转交至“生产环境(production settings) ”使用。这个过程称为推理(inference) ,即将已训练模型部署,用于对新近输入的数据进行预测。这一过程发生在 GML 推理流水线 中。
GML 推理流水线概览
一旦选定“表现最佳”的模型,它将迁移到不同的计算环境(例如不同的 Kubernetes 集群),以执行推理流水线中的各个步骤(见图 2-10)。模型推理过程包含两个主要步骤:GML 模型注册与GML 模型服务。
GML 模型注册(GML model registration)
当你对模型表现感到满意后,就可以开始模型晋升与注册步骤了。此时模型将被部署到生产环境——在大多数企业中,这与进行模型构建的开发环境不同。首先进行模型版本管理:为所有模型打上状态标签,如 pass(通过)、fail(失败)、retrain(重训)、discard(弃用)或 promoted to production(晋升至生产)。将带版本的模型存放在模型注册表(model registry)中,用于跟踪其生命周期。状态为“通过”或“晋升至生产”的模型会从注册表进入打包环节,并接受治理审查(governance review) 。审计将依据企业的部署策略进行,以确保 GML 模型(例如)不存在偏见。
GML 模型服务(GML model serving)
随后,把通过治理审查的模型提交到部署环境,并按你选择的部署策略^5 上线运行。此步骤还可能包括搭建服务化基础设施(如 TensorFlow Serving 或 Seldon),以及将模型集成到应用或工作流中。以构建电商图推荐系统为例:
- 围绕模型服务基础设施开发一个 RESTful API。电商平台通过该接口向推荐系统发送用户数据,并接收个性化商品推荐。
- 开发团队将此 API 集成到电商平台后端。当用户浏览平台时,系统会通过该 API 调用图推荐系统,自动获取个性化推荐结果。
- 将推荐系统集成到电商平台的邮件营销工具中,在营销邮件中嵌入个性化推荐,以提升用户参与度与销售转化。
监控与反馈闭环(Monitoring and feedback loop)
模型部署到生产环境后,需在其整个生命周期内持续监控性能,确保稳定运行。该过程(即模型监控)的关键活动包括:
-
跟踪推理表现
将模型预测与真实结果进行对比。例如在电商场景中,分析客户最终购买了什么,以及是否在推荐列表之中。 -
识别服务偏移(serving skew)
监测因数据变化而导致的部署模型精度下降的迹象。 -
触发模型重训
依据性能指标决定是否重训。触发训练流水线进行重训与评估的条件包括:- 基于调度(Scheduler based) :定期重训模型。
- 基于准确率(Accuracy based) :当准确率低于阈值时启动训练。
- 基于数据漂移(Data drift based) :当数据出现显著变化时启动训练。
所有重训后的模型在更新至生产环境前,都会再次经过同样的 GML 模型服务流水线。
此外,反馈闭环是维持并提升图学习应用性能的关键组成部分。它通过收集模型在真实场景中的表现数据,反哺后续的模型训练与部署策略。这一持续的反馈循环确保模型能随时间保持有效性,适应新的数据与不断演化的用户行为模式。
当你完成以上所有步骤后,你的 GML 系统便可在真实应用中投入使用。
注意(NOTE)
需要强调的是,该流水线包含持续的数据更新。由于图会随着数据更新(新增/删除节点或边)而不断演化,你的数据流水线也必须持续更新。这意味着数据流水线与特征工程需要持续运行以获取最新数据;同时需建立周期性更新流程,并像往常一样触发图学习流水线的其他环节,以使用新数据训练出新的模型并滚动发布到生产。
总结
本章回顾了 GML 流水线的主要阶段,并强调了它们在为高度可扩展的系统奠定基础方面的重要性。鉴于图数据可以涵盖多种数据类型与来源,建立一条稳健的数据流水线,以有效处理数据并为后续阶段做好准备,显得尤为关键。
展望后文,第 3 章将通过传统的图机器学习方法,进一步探讨图特征工程。
1 在第 1 章中,我们给出了自然界中图的若干示例。
2 RDF 是语义网(Semantic Web)的核心数据模型。该模型中的数据以三元组表示(主语–谓语–宾语)。
3 命名实体(NE)是理解文本所必需的现实世界对象,属于预定义的类别,如人名、组织名、地点、数量等。例如 “Cairo(城市)”。在 NLP 中,用于识别并分类命名实体的技术称为命名实体识别(NER) 。NER 会自动扫描全文并抽取命名实体。
4 文中的示例查询使用 Cypher 语言编写,它是专为图数据库(尤其是 Neo4j)设计的查询语言。
5 机器学习部署策略规定了模型或其更新版本如何上线。常见策略包括影子发布(shadow) 、金丝雀发布(canary) 、A/B 测试等。第 10 与第 11 章将对这些策略作进一步介绍。