港大联合百度开源通用图大模型GraphGPT:让大语言模型读懂图数据

news2025/1/15 7:19:50

6b7c3c9c8c79c59c8bcfd5842cf8aa52.gif

f5e0577d3c7bafb7fcd09b11ceb2b9ab.png

导读

图神经网络(GNN)已成为处理和学习图数据的强大工具,在社交网络分析、推荐系统、智慧城市和生物信息等多个领域带来了革命性的进展。图神经网络的核心优势在于其揭示图数据中复杂关联性的能力。通过消息传递和信息聚合,图神经网络能够高效地在图中传递和整合信息,从而理解复杂的图结构知识并做出准确的预测。

然而,许多图神经网络方法存在一个明显的缺陷,即它们极大地依赖于高质量的监督信号,这可能导致在处理稀疏和有噪声的数据时鲁棒性和泛化性能不佳。为了提高图神经网络的泛化性能,自监督学习被认为是图表示学习中具有潜力的方向。这些方法旨在创建适应各种下游任务的图特征表示,但在实际应用中,它们仍然需要使用下游学习场景中的标签进行微调。这种对下游任务标签数据的依赖可能会限制它们在实际应用中的泛化性能,特别是在难以获得高质量标签的情况下。

因此,本研究的目标是通过应对实际中极具挑战的零样本学习情境,来提升图模型的泛化性能。受到在自然语言处理领域取得显著成果的大型语言模型的启发,本文将为大家展示香港大学数据智能实验室(https://sites.google.com/view/chaoh/group-join-us)推出的图大模型——GraphGPT。

该模型在众多下游数据集和任务上都展现出了较强的泛化性能力。我们希望 GraphGPT 能激发更多开源社群的开发者参与其中,一同深入探讨图数据挖掘领域的新方向。

fe59da348349598c09462177191ca8d4.png

论文标题:

GraphGPT: Graph Instruction Tuning for Large Language Models

论文链接:

https://arxiv.org/abs/2310.13023

代码链接:

https://github.com/HKUDS/GraphGPT

项目网站:

https://graphgpt.github.io/

217dc69c85e4b0d08b30c44c06ca267e.png

概述

总得来说,将大语言模型与图学习结合是一项具有挑战性的任务:

  • 构信息与语言空间的对齐: 图数据具有自身的结构和特性,而大型语言模型主要在语言空间中进行训练和表示学习。如何有效地将图的结构信息与语言空间进行对齐,使得模型能够同时理解图的结构和语义信息,是一个重要的问题。

  • 引导大语言模型理解图的结构信息: 为了使大型语言模型能够有效地理解图的结构信息,需要设计适当的指令目标来要求模型理解图数据中的结构信息。

  • 赋予大语言模型图学习下游任务的逐步推理能力: 在图学习的下游任务中,逐步推理是一个重要的能力。这意味着模型需要根据图的结构信息和语义信息,逐步推断出更复杂的关系和属性。

676ea7739744b6ded5e50bc3eb1960fc.png

为了更深入地探索仅通过纯文本提示进行图结构建模的局限性,我们在本文中进行了大量实验和比较,如图 1 所示。这些实验揭示了仅依赖文本提示可能会遇到的问题。然而,新的 GraphGPT 框架能够有效地应对这些问题,它能够保持和利用图的结构性信息,从而准确地识别文章的种类。

此外,采用基于文本的图结构提示可能会增加输入 token 的数量,在实际应用中存在问题。长的 token 序列可能会增加计算和内存的消耗,从而降低模型在实际场景中的可用性。此外,目前的大语言模型存在输入长度的限制,这进一步限制了使用长文本提示进行大规模图结构建模的可能性。

为了解决上述问题,我们在本文中提出了一种全新的图学习范式,称为 GraphGPT,旨在通过精心构建的图指令微调方法将大型语言模型与图结构相结合。GraphGPT 的设计目标是解决纯文本提示下进行图结构建模的挑战。首先,GraphGPT 采用了文本与图结构的对齐方法,通过结合文本信息的对比学习,在图编码器中实现了文本语义的有效对齐。

接下来,我们提出了双阶段的图指令微调方法。在第一阶段,利用无标签的图结构数据,通过自监督的图匹配任务来引导大型语言模型获取与图数据相关的结构性知识,从而增强对图结构的理解。在第二阶段,为了进一步优化大型语言模型在各种下游图学习任务中的推理能力,我们使用特定任务的图数据指令对模型进行微调,增强其适应性。

最后,通过采用“思维链”方法,我们将闭源的大型语言模型(如 ChatGPT)整合到 GraphGPT 中,提升了模型的逐步推理能力,并显著降低了由于分布偏移带来的性能下降。通过这些创新方法,GraphGPT 极大地改善了纯文本提示下进行图结构建模的能力,并在图学习任务中取得了显著的表现。

本研究的主要贡献如下

  • 为了提高图学习的泛化能力,我们将图领域特定的结构知识与大型语言模型的推理能力进行对齐。

  • 我们提出的方法采用了图指令微调的范式,旨在将大型语言模型与图结构数据对齐。这一范式结合了自监督指令微调的方法,增强了大型语言模型对图结构知识的理解和推理能力。此外,我们还引入了具体任务的指令微调,以提高模型在各种图学习任务中的适应性。

  • 我们通过实验评估了 GraphGPT 在有监督和零样本图学习任务上的表现。与最先进的基线方法进行比较,GraphGPT 展现出在各种设置下优越的泛化能力。这表明我们的方法能够有效地结合图结构知识和大型语言模型的能力,提升图学习任务的性能。

a8c93573da04e85dc8bce08c7901eb1d.png

方法

这一部分,将阐述 GraphGPT 图指令微调范式的技术细节,其整体框架如图2所示:

3b584a467d6a930efeac29547a15c75b.png

3.1 用“文本-图”对齐编码结构信息

在 GraphGPT 中,图结构编码器的选择是非常灵活的,它可以利用各种基础 GNN 架构从多种图预训练范式中获得。为了更有效地将大型语言模型与图结构对齐,本节探索了与大型语言模型良好协作的图结构编码方式。受之前的研究启发,本文以对比的方式将文本信息融入图结构的编码过程中。本文直接将带有预训练参数的图编码器集成到 GraphGPT 模型框架中,从而无缝地整合图编码器的功能。

具体来说,让一个图 与原始文本内容 对应,其中 代表节点数, 表示第 i 个结点的文本长度。通过任意图编码器 (例如 graph transformer)和文本编码器 (例如普通 transformer)得到编码后的图表示 和文本表示 。

10fa25ad4d3cc9f0a6bb43d203e19748.png

接着,通过对比学习进行不同维度的“文本-图”对齐:

e145f9dd990d0d0ff1b23fb9a2448f8f.png

其中 为对比标签, 和 为不同对比策略的转换函数。

3.2 两阶段图指令微调

3.2.1 自监督指令微调

在图指令微调范式的第一阶段,我们采用了自监督的指令微调策略,该策略将图结构的专有知识融入到语言模型之中,增强了其推理能力,并使其能够准确地捕获图结构中的关联信息。具体而言,本研究构建了一个结构感知的图匹配任务,指导语言模型利用自然语言标签来识别图中的各个节点。这种指令任务在确切地将图节点与其相关的文本描述关联起来时发挥了核心作用,进而深化了模型对图结构数据的理解。

指令设计

图匹配任务的指令包括三个部分:i)图信息,ii)人类问题,和 iii)GraphGPT 的回应。在这个任务中,将图中的每个节点视为中心节点,并执行 h 跳的随机邻居采样,从而得到一个子图结构。大语言模型的自然语言输入是人类的问题。在图匹配任务的上下文中,指令包括指示符令牌 <graph> 和一个被打乱的节点文本信息列表。

例如,在一个论文引用图中,节点文本信息对应于论文标题。大语言模型在图匹配任务中的目标是将每个图结点 token 与其相应的节点文本信息对齐。这需要根据图结点 token 的顺序重新排序节点文本信息列表,有效地将每个图结点 token 与其相关的文本描述关联起来。

微调策略

为了高效地优化微调过程,本文提出了一种轻量级对齐投影策略。在训练过程中,固定大语言模型和图编码器的参数,仅专注于优化投影器 的参数。训练后,假设投影器已经成功地学会了将编码的图表示映射到图结点 token,而大语言模型则擅长将这些图结点 token 与多种节点文本信息对齐。

为了将图结点 token 与自然语言 token 对齐,使用一个投影器 ,它可以简单到用一个单一的线性层实现。这个投影器建立了图结点 token 和自然语言 token 之间的对应关系。通过在原始自然语言 token 序列中替换指示符 token<graph>为对齐的图结点 token 序列 {<graph_begin>, <graph_token>1, ..., <graph_token>n, <graph_end>},从而得到了一个大语言模型的输入 token 序列。

考虑到图匹配过程是无监督的,这将有机会利用来自不同领域的大量未标记的图数据,以增强学习到的投影器的泛化能力。

3.2.2 特定任务指令微调

在第二阶段,本文提出了特定任务指令微调,旨在定制模型的推理行为,以满足不同图学习任务的特定约束和要求,如节点分类或链接预测。通过使用任务特定的图指令对大语言模型进行微调,引导模型生成更适合当前图学习任务的响应,进一步提高了模型在处理各种图学习任务时的适应性和性能。

指令设计

为了为每个节点生成图信息,采用第一阶段相同的邻居采样方法。对于节点分类任务,人类问题指令包含指示符令牌 <graph> 和关于中心节点的特定文本信息。这个指令提示语言模型基于图结构数据和伴随的文本信息来预测中心节点的类别。在图 3 中可以看到不同任务的指令数据的模版。

e77b726127f496726abf40332040708c.png

微调策略

训练的第二阶段使用第一阶段训练得到的结构感知投影器的参数作为初始状态,在训练过程中,保持大语言模型和图编码器的参数不变,仅专注于优化前一阶段的投影器的参数,确保大语言模型进一步与下游任务对齐,增强其理解和解释图结构的能力。

完成上述的两个训练阶段后,GraphGPT 已经获得了理解给定图结构并在提供的图上执行各种下游任务的能力。

3.3 思维链蒸馏

面对各种图数据,语言模型可能会碰到之前未曾接触过的模式和结构。这种数据分布的差异可能会影响模型生成准确且流畅的答案,尤其是当不同图数据中的节点类别数量发生变化时。为了在数据分布发生变化时仍然保持高准确率,赋予 GraphGPT 逐步推断的能力变得尤为关键。受到思维链(Chain-of-Thought)方法的启示,我们提出通过融合思维链方法来增强 GraphGPT 文本生成的连续性和准确性,使其能够按照逻辑顺序进行思考,从而更好地理解和推断给定的图数据。

但是,由于思维链方法的效果与模型的参数大小紧密相关,如何在较小的模型中充分利用思维链方法的优势成了一个关键问题。为了解决这个问题,我们借鉴了先前的研究方法,从一个封闭的、大规模的语言模型(例如 GPT-3.5,参数超过 2000 亿)中提取思维链的推理技巧,使 GraphGPT 能够生成高品质的答案,同时增强其逐步推理的能力,而不增加额外的参数。

对于论文引用图的节点分类任务,我们将节点所代表的论文的摘要、标题和分类任务描述作为输入,利用 GPT-3.5 语言模型进行逐步推断,通过连续的思考流程得出答案。在生成的输出中,大语言模型不仅为节点类别做出预测,还为每个预测提供了详尽的解释,确保了模型的决策过程是清晰和可追踪的。为了进一步优化性能,我们将生成的思维链指令数据与之前为任务特定指令微调阶段制定的指令结合起来,进行图指令的微调。

374d5dfb1a56f32317b7e7dbacaace4d.png

实验

4.1 总体性能

Obs.1 总体性能优越性:GraphGPT 在有监督和零样本环境中均稳定地胜过了众多先进的基线模型。值得关注的是,尽管近期研发的基于 GNN 的强大模型,如 NodeFormer、DIFFormer 和 GKD,在有监督的环境中都展现了出色的结构建模能力,但在迁移到未经进一步训练的新数据集时,其性能大幅下滑。与此相对,GraphGPT 不仅在有监督任务中胜过了所有最优方法,而且在零样本图学习中实现了显著的 2-10 倍的准确性增长。

此外,像 Baichuan-7B 和 Vicuna-7B 这样基于大语言模型的方案在各种数据集中都表现稳定,但它们主要基于文本信息进行预测。而 GraphGPT 则有效地融合了图结构信息,为图学习任务提供了更为完善的解决方案。

Obs.2 结构感知的图匹配任务:第一阶段指令微调中的自监督图匹配任务,对于提升 GraphGPT 的零样本迁移能力起到了核心作用。这一阶段的核心在于将携带丰富结构信息的图节点 token 与语言 token 进行匹配。这种匹配方式使得模型能更加深入地掌握图数据的内在结构特点。

如果缺少这一阶段,模型仅在第二阶段进行特定任务的指令微调,那么模型更容易在某一特定数据集上产生过拟合。在这种情况下,模型的表现可能过于依赖于数据集的特定模式和特征,而不是真正的图结构理解,这可能会限制模型对新的、未曾见过的数据集的泛化能力。

Obs.3 思维链蒸馏:“-std” 和 “-cot” 变体表明,采用思维链蒸馏对于更为复杂的图学习任务具有显著的助益。使用标准指令数据集进行微调的模型在迁移到简单任务上,例如只有 3 个类别的 PubMed 数据集时,已经能够获得显著的效果,如 Arxiv-PubMed 的准确率达到 0.7011。

但是,当面对如 Cora 这样有 70 个类别的复杂任务时,它们的表现仅为一般。通过思维链蒸馏,借助闭源模型(GPT-3.5)的强大推断力,模型能够整合这些知识和推理技巧,并在复杂的图任务上大幅提升性能。

256b6461043f340d11d74e1aa6f5abff.png

4.2 泛化性能力探索

更多的数据激发更强的迁移能力:首先,本部分探讨了数据量如何影响 GraphGPT 的迁移性能,正如表 1 的 “(Arxiv + PubMed)-Cora” 列所示。在此实验中,我们结合 Arxiv 和 PubMed 数据集来训练模型,并在 Cora 数据集上进行零样本测试。

实验结果表明,仅通过加入规模较小的 PubMed 数据集(约 20,000 条数据),GraphGPT 在 Cora 上的迁移表现得到了明显提升。相反,在 Arxiv 和 PubMed 上迭代训练的基于 GNN 的模型的迁移表现却下滑。

更多的数据但是不遗忘:本部分进一步检验了结合 Arxiv 和 PubMed 指令数据在原始 Arxiv 数据上的效果,如表 1 的 “(Arxiv + PubMed)-Arxiv” 列所示。实验结果显示,大部分传统的基于 GNN 的方法在 Arxiv 和 PubMed 上经过迭代训练后性能大幅下降。但 GraphGPT 的表现却更为出色。

这种情况被认为是由于基于 GNN 的模型在较小的 PubMed 数据集上训练后出现的灾难性遗忘,导致模型的结构建模能力受损。但通过两步的图结构指令微调,此问题得到了有效缓解。这使 GraphGPT 在保持或增强其性能时,能够继续保留通用的图结构模式。

可泛化的多任务图学习器:近期的指令微调研究指出,结合不同的指令微调数据可以进一步优化大语言模型的性能。在本次研究中,我们在保证指令条目数量相同的前提下,混合了多种类型的指令数据,包括标准指令(“-std”)、思维链指令(“-cot”)、标准指令(50%)与思维链指令(50%)的组合(“-mix”),以及链路预测指令(“Link”)。

相关结果分别展示在表 2 和表 3 中。观察结果可知,恰当的数据混合策略能显著提升 GraphGPT 在多种场景下的表现。引入链路预测指令后,模型在节点分类上的表现得到了显著提升,而在加入节点分类后,链路预测的效果也超越了其他模型。在融合了不同任务的指令后,模型展示了其在处理各种图学习任务并将知识迁移到其他未曾接触过的数据集的能力。

713f71cea0895a9a4abb213ad29ddf17.png

ad8a31c4671fab5637acb4dd12092054.png

4.3 消融实验

da6f901647f95842876bad42948c43c2.png

图结构微调的影响:在这部分研究中,我们采用了 “w/o GS” 变体来探索将图结构信息融入大语言模型的优势。在此变体中,我们直接使用大语言模型基座(即Vicuna-7B-v1.5)在三个数据集上执行节点分类,而不考虑图结构信息。实验结果表明,GraphGPT 明显胜过没有结构信息的基础模型。这证明了我们提出的图结构微调方法能使大语言模型更深入地理解图结构信息。

值得注意的是,这种性能提升是在不更改大语言模型原始参数的前提下达到的。相反,这完全是通过一个轻量级的对齐投影器实现的,该投影器通过线性投影操作将图节点 token 与自然语言 token 对齐。

大语言模型增强的语义推理效果:在这部分,我们通过只使用默认图编码器进行有监督和零样本预测来评估大语言模型的推理效果对 GraphGPT 的贡献,此变体被命名为 “w/o LR”。实验结果显示,融合大语言模型的 GraphGPT 显著增强了图编码器的表现,尤其是在零样本场景中。这说明大语言模型带来的丰富语义信息为模型性能提供了显著的提升。

4.4 模型效率研究

1410c02cfa9335bf68cb0c9adc83194e.png

训练效率:我们提出的指令微调方法采用了两阶段策略,其中大语言模型和图编码器的参数都被冻结,只有“图-文”对齐投影器进行了微调。在配备 4 块 40G Nvidia A100 显卡的环境中,我们分别比较了冻结与微调大语言模型参数(分别标记为 “-freeze” 和 “-tune”)时的训练时长、微调参数数量以及 GPU 使用情况(每块 GPU 的 MiB)。


在相同的实验设置下,调整大语言模型参数时,即便批次大小为 1,也会出现 GPU 内存超出(OOM)的问题。但是,采用我们提出的微调方法,即使批次大小为 2,训练也能稳定进行。此外,与全面微调大语言模型相比,我们的微调策略的参数数量减少了超过 50 倍。

a019ebfee62d0322e598f42af8967489.png

推理效率:这部分进一步与 baichuan-7B、vicuna-7B-v1.1 和 vicuna-7B-v1.5 对比,评估了 GraphGPT 在推理速度和精确度上的表现。实验在单块 40G Nvidia A100 上进行,记录了在 Arxiv 和 Cora 思维链指令数据集上的推理时长(每次响应所需的秒数),结果如图 4 展示。

GraphGPT 展现出了出色的效率和精确度。需要指出的是,较短的推理时间并不总是意味着更高的性能:baichuan-7B 虽然响应迅速,但答案往往是错误的或与问题不相关,而 vicuna-7B-v1.1 和 vicuna-7B-v1.5 则需要更长、更复杂的推理过程来得到更准确的答案。相较于它们,GraphGPT 通过简化的推理步骤达到了精确的预测,从而提高了推理的效益。

4.5 模型案例研究

b037085409d26188d76b29a1cda74102.png

本部分深入探讨了 GraphGPT 在下游图学习任务上的性能,并将其与常规的大语言模型进行了对比,使用了 Arxiv 数据集对 ChatGPT 和 GraphGPT 进行了提示。我们考虑了多种指令类型,包括仅基于节点的文本内容(如标题和摘要)、基于文本的图结构的节点内容,以及本研究特设的图指令。

如图 5 所示的结果明确指出,尽管 ChatGPT 拥有超过 200B 的参数规模,但仅依赖节点的文本信息或结合基于文本的图结构进行精确预测仍然是个挑战。特别是当处理涉及多个学科交叉的论文,例如机器学习与硬件架构交叉的情境。与此相对,GraphGPT 始终能够给出精确的预测并附带有说服力的解释。这得益于 GraphGPT 能够处理包含 103 个节点的子图,从而从相邻节点的引用关系中获取丰富的结构性信息,进而做出准确的预测。

另外,采用图节点 token 来代表图结构并将其作为输入传递给大语言模型的方式,相较于自然语言处理方法更为高效。对于一个包含 103 个节点的子图, GraphGPT 只需向 LLM 输入 750 个 token,而基于文本的策略则需要 4649 个 token。这种显著的 token 减少意味着在训练和推理时资源需求大大降低。

aaa63dcd636b4b87b377c72a57180c90.png

结论

本研究提出了一种高效且具有扩展性的图结构大语言模型,目标是增强图结构模型的泛化性。我们介绍的框架,GraphGPT,采用了双阶段的图指令微调方法,将图相关的结构性知识融入到大语言模型中。通过一个简单而有效的“图-文”对齐投影器,该模型得以理解并解读图的结构性信息。在多种环境下的综合评估显示,该模型在有监督和零样本的图学习场景中均表现出色。

更进一步,该模型展示了出色的泛化性,使其能够应对多个下游数据集和任务,而不受到灾难性遗忘的影响。未来的研究重点将是研究修剪方法,以减少 LLM 中的冗余或不那么关键的参数,从而缩小模型的总体大小,同时确保其性能不受影响。

af5c33b183e4a87802e7cb687616e1ef.png

笔者的思考

对图基础模型的思考:近期,基础模型在自然语言处理(NLP)和计算机视觉(CV)领域均取得了显著进展,催生了一系列令人瞩目的应用,如 ChatGPT 和 Segment Anything。但在图学习领域,如何建立这样的基础模型,以及是否真的可以有一个统一的图学习基础模型,这些问题仍然是个未解之谜。

这主要是因为不同的图结构在“语义”上有很大的差异,难以通过一个单一的模型实现跨数据集和多任务的图结构建模。我们的研究借助大语言模型出色的语义建模能力,并通过图指令微调技术赋予其结构化理解,为图基础模型提供了一个可能的发展路径。

对 Data-Centric 图学习的思考:基础模型的崛起凸显了以数据为核心的人工智能(Data-Centric AI)的潜力和优势。但由于不同图结构间的“结构关联”不能像 NLP 中那样转化为统一的 token 表示,或像 CV 中转化为像素表示,因此如何确立和推进 Data-Centric 图学习的概念仍是个开放性问题。

我们的实验结果显示,GraphGPT 在处理混合数据时展现了更高的准确性、泛化能力和多任务特性,有效缓解了传统图神经网络中的灾难性遗忘问题。因此,我们认为提出的图指令微调方法有望成为 Data-Centric 图学习的研究基础。

更多阅读

54161ebf4be3027e1f742ed8f3e3ea07.png

dcee8f14f301e5a0090ea2bdf2c16803.png

d486c2df3c72bcf624358511d45a09a8.png

01da57812cb02529f2cb23beafd31110.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

1e2e0f99d1ae649456a9755c4df4a316.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

91a2f48191745cac255e2993e492246d.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leo赠书活动-04期 【国家数据局正式揭牌,数据专业融合型人才迎来发展良机 】文末送书5本

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

数据防泄密软件排行榜(10大数据防泄密软件推荐)

众所周知&#xff0c;公司中往往由于员工离职而出现泄密的情况&#xff0c;比如公司的财务资料、客户资料以及数据资料等&#xff0c;员工在跳槽的时候将这些带走&#xff0c;管理者无从考证导致部门甚至企业出现亏损的情况。 数据泄密一旦发生&#xff0c;企业在查证追责时就有…

有了这本书学习递归算法不再那么难

递归是一种编程技术&#xff0c;能够产生相当优雅的代码&#xff0c;但它也经常会把写代码和看代码的程序员给弄糊涂。这并不是说程序员可以或者应该忽略递归。尽管大家都知道递归比较难&#xff0c;但是这是计算机科学领域的一个重要话题&#xff0c;它能让你敏锐地观察到编程…

【linux进程(七)】程序地址空间深度剖析

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 程序地址空间 1. 前言2. 什么…

中国卖家的出路:TikTok电商重塑东南亚市场

2023年10月4日&#xff0c;印尼政府发布了一则重要公告&#xff0c;宣布不再允许社交媒体作为商品销售平台。这一决策直接影响了TikTok在印尼的电商业务&#xff0c;迫使该平台关闭了其印尼市场的电商运营。 对于TikTok电商而言&#xff0c;印尼市场一直占据着重要地位&#x…

机器视觉工程师们,人的命运大多数连在一起

看着鱼池里的小鱼&#xff0c;很是治愈。自己的往后的生活还要继续。 有次出差&#xff0c;和工作经验13年机器视觉工程师&#xff0c;他用手指着流水线上的操作工说&#xff0c;他们失业&#xff0c;去干什么&#xff0c;回家种田吗&#xff1f;都机械化种田&#xff0c;回家…

程序员为啥要做副业(02)-中指备用金

点击下方“JavaEdge”&#xff0c;选择“设为星标” 第一时间关注技术干货&#xff01; 免责声明~ 任何文章不要过度深思&#xff01; 万事万物都经不起审视&#xff0c;因为世上没有同样的成长环境&#xff0c;也没有同样的认知水平&#xff0c;更「没有适用于所有人的解决方案…

table 部分列宽度固定,剩余列宽度等分

table 固定列固定宽度&#xff0c;剩余列给最小宽度 <thead><tr><th rowspan"2" style"width:100px">序号</th><th rowspan"2" style"width:120px">姓名</th><th v-for"date in dates&q…

如何实现可靠的数据调度同步,数据同步方案看一下!

随着企业规模不断扩大&#xff0c;分支机构越来越多&#xff0c;跨区域跨国的集团越来越多&#xff0c;越来越多的企业要求内部各种业务数据在服务器、数据中心甚至云上&#xff0c;能够进行实时的调度和同步&#xff0c;从而需要部署一套数据同步方案&#xff0c;实现服务器与…

DC电源模块如何承受超负荷电流的能力

BOSHIDA DC电源模块如何承受超负荷电流的能力 DC电源模块是现代电子设备中必不可少的部件&#xff0c;它们通常被用来将交流电转换为稳定的直流电&#xff0c;为电子设备提供所需的电力。在某些情况下&#xff0c;DC电源模块可能会遇到超负荷电流的情况&#xff0c;如启动过程…

CleanMyMacXMac4.14.4版本系统优化工具

CleanMyMac是macOS上不可或缺的清理工具&#xff0c;它的作用非常强大&#xff0c;可以帮助用户清理系统、照片、邮件、iTunes垃圾&#xff0c;甚至是隐私数据。以下是CleanMyMac的主要功能和特点&#xff1a; 首先&#xff0c;CleanMyMac可以帮助清理系统垃圾&#xff0c;包括…

Pyqt5 List Widget 用户自定义添加/删除字段

添加和删除字段的逻辑 在窗口上显示一个list widget的窗口&#xff0c;还有一个添加字段的按钮 点击添加字段会弹出一个输入框&#xff0c;将内容作为一个item添加到list widget中 点击对应的已添加的字段&#xff0c;即会显示删除按钮&#xff0c;点击即可删除该字段 效果…

登录Edge发生了错误请稍后再试。Oxcfff82e发送反馈ccf05c90-0acc-0005-3100-f2cccc0ada01

登录Edge 发生了错误请稍后再试。Oxcfff82e发送反馈ccf05c90-0acc-0005-3100-f2cccc0ada01 1、如果连接了 VPN &#xff0c;建议断开 VPN。 2、按 “Windows 徽标键X”&#xff0c;启动 “Windows Power Shell&#xff08;管理员&#xff09;”&#xff08;也可以自行以管理员…

【java学习—十】List集合(6)

文章目录 1. List 与 ArryList2. 应用2. ArrayList 与 Vector 1. List 与 ArryList List 代表一个元素有序、且可重复的集合&#xff0c;集合中的每个元素都有其对应的顺序索引     List 允许使用重复元素&#xff0c;可以通过索引来访问指定位置的集合元素。     List…

开源库存管理系统InvenTree的安装

本文是应网友 shijie880500 要求折腾的&#xff1b; 什么是 InvenTree &#xff1f; InvenTree 是一个开源的库存管理系统&#xff0c;提供强大的低级别库存控制和零件跟踪。InvenTree 系统的核心是 Python/Django 数据库后端&#xff0c;它提供了一个管理界面&#xff08;基于…

Mac 上免费的网络Folx Mac 下载器

Mac最好的下载工具Folx Pro 5 for Mac 是由兔八哥爱分享整理发布 。 Folx Pro 5 for Mac是目前Mac平台上数一数二的下载工具&#xff0c;功能强大&#xff0c;几乎可以满足您的所有下载需求。folx pro for mac完整版不但可以下载网上任何文件&#xff0c;而且支持断点续传&…

大数据之LibrA数据库系统告警处理(ALM-12001 审计日志转储失败)

告警解释 根据本地历史数据备份策略&#xff0c;集群的审计日志需要转储到第三方服务器上。如果转储服务器满足配置条件&#xff0c;审计日志可以成功转储。审计日志转储失败&#xff0c;系统产生此告警。如果第三方服务器的转储目录磁盘空间不足&#xff0c;或者用户修改了转…

【JavaSE】逻辑控制:顺序、分支和循环结构

目录 一、概述与顺序结构 1.逻辑控制的概述 2.顺序结构 二、分支结构 1.if语句 2.switch语句 3.switch语句与if语句的对比 三、循环结构 1.while语句 2.for语句 3.do…while循环&#xff08;选学&#xff09; 四、循环的跳转 1.break语句 2.continue语句 五、总…

【设计模式】第20节:行为型模式之“备忘录模式”

一、简介 备忘录模式也叫快照模式&#xff0c;具体来说&#xff0c;就是在不违背封装原则的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;以便之后恢复对象为先前的状态。这个模式的定义表达了两部分内容&#xff1a;一部分是…

git重装后如何连接以前项目

git重装后如何连接以前项目 1、配置秘钥 点击 Git Bash Here&#xff0c;进入命令操作窗口 生成本地git仓库秘钥&#xff1a; 1、填写自己邮箱 2、一直回车 ssh-keygen -t rsa -C “xxxxxqq.com”3、使用cat查看生成的秘钥&#xff0c;粘贴并设置到gitee上 cat ~/.ssh/id_r…