CS224W—02 Node Embeddings

news2025/1/12 0:48:13

CS224W—02 Node Embeddings

Node Embeddings概念

传统的图机器学习

  • 给定一个输入图抽取节点、边和图级别特征, 学习一个能将这些特征映射到标签的模型(像SVM, NN…)
  • 这个抽取不同级别特征的过程,就是特征工程feature engineering
  • 学习到模型后拿来预测就是具体的下游预测任务

image-20240723105032839

图表示学习可以减轻每次做特征工程的需求,自动的学习到特征。

image-20240723105316986

目标:图机器学习的高效的任务无关特征学习。对于图,要抽取到任务无关的的特征,这样下游任务不同也能用。

image-20240723105704255

如上图,就是将节点 𝑢 ,经过函数 𝑓 , 映射成向量。这就是特征表示或者更具体地说是embedding

为什么需要embedding?

  1. 可视化和理解:图结构通常是高维的,难以直接可视化。通过图嵌入,可以将节点映射到一个低维空间(通常是二维或三维),使得网络的结构和关系更容易被观察和理解。

  2. 相似性度量:在网络中,节点之间的相似性是一个重要的概念。通过图嵌入,可以将这种相似性转化为向量空间中的距离。节点的嵌入向量越接近,它们在网络中的行为和特征就越相似。这有助于识别网络中的社区结构或相似节点。

  3. 编码网络信息:图嵌入可以将网络的结构信息编码到向量中。这意味着节点的嵌入向量不仅包含了它们自身的信息,还包含了它们与网络中其他节点的关系。这对于理解节点在网络中的角色和功能至关重要。

  4. 下游任务应用:图嵌入生成的向量可以作为输入特征,用于各种机器学习任务。

  5. 处理大规模数据:大规模图数据的处理和分析常常面临计算和存储的挑战。图嵌入可以将图数据转换为更紧凑的向量形式,从而减少存储需求和加速计算过程。

  6. 增强模型性能:在许多机器学习模型中,输入特征的质量和表示方式对模型性能有显著影响。图嵌入通过将图数据转换为向量,可以提高模型在处理图结构数据时的准确性和效率。

image-20240723110108260

Encoder and Decoder

Setup

假设我们有一个无向图 G G G

  • V V V 是顶点集合。
  • A A A 是邻接矩阵(假设为二进制)。
  • 为简化起见:不使用节点特征或额外信息。

image-20240723110344117

Node Embeddings

目标:编码节点,以便embedding space(如点积)中的相似度近似于图中的相似度。

image-20240723110700689

如上图中,原始的网络中的邻居节点u、v ,编码到embedding空间后,对应的 z u , z v \mathbf{z}_u, \mathbf{z}_v zu,zv 也要相近。

Learning Node Embeddings

过程:

  1. 编码器将节点映射到嵌入

  2. 定义一个节点相似性函数(即,在原始网络中的相似性度量)

  3. 解码器 D E C DEC DEC 将嵌入映射到相似性得分

  4. 优化编码器的参数,使得: similarity ( u , v ) ≈ z v T z u \text{similarity}(u, v)\approx \mathbf{z}_v^T\mathbf{z}_u similarity(u,v)zvTzu

Encoder: 映射每个节点到低维度向量。

image-20240723111542852

相似度函数: 明确编码后向量空间和原始网络是怎样的映射关系,如上图,就是原始网络中u和v的相似度和这两个节点embedding后的点积是如何对应的。

image-20240723111855425

Shallow Encoding

最简单的编码方法:编码器仅仅是一个嵌入查找。

ENC ( v ) = z v = Z ⋅ v \text{ENC}(v) = \mathbf{z}_v = \mathbf{Z} \cdot v ENC(v)=zv=Zv,其中:

  • Z ∈ R d × ∣ V ∣ \mathbf{Z} \in \mathbb{R}^{d \times |V|} ZRd×V 表示嵌入矩阵,每一列是一个节点的嵌入向量。
  • v ∈ { 0 , 1 } ∣ V ∣ v \in \{0, 1\}^{|V|} v{0,1}V 是指示向量,除了在第 v v v 列有一个1表示节点 v v v 外,其他位置都是0。
image-20240723112303589

得到嵌入矩阵的方法有 DeepWalk, node2vec等。

Encoder + Decoder Framework

Shallow Encoding:嵌入查找

  • 需要优化的参数: Z \mathbf{Z} Z,其中包含所有节点 u ∈ V u \in V uV 的节点嵌入 Z u \mathbf{Z}_u Zu
  • 我们将在图神经网络(GNNs)中介绍 deep encoders

解码器:基于节点相似性

  • 目标:对于相似的节点对 ( u , v ) (u, v) (u,v),最大化 z v T z u \mathbf{z}_v^T\mathbf{z}_u zvTzu

上述方法的关键点是怎么定义节点相似度 ?接下来将用随机游走来学习获得节点相似度,和怎样为该相似度指标优化embedding。

Random Walk Approaches for Node Embeddings

符号

向量 z u \mathbf{z}_u zu:节点 u u u 的嵌入。
概率 P ( v ∣ z u ) P(v \mid \mathbf{z}_u) P(vzu)

  • 基于 z u \mathbf{z}_u zu 的模型预测。
  • 从节点 u u u 开始的随机游走中访问节点 v v v 的(预测)概率。

用于产生预测概率的非线性函数:

  • Softmax 函数:将 K K K 个实值(模型预测)转换为 K K K 个总和为1的概率: S ( z ) [ i ] = e z [ i ] ∑ j = 1 K e z [ j ] S(\mathbf{z})[i] = \frac{e^{\mathbf{z}[i]}}{\sum_{j=1}^{K} e^{\mathbf{z}[j]}} S(z)[i]=j=1Kez[j]ez[i]
  • Sigmoid 函数:将实值转换为范围在 ( 0 , 1 ) (0, 1) (0,1) 内的S形函数,表示为 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1

Random Walk

给定一个图和一个起始点,我们随机选择一个相邻点,然后移动到这个相邻点;接着我们随机选择这个点的一个相邻点,并移动到它,依此类推。这样访问点的(随机)序列是图上的随机游走(Random Walk)。

Random Walk Embeddings:
z u T z v = z 和 v 一起出现在图中的随机游走上的概率 \mathbf{z}_u^T\mathbf{z}_v = \mathbf{z}和\mathbf{v}一起出现在图中的随机游走上的概率 zuTzv=zv一起出现在图中的随机游走上的概率

  1. 使用某种随机游走策略 R R R,从节点 u u u开始估计访问节点 v v v的概率 P R ( v ∣ u ) P_R(v|u) PR(vu)
  2. 这个概率就是节点u和v的相似度,我们可以根据这个概率来优化embedding,在embedding空间的相似度,这里 dot product=cos⁡(𝜃) ,就是编码的随机游走相似度。

优势:

  • 可解释性:灵活的随机定义节点相似性,该定义结合了局部和更高阶邻域信息。
    • 思想:如果从节点 α \alpha α开始的随机游走以高概率访问节点 β \beta β,则 α \alpha α β \beta β是相似的(高阶多跳信息)。
  • 高效性:在训练时不需要考虑所有节点对;只需要考虑在随机游走中共同出现的对。
Unsupervised Feature Learning

直觉:在 d d d维空间中找到节点的嵌入,以保持相似性。

思路:学习节点嵌入,使得在网络中相邻的节点彼此靠近。

给定一个节点 u u u,我们如何定义相邻节点? N R ( u ) N_R(u) NR(u) … 通过某种随机游走策略 R R R获得的 u u u的邻域

给定图 G = ( V , E ) G = (V, E) G=(V,E),我们的目标是学习一个映射 f : u → R d f: u \rightarrow \mathbb{R}^d f:uRd f ( u ) = z u f(u) = \mathbf{z}_u f(u)=zu

对数似然目标: arg max z ∑ u ∈ V log ⁡ ( P ( N R ( u ) ∣ z u ) ) \text{arg max}_z\sum_{u \in V}\log \left( P(N_R(u) | \mathbf z_u) \right) arg maxzuVlog(P(NR(u)zu))

  • 其中 N R ( u ) N_R(u) NR(u)是通过策略 R R R得到的节点 u u u的邻域。给定节点 u u u,我们希望学习特征表示,这些表示能够预测其随机游走邻域 N R ( u ) N_R(u) NR(u)中的节点。
Random Walk Optimization
  1. 从图中的每个节点 u u u开始,使用某种随机游走策略 R R R运行短的固定长度随机游走
  2. 对于每个节点 u u u,收集 N R ( u ) N_R(u) NR(u),即从 u u u开始的随机游走中访问的节点的多重集。
  3. 根据以下方式优化嵌入:给定节点 u u u,预测其邻居 N R ( u ) N_R(u) NR(u)

等价地,$ \arg\min_z \mathcal{L} = \sum_{u \in V} \sum_{v \in N_R(u)}-\log(P(v \mid z_u)) $

直觉:优化嵌入 z u z_u zu以最小化随机游走邻域 N ( u ) N(u) N(u)的负对数似然。

使用softmax参数化 P ( v ∣ z u ) P(v \mid z_u) P(vzu)
P ( v ∣ z u ) = exp ⁡ ( z u T z v ) ∑ n exp ⁡ ( z u T z n ) P(v \mid \mathbf {z}_u) = \frac{\exp(\mathbf {z}_u^T \mathbf {z}_v)}{\sum_{n} \exp(\mathbf {z}_u^T \mathbf {z}_n)} P(vzu)=nexp(zuTzn)exp(zuTzv)
image-20240730111210942

计算复杂度高: O ( ∣ V ∣ 2 ) O(|V|^2) O(V2)

解决方法: 负采样。这里将softmax替换为sigmoid, 近似得到:
− log ⁡ ( exp ⁡ ( z u T z v ) ∑ n exp ⁡ ( z u T z n ) ) ≈ log ⁡ ( σ ( z u T z v ) ) + ∑ i = 1 k log ⁡ ( σ ( − z u T z n i ) ) , n i ∼ P V -\log \left(\frac{\exp(\mathbf {z}_u^T \mathbf {z}_v)}{\sum_{n} \exp(\mathbf {z}_u^T \mathbf {z}_n)}\right)\approx\\ \log \left(\sigma\left(\mathbf{z}_u^{\mathrm{T}} \mathbf{z}_v\right)\right)+\sum_{i=1}^k \log \left(\sigma\left(-\mathbf{z}_u^{\mathrm{T}} \mathbf{z}_{n_i}\right)\right),n_i \sim P_V log(nexp(zuTzn)exp(zuTzv))log(σ(zuTzv))+i=1klog(σ(zuTzni)),niPV
负采样就是将分母归一化部分中所有节点 𝑛 替换为随机采样得到的 k个负样本 n i n_i ni ,即不在random walk上的样本.

对于k(负样本数量)的两个考虑:

  1. 更高的k值提供更稳健的估计
  2. 更高的k值对应于对负事件的更高偏差:实践中k值通常为5到20。
  3. 负样本可以是任意节点还是仅限于不在游走中的节点?人们通常采样任意节点(出于效率考虑)

使用随机梯度下降优化目标:
L = ∑ u ∈ V ∑ v ∈ N R ( u ) − log ⁡ ( P ( v ∣ z u ) ) \mathcal{L} = \sum_{u \in V} \sum_{v \in N_R(u)}-\log(P(v \mid \mathbf{z}_u)) L=uVvNR(u)log(P(vzu))
应该使用什么策略进行随机游走呢?最简单的想法:直接固定长度,每个节点都无偏的随机游走。 但问题是这样的策略使得相似度有非常大的局限性。2014DeepWalk:https://arxiv.org/pdf/1403.6652

Node2Vec

2016node2vec:https://cs.stanford.edu/~jure/pubs/node2vec-kdd16.pdf

  • 目标:将具有相似网络邻域的节点嵌入到特征空间中靠近的位置。
    我们将这个目标构建为一个最大似然优化问题,独立于下游预测任务。
  • 关键观察:灵活的网络邻域 N r ( u ) N_r(u) Nr(u)的概念导致丰富的节点嵌入。
  • 开发有偏的二阶随机游走 R R R来生成节点 u u u的网络邻域 N R ( u ) N_R(u) NR(u)

思想:使用稳定的有偏随机游走来权衡网络的局部和全局视图。

image-20240730113512796

长度为3的游走( N R ( u ) N_R(u) NR(u)的大小为3):

  • N B F S ( u ) = { S 1 , S 2 , S 3 } N_{BFS}(u) = \{ S_1, S_2, S_3 \} NBFS(u)={S1,S2,S3}:局部微观视角
  • N D F S ( u ) = { S 4 , S 5 , S 6 } N_{DFS}(u) = \{ S_4, S_5, S_6 \} NDFS(u)={S4,S5,S6}:全局宏观视角

给定节点 u u u生成邻域 N R ( u ) N_R(u) NR(u)的有偏固定长度随机游走 R R R。随机游走有两个参数:

  • 返回参数 p p p:返回前一个节点
  • 进出参数 q q q:从前一个节点向外(深度优先搜索DFS)与向内(广度优先搜索BFS)移动:直观上, q q q是BFS与DFS的“比例”

接下来,我们指定如何执行有偏随机游走的单步。随机游走就是这些步骤的序列。

Biased Random Walk

有偏的2阶随机游走探索网络邻居节点:

  • 假设通过边 ( s 1 , w ) (s_1,w) (s1,w) 到达 w w w 节点

  • 那么现在w节点的邻居节点可能是 s 1 , s 2 , s 3 s_1,s_2,s_3 s1,s2,s3 。这跟最开始的起点 s 1 s_1 s1 的意义是不一样的。

    image-20240730114304668

    image-20240730114523412
  • 通过边 ( s 1 , w ) (s_1,w) (s1,w)走到 w w w 节点,下一步跳到哪? 如图跳到下一个节点的的概率是不一样的。(注意, 1 / p 1/p 1/p, 1 / q 1/q 1/q,1 不是归一化的概率,加起来和不为1)

  • p p p q q q是模型的转移概率。

如上图所示,前一步通过边 ( s 1 , w ) (s_1, w) (s1,w)到达节点 w w w。现在走到的节点 w w w,邻居节点有 s 1 s_1 s1 s 2 s_2 s2 s 3 s_3 s3 s 4 s_4 s4。具体怎么设计 p p p q q q概率呢?

根据上一跳节点和下一跳节点的距离设计,说到距离,就要明确这两点在哪?上一跳节点为 s 1 s_1 s1,下一跳为 s 1 , s 2 , s 3 , s 4 s_1, s_2, s_3, s_4 s1,s2,s3,s4

论文中提到:
α p q ( t , x ) = { 1 p  if  d t x = 0 1  if  d t x = 1 1 q  if  d t x = 2 \alpha_{p q}(t, x)= \begin{cases}\frac{1}{p} & \text { if } d_{t x}=0 \\ 1 & \text { if } d_{t x}=1\\ \frac{1}{q} & \text { if } d_{t x}=2 \end{cases} αpq(t,x)= p11q1 if dtx=0 if dtx=1 if dtx=2
t t t表示上一跳节点, x x x表示未来要走的节点, d t x d_{tx} dtx表示这两个节点之间的距离。所以上图中的转移概率如下:

image-20240730115215387

  • 类似BFS的游走:较小的p值,那么 1/𝑝 就较大,会回到上一跳节点。
  • 类似DFS的游走:较小的q值,会往跟上一跳较远的距离跳。
Algorithm
  1. 计算边的转移概率:对于每条边 ( s i , w ) (s_i, w) (si,w),我们计算基于 p , q p, q p,q的边游走概率 ( w , ⋅ ) (w,\cdot) (w,)
  2. 模拟从每个节点 u u u 开始长度为 l l l r r r 次随机游走。
  3. 使用随机梯度下降优化node2vec目标。(目标和上面的一样)

线性时间复杂度:所有3个步骤都可以单独并行化。

Summary

image-20240730120001613

  • 没有一种方法在所有情况下都是最优的。例如,node2vec在节点分类上表现更好,而其他方法在链接预测上表现更好。
  • 随机游走方法通常更有效率。
  • 一般来说:必须选择与你的应用程序匹配的节点相似性定义。

Embedding Entire Graphs

image-20240730120154158

  • 目标:把一个子图或者一张图嵌入到特征空间去,得到图的embedding: z G \mathbf{z}_G zG
  • 具体任务:对有毒和无毒分子分类;鉴别异常的图

方法1

简单(但有效)的方法1:https://arxiv.org/abs/1509.09292
在(子)图 G G G上运行标准图嵌入技术。然后只需将(子)图 G G G中的节点嵌入求和(或平均)。
z G = ∑ v ∈ G z v \mathbf{z}_G = \sum_{v \in G} \mathbf{z}_v zG=vGzv

方法2

引入一个”虚拟节点“来表示子图,然后再对其用node embedding。https://arxiv.org/abs/1511.05493

image-20240730120539869

Matrix Factorization and Node Embeddings

回忆:编码器是一个嵌入查找。

ENC ( v ) = z v = Z ⋅ v \text{ENC}(v) = \mathbf{z}_v = \mathbf{Z} \cdot v ENC(v)=zv=Zv,其中:

  • Z ∈ R d × ∣ V ∣ \mathbf{Z} \in \mathbb{R}^{d \times |V|} ZRd×V 表示嵌入矩阵,每一列是一个节点的嵌入向量。
  • v ∈ { 0 , 1 } ∣ V ∣ v \in \{0, 1\}^{|V|} v{0,1}V 是指示向量,除了在第 v v v 列有一个1表示节点 v v v 外,其他位置都是0。
image-20240723112303589

最简单的节点相似性:如果节点 u u u v v v由一条边连接,它们就是相似的,这对应于图邻接矩阵 A A A中的 ( u , v ) (u, v) (u,v)项。因此, Z T Z = A \mathbf{Z}^T \mathbf{Z} = A ZTZ=A

image-20240730121200212

嵌入维度 d d d(矩阵 Z Z Z 的行数)远小于节点数 n n n。精确分解 A = Z T Z A = Z^T Z A=ZTZ 通常是不可能的。然而,我们可以近似学习 Z Z Z

  • 我们优化 Z Z Z 以最小化 A − Z T Z A - Z^T Z AZTZ L 2 L2 L2 范数(Frobenius范数)。
  • 注意今天使用了softmax而不是 L 2 L2 L2。但用 Z T Z Z^T Z ZTZ 近似 A A A 的目标是相同的。
  • 结论:内积解码器,其中节点相似性由边连接性定义,等同于矩阵 A A A 的分解。

DeepWalk 等同于以下复杂矩阵表达式的矩阵分解:https://keg.cs.tsinghua.edu.cn/jietang/publications/WSDM18-Qiu-et-al-NetMF-network-embedding.pdf
log ⁡ ( vol ⁡ ( G ) ( 1 T ∑ r = 1 T ( D − 1 A ) r ) D − 1 ) − log ⁡ b \log \left(\operatorname{vol}(G)\left(\frac{1}{T} \sum_{r=1}^T\left(D^{-1} A\right)^r\right) D^{-1}\right )-\log b log(vol(G)(T1r=1T(D1A)r)D1)logb
image-20240730121734098

总结与局限

怎么使用节点的embeddings z i \mathbf{z}_i zi

  • 聚类/社区发现: 聚类 z i \mathbf{z}_i zi
  • 节点分类:基于 z i \mathbf{z}_i zi预测节点i的标签
  • 边预测: 基于 ( z i , z j ) (\mathbf{z}_i,\mathbf{z}_j) (zi,zj) 预测边 ( i , j ) (i,j) (i,j) , 可以通过平均点积等方法 求embeddings的差值
  • 图预测:通过聚合节点embeddings或虚拟节点游走获得的图embedding z G \pmb z_G zG 来预测图的标签

局限性:

  1. 无法为训练集中不存在的节点获得嵌入。无法应用于新图、演化图:测试时新增节点5(例如,社交网络中的新用户)。无法使用DeepWalk或node2vec计算其嵌入。需要重新计算所有节点嵌入。image-20240730122355896
  2. 无法捕捉结构相似性。节点1和11在结构上相似 : 都是一个三角形的一部分,度数为2。然而,它们具有非常不同的嵌入。
    从节点1随机游走到节点11的可能性很小。DeepWalk和node2vec没有捕捉到结构相似性。image-20240730122506108
  3. 无法利用节点、边和图特征。特征向量(例如,在蛋白质-蛋白质交互图中的蛋白质属性)。DeepWalk/node2vec嵌入没有结合这些节点特征。解决这些限制的方案:深度表示学习和图神经网络。

参考资料

  • CS224W笔记-3-1. Node Embeddings - aigonna的文章 - 知乎https://zhuanlan.zhihu.com/p/486094620
  • https://web.stanford.edu/class/cs224w/

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

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

相关文章

华为NetEngine AR1000V虚拟路由器 nfv

华为NetEngine AR1000V虚拟路由器 华为NetEngine AR1000V虚拟路由器彩页 - 华为企业业务 华为NetEngine AR1000V虚拟路由器 NetEngine AR1000V是华为公司在传统企业网络向SD-WAN转型的趋势下推出的虚拟路由器。 AR1000V基于NFV技术,可以部署在X86硬件平台的服务…

我出一道面试题,看看你能拿 3k 还是 30k!

大家好,我是程序员鱼皮。欢迎屏幕前的各位来到今天的模拟面试现场,接下来我会出一道经典的后端面试题,你只需要进行 4 个简单的选择,就能判断出来你的水平是新手(3k)、初级(10k)、中…

HarmonyOs~ArkUI进阶 之 状态管理

合理选择装饰器 最小化状态共享范围 在没有强烈的业务需求下,尽可能按照状态需要共享的最小范围选择合适的装饰器。 应用开发过程中,按照组件颗粒度,状态一般分为组件内独享的状态和组件间需要共享的状态 组件间需要共享的状态 组件间需…

细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法

目录 一、参考硬件 二、 建立新工程 1.配置DAC1 2.配置DAC1的DMA 3.配置DAC2 4.配置DAC2的DMA 5.配置定时器 6.配置时钟和Debug 三、修改代码 四、 查看结果 一、参考硬件 本项目依赖的软件和硬件工程参考本文作者写的文章: 细说MCU的DAC1实现…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑧ | 11.21 - 11.22

前言 第11章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.21 实施定量风险分析 11.21.1 主要输入 11.21.2 主要工具与技术 11.21.3 主要输出 11.22 规划风险应对 …

UPLOAD-LABS靶场[超详细通关教程,通关攻略]

---------------------------------------- 靶场环境: 下载链接: https://codeload.github.com/c0ny1/upload-labs/zip/refs/heads/master 使用小皮集成环境来完成这个靶场 将文件放到WWW目录下就可以进行访问 ------------------------------------…

【JavaEE】HTTP(3)

🤡🤡🤡个人主页🤡🤡🤡 🤡🤡🤡JavaEE专栏🤡🤡🤡 文章目录 1.HTTP响应1.2状态码 2.HTTPS协议2.1概念2.2引入对称加密2.2.1概念2.2.2图解…

Ribbon-微服务注册中心(Ribbon概述 基于Ribbon实现订单调⽤商品服务 服务调⽤Ribbon⾼级 )

目录 一、Ribbon概述 1. 什么是Ribbon 2. Ribbon的主要作⽤ 二、基于Ribbon实现订单调⽤商品服务 1. 坐标依赖 2. ⼯程改造 三、服务调⽤Ribbon⾼级 1. 负载均衡概述 2. 客户端负载均衡与服务端负载均衡 3. 基于Ribbon实现负载均衡 3.1 搭建多服务实例 3.2 负载均衡…

完蛋!我把AI喂吐了!

当我们用 [RAG] 构建一个知识库问答应用的时候,总是希望知识库里面灌的数据越多,问答的效果越好,事实真是如此吗?这篇文章给大家答案。 引言 在人工智能问答系统的发展中,RAG(Retrieval-Augmented Generat…

努比亚开局连发两款旗舰机,其中一款还能卫星通话?

在智能手机市场竞争日益激烈的当下,努比亚作为国内知名手机品牌,始终致力于为消费者带来兼具创新性和实用性的产品。 近日,努比亚正式发布了两款备受瞩目的旗舰手机——努比亚Z60 Ultra领先版和努比亚Z60S Pro。两款手机不仅在硬件配置上实现…

Macbook Pro升级macOS 10.15及以上的全过程

Author : Spinach | GHB Link : http://blog.csdn.net/bocai8058文章目录 前言升级步骤选择指定macOS版本并下载安装升级macOS安装过程安装完成 前言 由于现在更多软件安装所需系统要求10.15及以上,导致很多app应用不能使用,如edge mac的操作系统要求…

LlamaIndex vs LangChain: 理解关键差异

LLM(大型语言模型)已成为各行各业不可或缺的工具,用于生成类人文本、翻译语言和回答问题等任务。有时,LLM的响应令人惊叹,因为它们比人类更迅速、更准确。这表明了它们对当今技术格局的重大影响。 今天让我们聊聊 Llam…

i2c中结构体 数据传输 i2c Tools使用

I2C中重要结构体 在I2C(Inter-Integrated Circuit)通信中,涉及的主要结构体通常用于描述设备、消息和传输的配置。以下是一些常见的I2C结构体及其作用: i2c_adapter: 这是一个代表I2C总线适配器的结构体。它包含与该I2C总线相关的…

【Django5】模型定义与使用

系列文章目录 第一章 Django使用的基础知识 第二章 setting.py文件的配置 第三章 路由的定义与使用 第四章 视图的定义与使用 第五章 二进制文件下载响应 第六章 Http请求&HttpRequest请求类 第七章 会话管理(Cookies&Session) 第八章 文件上传…

【ai】 2005年 rule based expert system学习笔记1

PPT 是2005年的? Negnevitsky, Pearson Education 使用两种推理引擎的选择 backward chaining(逆向链接)推理过程 backward chaining(逆向链接)推理过程的GPT解释 这幅图展示了一个基于规则的专家系统如何通过backward chaining(逆向链接)推理过程来达到最终的推理目标…

[tomato]靶机复现漏洞详解!

靶机地址: https://download.vulnhub.com/tomato/Tomato.ova 靶机环境:Vmware 网络:NAT模式 信息收集: arp-scan -l 扫描靶机ip地址 扫描开放的端口信息 nmap -sS -sV -p- 192.168.77.135 发现开放端口21&#xff…

Matplotlib柱形图大揭秘:让数据‘站’起来,比增高鞋垫还管用!

1. Matplotlib绘制柱形图/柱状图/条形图 柱状图是一种用矩形柱来表示数据分类的图表,柱状图可以垂直绘制,也可以水平绘制,它的高度与其表示的数据成正比关系 # 导包 import numpy as np import pandas as pd import matplotlib.pyplot as p…

黑马Java零基础视频教程精华部分_9_面向对象进阶(1)

系列文章目录 文章目录 系列文章目录一、static(表示静态) 是Java中的一个修饰符,可以修饰成员方法,成员变量1、静态变量2、静态变量底层原理3、static静态方法4、工具类、测试类、Javabean类5、static注意事项从代码层面从内存层面 6、重新认识main方法…

[ WARN:0@0.014] global loadsave.cpp:248 cv::findDecoder imread_

[ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 目录 [ WARN:00.014] global loadsave.cpp:248 cv::findDecoder imread_ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰…

网工必装软件,SecureCRT从零到精通,不可错过

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 中午好,我的网工朋友。 相信在平时的日常工作中,大家经常需要通过安全的方式远程访问各种设备和服务。SecureCRT作为一款强…