当前位置: 首页 > news >正文

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

论文地址:
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

相关文章:

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

论文地址&#xff1a; https://arxiv.org/abs/2403.05440 https://dl.acm.org/doi/abs/10.1145/3589335.3651526 bib引用&#xff1a; inproceedings{Steck_2024, series{WWW ’24},title{Is Cosine-Similarity of Embeddings Really About Similarity?},url{http://dx.doi.o…...

Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能

开篇 Midjourney中有3个图片“微调”&#xff0c;它们分别为&#xff1a; 强变化&#xff1b;弱变化&#xff1b;局部重绘&#xff1b; 在Discord里分别都是用命令唤出的&#xff0c;但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中&#xff0c;我们发觉这样的逆天…...

基于 Node.js 的天气查询系统实现(附源码)

项目概述 这是一个基于 Node.js 的全栈应用,前端使用原生 JavaScript 和 CSS,后端使用 Express 框架,通过调用第三方天气 API 实现天气数据的获取和展示。 主要功能 默认显示多个主要城市的天气信息 支持城市天气搜索 响应式布局设计 深色主题界面 优雅的加载动画 技术栈 …...

时序数据库的使用场景

文章目录 前言一、特点二、工作原理三、常见的时序数据库四、使用场景优势总结 前言 时序数据库&#xff08;Time Series Database, TSDB&#xff09; 是一种专门设计用于存储和处理时序数据的数据库。时序数据是指按照时间顺序排列的数据&#xff0c;其中每个数据点通常包含时…...

计算机的错误计算(二百二十二)

摘要 利用大模型化简计算 实验表明&#xff0c;虽然结果正确&#xff0c;但是&#xff0c;大模型既绕了弯路&#xff0c;又有数值计算错误。 与前面相同&#xff0c;再利用同一个算式看看另外一个大模型的化简与计算能力。 例1. 化简计算摘要中算式。 下面是与一个大模型的…...

ThinkPHP 8模型与数据的插入、更新、删除

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…...

c语言函数(详解)

目录 前言 一、函数的基本概念和作用 二、函数的声明和定义 三、函数参数的传递方式 四、函数的递归 五、函数指针 总结 前言 本文主要讲解了c语言函数方面的内容 函数的定义和调用函数的返回值和参数函数的作用域和生命周期 函数的声明和定义 函数声明和函数定义的区别函数声…...

为AI聊天工具添加一个知识系统 之70 详细设计 之11 维度运动控制的应用:上下文受控的自然语言

本文要点 要点 前面我们 讨论了 “维度”及其运动控制原理 以及 维度控制 如何在中台微服务架构中撑起了“架构师”角色的一片天。下面我们从 “维度”运动控制的一个典型应用场景&#xff1a;受控的自然语言 ”开始讨论。 拼块文字型风格: 维度运动控制下的受控自然语言…...

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios&#xff0c;发现uuid和udid在网上有很多帖子里是混淆的&#xff0c;比如百度下&#xff0c;就会说&#xff1a; 在iOS中使用UUID&#xff08;通用唯一识别码&#xff09;作为永久签名&#xff0c;通常是指生成一个唯一标识&#xf…...

数组,对象解构,forEach方法,filter方法

数组解构 对象结构 遍历数组 forEach方法 筛选数组 filter方法 渲染商品案例 forEach遍历数组&#xff0c;能得到每个数组中的数据&#xff0c;item是对象中的每个元素 将遍历的数组中每个对象 加到 str 中 将 str 字符串中的 8 个 div 添加到 list盒子中 对象解构并渲染 综…...

PSPNet

文章目录 摘要Abstract1. 引言2. 框架2.1 金字塔池化模块2.2 特征提取器的监督2.3 训练细节 3. 创新点和不足3.1 创新点3.2 不足 参考总结 摘要 PSPNet是一个改进了FCN-8s缺点的语义分割模型&#xff0c;它解决了FCN-8s的缺点——分割不够精细以及没有考虑上下文信息。PSPNet的…...

论文阅读的附录(七):Understanding Diffusion Models: A Unified Perspective(二):公式46的推导

Understanding Diffusion Models: A Unified Perspective&#xff08;二&#xff09;&#xff1a;公式46的推导 文章概括要推导的公式1. 条件概率的定义2. 联合分布的分解2.1 联合分布的定义2.2 为什么可以这样分解&#xff1f;2.3 具体意义 3. 分母的分解&#xff1a;边际化规…...

BGP分解实验·12——配置路由反射器

当一个AS包含多个iBGP对等体时&#xff0c;路由反射器&#xff08;Route-Reflector&#xff09;非常有用&#xff0c;因为相对于iBGP路由反射器指定的客户端只需要和路由反射器建立邻居关系&#xff0c;从而降低了iBGP全互连的连接数量。路由反射器&#xff08;RR&#xff09;和…...

PCIe 个人理解专栏——【2】LTSSM(Link Training and Status State Machine)

前言&#xff1a; 链路训练和状况状态机LTSSM&#xff08;Link Training and Status State Machine&#xff09;是整个链路训练和运行中状态的状态转换逻辑关系图&#xff0c;总共有11个状态。 正文&#xff1a; 包括检测&#xff08;Detect&#xff09;&#xff0c;轮询&…...

cmake 编译QT之JKQtPlotter-4.0.3

cmake 编译 JKQtPlotter-4.0.3 1.下载源码 源码地址&#xff1a;https://github.com/jkriege2/JKQtPlotter 2.编译 mkdir build cd buildDCMAKE_PREFIX_PATH指编译器目录 D:\ProgramFiles\cmake-3.25.0-rc1-windows-i386\bin\cmake.exe -G "Visual Studio 16 2019&qu…...

【C】memory 详解

<memory.h> 是一个 C 标准库头文件&#xff0c;提供了一组内存管理函数&#xff0c;用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块&#xff0c;是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...

Python 爬虫 - Selenium 框架

Python 爬虫 - Selenium 框架 安装安装 Selenium安装 WebDriver 操作浏览器打开浏览器普通方式加载配置方式Headless 方式 设置浏览器窗口最大化显示最小化显示自定义大小 前进后退前进后退 元素定位根据 id 定位根据 name 定位根据 class 定位根据标签名定位使用 CSS 定位使用…...

mysql的having语句

MySQL的HAVING语句用于在GROUP BY子句对数据进行分组后&#xff0c;过滤满足特定条件的组。与WHERE子句不同&#xff0c;HAVING子句可以在过滤条件中使用聚合函数&#xff0c;而WHERE子句则不能。通常&#xff0c;HAVING子句与GROUP BY子句一起使用&#xff0c;以实现对分组数据…...

华为数据之道-读书笔记

内容简介 关键字 数字化生产 已经成为普遍的商业模式&#xff0c;其本质是以数据为处理对象&#xff0c;以ICT平台为生产工具&#xff0c;以软件为载体&#xff0c;以服务为目的的生产过程。 信息与通信技术平台&#xff08;Information and Communication Technology Platf…...

CDN、源站与边缘网络

什么是“源站” 源服务器 源服务器的目的是处理和响应来自互联网客户端的传入请求。源服务器的概念通常与边缘服务器或缓存服务器的概念结合使用。源服务器的核心是一台运行一个或多个程序的计算机&#xff0c;这些程序旨在侦听和处理传入的客户端请求。源服务器可以承担为网…...

工业相机 SDK 二次开发-Sherlock插件

本文介绍了 sherlock 连接相机时的插件使用。通过本套插件可连接海康的工业相机。 一&#xff0e;环境配置 1. 拷贝动态库 在用户安装 MVS 目录下按照如下路径 Development\ThirdPartyPlatformAdapter 找到目 录为 DalsaSherlock 的文件夹&#xff0c;根据 Sherlock 版本找到…...

FlinkSql使用中rank/dense_rank函数报错空指针

问题描述 在flink1.16(甚至以前的版本)中&#xff0c;使用rank()或者dense_rank()进行排序时&#xff0c;某些场景会导致报错空指针NPE(NullPointerError) 报错内容如下 该报错没有行号/错误位置&#xff0c;无法排查 现状 目前已经确认为bug&#xff0c;根据github上的PR日…...

VS C++ 配置OPENCV环境

VS C 配置OPENCV环境 1.下载opencv2.安装环境3.opencv环境4.VS配置opencv环境5.EXE执行文件路径的环境lib和dll需要根据是debug还是release环境来区分使用哪个 6.Windows环境 1.下载opencv 链接: link 2.安装环境 双击运行即可 3.opencv环境 include文件路径:opencv\build\…...

【SpringSecurity】基本开发流程

文章目录 概要整体架构流程实现流程1、编写各种Handler2 、AccessToken处理器3、定义AuthenticationFilter 继承 OncePerRequestFilter &#xff08;OncePerRequestFilter是Spring提供的一个过滤器基类&#xff0c;它确保了在一次完整的HTTP请求中&#xff0c;无论请求经过多少…...

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的数…...

ChatGPT从数据分析到内容写作建议相关的46个提示词分享!

在当今快节奏的学术环境中&#xff0c;研究人员面临着海量的信息和复杂的研究任务。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;像ChatGPT这样的先进工具为科研人员提供了强大的支持。今天就让我们一起探索如何利用ChatGPT提升研究效率进一步优化研究流程。 ChatG…...

在 Windows 11 中设置 WSL2 Ubuntu 的 `networkingMode=mirrored` 详细教程

在 Windows 11 中设置 WSL2 Ubuntu 的 networkingModemirrored 详细教程 引言环境要求配置 .wslconfig 文件重启 WSL2验证镜像网络模式解决常见问题其他注意事项结论 引言 在 Windows 11 中使用 WSL2&#xff08;Windows Subsystem for Linux 2&#xff09;时&#xff0c;默认…...

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…...

怎么样把pdf转成图片模式(不能复制文字)

贵但好用的wps&#xff0c; 转换——转为图片型pdf —————————————————————————————————————————— 转换前&#xff1a; 转换后&#xff1a; 肉眼可见&#xff0c;模糊了&#xff0c;且不能复制。 其他免费办法&#xff0c;参考&…...

本地centos网络配置

1、路径 2、配置 另外还需要...