知识图谱推理的学习逻辑规则(上)7.19+(下)7.20

news2024/10/5 13:43:14

知识图谱推理的学习逻辑规则

  • 摘要
  • 介绍
  • 相关工作
  • 模型 (7.20)
    • 知识图谱推理
    • 逻辑规则
    • 概率形式化
    • 参数化
      • 规则生成器
      • 具有逻辑规则的推理预测器
    • 优化
      • E步骤
      • M步骤
  • 实验
    • 实验设置
    • 实验结果
  • 总结

原文:
在这里插入图片描述

摘要

本文研究了在知识图谱上进行推理的学习逻辑规则。

逻辑规则用于预测时提供了可解释性并且可以推广到其他任务中,因此对于学习而言至关重要。

现存的方法要么存在在大搜索空间中搜索的问题,要么由于 稀疏奖励(sparse reward) 而导致无效化。

sparse reward 稀疏奖励
指在强化学习中,奖励信号 的反馈非常有限或稀疏的情况。在某些任务中,只有在完整的任务或达到特定目标时,才会给予奖励,而在中间阶段很少或几乎没有奖励信号。
这种稀疏奖励的情况对于强化学习算法来说是具有挑战性的,因为它们需要在没有明确的奖励信号指导的情况下进行决策和学习。在面临稀疏奖励的任务中,学习算法需要通过尝试不同的行动来探索环境,并学习如何在没有明确奖励信号的情况下进行有效的决策。

奖励信号
在强化学习中,奖励信号是一种反馈机制,用于指导智能体在环境中采取行动。当智能体执行某个动作后,它会收到一个奖励或惩罚信号,以表明该动作的好坏。奖励信号可以是一个数值,表示行动的优劣程度,也可以是一盒二元信号,表示行动的正确与否。
然而,有些时候奖励新课可能是稀疏的,即智能体只在特定情况下才会收到奖励信号。这会给学习算法带来挑战,因为只能体可能需要进行长时间的探索和尝试才能找到有效的行动策略。

为了解决这些局限性,本文提出了一个称为RNNLogic的概率模型。RNNLogic将逻辑规则视为一个潜在变量,同时使用逻辑规则来训练 规则生成器推理预测器

规则生成器是一种系统或算法,用于根据预定义的规则集合生成新的信息或执行相应的操作。
规则生成器的工作原理是将输入数据与规则集合中的条件进行匹配,并根据匹配结果执行相应的操作。
在决策支持系统中,规则生成器可以根据一系列规则来辅助决策过程。
在自然语言处理中,规则生成器可以根据语法规则和语义知识,生成符合语言规范的句子或进行语义解析。

Reasoning Predictor(推理预测器)是指一种模型或算法,用于预测或推断给定输入的推理结果。它可以根据输入的信息和上下文,通过逻辑推理、规则推断或统计模型等方法,生成与输入相关的推理结论。
推理预测器通常用于处理复杂的问题,其中需要考虑多个因素和变量之间的关系。它可以帮助我们在缺乏完整信息或面临不确定性的情况下,做出合理的推理和决策。推理预测器的性能和准确性取决于其背后的模型和算法,以及提供给它的输入数据的质量和完整性。不同的推理预测器可能采用不同的方法和技术来进行推理和预测。

本文开发了一种基于 EM 的优化算法。在每一次迭代中,首先更新推理预测器,以探索一些生成的推理逻辑规则,然后在E步骤中,通过 后验推理,从所有使用规则生成器和推理预测器产生的规则中选取一系列高质量的规则,并且在M步骤中使用E步骤中选择的规则来更新规则生成器。

EM算法的主要思想是通过迭代的方式,交替进行两个步骤:E步骤(Expectation step)和M步骤(Maximization step)。EM算法的核心思想是通过迭代地进行E步骤和M步骤,逐渐提高对参数的估计。
具体来说,EM算法的步骤如下:1. E步骤(Expectation step):在E步骤中,根据当前的参数估计,计算隐变量的 后验概率。这相当于计算在给定观测数据下,隐变量的期望值。2. M步骤(Maximization step):在M步骤中,根据上一步计算得到的隐变量的后验概率,通过最大化完全数据的对数似然函数来更新模型的参数估计。3. 重复执行E步骤和M步骤,直到收敛或达到预定的停止条件。

后验推理(Posterior Inference)
指在贝叶斯统计中,通过观测数据和先验知识来推断未知参数的后验概率分布。后验推理的目标是基于观测数据对未知参数进行推断和估计。
在后验推理中,我们首先给定一个先验概率分布,表示对未知参数的初始信念。然后,通过观测数据和贝叶斯定理,计算得到后验概率分布,表示在考虑了观测数据后对未知参数的更新估计。
后验推理的过程可以分为两个步骤:1. E步骤(Expectation step):在E步骤中,根据当前的参数估计和观测数据,计算隐变量的后验概率分布。这相当于计算在给定观测数据下,隐变量的期望值。2. M步骤(Maximization step):在M步骤中,根据上一步计算得到的隐变量的后验概率分布,通过最大化完全数据的对数似然函数来更新模型的参数估计。通过交替执行E步骤和M步骤,可以逐步优化参数估计,得到更准确的后验概率分布。

后验概率的计算公式如下:
后验概率 = (先验概率 × 似然度) / 证据
其中,先验概率表示在观测数据之前对未知参数或假设的概率分布,似然度表示在给定参数或假设的情况下,观测数据出现的概率,证据表示观测数据的概率。

介绍

知识图谱是真实世界事实的集合,在各种应用中都很有用。每一个事实都被明确规定为三元组(h,r,t)或等价的r(h,t),意思是实体h与实体t有r关系。由于它不可能收集所有的事实,所以知识图谱是不完整的。因此,知识图谱一个基础问题就是通过现存知识进行推理——知识推理。

本文研究了知识图谱推理的学习逻辑规则。
例如:任意X,Y,Z hobby(X,Y)<—friend(X,Z)∩hobby(Z,Y)
意思是如果X和Z是好朋友并且Z的爱好是Y,那么X的爱好可能也是Y。这个规则还可以用于推理新的人们的爱好。这种逻辑可以提高可推理的可解释性和预测性。因此逻辑规则可以被再利用和推广到其他领域和数据。然而,由于大的搜索空间,推理出高质量的逻辑规则用于知识推理是一项有挑战性的任务。

事实上,已经提出了多种方法来从知识图谱中学习逻辑规则。传统方法如路径排序和Markov逻辑网络枚举了图谱上的关系路径作为候选逻辑规则,并且学习每个规则的权重作为对规则质量的评估。

尽管这些方法在预测方面很有效,但搜索空间显然很大,使得难以识别高质量的逻辑规则。还有一些方法,将问题表述为一个顺序决策过程,并使用强化学习来搜索逻辑规则。然而由于训练中动作空间大、奖励少,这些方法性能尚不能令人满意。

本文提出了一种称为RNNLogic的 原则性概率方法(principle probabilistic approach),该方法克服了上述限制。该方法包括一个规则生成器和一个带有逻辑规则的推理预测器,它们同时经过训练以相互增强。

规则生成器提供 用于推理预测器推理的逻辑规则,而推理预测器提供有效的奖励来训练规则生成器,这有助于显著减少搜索空间。

原则性概率方法(principle probabilistic approach)
指的是一种基于原则的概率方法。基于概率论和统计学原则,用于建立和推断概率模型,并进行相关的推理和预测。
AI领域该方法常用于处理不确定性和随机性问题。它涉及到使用概率模型来描述不同变量之间的关系,并通过观测数据来推断模型的参数或进行预测。优势在于提供了一种同一的框架,可以处理各种类型的不确定性,并且可以通过贝叶斯等方法来更新和改进模型。

具体来说,对于每一个答案查询对(例如q=(h,r,?))和a=t,我们以查询和现有知识图谱G为条件(例如p(a|G,q))对答案的概率进行建模,其中一系列逻辑规则z被视为潜在变量。

规则生成器为每个查询定义了逻辑规则上的先验分布(例如p(z|q)),该分布由递归神经网络化成参数。
推理预测器计算以逻辑规则和现有知识图谱G作为条件的答案的可能性(例如p(a|G,q,z))。

在每次训练迭代中,我们首先从规则生成器中采样一些逻辑规则,并进一步更新推理预测器来试用这些规则进行预测。

然后使用EM算法来优化规则生成器,在E步骤中,根据它们的后验概率从所有产生的规则中选择一组高质量的逻辑规则。在M步骤中,规则生成器被更新,以模仿在E步骤中选择的高质量规则。

大量实验结果表明,RNNLogic在知识图谱推理方面优于最先进的方法,此外还可以生成高质量的逻辑规则。

相关工作

该项工作与现有的学习用于知识图谱推理的逻辑工作有关。

大多数属性方法将查询实体和答案实体之间的关系路径枚举为候选规则,并进一步学习每个规则了标量以评估质量。最近的一些方法通过学习逻辑规则和权重扩展了这一思想,其中大多数方法都是基于神经逻辑编程的。

这些方法和我们的方法在思想上是相似,因为它们都能够有效地学习逻辑规则的权重。然而,这些现有的方法试图同时学习逻辑规则及其权重,这在优化方面是不重要的。我们方法的主要创新是通过分别引入规则生成器和推理预测器来分离规则生成和规则权重学习,它们可以相互增强。规则生成器生成一些高质量的逻辑规则,而推理预测器只专注于学习这些高质量规则的权重,这大大减少了搜索空间,并获得了更好的推理结果。同时,推理推理器反过来可以帮助识别一些有用的逻辑规则,以改进规则生成器。

另一种规则学习方法是基于强化学习的。一般思想是训练 路径规划代理(pathfinding agent),在知识图谱中搜索推理路径来回答问题,然后从推理路径中提取逻辑规则。然而,训练路径规划代理是一项具有挑战性的工作,因为奖励信号(即路径是否以正确答案结束)可能及其稀疏。

Pathfinding agent(路径规划代理)
是指一个使用强化学习算法来学习和执行路径规划任务的智能代理。
在路径规划任务中,代理的目标是在给定的环境中找到从起始位置到目标位置的最佳路径。代理需要学习如何在环境中移动,并根据环境的奖励信号来调整其行为,以逐步优化路径选择。
强化学习中的路径规划代理通常使用马尔可夫决策过程(Markov Decision Process,MDP)作为建模框架。代理通过与环境的交互,观察当前状态、选择动作、接收奖励信号,并更新其策略,以最大化累积奖励。

在我们的方法中,规则生成器的作用与那些路径规划代理类似。主要区别在于,我们同时用逻辑规则来训练规则生成器和推理预测器,它们相互增强,推理预测器为训练规则生成器提供有效的奖励,规则生成器提供高质量的规则来改进推理预测器。

该项工作还设计知识图谱嵌入,它通过学习实体和潜在空间中的关系嵌入来解决知识推理。

然而这些方法智能以隐含的方法找到一些简单的规则。相反,我们提供的方法能够训练规则生成器,它能够生成复杂了逻辑规则。

有一些研究提升了基于规则的模型的工作,他们根据迄今为止学到的规则动态的添加新规则。这些方法已被证明在二元分类和回归中是有效的。与他们相比,我们的方法有着相似的想法,因为我们用推理预测器的反馈动态更新规则生成器,但我们专注于不同的任务,即在知识图谱上进行推理。

模型 (7.20)

结束所提出的RNNLogic方法,该方法学习知识图谱推理的逻辑规则。首先正式定义了知识图谱推理和逻辑规则。

知识图谱推理

让Pdata(G,q,a)作为训练数据分布,G表示由一组三元组(h,r,t)描述的背景知识图谱,也可以写作r(h,t),q=(h,r,?)是问题,a=t是答案。给出G和问题q,目标是预测正确答案a。更正式的来说,目标就是生成概率分布模型p(a|G,q)。

逻辑规则

我们通过学习逻辑规则来执行知识图谱的推理,逻辑规则在本文中有这样的连接形式:任意{Xi}li=0 r(X0,X1)<—r1(X0,X1)∩…rl(Xl-1,Xl),l是规则长度。这种句法结构能够自然而然地捕获成分,并且可以很容易表示出其他常见的逻辑规则,例如对称和取反规则。

在RNNLogic中,我们将一组 可以解释查询的 逻辑规则视为我们必须输入的潜在变量。为此,我们引入了一个规则生成器和一个使用逻辑规则的推理预测器。在给定查询的情况下,规则生成器使用递归神经网络生成一组逻辑规则,并将其提供给推理预测器进行预测。我们使用基于EM的算法优化RNNLogic。在每次迭代中,我们从更新推理预测器开始,尝试由规则生成器生成的一些逻辑规则。然后在E步骤中,我们通过后验推理从所有生成规则中识别出一组高质量的规则,先验来自规则生成器,似然来自推理预测器。最后,在M步骤中,用所识别的高质量规则更新规则生成器。

概率形式化

首先以概率化的方式形式化知识图谱推理,其中一组逻辑规则被视为潜在的变量。目标分布p(a|G,q)是有规则生成器和推理预测器联合建模的。规则生成器pθ在查询q上定义了一组潜在规则z条件的先验证,而推理预测器pw给出了答案的可能性a条件的先验规则z、查询g和知识图谱G。因此p(a|G,q)计算公式如下:
公式1
目标是联合训练规则生成器和推理预测器,以最大限度地提高训练数据的可能性。形式上,目标函数如下所示:
公式2

参数化

规则生成器

规则生成器定义分布pθ(z|q)。对于查询q,规则生成器负责为查询生成一组潜在的逻辑规则z。

形式上,给出一个查询q=(h,r,?),我们通过仅考虑没有查询实体h的查询关系r来生成组合逻辑规则。这允许生成的规则跨实体泛化。

对于缩写形式的每个组成规则r<—r1∩…∩rl,它可以被看做一个关联序列[r,r1,r2,…,rl,rend],其中r是查询关系或规则头,{ri}li=1是规则体,rend表示关系序列结束的特殊关系。

这样的关系序列可以通过递归神经网络有效地建模,因此我们引入RNNθ来参数化规则生成器。给出一个查询关系r,RNNθ按顺序生成规则主体中的每个关系,直到它到达结束关系rend。在这个过程中,同时计算生成规则的概率。这样的规则概率,我们将一组规则z上的分布定义为多项式分布:
在这里插入图片描述

其中Mu代表多项式分布,N是集合z大小的 超参数(hyperparameter),RNNθ(·|r)定义了组合规则上的分布,规则头为r。规则集z的生成过程非常直观,其中我们简单地用RNNθ生成N的规则生成z。

hyperparameter超参数
是机器学习算法中的可调参数,它们不由算法自身学习得到,而是在训练模型之前由人工设置的。
超参数用于控制模型的复杂度、学习速度和容错能力等方面。
超参数的选择通常是一个试错过程,需要经验和实践来进行调整。不同的超参数组合可能会导致不同的模型性能。

具有逻辑规则的推理预测器

推理预测器定义pw(a|G,q,z)。对于一个查询q,预测器会使用一组规则z来在知识图谱G上推理并预测答案a。

遵循随机逻辑规划,我们使用对数线性模型进行推理。对于每一个询问q=(h,r,?),组成规则能够在图G上找到不同的 grounding path,得出不同的候选答案。例如:q:(Alice,hobby,?),一个规则:hobby<—friend ∩ hobby 可以有两个背景:hobby(Alice,Sing)<—friend(Alice,Bob)∩hobby(Bob,Sing)和hobby(Alice,Ski)<—friend(Alice,Charlie)∩ hobby(Charlie,Ski),产生两个候选答案。

设A是可以通过集合z中的任何逻辑规则发现的候选答案的集合。对于每个候选答案e∈A,我们为该候选答案计算以下标量分数scorew(e):
在这里插入图片描述
其中P(h,rule,e)是一组grounding path,按照从h开始,到e结束。Ψw(rule)和 Φw(path)是每个规则和路径的标量权重。直观的,每一个候选答案e的分数是由每个规则贡献的分数的综合。为了得到scorew(e|rule),我们在图G中的每个接地路径上求和。一旦有了每个候选答案的分数,我们就可以通过使用softmax函数进一步定义查询q的答案是实体e的概率:
在这里插入图片描述

优化

接下来,我们介绍如何优化推理预测器和规则生成器,以最大化Eq中的对象。

在每次训练迭代中,我们首先根据生成器生成的一些规则更新推理预测器Pw,然后用EM算法更新规则生成器pθ。在E步骤中,通过后验推理从所有生成的规则中识别出一组高质量的规则,规则生成器作为先验,推理预测器作为可能性。在M步骤中,更新规则生成器,与在E步骤中选择的高质量规则一致。

形式上,在每个训练迭代中,我们从最大化中 关于推理预测器pw的目标O(θ,w)开始。每个训练实例(G,g,a),存在关于pθ(z | q)的期望运算。通过为查询q绘制样本z^ ~ pθ(z|q),我们可以在每个训练实例(G, q, a)处近似w的目标函数,如下所示:
在这里插入图片描述
基本上,我们从生成器中采样一组规则z^,并将z ^输入推理预测器。更新推理预测器的参数w以最大化答案a的对数似然性。

E步骤

回想一下,当优化推理预测器时,我们为每个数据实例(G,q,a)绘制一组规则z ^,并让推理预测器使用z ^ 来预测a。对于每个数据实例,E步骤旨在从所有生成的规则中识别一组K个高质量规则zI

形式上,这是通过考虑逻辑规则zI的每个子集的后验概率来实现的,先验zI来自规则生成器pθ和来自推理预测器pw的可能性。后验结合了来自规则生成器和推理预测器的知识,因此可以通过从后验中采样来获得可能的高质量规则集。然而,由于其难以处理的分割函数,从后验抽样是不平凡的,因此我们使用更易于处理的形式来近似后验,命题如下:
在这里插入图片描述

M步骤

一旦我们在E步骤中为每个数据实例(G,q,a)获得了一组高质量的逻辑规则z^I,我们就进一步利用这些规则来更新M步骤中规则生成器的参数θ。

具体地说,对于每个数据实例(G,q,a),我们将相应的规则集z^I 视为(现在完成的)训练数据的一部分,并通过最大化的z^I的**对数似然函数(log-likelihood)**来更新规则生成器。

log-likelihood 对数似然函数
用于衡量模型的拟合程度或者说对观察数据的适应度。
在机器学习中,对数似然函数通常用于训练模型和评估模型性能。对于监督学习的分类任务,对数似然函数可以用于定义损失函数。对数似然函数的值越大,表示模型对观测数据的拟合程度越好。

有了上述目标,来自推理预测器的反馈可以有效地提炼到规则生成器中。这样,规则生成器将学会只生成高质量的规则来供推理预测器探索,减少了搜索空间,并产生了更好的经验结果。

实验

实验设置

实验结果

总结

对于知识图谱推理,目前已经提出了多种方法来从知识图谱中学习逻辑规则。

传统方法在预测方面很有效,但搜索空间大奖励稀疏,这些方法性能尚不能令人满意。

为解决搜索空间大和稀疏奖励的问题,本文提出了一种称为RNNLogic的原则性概率方法,该方法克服了上述限制。

RNNLogic包括一个规则生成器和一个带有逻辑规则的推理预测器,它们同时经过训练以相互增强。

规则生成器生成一些高质量的规则,而推理预测器只专注于学习这些高质量规则的权重,这就大大减少了搜索空间。且规则生成器作用与路径规划代理类似,我们同属用逻辑规则来训练规则生成器和推理预测器,使得它们相互增强,推理预测器为训练规则生成器提供有效的奖励,规则生成器提供高质量的规则来改进推理预测器。

规则生成器负责为查询生成一组潜在的规则,推理预测器会使用一组规则在知识图谱上推理并预测答案。
每一个候选答案的分数都是由每个规则贡献的分数综合决定的。

最后通过EM进行优化。

在E步骤中,对于每个数据实例,从所有生成的规则中识别一组K个高质量的规则。
在M步骤中,利用E步骤中的规则来更新规则生成器的参数。

ToT中的搜索空间也大。

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

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

相关文章

Airbnb 引入 HTTP Streaming,网页性能得到大幅度提升

Airbnb 通过引入HTTP Streaming来提升网站的页面加载性能。他们将测试的每个页面&#xff08;包括主页&#xff09;的首次内容绘制&#xff08;First Contentful Paint&#xff0c;FCP&#xff09;时间降低了大约 100 毫秒。他们还最小化了后端慢查询对加载时间的影响。 Airbn…

机房监控教程:管理不求人,即学即用!

供电系统的可靠性直接影响到广电数据中心机房设备的正常运转&#xff0c;涉及信息存储、节目录制采编传输、影音数据等生产质量和播出质量。 为确保数据中心机房安全运行&#xff0c;实现对数据中心机房各系统设备的统一监控与有效管理&#xff0c;减轻机房维护人员工作负担&am…

MySql5.6版本开启慢SQL功能-本次采用永久生效方式

文章目录 一、目的二、注意点说明三、操作步骤3.1 临时生效操作步骤3.2 永久生效操作步骤3.3 按日期生成日志文件3.4 执行成功后验证功能是否开启 四、慢SQL日志记录内容介绍五、Shell脚本 一、目的 开启 MySQL 的慢查询日志&#xff08;Slow Query Log&#xff09;可以帮助你…

怎么做活码二维码?动态码在线生成技巧

现在制作二维码用户大多习惯使用活码二维码&#xff0c;其优势在于能够在二维码不变的情况下修改内容&#xff0c;能够生成二维码长期使用&#xff0c;还可以设置有效期、加密等其他功能可以使用。那么怎么生成活码二维码呢&#xff1f;可以使用二维码生成器&#xff08;免费在…

EasyCVR告警类型设置后首页需要刷新才能更新的问题优化

EasyCVR视频融合平台基于云边端一体化架构&#xff0c;可支持多协议、多类型设备接入&#xff0c;包括&#xff1a;NVR、IPC、视频编码器、无人机、车载设备、智能手持终端、移动执法仪等。平台具有强大的数据接入、处理及分发能力&#xff0c;可在复杂的网络环境中&#xff0c…

【Jeston Nano】环境配置-部署yolov5

【Jeston Nano】环境配置-部署yolov5 一.Jeston Nano系统初始化设置1.Chinese 语言包2.备份3.更换源 二.环境配置&#xff0c;安装包1.CUDA2.pip33.jtop4.配置可能需要的库5.安装所需要的依赖环境6.安装opencv的系统级依赖&#xff0c;一些编码库7.更新CMake8.u盘兼容 三、安装…

python web开发之WSGI/uwsgi/uWSGI详解

1. 三者的定义 WSGI是一种通信协议。uwsgi是一种传输协议。uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。 2.三者的使用场景 WSGI&#xff0c;全称 Web Server Gateway Interface&#xff0c;是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接…

Jmeter性能测试,通过插件监控服务器资源使用情况

Jmeter作为性能测试的首选工具&#xff0c;那么在性能测试过程中如何方便快捷的监测服务器资源使用情况&#xff1f; 可以通过jmeter 安装"PerfMon(Servers Performance Monitoting)"插件并配合服务端资源监控工具进行实现&#xff0c;详细操作流程如下&#xff1a;…

MySQL 中使用变量实现排名名次

title: MySQL 中使用变量实现排名名次 date: 2023-7-16 19:45:26 tags:- SQL 高级查询 一. 数据准备: CREATE TABLE sql_rank (id INT ( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT,user_id INT ( 11 ) UNSIGNED NOT NULL,score TINYINT ( 3 ) UNSIGNED NOT NULL,add_time date NO…

Spring Batch之读数据库—HibernateCursorItemReader(三十九)

一、HibernateCursorItemReader 对应关系映射(Object Relational Mapping,ORM)是一种为解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说&#xff0c;ORM是通过使用描述对象和数据库之间映射的元数据&#xff0c;将Java程序中的对象自动持久化到关系数据库中。 H…

html 解决css样式 缓存 ---css引入添加时间戳

通过js 对引入的css添加时间戳 <script type"text/javascript">document.write("<link relstylesheet typetext/css href./style/base.css?v" new Date().getTime() ">");document.write("<link relstylesheet typetext…

和chatgpt学架构03-引入UI框架(elment-plus)

目录 1 项目目录及文件的具体作用1.1 App.vue1.2 main.js的作用1.3 main.js什么时候被调用1.4 npm run serve干了什么事情1.5 package.json的作用 2 安装UI框架2.1 安装命令2.2 全局引入 3 启动工程总结 我们已经安装好了我们的vue脚手架&#xff0c;用vscode打开工程目录 要自…

有序链表转换二叉搜索树

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为高度平衡的二叉搜索树。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差不超过 1。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,nul…

封装hiredis成dll包,为老项目提供redis网络支持

第一步&#xff1a;准备VS环境 1、需要下载window8.1的SDK否则无法下载 2、平台工具集需要使用Visual Studio 2015(v140) 第二步&#xff1a;下载hiredis 去microsoft/hiredis下载windows版本的hiredis&#xff0c;并解压到本地 打开hiredis-master\msvs\vs-solutions中的sl…

linux之Ubuntu系列 find 、 ln 、 tar、apt 指令 软链接和硬链接 snap

查找文件 find 命令 功能非常强大&#xff0c;通常用来在 特定的目录下 搜索 符合条件的文件 find [path] -name “.txt” 记得要加 “ ” 支持通配符 &#xff0c;正则表达式 包括子目录 ls 不包括 子目录 如果省略路径&#xff0c;表示 在当前路径下&#xff0c;搜索 软链接…

GPT 如此强大,我们可以利用它实现什么?

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer结构的预训练语言生成模型&#xff0c;由OpenAI研发。它可以生成高质量的自然语言文本&#xff0c;取得了很好的效果&#xff0c;被广泛应用于各个领域。以下是一些利用GPT实现的应用。 一…

01-复杂度1 最大子列和问题

中国大学MOOC-陈越、何钦铭-数据结构-2023夏季 题目集 题目 思路 令f(n)表示以第n个数结尾的连续序列的最大和&#xff0c;则状态转移方程为&#xff1a; 解释&#xff1a;如果f(n-1)小于零&#xff0c;代表对f(n)的值贡献为负。故&#xff0c;以为结尾的最大子列和就是&…

【Hydro】一个简单的HBV水文模型产流Python实现

说明 HBV模型包括一系列自由参数&#xff0c;其值可以通过率定得到。同时也包括一些描述流域和气候特征的参数&#xff0c;它们的值在模型率定是假定不变。子流域的划分使得在一个子流域中可能有很多参数值。虽然在大多数应用中&#xff0c;各子流域之间参数值只有很小的变化&a…

【已解决】idea使用debug启动一直卡着不动

debug启动时一直卡着不动出现下图提示&#xff0c;但是正常启动又可以启动 翻译结果是&#xff1a;方法断点可能会大大降低调试速度。很明显&#xff0c;有断点的位置没加对或者误加断点了&#xff0c;以下是解决方法。 打开 .idea文件夹&#xff0c;找到workspace.xml文件 找…

基于Javaweb实现ATM机系统开发实战(九)存款功能实现

先看前端界面确定后端需要处理的参数&#xff0c;把一些参数进行修改&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <% taglib prefix"c" uri"http://java.sun.com…