论文速读|Is Cosine-Similarity of Embeddings Really About Similarity?WWW24

news2025/1/27 23:02:26

论文地址:
https://arxiv.org/abs/2403.05440
https://dl.acm.org/doi/abs/10.1145/3589335.3651526
bib引用:

@inproceedings{Steck_2024, series={WWW ’24},
   title={Is Cosine-Similarity of Embeddings Really About Similarity?},
   url={http://dx.doi.org/10.1145/3589335.3651526},
   DOI={10.1145/3589335.3651526},
   booktitle={Companion Proceedings of the ACM Web Conference 2024},
   publisher={ACM},
   author={Steck, Harald and Ekanadham, Chaitanya and Kallus, Nathan},
   year={2024},
   month=may, pages={887–890},
   collection={WWW ’24} }

InShort

研究发现,在实际应用中,余弦相似度用于量化高维对象语义相似性时表现不稳定。文章通过分析正则化线性模型下的嵌入,揭示余弦相似度结果可能任意且无意义,提出谨慎使用该指标,并给出替代方法。

1. 研究背景【一般用作度量比较多的领域的通识问题:余弦相似度衡量方向>大小】

  • 余弦相似性通常用于高维对象的语义相似性计算,尤其在嵌入向量中被广泛应用。
  • 尽管余弦相似性在许多实际应用中表现良好,但也存在无法解释的情况,比如:
    • 它的结果可能与未归一化的点积(dot product)不同。
    • 在某些模型中,结果可能是“任意的”或“无意义的”。

2. 核心发现

  • 余弦相似性依赖于嵌入的正则化方法
    • 作者通过线性模型(矩阵分解)推导了余弦相似性的数学性质。
    • 不同的正则化方式会导致不同的余弦相似性结果,即使模型的点积结果相同
    • 尤其在正则化允许嵌入向量任意缩放时(如矩阵中的奇异值被重新缩放),余弦相似性可能变得不稳定或任意

3. 具体分析

论文中通过两个矩阵分解目标函数(Objective 1 和 Objective 2)对比了余弦相似性的行为:

Objective 1(公式1):对嵌入向量的点积 ( A B T AB^T ABT) 正则化,允许奇异值的缩放
  • 结果
    • 余弦相似性依赖于一个任意的对角矩阵 (D),因此相似性结果可以是任意的(见论文中user-user和item-item的公式)。
    • 这种不稳定性使得余弦相似性不适合作为语义相似性的度量。
Objective 2(公式2):对嵌入向量 (A) 和 (B) 分别正则化,限制了奇异值的缩放【这种方法更稳定】
  • 结果
    • 余弦相似性是唯一的(即不存在任意性)。
    • 尽管结果是唯一的,但论文指出这并不一定意味着它是最好的语义相似性度量

4. 实验

  • 作者使用模拟数据(用户和物品的交互数据)验证了上述结论:
    • 比较了基于公式1和公式2训练的模型,其余弦相似性在同一数据上的表现差异。
    • 图1显示了当使用公式1时,物品-物品的余弦相似性对奇异值缩放敏感,结果差异较大;而使用公式2时,结果唯一且更稳定。

5. 改进建议

为了缓解余弦相似性带来的问题,作者提出了以下几种替代方案:

  1. 直接优化余弦相似性:在模型训练时引入与余弦相似性相关的损失函数(例如层归一化)。
  2. 避免嵌入空间的使用:将嵌入结果重新投射到原始空间(如用户-物品交互矩阵),然后在原始空间中应用余弦相似性。
  3. 数据预处理:在训练前对数据进行标准化处理(例如去均值和单位方差归一化)。

总结

论文得出结论:在使用余弦相似性作为嵌入相似性度量时,应注意正则化方法的选择,因为这可能会显著影响结果的稳定性和语义解释能力。【基于objective 2 的方法更好:分别对矩阵A和B正则化,而不是对 A B T AB^T ABT的点积进行正则化】


摘要

余弦相似度是两个向量之间角度的余弦值,或者等效于它们归一化之间的点积。一个流行的应用是通过将余弦相似性应用于学习的低维特征嵌入来量化高维对象之间的语义相似性。在实践中,这可能比嵌入向量之间的非规范化点积效果更好,但有时也比更差。为了深入了解这一实证观察,我们研究了从正则化线性模型派生的嵌入,其中封闭式解决方案有助于分析见解。我们从分析中推导出余弦相似性如何产生任意的、因此毫无意义的“相似性”。对于一些线性模型,相似性甚至不是唯一的,而对于其他模型,它们则由正则化隐式控制。我们讨论了线性模型之外的含义:在学习深度模型时采用不同正则化的组合;当对结果嵌入进行余弦相似性时,这些会产生隐含和意外的效果,使结果不透明且可能是任意的。基于这些见解,我们告诫不要盲目使用余弦相似性并概述替代方案。

Introduction

Discrete entities (e.g.words)通常通过学习映射被嵌入到各种领域中的密集实值向量(dense real-valued vectors)中。例如,在大型语言模型中,单词基于其周围的上下文被嵌入;而推荐系统通常根据物品(和用户)被用户消费的方式学习物品(和用户)的嵌入。这种嵌入的好处是多方面的。特别是,它们可以直接作为(冻结或微调后的)输入提供给其他模型,并且/或者它们可以为以前是原子的和离散的实体之间提供一种数据驱动的(语义)相似性概念。

“余弦相似度”中的相似性是指较大的值(与距离度量中的较小值相反)表示更接近的事实,然而,它也已成为感兴趣实体之间语义相似性的一种非常流行的度量,其动机在于学习到的嵌入向量的范数不如嵌入向量之间的方向对齐重要。虽然有无数的论文报告了余弦相似度在实际应用中的成功使用,但也发现它不如其他方法效果好,例如学习到的嵌入之间的(未归一化)点积,例如参见[3,4,8]。

在本文中,我们试图阐明这些不一致的实证观察。我们表明,学习到的嵌入的余弦相似性实际上可以产生任意结果。我们发现,根本原因不是余弦相似性本身,而是学习到的嵌入具有一定程度的自由度,即使它们的(非归一化)点积是明确定义和唯一的,也可以呈现任意的余弦相似性。为了获得更普遍的见解,我们推导出线性矩阵分解 (MF) 模型的解析解——这将在下一节中详细概述。在第 3 节中,我们提出了可能的补救措施。第 4 节中的实验说明了我们在本文中得出的发现。

2. 矩阵分解模型

这篇论文专注于线性模型,因为它们允许有闭式解( closed-form solutions),从而可以从理论上理解应用于学习嵌入的余弦相似度度量的局限性。
给定一个矩阵 X ∈ R n × p X\in\mathbb{R}^{n×p} XRn×p,它包含 n n n个数据点和 p p p个特征(例如,在推荐系统中分别为用户和物品)。
在矩阵分解(MF)模型中,或者等效地在线性自编码器中,目标是估计一个低秩矩阵 A B ⊤ ∈ R p × p AB^{\top}\in\mathbb{R}^{p×p} ABRp×p
其中 A , B ∈ R x × k A,B\in\mathbb{R}^{x\times k} A,BRx×k k ≤ p k\leq p kp,使得乘积 X A B ⊤ XAB^{\top} XAB X X X的良好近似: X ≈ X A B ⊤ X\approx XAB^{\top} XXAB

当给定的 X X X是一个用户-物品矩阵时, B B B的行 b i → \overrightarrow{b_{i}} bi 通常被称为( k k k维)物品嵌入,
X A XA XA的行,记为 x u → ⋅ A \overrightarrow{x_{u}}\cdot A xu A,可以解释为用户嵌入,其中用户 u t u_{t} ut的嵌入是该用户已消费的物品嵌入 a j → \overrightarrow{a_{j}} aj 的总和。

Notes:封闭形式的解closed-form solutions:可以用有限次常见运算(如加、减、乘、除、乘方、开方、指数运算、对数运算、三角函数运算等)和已知函数(如多项式函数、指数函数、对数函数等)来表达的解。
因为封闭形式解可以通过数学推导和分析,清晰地看到不同因素(如不同的正则化方式)如何影响模型的结果,以及对余弦相似度计算产生何种影响 。例如,文中通过推导两种常用正则化方案下的封闭形式解,分析出第一种正则化方案下余弦相似度结果具有任意性和不唯一性,而第二种方案下结果唯一,从而为研究余弦相似度在该模型中的表现提供了理论依据。

需要注意的是,这个模型是依据用户和物品嵌入之间的(未归一化的)点积来定义的,即 ( X A B ⊤ ) u , i = < x u → ⋅ A , b i → > (XAB^{\top})_{u, i}=<\overrightarrow{x_{u}} \cdot A, \overrightarrow{b_{i}}> (XAB)u,i=<xu A,bi > 。然而,一旦学习到了这些嵌入,通常的做法还包括考虑它们之间的余弦相似度,比如两个物品之间的 S i m ( b i → , b i ′ → ) Sim(\overrightarrow{b_{i}}, \overrightarrow{b_{i'}}) Sim(bi ,bi ) ,两个用户之间的 c o s S i m ( x u → A , x u ′ → ⋅ A ) cos Sim(\overrightarrow{x_{u}}A, \overrightarrow{x_{u'}} \cdot A) cosSim(xu A,xu A) ,或者一个用户和一个物品之间的 c o s S i m ( x u → ⋅ A , b i → ) cos Sim(\overrightarrow{x_{u}} \cdot A, \overrightarrow{b_{i}}) cosSim(xu A,bi ) 。接下来的内容中将展示这样做可能会导致任意的结果,而且这些结果甚至可能不是唯一的。

2.1. 训练

影响余弦相似性度量效用的一个关键因素是在学习 A , B 中的嵌入时采用的正则化,如下所述。

考虑以下两种常用的正则化方案(它们都有封闭式解决方案,请参见 Sections 2.2 和 2.3):
m i n A , B ∥ X − X A B ⊤ ∥ F 2 + λ ∥ A B ⊤ ∥ F 2 min _{A, B}\left\| X-X A B^{\top}\right\| _{F}^{2}+\lambda\left\| A B^{\top}\right\| _{F}^{2} minA,B XXAB F2+λ AB F2
m i n A , B ∥ X − X A B ⊤ ∥ F 2 + λ ( ∥ X A ∥ F 2 + ∥ B ∥ F 2 ) min _{A, B}\left\| X-X A B^{\top}\right\| _{F}^{2}+\lambda\left(\| X A\| _{F}^{2}+\| B\| _{F}^{2}\right) minA,B XXAB F2+λ(XAF2+BF2)

这两个训练目标的 L2 范数正则化明显不同:
• 在第一个目标中, ∥ A B ⊤ ∥ F 2 \left\|A B^{\top}\right\|_{F}^{2} AB F2 适用于他们的乘积。在线性模型中,这种 L2 范数正则化可以被证明等同于用去噪学习,即输入层的 dropout,例如,参见 [6]。此外,实验发现对保留测试数据的预测准确性优于第二个目标 [2]。不仅在 MF 模型中,而且在深度学习中,经常观察到去噪或丢失(这个目标)比权重衰减(第二个目标)在保留的测试数据上产生更好的结果。

• 第二个目标等价于 the usual matrix factorization objective minW, 即最小化( ∥ X − P Q ⊤ ∥ F 2 + λ ( ∥ P ∥ F 2 + ∥ Q ∥ F 2 ) \left\|X - PQ^{\top}\right\|_{F}^{2}+\lambda(\|P\|_{F}^{2}+\|Q\|_{F}^{2}) XPQ F2+λ(PF2+QF2)),其中(X)被分解为( P Q ⊤ PQ^{\top} PQ),且( P = X A P = XA P=XA)以及( Q = B Q = B Q=B)。还提到这种等价关系在例如[2]中有概述。关键在于每个矩阵( P P P)和( Q Q Q)分别被正则化,这与深度学习中的权重衰减类似。

如果 A 和 B 是任一目标的解,众所周知,那么对于任意旋转矩阵 R ∈ R k × k R \in \mathbb{R}^{k ×k} RRk×k A ^ R \hat{A} R A^R B ^ R \hat{B} R B^R也是解。

虽然余弦相似度在这样的旋转(R)下是不变的,但本文的一个关键见解是,第一个目标(但不是第二个目标)对于 A 和 B 的列的缩放(即嵌入的不同潜在维度)也是不变的:

如果 A ^ B ^ ⊤ \hat{A} \hat{B}^{\top} A^B^是第一个目标的一个解,那么 A ^ D D − 1 B ^ ⊤ \hat{A} D D^{-1} \hat{B}^{\top} A^DD1B^也是解,其中 D ∈ R k × k D \in \mathbb{R}^{k ×k} DRk×k 是任意对角矩阵。

因此,我们可以如下定义一个新的解(作为(D)的函数):
A ^ ( D ) : = A ^ D \hat{A}^{(D)}:=\hat{A}D A^(D):=A^D
B ^ ( D ) : = B ^ D − 1 \hat{B}^{(D)}:=\hat{B}D^{-1} B^(D):=B^D1

反过来,这个对角矩阵 D 会影响已学习到的用户和物品嵌入向量(即行向量)的归一化:
( X A ^ ( D ) ) ( n o r m a l i z e d ) = Ω A X A ^ ( D ) = Ω A X A ^ D a n d \left(X \hat{A}^{(D)}\right)_{(normalized) }=\Omega_{A} X \hat{A}^{(D)}=\Omega_{A} X \hat{A} D and (XA^(D))(normalized)=ΩAXA^(D)=ΩAXA^Dand
B ^ ( n o r m a l i z e d ) ( D ) = Ω B B ^ ( D ) = Ω B B ^ D − 1 , ( 4 ) \hat{B}_{(normalized)}^{(D)}=\Omega_{B} \hat{B}^{(D)}=\Omega_{B} \hat{B} D^{-1}, (4) B^(normalized)(D)=ΩBB^(D)=ΩBB^D1,(4)

where Ω A \Omega_{A} ΩA and Ω B \Omega_{B} ΩB are appropriate diagonal matrices to normalize each learned embedding (row) to unit Euclidean norm. Note that in general the matrices do not commute, and hence a different choice for D cannot (exactly) be compensated by the normalizing matrices Ω A \Omega_{A} ΩA and Ω B \Omega_{B} ΩB . As they depend on D , we make this explicit by Ω A ( D ) \Omega_{A}(D) ΩA(D) and Ω B ( D ) \Omega_{B}(D) ΩB(D) Hence, also the cosine similarities of the embeddings depend on this arbitrary matrix D.
在矩阵分解模型的研究中,这段话主要围绕嵌入向量归一化以及余弦相似度与任意矩阵(D)的关系展开。
Ω A \Omega_{A} ΩA Ω B \Omega_{B} ΩB是用于将每个学习到的嵌入向量(按行)归一化到单位欧几里得范数的合适对角矩阵。在数学中,单位欧几里得范数意味着向量的长度为(1),这种归一化操作在很多计算中能消除向量长度带来的影响,专注于向量的方向。比如在计算向量夹角时,归一化能让计算更具可比性。
一般情况下 Ω A \Omega_{A} ΩA Ω B \Omega_{B} ΩB这两个矩阵不满足交换律。矩阵交换律是指对于矩阵(M)和(N),(MN = NM)才满足交换律。这里不满足交换律就意味着 Ω A Ω B ≠ Ω B Ω A \Omega_{A}\Omega_{B} \neq \Omega_{B}\Omega_{A} ΩAΩB=ΩBΩA
∵ ①前面提到在第一种正则化方案下存在任意对角矩阵(D)影响嵌入向量。由于 Ω A \Omega_{A} ΩA Ω B \Omega_{B} ΩB不交换,不同的(D)选择所带来的变化,无法通过 Ω A \Omega_{A} ΩA Ω B \Omega_{B} ΩB完全抵消。
Ω A \Omega_{A} ΩA Ω B \Omega_{B} ΩB的取值依赖于(D),为了明确这种依赖关系,将它们表示为 Ω A ( D ) \Omega_{A}(D) ΩA(D) Ω B ( D ) \Omega_{B}(D) ΩB(D)
∴ 在计算嵌入向量的余弦相似度时,会涉及到这些归一化矩阵,既然它们依赖于(D),那么嵌入向量的余弦相似度也就必然依赖于这个任意矩阵(D)。
∴ 所以前面说为什么在第一种正则化方案下,余弦相似度的结果会具有任意性,因为它取决于这个可任意选择的矩阵(D)

As one may consider the cosine-similarity between two items, two users, or a user and an item, the three combinations read item – item:
c o s S i m ( B ^ ( D ) , B ^ ( D ) ) = Ω B ( D ) ⋅ B ^ ⋅ D − 2 ⋅ B ^ ⊤ ⋅ Ω B ( D ) cos Sim\left(\hat{B}^{(D)}, \hat{B}^{(D)}\right)=\Omega_{B}(D) \cdot \hat{B} \cdot D^{-2} \cdot \hat{B}^{\top} \cdot \Omega_{B}(D) cosSim(B^(D),B^(D))=ΩB(D)B^D2B^ΩB(D) user – user:
c o s S i m ( X A ^ ( D ) , X A ^ ( D ) ) = Ω A ( D ) ⋅ X A ^ ⋅ D 2 ⋅ ( X A ^ ) ⊤ ⋅ Ω A ( D ) cos Sim\left(X \hat{A}^{(D)}, X \hat{A}^{(D)}\right)=\Omega _{A}(D) \cdot X \hat{A} \cdot D^{2} \cdot(X \hat{A})^{\top } \cdot \Omega_{A}(D) cosSim(XA^(D),XA^(D))=ΩA(D)XA^D2(XA^)ΩA(D) user – item:
c o s S i m ( X A ^ ( D ) , B ^ ( D ) ) = Ω A ( D ) ⋅ X A ^ ⋅ B ^ ⊤ ⋅ Ω B ( D ) cos Sim\left(X \hat{A}^{(D)}, \hat{B}^{(D)}\right)=\Omega_{A}(D) \cdot X \hat{A} \cdot \hat{B}^{\top} \cdot \Omega_{B}(D) cosSim(XA^(D),B^(D))=ΩA(D)XA^B^ΩB(D)

It is apparent that the cosine-similarity in all three combinations depends on the arbitrary diagonal matrix D : while they all indirectly depend on D due to its effect on the normalizing matrices Ω Ω A ( D ) \Omega_{A}(D) ΩA(D) and Ω B ( D ) \Omega_{B}(D) ΩB(D) ), note that the (particularly popular) item-item cosine-similarity (first line) in addition depends directly on D (and so does the user-user cosine-similarity, see second item).

2.2 Details on First Objective (Eq. 1)

The closed-form solution of the training objective in Eq. 1 was derived in [2] and reads A ^ ( 1 ) B ^ ( 1 ) ⊤ = V k ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) k ⋅ V k ⊤ \hat{A}_{(1)} \hat{B}_{(1)}^{\top}=V_{k} \cdot dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...)_{k} \cdot V_{k}^{\top} A^(1)B^(1)=VkdMat(...,1+λ/σi21,...)kVk , where X = : U ∑ V ⊤ X=: U \sum V^{\top} X=:UV is the singular value decomposition (SVD) of the given data matrix X , where ∑ = d M a t ( . . . , σ i , . . . ) \sum =dMat(..., \sigma_{i}, ...) =dMat(...,σi,...) ) denotes the diagonal matrix of singular values, while U , V contain the left and right singular vectors, respectively. Regarding the k largest eigenvalues σ i \sigma_{i} σi , we denote the truncated matrices of rank k as U k U_{k} Uk , V k V_{k} Vk and ( ( . . . ) ) k (...))_{k} (...))k

We may define(As D is arbitrary, we chose to assign d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) k 1 2 dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...)_{k}^{\frac{1}{2}} dMat(...,1+λ/σi21,...)k21 to each of A ^ \hat{A} A^ , B ^ \hat{B} B^ without loss of generality.)
A ^ ( 1 ) = B ^ ( 1 ) : = V k ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) k 1 2 . ( 5 ) \hat{A}_{(1)}=\hat{B}_{(1)}:=V_{k} \cdot dMat\left(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...\right)_{k}^{\frac{1}{2}} . (5) A^(1)=B^(1):=VkdMat(...,1+λ/σi21,...)k21.(5)

当我们考虑满秩MF模型的特殊情况时,即当 k = p k=p k=p时,余弦相似度的任意性在这里变得 especially striking
This is illustrated by the following two cases:
if we choose D = d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) 1 2 D=dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...)^{\frac{1}{2}} D=dMat(...,1+λ/σi21,...)21 , then we have A ^ ( 1 ) ( D ) = A ^ ( 1 ) ⋅ D = \hat{A}_{(1)}^{(D)}=\hat{A}_{(1)} \cdot D= A^(1)(D)=A^(1)D= V ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) V \cdot dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...) VdMat(...,1+λ/σi21,...) and B ^ ( 1 ) ( D ) = B ^ ( 1 ) ⋅ D − 1 = V \hat{B}_{(1)}^{(D)}=\hat{B}_{(1)} \cdot D^{-1}=V B^(1)(D)=B^(1)D1=V .

给定奇异向量V的全秩矩阵已经归一化(关于列和行),归一化 Ω B = I \Omega_{B}=I ΩB=I因此等于单位矩阵I。
We thus obtain regarding the item-item cosine-similarities:
c o s S i m ( B ^ ( 1 ) ( D ) , B ^ ( 1 ) ( D ) ) = V V ⊤ = I , cos Sim\left(\hat{B}_{(1)}^{(D)}, \hat{B}_{(1)}^{(D)}\right)=V V^{\top}=I, cosSim(B^(1)(D),B^(1)(D))=VV=I,

which is quite a bizarre result, as it says that the cosine-similarity between any pair of (different) item-embeddings is zero, i.e., an item is only similar to itself, but not to any other item! Another remarkable result is obtained for the user-item cosine-similarity:
c o s S i m ( X A ^ ( 1 ) ( D ) , B ^ ( 1 ) ( D ) ) = Ω A ⋅ X ⋅ V ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) ⋅ V ⊤ = Ω A ⋅ X ⋅ A ^ ( 1 ) B ^ ( 1 ) ⊤ , \begin{aligned} cos Sim\left(X \hat{A}_{(1)}^{(D)}, \hat{B}_{(1)}^{(D)}\right) & =\Omega_{A} \cdot X \cdot V \cdot dMat\left(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...\right) \cdot V^{\top} \\ & =\Omega_{A} \cdot X \cdot \hat{A}_{(1)} \hat{B}_{(1)}^{\top}, \end{aligned} cosSim(XA^(1)(D),B^(1)(D))=ΩAXVdMat(...,1+λ/σi21,...)V=ΩAXA^(1)B^(1),

as the only difference to the (unnormalized) dot-product is due to the matrix Ω A \Omega_{A} ΩA , which normalizes the rows—hence, when we consider the ranking of the items for a given user based on the predicted scores, cosine-similarity and (unnormalized) dot-product result in exactly the same ranking of the items as the row-normalization is only an irrelevant constant in this case.
·if we choose. D = d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) − 1 2 D=dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...)^{-\frac{1}{2}} D=dMat(...,1+λ/σi21,...)21 , then we have analogously to the previous case:
B ^ ( 1 ) ( D ) = V ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) \hat{B}_{(1)}^{(D)}=V \cdot dMat(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...) B^(1)(D)=VdMat(...,1+λ/σi21,...) ,and A ^ ( 1 ) ( D ) = V \hat{A}_{(1)}^{(D)}=V A^(1)(D)=V is orthonormal.

We now obtain regarding the user-user cosine-similarities:
c o s S i m ( X A ^ ( 1 ) ( D ) , X A ^ ( 1 ) ( D ) ) = Ω A ⋅ X ⋅ X ⊤ ⋅ Ω A , cos Sim\left(X \hat{A}_{(1)}^{(D)}, X \hat{A}_{(1)}^{(D)}\right)=\Omega_{A} \cdot X \cdot X^{\top} \cdot \Omega_{A}, cosSim(XA^(1)(D),XA^(1)(D))=ΩAXXΩA, i.e., now the user-similarities are simply based on the raw data-matrix X i.e., without any smoothing due to the learned embeddings.

Concerning the user-item cosine-similarities, we now obtain
c o s S i m ( X A ^ ( 1 ) ( D ) , B ^ ( 1 ) ( D ) ) = Ω A ⋅ X ⋅ A ^ ( 1 ) ⋅ B ^ ( 1 ) ⊤ ⋅ Ω B , cos Sim\left(X \hat{A}_{(1)}^{(D)}, \hat{B}_{(1)}^{(D)}\right)=\Omega_{A} \cdot X \cdot \hat{A}_{(1)} \cdot \hat{B}_{(1)}^{\top} \cdot \Omega_{B}, cosSim(XA^(1)(D),B^(1)(D))=ΩAXA^(1)B^(1)ΩB, i.e., now Ω B \Omega_{B} ΩB normalizes the rows of B , which we did not have in the previous choice of D

Similarly, the item-item cosine-similarities
c o s S i m ( B ^ ( 1 ) ( D ) , B ^ ( 1 ) ( D ) ) = Ω B ⋅ V ⋅ d M a t ( . . . , 1 1 + λ / σ i 2 , . . . ) 2 ⋅ V ⊤ ⋅ Ω B cos Sim\left(\hat{B}_{(1)}^{(D)}, \hat{B}_{(1)}^{(D)}\right)=\Omega_{B} \cdot V \cdot dMat\left(..., \frac{1}{1+\lambda / \sigma_{i}^{2}}, ...\right)^{2} \cdot V^{\top} \cdot \Omega_{B} cosSim(B^(1)(D),B^(1)(D))=ΩBVdMat(...,1+λ/σi21,...)2VΩB are very different from the bizarre result we obtained in the previous choice of D 。

总的来说,这两个情况表明,即使学习的模型 A ^ ( 1 ) ( D ) B ^ ( 1 ) ( D ) ⊤ = A ^ ( 1 ) B ^ ( 1 ) ⊤ \hat{A}_{(1)}^{(D)} \hat{B}_{(1)}^{(D) \top}=\hat{A}_{(1)} \hat{B}_{(1)}^{\top} A^(1)(D)B^(1)(D)=A^(1)B^(1) 对 D 不变,对 D 的不同选择也会导致不同的余弦相似性。换句话说,余弦相似性的结果是任意的,对于这个模型来说并不是唯一的。

2.3 Details on Second Objective (Eq. 2)

方程 2 中训练目标的解在 [7] 中推导出来,如下所示
A ^ ( 2 ) = V k ⋅ d M a t ( . . . , 1 σ i ⋅ ( 1 − λ σ i ) + , . . . ) k a n d \hat{A}_{(2)}=V_{k} \cdot dMat\left(..., \sqrt{\frac{1}{\sigma_{i}} \cdot\left(1-\frac{\lambda}{\sigma_{i}}\right)_{+}}, ...\right)_{k} and A^(2)=VkdMat(...,σi1(1σiλ)+ ,...)kand
B ^ ( 2 ) = V k ⋅ d M a t ( . . . , σ i ⋅ ( 1 − λ σ i ) + , . . . ) k \hat{B}_{(2)}=V_{k} \cdot dMat\left(..., \sqrt{\sigma_{i} \cdot\left(1-\frac{\lambda}{\sigma_{i}}\right)_{+}}, ...\right)_{k} B^(2)=VkdMat(...,σi(1σiλ)+ ,...)k 1 σi ·(1 −λ σi )+, …)k σi ·(1 −λ σi )+, …)k 其中 ( ( y ) + = m a x ( 0 , y ) (y)_{+}=max (0, y) (y)+=max(0,y) ),再次 X = : U ∑ V ⊤ X=: U \sum V^{\top} X=:UV 是训练数据 X 的 SVD ,, 和 ∑ = d M a t ( . . . , σ i , . . . ) \sum =dMat(..., \sigma_{i}, ...) =dMat(...,σi,...) 请注意,如果我们使用 MF 的常用表示法,其中 P = X A P=X A P=XA Q = B Q=B Q=B ,我们得到 P ^ = X A ^ ( 2 ) = U k \hat{P}=X \hat{A}_{(2)}=U_{k} P^=XA^(2)=Uk d M a t ( . . . , σ i ⋅ ( 1 − λ σ i ) + , . . . ) k dMat(..., \sqrt{\sigma_{i} \cdot(1-\frac{\lambda}{\sigma_{i}})_{+}}, ...)_{k} dMat(...,σi(1σiλ)+ ,...)k ,我们可以看到这里的对角矩阵 d M a t ( . . . , σ i ⋅ ( 1 − λ σ i ) + , . . . ) k dMat(..., \sqrt{\sigma_{i} \cdot(1-\frac{\lambda}{\sigma_{i}})_{+}}, ...)_{k} dMat(...,σi(1σiλ)+ ,...)k 是相同的用户嵌入向量和项目嵌入向量,正如预期的那样,由于方程 2 中训练目标中 L2 范数正则化 ∥ P ∥ F 2 + ∥ Q ∥ F 2 \|P\|_{F}^{2}+\|Q\|_{F}^{2} PF2+QF2 的对称性。

与第一个训练目标(见方程 1)的主要区别在于,这里 L2 范数正则化 ∥ P ∥ F 2 + ∥ Q ∥ F 2 \|P\|_{F}^{2}+\|Q\|_{F}^{2} PF2+QF2 分别应用于每个矩阵,因此这个解是唯一的(如上所述,直到不相关的旋转),即,在这种情况下,没有办法将任意对角矩阵 D 引入第二个目标的解中。因此,应用于此 MF 变体的学习嵌入的余弦相似性会产生独特的结果。

虽然这种解决方案是独一无二的,但这个关于用户和项目嵌入的唯一对角矩阵 d M a t ( . . . , σ i ⋅ ( 1 − λ σ i ) + , . . . ) k dMat(..., \sqrt{\sigma_{i} \cdot(1-\frac{\lambda}{\sigma_{i}})_{+}}, ...)_{k} dMat(...,σi(1σiλ)+ ,...)k 在实践中是否产生最佳的语义相似性仍然是一个悬而未决的问题。然而,如果我们相信这种正则化使得余弦相似性在语义相似性方面有用,那么我们可以比较两种变体中对角矩阵的形式,即,将方程 6 与方程 5 进行比较表明,第一个变体(见上一节)中的任意对角矩阵 D 可以类比地选择为 D = d M a t ( . . . , 1 / σ i , . . . ) k D=dMat(..., \sqrt{1 / \sigma_{i}}, ...)_{k} D=dMat(...,1/σi ,...)k

在这里插入图片描述
图 1:由于不同的建模选择,在相同数据上的项目间余弦相似度 c o s S i m ( B , B ) cos Sim(B, B) cosSim(B,B)的巨大变化的说明。左侧:真实的聚类(项目按照聚类分配进行排序,并且在每个聚类内按照基线流行度降序排列)。在根据公式 1 进行训练后,公式 1 允许对 V k V_{k} Vk中的奇异向量进行任意重新缩放,中间的三个图展示了三种特定的重新缩放选择,如每个图上方所示。右侧:基于在根据公式 2 进行训练时获得的(唯一的)B。

3 余弦相似性的补救措施和替代方案

正如我们在上面的分析中所展示的,当一个模型被训练为带点积时,它对余弦相似度的影响可能是不透明的,有时甚至不是唯一的。一个解决方案显然是训练模型带余弦相似度,这层归一化[1]可能会有所帮助。另一种方法是避免嵌入空间,这首先会导致上面概述的问题,并将其投影回原始空间,然后可以应用余弦相似度。例如,使用上面的模型,并给定原始数据X,可以将 X A ^ B ^ ⊤ X\hat{A}\hat{B}^{\top} XA^B^视为其平滑版本,并将 X A ^ B ^ ⊤ X\hat{A}\hat{B}^{\top} XA^B^的行视为用户在原始空间中的嵌入,然后可以应用余弦相似度。

除此之外,还需要注意的是,在余弦相似性中,只有在学习了嵌入后才会应用归一化。与在学习之前或期间应用一些规范化或减少流行偏差相比,这可以显着减少产生的(语义)相似性。这可以通过多种方式完成。例如,统计中的默认方法是标准化数据 X(以便每列的均值和单位方差为零)。深度学习的常见方法包括使用负采样或逆倾向缩放 (IPS) 来考虑不同的项目受欢迎程度(和用户活动水平)。例如,在 word2vec [5] 中,矩阵分解模型是通过对负数进行采样来训练的,其概率与它们在训练数据中的频率(受欢迎程度)成正比,取 β = 3 / 4 \beta=3 / 4 β=3/4 的幂,这在当时产生了令人印象深刻的单词相似性。

5. 结论

在实际应用中,大家经常会用学习得到的用户和/或物品嵌入向量之间的余弦相似度,来衡量这些实体之间的语义相似性。我们在线性矩阵分解模型的框架下研究余弦相似度,这种模型便于进行理论推导。研究发现,余弦相似度很大程度上依赖于所采用的方法和正则化技术,在某些情况下,它可能完全失去意义。

我们不仅进行了理论推导,还通过实验对这些模型在模拟数据上的输出进行了定性分析,模拟数据中我们已知物品之间真实的相似度情况。基于这些研究发现,我们提醒大家不要盲目使用余弦相似度,并提出了几种缓解这个问题的方法。

虽然这篇短文仅限于研究那些能够通过理论推导得出结论的线性模型,但我们推测,在深度学习模型中,学习得到的嵌入向量的余弦相似度即便不会面临更严重的问题,也很可能会受到类似问题的困扰。因为在深度学习模型里,通常会结合使用多种正则化方法,而且模型的不同层可能会采用不同的正则化方式。这就意味着,在深度学习模型的每一层中,学习得到的嵌入向量里不同的潜在维度会被隐式地进行特定的缩放(类似于前面提到的矩阵(D)的作用)。所以,这些正则化方法对最终余弦相似度的影响在深度学习模型里可能会变得更加难以捉摸。

补充1:关于提及的两种objective

Objective 1: Regularizing the Dot Product of ( A B ⊤ AB^\top AB)

L 1 = ∥ X − A B ⊤ ∥ F 2 + λ ∥ A B ⊤ ∥ F 2 \mathcal{L}_1 = \|X - AB^\top\|_F^2 + \lambda \|AB^\top\|_F^2 L1=XABF2+λABF2

  • What Is Being Regularized?

    • Regularization is applied to the product ( A B ⊤ AB^\top AB), i.e., the dot product of (A) and ( B ⊤ B^\top B), as a whole.
    • This means the interaction between (A) and (B) is directly regularized, but the individual embeddings (A) and (B) are not constrained independently.
  • Key Implications:

    • The regularization only penalizes the combined output ( A B ⊤ AB^\top AB), allowing (A) and (B) to scale arbitrarily.
    • This introduces a scaling freedom through a diagonal matrix (D):
      A ′ = A D , B ′ = B D − 1 (both satisfy the regularization equally well) . A' = AD, \quad B' = BD^{-1} \quad \text{(both satisfy the regularization equally well)}. A=AD,B=BD1(both satisfy the regularization equally well).
    • This scaling freedom makes the cosine similarity results arbitrary and non-unique, because cosine similarity normalizes the vectors.

Objective 2: Separately Regularizing (A) and (B)

L 2 = ∥ X − A B ⊤ ∥ F 2 + λ ( ∥ A ∥ F 2 + ∥ B ∥ F 2 ) \mathcal{L}_2 = \|X - AB^\top\|_F^2 + \lambda (\|A\|_F^2 + \|B\|_F^2) L2=XABF2+λ(AF2+BF2)

  • What Is Being Regularized?

    • Regularization is applied independently to the L2 norms of (A) and (B).
    • The penalty ensures that both embeddings have controlled magnitudes, removing the freedom to scale (A) and (B) arbitrarily.
  • Key Implications:

    • By penalizing ( ∥ A ∥ F 2 \|A\|_F^2 AF2) and ( ∥ B ∥ F 2 \|B\|_F^2 BF2), this objective eliminates the scaling issue:
      A ′ ≠ A D and B ′ ≠ B D − 1 (scaling is no longer valid) . A' \neq AD \quad \text{and} \quad B' \neq BD^{-1} \quad \text{(scaling is no longer valid)}. A=ADandB=BD1(scaling is no longer valid).
    • The resulting cosine similarity scores are unique and stable, as embedding norms are consistent.

Comparison Between Objective 1 and 2

AspectObjective 1 (Regularize ( A B ⊤ AB^\top AB))Objective 2 (Regularize (A) and (B) Separately)
Regularization Applied ToProduct (AB^\top)Individual matrices (A) and (B)
Scaling FreedomAllows arbitrary scaling via (D): (A \to AD, B \to B D − 1 BD^{-1} BD1)Removes scaling freedom, embedding norms are controlled
Cosine SimilarityArbitrary and non-uniqueUnique and stable
Impact on NormsNorms of (A) and (B) are uncontrolledNorms of (A) and (B) are explicitly constrained

Why Objective 2 Is Better for Cosine Similarity

  • Objective 1: Fails to constrain individual embeddings, leading to scaling issues that make cosine similarity unreliable.
  • Objective 2: Ensures that embeddings have consistent norms, making cosine similarity a meaningful and interpretable metric.

补充2:关于L2-norm与softmax

L2-Normalization vs. Softmax

  1. L2-Normalization:

    • Purpose: 缩放向量,使其 L2 范数(幅度)变为 1,同时保持其方向不变
    • Formula:
      v normalized = v ∥ v ∥ 2 \mathbf{v}_{\text{normalized}} = \frac{\mathbf{v}}{\|\mathbf{v}\|_2} vnormalized=v2v
      Where ( ∥ v ∥ 2 = ∑ v i 2 \|\mathbf{v}\|_2 = \sqrt{\sum v_i^2} v2=vi2 ).
    • Output: 具有相同维度的向量,但缩放后使其总量级为 1。不会将值转换为概率,而只是重新调整规模
  2. Softmax Function:

    • Purpose: 将分数向量转换为概率分布,其中元素之和为 1
    • Formula:
      softmax ( v ) i = exp ⁡ ( v i ) ∑ j exp ⁡ ( v j ) \text{softmax}(\mathbf{v})_i = \frac{\exp(v_i)}{\sum_j \exp(v_j)} softmax(v)i=jexp(vj)exp(vi)
    • Output: 向量中的每个元素都变为介于 0 和 1 之间的正值,并且元素的总和为 1。由于指数函数,强调较大的值,同时抑制较小的值

Key Differences

AspectL2-NormalizationSoftmax Function
GoalNormalize vector’s magnitude to 1Convert values into probabilities
Preserves Ratios是(方向不变)否(值呈指数缩放)
Sum PropertyNorm (L2) = 1Sum = 1
Applicability向量方向比较 (e.g., cosine similarity)分类和概率输出

Intuitive Example

e.g. the vector ( v = [ 3 , 4 ] \mathbf{v} = [3, 4] v=[3,4]):

  1. L2-Normalization:
    ∥ v ∥ 2 = 3 2 + 4 2 = 5 , v normalized = [ 0.6 , 0.8 ] \|\mathbf{v}\|_2 = \sqrt{3^2 + 4^2} = 5, \quad \mathbf{v}_{\text{normalized}} = [0.6, 0.8] v2=32+42 =5,vnormalized=[0.6,0.8]

    • Output: 保留矢量方向,但其量级缩放为 1
  2. Softmax:
    softmax ( [ 3 , 4 ] ) i = exp ⁡ ( v i ) exp ⁡ ( 3 ) + exp ⁡ ( 4 ) , softmax ( [ 3 , 4 ] ) ≈ [ 0.268 , 0.732 ] \text{softmax}([3, 4])_i = \frac{\exp(v_i)}{\exp(3) + \exp(4)}, \quad \text{softmax}([3, 4]) \approx [0.268, 0.732] softmax([3,4])i=exp(3)+exp(4)exp(vi),softmax([3,4])[0.268,0.732]

    • Output: 这些值被转换为概率,较高的值被放大(由于指数)

When Are They Used?

  • L2-Normalization:

    • 用于嵌入以确保向量大小的一致性,尤其是对于余弦相似性。
    • e.g: 在 CLIP 等检索任务中对齐图像和文本嵌入
  • Softmax Function:

    • 在分类任务中用于将 logits 转换为类的概率。
    • e.g: 预测神经网络中的类标签

虽然两者都可以重新缩放向量,但用途不同。L2 归一化是几何的(保留方向),而 softmax 是概率的(侧重于相对重要性)。

补充3:e.g.L2-Normalization

Formula for L2-Normalization

To normalize a vector ( v = [ v 1 , v 2 , … , v n ] \mathbf{v} = [v_1, v_2, \dots, v_n] v=[v1,v2,,vn]) to have an L2 norm of 1, we use the formula:

v normalized = v ∥ v ∥ 2 \mathbf{v}_{\text{normalized}} = \frac{\mathbf{v}}{\|\mathbf{v}\|_2} vnormalized=v2v

Where:

  • ( ∥ v ∥ 2 = v 1 2 + v 2 2 + ⋯ + v n 2 \|\mathbf{v}\|_2 = \sqrt{v_1^2 + v_2^2 + \dots + v_n^2} v2=v12+v22++vn2 ): The L2 norm (length) of the vector.

Example

Let’s work through an example with the vector ( v = [ 3 , 4 ] \mathbf{v} = [3, 4] v=[3,4]).

  1. Calculate the L2 Norm:
    ∥ v ∥ 2 = 3 2 + 4 2 = 9 + 16 = 25 = 5 \|\mathbf{v}\|_2 = \sqrt{3^2 + 4^2} = \sqrt{9 + 16} = \sqrt{25} = 5 v2=32+42 =9+16 =25 =5

  2. Normalize the Vector:
    v normalized = v ∥ v ∥ 2 = [ 3 , 4 ] 5 = [ 3 5 , 4 5 ] \mathbf{v}_{\text{normalized}} = \frac{\mathbf{v}}{\|\mathbf{v}\|_2} = \frac{[3, 4]}{5} = \left[\frac{3}{5}, \frac{4}{5}\right] vnormalized=v2v=5[3,4]=[53,54]

  3. Result:
    v normalized = [ 0.6 , 0.8 ] \mathbf{v}_{\text{normalized}} = [0.6, 0.8] vnormalized=[0.6,0.8]

Verify the Normalized Vector

To confirm the result is normalized:
∥ v normalized ∥ 2 = 0. 6 2 + 0. 8 2 = 0.36 + 0.64 = 1 = 1 \|\mathbf{v}_{\text{normalized}}\|_2 = \sqrt{0.6^2 + 0.8^2} = \sqrt{0.36 + 0.64} = \sqrt{1} = 1 vnormalized2=0.62+0.82 =0.36+0.64 =1 =1

The normalized vector has a magnitude of 1, as expected.

更多理解:https://juejin.cn/post/7459650401110556726

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

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

相关文章

71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果

前言 在前端开发中&#xff0c;地图功能是一个常见的需求。OpenLayers 是一个强大的开源地图库&#xff0c;支持多种地图源和交互操作。本文将介绍如何在 Vue 3 中集成 OpenLayers&#xff0c;并实现按住 Shift 键拖拽、旋转和缩放地图的效果。 实现效果 按住 Shift 键&#…

PyQt6医疗多模态大语言模型(MLLM)实用系统框架构建初探(上.文章部分)

一、引言 1.1 研究背景与意义 在数字化时代,医疗行业正经历着深刻的变革,智能化技术的应用为其带来了前所未有的发展机遇。随着医疗数据的指数级增长,传统的医疗诊断和治疗方式逐渐难以满足现代医疗的需求。据统计,全球医疗数据量预计每年以 48% 的速度增长,到 2025 年将…

250125-package

1. 定义 包就是文件夹&#xff0c;作用是在大型项目中&#xff0c;避免不同人的编写的java文件出现同名进而导致报错&#xff1b;想象一个场景&#xff0c;在一个根目录中&#xff0c;每一个人都有自己的一个java文件夹&#xff0c;他可以将自己编写的文件放在该文件夹里&…

FastExcel的使用

前言 FastExcel 是一款基于 Java 的开源库&#xff0c;旨在提供快速、简洁且能解决大文件内存溢出问题的 Excel 处理工具。它兼容 EasyExcel&#xff0c;提供性能优化、bug 修复&#xff0c;并新增了如读取指定行数和将 Excel 转换为 PDF 的功能。 FastExcel 的主要功能 高性…

Redis实战(黑马点评)——关于缓存(缓存更新策略、缓存穿透、缓存雪崩、缓存击穿、Redis工具)

redis实现查询缓存的业务逻辑 service层实现 Overridepublic Result queryById(Long id) {String key CACHE_SHOP_KEY id;// 现查询redis内有没有数据String shopJson (String) redisTemplate.opsForValue().get(key);if(StrUtil.isNotBlank(shopJson)){ // 如果redis的数…

python3+TensorFlow 2.x(三)手写数字识别

目录 代码实现 模型解析&#xff1a; 1、加载 MNIST 数据集&#xff1a; 2、数据预处理&#xff1a; 3、构建神经网络模型&#xff1a; 4、编译模型&#xff1a; 5、训练模型&#xff1a; 6、评估模型&#xff1a; 7、预测和可视化结果&#xff1a; 输出结果&#xff…

基础项目——扫雷(c++)

目录 前言一、环境配置二、基础框架三、关闭事件四、资源加载五、初始地图六、常量定义七、地图随机八、点击排雷九、格子类化十、 地图类化十一、 接口优化十二、 文件拆分十三、游戏重开 前言 各位小伙伴们&#xff0c;这期我们一起学习出贪吃蛇以外另一个基础的项目——扫雷…

[操作系统] 深入进程地址空间

程序地址空间回顾 在C语言学习的时&#xff0c;对程序的函数、变量、代码等数据的存储有一个大致的轮廓。在语言层面上存储的地方叫做程序地址空间&#xff0c;不同类型的数据有着不同的存储地址。 下图为程序地址空间的存储分布和和特性&#xff1a; 使用以下代码来验证一下…

OpenCV:图像处理中的低通滤波

目录 简述 什么是低通滤波&#xff1f; 各种滤波器简介与实现 方盒滤波 均值滤波 中值滤波 高斯滤波 双边滤波 各种滤波的对比与应用场景 相关阅读 OpenCV基础&#xff1a;图像变换-CSDN博客 OpenCV&#xff1a;图像滤波、卷积与卷积核-CSDN博客 简述 低通滤波是一…

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)

背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析&#xff08;1&#xff09;&#xff1a;stdio测试&#xff08;一&#xff09; 继续stdio测试的分析&#xff0c;上篇讲到标准IO端口初始化&#xff0c;单从测试内容来说其实很简单&#xff0c;没啥可分析的&#xff0c;但这几篇…

OpenAI掀桌子!免费版ChatGPT,提供o3-mini模型!

逆天免费用 今天凌晨&#xff0c;OpenAI联合创始人兼首席执行官Sam Altman宣布了一个大消息——免费版ChatGPT&#xff0c;将提供o3-mini模型&#xff01; 网页们纷纷不淡定了 看来OpenAI&#xff0c;这o3-mini还没正式上线呢&#xff0c;就免费开放使用了。 不过还是要感谢…

redis离线安装部署详解(包括一键启动)

像上文一样 因为在学习的过程中没有查到一个详细的离线部署方案 所以在自己学习之后想要自己写一个文章 希望可以帮助后续学习redis离线部署的朋友少走一线弯路 首先就是下载安装包 可以自己在本地下载再传到机器上&#xff08;通过xftp或lrzsz都可&#xff09; http://d…

图论汇总1

1.图论理论基础 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 图的种类 整体上一般分为 有向图 和 无向图。 有向图是指 图中边是有方向的&a…

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:

ESMC-600M蛋白质语言模型本地部署攻略

前言 之前介绍了ESMC-6B模型的网络接口调用方法&#xff0c;但申请token比较慢&#xff0c;有网友问能不能出一个本地部署ESMC小模型的攻略&#xff0c;遂有本文。 其实本地部署并不复杂&#xff0c;官方github上面也比较清楚了。 操作过程 环境配置&#xff1a;CUDA 12.1、…

Java 实现Excel转HTML、或HTML转Excel

Excel是一种电子表格格式&#xff0c;广泛用于数据处理和分析&#xff0c;而HTM则是一种用于创建网页的标记语言。虽然两者在用途上存在差异&#xff0c;但有时我们需要将数据从一种格式转换为另一种格式&#xff0c;以便更好地利用和展示数据。本文将介绍如何通过 Java 实现 E…

Ubuntu20.04 运行 PL-VIO

文章目录 运行后不知为何没有线特征 运行后不知为何没有线特征

centos操作系统上以service形式运行blackbox_exporter监控网页端口

文章目录 前言一、blackbox_exporter是什么二、使用步骤1.获取二进制文件2.准备部署脚本3.执行命令&#xff0c;进行部署4.prometheus中增加需要监控页面的job信息 三、查看部署结果四、配置到grafana中总结 前言 记录一下centos操作系统上以简单的service形式运行blackbox_ex…

Linux内核编程(二十一)USB驱动开发-键盘驱动

一、驱动类型 USB 驱动开发主要分为两种&#xff1a;主机侧的驱动程序和设备侧的驱动程序。一般我们编写的都是主机侧的USB驱动程序。 主机侧驱动程序用于控制插入到主机中的 USB 设备&#xff0c;而设备侧驱动程序则负责控制 USB 设备如何与主机通信。由于设备侧驱动程序通常与…

RV1126画面质量四:GOP改善画质

一&#xff0e; 什么是 GOP GOP 实际上就是两个 I 帧的间隔&#xff0c;比方说分辨率是 1920 * 1080 50 帧&#xff0c;假设 GOP 为 5&#xff0c;那就是大概 2s 插入一个 I 帧。我们再 回顾下&#xff0c;H264/H265 的帧结构。H264/H265 分别分为三种帧类型&#xff1a;I 帧、…