文献分享:RoarGraph——跨模态的最邻近查询

原文章: RoarGraph: A Projected Bipartite Graph for Efficient Cross-Modal Approximate Nearest Neighbor Search \text{RoarGraph: A Projected Bipartite Graph for Efficient Cross-Modal Approximate Nearest Neighbor Search} RoarGraph: A Projected Bipartite Graph for Efficient Cross-Modal Approximate Nearest Neighbor Search

1. \textbf{1. } 1. 导论

1.1. \textbf{1.1. } 1.1. 研究背景

1️⃣跨模态检索:

  1. 含义:使用某个模态的数据作为 query \text{query} query,返回另一个模态中语义相似的内容
  2. 示例:输入"Apple"后,返回苹果的照片

2️⃣模态差距 (gap) \text{(gap)} (gap):不同模态数据即使映射到同一语义空间(比如用 CLIP \text{CLIP} CLIP),其分布特征仍差距显著

\quad image-20250103234040081

3️⃣两种 ANN \text{ANN} ANN

  1. 单模态 ANN \text{ANN} ANN:查询向量分布 ↔ ID \xleftrightarrow{\text{ID}} ID 基础数据分布,即查询来源于与数据库数据相同的分布
  2. 跨模态 ANN \text{ANN} ANN​:查询向量分布 ↔ OOD \xleftrightarrow{\text{OOD}} OOD 基础数据分布,即查询来源于与数据库数据不同的分布

1.2. \textbf{1.2. } 1.2. 本文的研究

1️⃣研究动机:当前 SOTA \text{SOTA} SOTA ANN \text{ANN} ANN​都是单模态的,在 OOD \text{OOD} OOD负载上表现差

2️⃣研究内容

  1. OOD \text{OOD} OOD工作负载分析:跨模态后性能下降,源于查询过远 + + +标签分散 → \text{→} 收敛变慢 / / /跳数增加
    类型查询 ↔ 距离 \boldsymbol{\xleftrightarrow{距离}} 距离 基础数据查询最邻近 i ↔ 距离 \boldsymbol{i\xleftrightarrow{距离}} i距离 查询最邻近查询 ↔ 分布 \boldsymbol{\xleftrightarrow{分布}} 分布 基础数据
    单模态 ANN \text{ANN} ANN近(基本假设)近(基本假设) ID \text{ID} ID
    跨模态 ANN \text{ANN} ANN远(实验得到)远(实验得到) OOD \text{OOD} OOD
  2. RoarGraph \text{RoarGraph} RoarGraph的提出:
    • 原理:让查询参与图构建 → \text{→} 将[查询点 ↔ \xleftrightarrow{} 基础点]邻接关系投影到基础点 → \text{→} 形成仅有基础点的图
    • 意义:让空间上很远但是查询上很近的点相连,从而能高效处理 OOD-ANNS \text{OOD-ANNS} OOD-ANNS
      image-20250104005140458
    • 效果:在跨模态数据集上实现了 QPS \text{QPS} QPS Recall \text{Recall} Recall指标的提升

1.3. \textbf{1.3. } 1.3. 有关工作

方法核心思想优缺点
束搜索终止利用查询训练分类模型判断何时终止搜索提升效率,但训练成本较高
图卷积 (GCN) \text{(GCN)} (GCN)引入 GCN \text{GCN} GCN学习最优搜索路径路径优化明显,但训练成本较高
GCN+RL \text{GCN+RL} GCN+RL强化学习与 GCN \text{GCN} GCN结合引导搜索路由提升效果显著,但训练成本较高
GraSP \text{GraSP} GraSP概率模型与子图采样学习边重要性性能优化明显,但索引构建成本高
ScaNN \text{ScaNN} ScaNN结合向量量化和 PQ \text{PQ} PQ进行分区与压缩压缩与搜索性能高效,但依赖调参

2. \textbf{2. } 2.  OOD \textbf{OOD} OOD负载的分析与验证

2.1. \textbf{2.1. } 2.1. 初步的背景及其验证

2.1.1. \textbf{2.1.1. } 2.1.1. 对模态差距的验证

1️⃣ OOD \text{OOD} OOD的量化

距离类型衡量什么如何理解
Wasserstein \text{Wasserstein} Wasserstein距离两个分布间的差异把一个分布搬到另一个的最小代价
Mahalanobis \text{Mahalanobis} Mahalanobis距离一个向量到一个分布的距离一个点相对于一个分布的异常程度

1️⃣实验 1 1 1:用 Wasserstein \text{Wasserstein} Wasserstein距离衡量 OOD \text{OOD} OOD特性

  1. 数据集:基础数据集中抽取的无交叉集 B 1 / B 2 B_1/B_2 B1/B2 OOD \text{OOD} OOD的查询集 Q Q Q
  2. 结果: Wasserstein ( B 1 , Q ) \text{Wasserstein}(B_1,Q) Wasserstein(B1,Q) Wasserstein ( B 2 , Q ) \text{Wasserstein}(B_2,Q) Wasserstein(B2,Q),大致是 Wasserstein ( B 1 , B 2 ) \text{Wasserstein}(B_1,B_2) Wasserstein(B1,B2)两倍

2️⃣实验 2 2 2:用 Mahalanobis \text{Mahalanobis} Mahalanobis距离衡量 OOD \text{OOD} OOD特性

  1. 数据集:满足分布 P P P的基础数据,来自 ID \text{ID} ID查询集的 q i d q_{id} qid,来自 OOD \text{OOD} OOD查询集的 q o o d q_{ood} qood
  2. 结果: Mahalanobis ( q id , P ) <Mahalanobis ( q ood , P ) \text{Mahalanobis}(q_{\text{id}},P)\text{<}\text{Mahalanobis}(q_{\text{ood}},P) Mahalanobis(qid,P)<Mahalanobis(qood,P)

2.1.2. SOTA-ANN \textbf{2.1.2. }\textbf{SOTA-ANN} 2.1.2. SOTA-ANN OOD \textbf{OOD} OOD任务上的表现

1️⃣对传统的 SOTA-ANN \text{SOTA-ANN} SOTA-ANN

索引方法 OOD \textbf{OOD} OOD上的表现(相比在 ID \textbf{ID} ID上)
HNSW \text{HNSW} HNSW性能显著下降,在 BeamSearch \text{BeamSearch} BeamSearch过程显著访问更多的结点(要经历更多跳)
IVF-PQ \text{IVF-PQ} IVF-PQ性能显著下降,需要更多的聚类数才能达到相同的 Recall \text{Recall} Recall

2️⃣对改进的 ANN \text{ANN} ANN:针对 OOD-ANNS \text{OOD-ANNS} OOD-ANNS的首个图索引 RobustVamana(OOD-DiskANN) \text{RobustVamana(OOD-DiskANN)} RobustVamana(OOD-DiskANN)

  1. 原理:先用 Vamana \text{Vamana} Vamana建图,然后再用 RobustStitch \text{RobustStitch} RobustStitch根据查询向量,连接新的边
  2. 性能:比 DiskANN \text{DiskANN} DiskANN OOD \text{OOD} OOD任务上提升了 40% \text{40\%} 40%性能,但是查询速度慢了 × 4 -10 {\text{×}4\text{-10}} ×4-10

2.2. \textbf{2.2. } 2.2.  OOD \textbf{OOD} OOD ANN \textbf{ANN} ANN工作负载的分析

2.2.1. OOD-ANNS \textbf{2.2.1. OOD-ANNS} 2.2.1. OOD-ANNS ID-ANNS \textbf{ID-ANNS} ID-ANNS的两个差异

1️⃣两种差异及实验结果

  1. OOD \text{OOD} OOD查询离其最邻近很远:即 δ ( q ood , i t h -NN ood ) ≫ δ ( q id , i t h -NN id ) \delta\left(q_{\text{ood}}, i^{t h} \text{-NN}_{\text{ood}}\right) \text{≫} \delta\left(q_{\text{id}}, i^{t h} \text{-NN}_{\text{id}}\right) δ(qood,ith-NNood)δ(qid,ith-NNid),左为 i = 1 i\text{=}1 i=1时的分布结果
  2. OOD \text{OOD} OOD查询的最邻近彼此原理: 10 0 t h -NN 100^{t h} \text{-NN} 100th-NN互相之间的平均距离,实验结果如右
    image-20250104144814904 image-20250104150124562

2️⃣对差异的直观理解

  1. 简单(概念)示例:
    image-20250104150619812
    • ID \text{ID} ID查询:查询与其最邻近在球面上,相互靠近
    • ODD \text{ODD} ODD查询:查询在球心,其最邻近在球面上(由此距离较远且查询不多 + \text{+} +分散分布)
  2. 真实示例:真实数据 PCA \text{PCA} PCA降到二维的视图, ID \text{ID} ID查询更为集中
    image-20250104151013397

2.2.2. \textbf{2.2.2. } 2.2.2. 为何传统 SOTA-ANN \textbf{SOTA-ANN} SOTA-ANN ODD \textbf{ODD} ODD表现不佳

0️⃣传统 ANN \text{ANN} ANN的设计

  1. 基于两假设:查询 / / /数据同分布 + k +k +k个最近邻彼此相互靠近(邻居的邻居是邻居),刚好全反的
  2. 设计的思路:
    • 建图:用 BeamSearch \text{BeamSearch} BeamSearch来构建 KNN \text{KNN} KNN → \text{→} 空间中相近的点转化为图中紧密连接的结点
    • 搜索:从中心点开始 GreedySearch \text{GreedySearch} GreedySearch

1️⃣在基于图 ANN \text{ANN} ANN上: OOD \text{OOD} OOD会使得搜索空间增大

  1. 可识别搜索空间:包围当前访问结点 x x x B s ( x ) + B k ( 1 st -NN , R ) B^{s}(x)\text{+}B^{k}\left(1^{\text{st}}\text{-NN}, R\right) Bs(x)+Bk(1st-NN,R)
    • B k ( 1 st -NN , R ) B^{k}\left(1^{\text{st}}\text{-NN}, R\right) Bk(1st-NN,R):以 1 st -NN 1^{\text{st}}\text{-NN} 1st-NN为球心, k k k邻近间互相距离 δ ( i th -NN , j th -NN ) \delta\left(i^{\text{th}}\text{-NN}, j^{\text{th}}\text{-NN}\right) δ(ith-NN,jth-NN)最大值为半径
    • B s ( x ) B^{s}(x) Bs(x):以当前结点 x x x为圆心,以 δ ( x , i th -NN ) \delta\left(x, i^{\text{th}}\text{-NN}\right) δ(x,ith-NN)的最大值(到最远最邻近的距离)为半径
  2. OOD \text{OOD} OOD的影响:搜索空间大幅增大
    • B k B^{k} Bk:由于 OOD \text{OOD} OOD的性质 R ood  ≫ R id R_{\text {ood }}\text{≫}R_{\text{id}} Rood Rid,这一差异在体积层面放大到 ( R ood  R id ) D \left(\cfrac{R_{\text {ood }}}{R_{\text{id}}}\right)^D (RidRood )D级别
    • B s B^{s} Bs:由于 OOD \text{OOD} OOD的性质 δ ( x , i th -NN ood ) ≫ δ ( x , i th -NN id ) \delta\left(x, i^{\text{th}}\text{-NN}_{\text{ood}}\right)\text{≫}\delta\left(x, i^{\text{th}}\text{-NN}_{\text{id}}\right) δ(x,ith-NNood)δ(x,ith-NNid),使得体积也大幅膨胀
  3. 对搜索过程的影响:
    • 对于 ID \text{ID} ID查询:由于最近邻彼此靠近, GreedySearch \text{GreedySearch} GreedySearch可以使 B s ( x ) B^{s}(x) Bs(x)轻松收敛
      起点 -> 近邻1 -> 近邻2 -> 近邻3 (一个小范围内)
      
    • 对于 OOD \text{OOD} OOD查询:最近邻方向分散难以收敛,需要更大的 Beam \text{Beam} Beam宽度 / / /搜索路径等
             近邻2↗️     
      起点 -> 近邻1 -> 近邻3 (分散在大范围内)↘️     近邻4
      

2️⃣在基于划分 IVF \text{IVF} IVF

  1. 原理上: IVF \text{IVF} IVF先将原数据分簇
    • ID \text{ID} ID查询:最邻近集中在少数几个相邻簇中
    • OOD \text{OOD} OOD查询:最邻近分散在多个不相邻簇中
  2. 实验上: OOD \text{OOD} OOD查询需要扫描更多的簇,性能下降 2.5 2.5 2.5

3. RoarGraph \textbf{3. RoarGraph} 3. RoarGraph

3.1. RoarGraph \textbf{3.1. RoarGraph} 3.1. RoarGraph的设计思路

1️⃣面向解决三种挑战

  1. 边的建立:如何连接查询 / / /基础两类结点,同时避免基础结点度数太高
  2. 搜索效率:查询结点要保持极高出度以覆盖基础节点,但同时也会大幅增加跳数 / / /内存开销
  3. 连通性:避免出现孤立结点,独立子图

1️⃣大致的设计流程

  1. 构建:建立查询 ↔ \boldsymbol{\xleftrightarrow{}} 基础二分图 → \text{→} 将邻接信息投影到基础点中 → \text{→} 增强连接
  2. 查询:同样是用 BeamSearch \text{BeamSearch} BeamSearch

3.2. RoarGraph \textbf{3.2. RoarGraph} 3.2. RoarGraph的构建: 三个阶段

3.2.1. \textbf{3.2.1. } 3.2.1. 阶段 1 \textbf{1} 1: 查询 ↔ \boldsymbol{\xleftrightarrow{}} 基础二分图构建

1️⃣二分图概述:

  1. 基本概念:将所有的点分为两个集合,所有边必须连接不同子集的点,不能内部连接
    image-20250104160314817
  2. 在此处:两子集查询结点 + + +基础节点,两种边[查询结点 → \text{→} 基础结点] + \text{+} +[查询结点 ← \text{←} 基础结点]

2️⃣构建过程概述

\quad image-20250104164020863

  1. 预处理:计算每个查询向量的真实 N q -NN N_q\text{-NN} Nq-NN标签
  2. 边构建:
    方向操作
    查询点 → \text{→} 基础点查询点 → 连接 \xrightarrow{连接} 连接 查询点的 N q -NN N_q\text{-NN} Nq-NN基础点
    基础点 → \text{→} 查询点查询点 ← 连接 \xleftarrow{连接} 连接 查询点的 1 -NN 1\text{-NN} 1-NN基础点,查询点 → 断连 \xrightarrow{断连} 断连 查询点的 1 -NN 1\text{-NN} 1-NN基础点
  3. 示例:
    预处理: T1 -> X1, X2, X3 (Nq=3)
    边构建: T1 -> X2, X3 T1 <- X1 
    

2️⃣构建过程分析

  1. 结点度数的考量:
    • 高查询结点出度:提高 N q N_q Nq值,增加[基础点 → 覆盖性 重叠性 \xrightarrow[覆盖性]{重叠性} 重叠性 覆盖性查询点],使多基础点可由同一查询点联系
    • 低基础节点出度:为了解决上述挑战 1 1 1,目的在于提高二分图上的搜索效率
  2. 边方向的考虑:不进行双向连接,避免二分图搜索时要去检查邻居的邻居( N q 2 N_q^2 Nq2)
    预处理: T1 -> X1, X2, X3 (Nq=3)
    边构建: T1 -> X1, X2, X3 T1 <- X1T1 <- X2T1 <- X3
    

3.2.2. \textbf{3.2.2. } 3.2.2. 阶段 2 \textbf{2} 2: 领域感知投影

1️⃣一些分析

  1. 优化动机:二分图内存消耗高(额外存储了查询节点),搜索路径长(需要额外经过查询结点)
  2. 关于投影:
    • 目的:移除二分图中的查询结点,并保留从查询分布获得的邻近关系
    • 方式:最简单的可将查询点所连的全部基础点全连接(度数太高),优化方法如领域感知投影

2️⃣投影过程:

  1. 预处理:
    • 遍历查询点:获得与查询点相连的最邻近基础点
      查询Q -> {B1, B2, B3, B4, B5}  (Q连接了5个基础节点)
      
    • 选择中心点:即查询点的 1-NN \text{1-NN} 1-NN点,作为 Pivot \text{Pivot} Pivot
      查询Q -> {B1, B2, B3, B4, B5}  (Q连接了5个基础节点)👆pivot
      
    • 排序基础结点:将余下 N q -NN N_q\text{-NN} Nq-NN点,按与 Pivot \text{Pivot} Pivot的距离排序
  2. 感知投影:
    • 连接:让中心点与余下点建立连接
      B1 -> B2 (最近)
      B1 -> B3 (次近)
      B1 -> B4 (较远)
      B1 -> B5 (最远)
      
    • 过滤:保证与 Pivot \text{Pivot} Pivot连接方向的多样性
      条件含义操作
      Dist ( X , Y ) <Dist ( Pivot , Y ) \text{Dist}(X,Y)\text{<}\text{Dist}(\text{Pivot},Y) Dist(X,Y)<Dist(Pivot,Y)该方向已有连接则筛掉 Y Y Y(不与 Pivot \text{Pivot} Pivot建立连接)
      Dist ( X , Y ) >Dist ( Pivot , Y ) \text{Dist}(X,Y)\text{>}\text{Dist}(\text{Pivot},Y) Dist(X,Y)>Dist(Pivot,Y)代表新的搜索方向则保留 Y Y Y(可与 Pivot \text{Pivot} Pivot建立连接)
    • 填充:当 Pivot \text{Pivot} Pivot的出度小于度数限制,则又重新连接之前过滤掉的结点

3.2.3. \textbf{3.2.3. } 3.2.3. 连通性增强

image-20250104172351909

1️⃣为何要增强:仅依赖于二分图的覆盖范围,投影图的连通性还太低,对 GreedySearch \text{GreedySearch} GreedySearch不友好

2️⃣增强的方法:

  1. 检索:从基础集的 Medoid \text{Medoid} Medoid开始,对每个基础点执行 BeamSearch \text{BeamSearch} BeamSearch得到最邻近(作为候选点)
  2. 连边:在不超过度数限制的前提下,让该基础点连接一定数量的候选点作

3.3. RoarGraph \textbf{3.3. RoarGraph} 3.3. RoarGraph性能的验证

3.3.1. \textbf{3.3.1. } 3.3.1. 实验设置

1️⃣数据集

数据集描述查询集索引集
Text-to-Image \text{Text-to-Image} Text-to-Image流行基准数据集,含图像和文本查询向量官方 1 w 1\text{w} 1w余下不重叠数据
LAION \text{LAION} LAION数百万对图像 − - 替代文本对采样 1 w 1\text{w} 1w余下不重叠数据
WebVid \text{WebVid} WebVid素材网站获取的字幕和视频对采样 1 w 1\text{w} 1w余下不重叠数据

2️⃣超参数设置

模型超参数列表
HNSW \text{HNSW} HNSW M = 32 M\text{=}32 M=32, efConstruction= 500 \text{efConstruction}\text{=}500 efConstruction=500
NSG \text{NSG} NSG R = 64 R\text{=}64 R=64, C = L = 500 C\text{=}L\text{=}500 C=L=500
τ -MNG \tau\text{-MNG} τ-MNG R = 64 R\text{=}64 R=64, C = L = 500 C\text{=}L\text{=}500 C=L=500, τ = 0.01 \tau\text{=}0.01 τ=0.01
RobustVamana \text{RobustVamana} RobustVamana R = 64 R\text{=}64 R=64, L = 500 L\text{=}500 L=500, α = 1.0 \alpha\text{=}1.0 α=1.0
RoarGraph \text{RoarGraph} RoarGraph N q = 100 N_q\text{=}100 Nq=100(最近邻候选数量), M = 35 M\text{=}35 M=35(出度约束), L = 500 L\text{=}500 L=500(候选集大小)

3️⃣性能指标: Recall@k \text{Recall@k} Recall@k QPS \text{QPS} QPS(检索速度)

3.3.2. \textbf{3.3.2. } 3.3.2. 实验结果

1️⃣ QPS \text{QPS} QPS与召回: RoarGraph \text{RoarGraph} RoarGraph最优(超过 RobustVamana \text{RobustVamana} RobustVamana), HNSW/NSG \text{HNSW/NSG} HNSW/NSG差不多, τ -MNG \tau\text{-MNG} τ-MNG最差

image-20250104174815800

2️⃣跳数与召回: RoarGraph \text{RoarGraph} RoarGraph跳数显著减少,且随 Recall@ \text{Recall@} Recall@ k k k增大,减少趋势下降

image-20250104175148632

3️⃣消融实验:对比了二分图 / / /投影图 / / /完整图,可见通过邻域感知投影显著提升性能

image-20250104175148632

4️⃣查询集规模:即查询集大小占基础集大小比重对索引性能的影响;可见起始模型对规模并不敏感

image-20250104175148632

5️⃣在 ID \text{ID} ID负载上的性能: RoarGraph \text{RoarGraph} RoarGraph依旧能打,和 HNSW \text{HNSW} HNSW相当

image-20250104175148632

6️⃣索引开销成本:使用 10 % 10\% 10%数据可大幅降低构建成本,同时保持搜索性能

\quad image-20250104180704959

3.4. RoarGraph \textbf{3.4. RoarGraph} 3.4. RoarGraph的一些讨论

1️⃣运用场景:结合大量历史查询数据,用多模态深度学习模型生成嵌入,部署在大型检索 / / /推荐系统

2️⃣更新机制:

  1. 初始搜索:
    • 结点查询:将新插入下新基础节点 v v v作为查询,在基础数据集中搜索其最邻近
    • 结点筛选:要求最邻近满足,曾在图构建过程中与至少一个查询点连接过的基础点
    • 反向回溯:对该最邻近点,回溯到与其曾建立过连接的距离最近的查询点 q q q
  2. 子图构建:
    • 二分子图:将 q ↔ N out ∪ v q\xleftrightarrow{}N_{\text {out}}\text{∪}v q Noutv整合为二分子图
    • 邻域投影:将 v v v作为 Pivot \text{Pivot} Pivot按同样的方式,生成投影图

3️⃣删除操作:采用墓碑标记法 Tombstones \text{Tombstones} Tombstones,即被删结点任参与路由,但排除在搜索结果中

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

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

相关文章

智慧工地信息管理与智能预警平台

建设背景与政策导向 智慧工地信息管理与智能预警平台的出现&#xff0c;源于工地管理面临的诸多挑战&#xff0c;如施工地点分散、危险区域多、监控手段落后等。随着政府对建筑产业现代化的积极推动&#xff0c;各地纷纷出台政策支持智慧工地的发展&#xff0c;旨在通过信息技…

[论文笔记]Representation Learning with Contrastive Predictive Coding

引言 今天带来论文 Representation Learning with Contrastive Predictive Coding的笔记。 提出了一种通用的无监督学习方法从高维数据中提取有用表示&#xff0c;称为对比预测编码(Contrastive Predictive Coding,CPC)。使用了一种概率对比损失&#xff0c; 通过使用负采样使…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍&#xff08;含操作手册&#xff09;&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-…

Git 入门(一)

git 工作流如下&#xff1a; 命令如下&#xff1a; clone&#xff08;克隆&#xff09;: 从远程仓库中克隆代码到本地仓库checkout &#xff08;检出&#xff09;:从本地仓库中检出一个仓库分支然后进行修订add&#xff08;添加&#xff09;: 在提交前先将代码提交到暂存区com…

【网络安全 | 漏洞挖掘】JS Review + GraphQL滥用实现管理面板访问

未经许可,不得转载。 正文 在映射目标范围后,我发现了一个用于管理的控制台界面,但没有注册功能。 于是我开始尝试: 1、模糊测试注册端点 -> 失败 2、在请求中将登录替换为注册 -> 再次失败 尝试均未奏效后,我决定冷静下来,重新思考方法并利用技术手段。 我观察…

gitlab高级功能之 CICD Steps

CICD Steps 1. 介绍2. 定义 Steps2.1 Inputs2.2 Outputs 3. Using steps3.1 Set environment variables3.2 Running steps locally 4. Scripts5. Actions5.1 已知的问题 6. 表达式7. 实操7.1 单个step7.2 多个step7.3 复用steps7.4 添加output到step7.5 使用远程step 1. 介绍 …

开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!

2025年新年临近&#xff0c;Apache SeaTunnel 社区用户案例精选&#x1f4d8;也跟大家见面啦&#xff01;在过去的时间里&#xff0c;SeaTunnel 社区持续成长&#xff0c;吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴&#xff0c;也为了激励更多人加入技术共创&…

Python:交互式物质三态知识讲解小工具

学着物理写着Python 以下是一个使用Python的Tkinter库实现的简单示例程序&#xff0c;通过图形界面展示并讲解固态、液态、气态的一些特点&#xff0c;代码中有详细的注释来帮助你理解各部分功能&#xff1a; 完整代码 import tkinter as tk from tkinter import ttk import …

多模态论文笔记——CogVLM和CogVLM2(副)

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍多模态模型的LoRA版本——CogVLM和CogVLM2。在SD 3中使用其作为captioner基准模型的原因和优势。 文章目录 CogVLM论文背景VLMs 的任务与挑战现有方法及…

网络安全抓包

#知识点&#xff1a; 1、抓包技术应用意义 //有些应用或者目标是看不到的&#xff0c;这时候就要进行抓包 2、抓包技术应用对象 //app,小程序 3、抓包技术应用协议 //http&#xff0c;socket 4、抓包技术应用支持 5、封包技术应用意义 总结点&#xff1a;学会不同对象采用…

Innodisk iSMART V6使用说明_SSD还能用多久?已经读写了多少次数?……

Innodisk iSMART是一款SSD健康数据读取软件。它能轻松获取大部分SSD内部寄存器中的健康数据&#xff0c;并以简洁的图形界面展示给用户。在程序界面的顶部&#xff0c;是页面标签&#xff0c;点击页面标签就能切换到相应的页面。页面标签的下面是磁盘选择栏。点击磁盘编号&…

网络编程原理:回显服务器与客户端通信交互功能

文章目录 路由器及网络概念网络通信基础TCP/IP 五层协议封装和分用封装分用 网络编程&#xff08;网络协议&#xff09;UDP类 API使用实现回显通信程序回显服务器(UDP代码)回显客户端(UDP代码) TCP API使用回显服务器(TCP代码)回显客户端(TCP代码) 路由器及网络概念 网络发展是…

设计模式 创建型 建造者模式(Builder Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;&#xff0c;又称生成器模式&#xff0c;是一种对象构建模式。它主要用于构建复杂对象&#xff0c;通过将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建出具有不同表示的对象。该模式的核心思想是将…

【C++】P1428 小鱼比可爱

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目说明题目输入格式题目输出格式样例**输入样例****输出样例** 题目解析 &#x1f4af;解法分析我的做法代码解法说明时间复杂度 老师的做法代码解法说明总结时间复杂度 …

maven之插件调试

当使用maven进行项目管理的时候&#xff0c;可能会碰到一些疑难问题。网上资料很少&#xff0c;可能会想着直接调试定位问题。这里以maven-compiler-plugin为例&#xff1a; &#xff08;1&#xff09;准备maven-compiler-plugin源码 进入maven 官网-》Maven Plugins-》找到对…

蓝桥杯(Java)(ing)

Java前置知识 输入流&#xff1a; &#xff08;在Java面向对象编程-CSDN博客里面有提过相关知识------IO流&#xff09; // 快读快写 static BufferedReader in new BufferedReader(new InputStreamReader(System.in)); static BufferedWriter out new BufferedWriter(new…

【C++】深入理解C语言中的特殊字符处理与问题分析优化

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目&#xff1a;B2090 年龄与疾病输入格式输出格式输入输出样例 &#x1f4af;初始代码分析与问题排查问题点分析 &#x1f4af;修正后的代码与优化修正与优化要点 &#…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年&#xff0c;Google 广告领域将迎来一系列显著变化&#xff0c;这些趋势对于提升广告转化率至关重要&#xff0c;值得我们提前关注与布局。 智能化程度持续加深&#xff0c;用户搜索习惯愈发精细&#xff0c;广告格式推陈出新&#xff0c;视频广告势头正猛...那么…

【pytorch练习】使用pytorch神经网络架构拟合余弦曲线

在本篇博客中&#xff0c;我们将通过一个简单的例子&#xff0c;讲解如何使用 PyTorch 实现一个神经网络模型来拟合余弦函数。本文将详细分析每个步骤&#xff0c;从数据准备到模型的训练与评估&#xff0c;帮助大家更好地理解如何使用 PyTorch 进行模型构建和训练。 一、背景 …

编程入门(2)-2024年 RAD Studio version 12发布综述

随着2024年即将画上句号&#xff0c;我想借此机会回顾一下我们在这一年中发布的一些Embarcadero产品、行业趋势&#xff0c;并感谢我们尊贵的客户们对我们的产品一如既往的支持。这一年对我们来说充满了激动人心的变化和发展&#xff0c;我们非常高兴能与您一起踏上这段旅程。 …