【NLP基础知识】有哪些相似度计算方式(持续更新)

相异性/相似性的计算-zine

相似度计算方式

1. Euclidean Distance (L2)

用途:主要用于计算机视觉领域。

解释 :计算两个点之间的直线距离。假设有两个向量 a = [ a 1 , a 2 , . . . , a n ] \mathbf{a} = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] 和 b = [ b 1 , b 2 , . . . , b n ] \mathbf{b} = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn],它们之间的欧几里得距离计算如下:
L2 ( a , b ) = ∑ i = 1 n ( a i − b i ) 2 \text{L2}(\mathbf{a}, \mathbf{b}) = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} L2(a,b)=i=1∑n(ai−bi)2

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • 欧几里得距离

L2 ( a , b ) = ( 1 − 4 ) 2 + ( 2 − 5 ) 2 + ( 3 − 6 ) 2 = 27 ≈ 5.20 \text{L2}(\mathbf{a}, \mathbf{b}) = \sqrt{(1-4)^2 + (2-5)^2 + (3-6)^2} = \sqrt{27} \approx 5.20 L2(a,b)=(1−4)2+(2−5)2+(3−6)2 =27 ≈5.20

2. Inner Product (IP)

用途:主要用于自然语言处理领域。

解释 :计算两个向量的点积。假设有两个向量 a = [ a 1 , a 2 , . . . , a n ] \mathbf{a} = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] 和 b = [ b 1 , b 2 , . . . , b n ] \mathbf{b} = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn],它们之间的内积计算如下:
IP ( a , b ) = ∑ i = 1 n a i b i \text{IP}(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^{n} a_i b_i IP(a,b)=i=1∑naibi

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • 点积

IP ( a , b ) = 1 ⋅ 4 + 2 ⋅ 5 + 3 ⋅ 6 = 32 \text{IP}(\mathbf{a}, \mathbf{b}) = 1 \cdot 4 + 2 \cdot 5 + 3 \cdot 6 = 32 IP(a,b)=1⋅4+2⋅5+3⋅6=32

3. Hamming Distance

汉明距离: 两个相同长度字符串进行异或运算,结果为1的个数就是汉明距离

用途:主要用于自然语言处理领域中的二进制嵌入。

解释 :计算两个相同长度的二进制字符串之间不同位置的个数。假设有两个二进制向量 a = [ a 1 , a 2 , . . . , a n ] \mathbf{a} = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] 和 b = [ b 1 , b 2 , . . . , b n ] \mathbf{b} = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn],汉明距离计算如下:
Hamming ( a , b ) = ∑ i = 1 n 1 ( a i ≠ b i ) \text{Hamming}(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^{n} \mathbf{1}(a_i \neq b_i) Hamming(a,b)=i=1∑n1(ai=bi)

举例

  • 向量 a = [ 0 , 1 , 1 , 0 ] \mathbf{a} = [0, 1, 1, 0] a=[0,1,1,0] 和 b = [ 1 , 1 , 0 , 0 ] \mathbf{b} = [1, 1, 0, 0] b=[1,1,0,0]
  • 汉明距离

Hamming ( a , b ) = 2 \text{Hamming}(\mathbf{a}, \mathbf{b}) = 2 Hamming(a,b)=2

4. Jaccard Index

jaccard相似性 = 集合交集/集合并集

jaccard距离 = 1-jaccard相似性

用途:主要用于分子相似度搜索。

解释 :计算两个集合的交集大小与并集大小的比值。假设有两个集合 A A A 和 B B B,它们的Jaccard指数计算如下:
Jaccard ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ \text{Jaccard}(A, B) = \frac{|A \cap B|}{|A \cup B|} Jaccard(A,B)=∣A∪B∣∣A∩B∣

举例

  • 集合 A = { 1 , 2 , 3 } A = \{1, 2, 3\} A={1,2,3} 和集合 B = { 2 , 3 , 4 } B = \{2, 3, 4\} B={2,3,4}
  • Jaccard指数

Jaccard ( A , B ) = 2 4 = 0.5 \text{Jaccard}(A, B) = \frac{2}{4} = 0.5 Jaccard(A,B)=42=0.5

5. Tanimoto Coefficient

用途:主要用于分子相似度搜索。

解释 :类似于Jaccard指数,但通常用于浮点数或连续值的集合。假设有两个向量 a \mathbf{a} a 和 b \mathbf{b} b,Tanimoto系数计算如下:
Tanimoto ( a , b ) = a ⋅ b ∣ a ∣ 2 + ∣ b ∣ 2 − a ⋅ b \text{Tanimoto}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{|\mathbf{a}|^2 + |\mathbf{b}|^2 - \mathbf{a} \cdot \mathbf{b}} Tanimoto(a,b)=∣a∣2+∣b∣2−a⋅ba⋅b

举例

  • 向量 a = [ 1 , 1 , 0 ] \mathbf{a} = [1, 1, 0] a=[1,1,0] 和 b = [ 0 , 1 , 1 ] \mathbf{b} = [0, 1, 1] b=[0,1,1]
  • Tanimoto系数

Tanimoto ( a , b ) = 1 3 ≈ 0.33 \text{Tanimoto}(\mathbf{a}, \mathbf{b}) = \frac{1}{3} \approx 0.33 Tanimoto(a,b)=31≈0.33

6. Superstructure and Substructure

用途:主要用于搜索分子的超结构和子结构相似性。

解释:这些指标用于化学信息学,计算一个分子是否是另一个分子的超结构或子结构。具体算法因实现而异,通常涉及子图匹配技术。

举例

  • 分子 A A A 有结构 C 6 H 6 \text{C}_6\text{H}_6 C6H6(苯环),分子 B B B 有结构 C 6 H 5 OH \text{C}_6\text{H}_5\text{OH} C6H5OH(苯酚)。
  • 分子 A A A 是分子 B B B 的子结构,因为苯环是苯酚的一个部分。
  • 分子 B B B 是分子 A A A 的超结构,因为苯酚包含了苯环并增加了一个羟基(OH)。

7. Cosine Similarity

用途:主要用于自然语言处理和信息检索。

解释 :计算两个向量之间的余弦角度的相似度。假设有两个向量 a \mathbf{a} a 和 b \mathbf{b} b,余弦相似度计算如下:
Cosine ( a , b ) = a ⋅ b ∣ ∣ a ∣ ∣ ⋅ ∣ ∣ b ∣ ∣ \text{Cosine}(\mathbf{a}, \mathbf{b}) = \frac{\mathbf{a} \cdot \mathbf{b}}{||\mathbf{a}|| \cdot ||\mathbf{b}||} Cosine(a,b)=∣∣a∣∣⋅∣∣b∣∣a⋅b

余弦相似性
c o s θ = a ⋅ b ∣ ∣ a ∣ ∣ ∣ ∣ b ∣ ∣ = ∑ i = 1 n a i b i ∑ i = 1 n a i 2 ∑ i = 1 n b i 2 cos\theta =\frac{a\cdot b}{||a|| ||b||} = \frac {\sum_{i=1}^n{a_i} {b_i}} {\sqrt{\sum_{i=1}^n a_i^2} \sqrt{\sum_{i=1}^n b_i^2}} cosθ=∣∣a∣∣∣∣b∣∣a⋅b=∑i=1nai2 ∑i=1nbi2 ∑i=1naibi

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • 余弦相似度

Cosine ( a , b ) ≈ 0.97 \text{Cosine}(\mathbf{a}, \mathbf{b}) \approx 0.97 Cosine(a,b)≈0.97

8. Manhattan Distance (L1)

曼哈顿距离: 又叫街区距离,类似汉明距离,区别是曼哈顿距离计算两个字符串的每个位置上对应字符之间的差值,而不是计算不陪配字符的数量。

用途:广泛用于各种数据分析和机器学习任务。

解释 :计算两个点在所有坐标轴上的绝对差值之和。假设有两个向量 a = [ a 1 , a 2 , . . . , a n ] \mathbf{a} = [a_1, a_2, ..., a_n] a=[a1,a2,...,an] 和 b = [ b 1 , b 2 , . . . , b n ] \mathbf{b} = [b_1, b_2, ..., b_n] b=[b1,b2,...,bn],曼哈顿距离计算如下:
L1 ( a , b ) = ∑ i = 1 n ∣ a i − b i ∣ \text{L1}(\mathbf{a}, \mathbf{b}) = \sum_{i=1}^{n} |a_i - b_i| L1(a,b)=i=1∑n∣ai−bi∣

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • 曼哈顿距离

L1 ( a , b ) = 9 \text{L1}(\mathbf{a}, \mathbf{b}) = 9 L1(a,b)=9

9. Pearson Correlation Coefficient

用途:用于统计分析和机器学习中的相关性测量。

解释 :衡量两个变量之间的线性相关性,取值范围为-1到1。假设有两个向量 a \mathbf{a} a 和 b \mathbf{b} b,皮尔逊相关系数计算如下:
Pearson ( a , b ) = ∑ i = 1 n ( a i − a ˉ ) ( b i − b ˉ ) ∑ i = 1 n ( a i − a ˉ ) 2 ∑ i = 1 n ( b i − b ˉ ) 2 \text{Pearson}(\mathbf{a}, \mathbf{b}) = \frac{\sum_{i=1}^{n} (a_i - \bar{a})(b_i - \bar{b})}{\sqrt{\sum_{i=1}^{n} (a_i - \bar{a})^2} \sqrt{\sum_{i=1}^{n} (b_i - \bar{b})^2}} Pearson(a,b)=∑i=1n(ai−aˉ)2 ∑i=1n(bi−bˉ)2 ∑i=1n(ai−aˉ)(bi−bˉ)

其中 a ˉ \bar{a} aˉ 和 b ˉ \bar{b} bˉ 分别是 a \mathbf{a} a 和 b \mathbf{b} b 的均值。

补充公式:

p e a r s o n r = c o v ( x , y ) σ ( x ) σ ( y ) = ∑ i = 1 n ( x − x ˉ ) ( y − y ˉ ) ∑ i = 1 n ( x − x ˉ ) 2 ∑ i = 1 n ( y − y ˉ ) 2 pearson_r =\frac{cov(x,y)}{\sigma{(x)}\sigma{(y)}} =\frac {\sum_{i=1}^n(x-\bar{x})(y-\bar{y})} {\sqrt{\sum_{i=1}^n (x-\bar{x})^2} \sqrt{\sum_{i=1}^n (y-\bar{y})^2}} pearsonr=σ(x)σ(y)cov(x,y)=∑i=1n(x−xˉ)2 ∑i=1n(y−yˉ)2 ∑i=1n(x−xˉ)(y−yˉ)

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • 均值 a ˉ = 2 \bar{a} = 2 aˉ=2,均值 b ˉ = 5 \bar{b} = 5 bˉ=5
  • 皮尔逊相关系数

Pearson ( a , b ) = 1 \text{Pearson}(\mathbf{a}, \mathbf{b}) = 1 Pearson(a,b)=1

10.Spearman's Rank Correlation

用途:用于统计分析中的秩相关性测量。

解释 :衡量两个变量的秩相关性,适用于非线性相关的情况。假设有两个向量 a \mathbf{a} a 和 b \mathbf{b} b,计算如下:
Spearman ( a , b ) = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \text{Spearman}(\mathbf{a}, \mathbf{b}) = 1 - \frac{6 \sum d_i^2}{n(n^2 - 1)} Spearman(a,b)=1−n(n2−1)6∑di2

其中 d i d_i di 是每对数据的秩差, n n n 是数据对的数量。

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6] 的秩相同,所以 Spearman 相关系数为 1。

11. Edit Distance (Levenshtein Distance)

又叫莱文斯坦距离,是编辑距离的一种

用途:主要用于字符串相似性计算。

解释:计算将一个字符串变为另一个字符串所需的最少编辑操作(插入、删除、替换)的数量。

公式:
r = ( s u m − l d i s t ) s u m r=\frac{(sum - ldist)}{sum} r=sum(sum−ldist)

ldist是类编辑距离,删除、插入+1,但是替换+2

举例

  • 字符串 a = "kitten" 和 b = "sitting"
  • 编辑距离 = 3(kitten → sitten → sittin → sitting)

12. Bray-Curtis Dissimilarity

用途:用于生态学和其他领域中的样本比较。

解释 :衡量两个样本之间的差异,计算如下:
Bray-Curtis ( a , b ) = ∑ ∣ a i − b i ∣ ∑ ( a i + b i ) \text{Bray-Curtis}(\mathbf{a}, \mathbf{b}) = \frac{\sum |a_i - b_i|}{\sum (a_i + b_i)} Bray-Curtis(a,b)=∑(ai+bi)∑∣ai−bi∣

举例

  • 向量 a = [ 1 , 2 , 3 ] \mathbf{a} = [1, 2, 3] a=[1,2,3] 和 b = [ 4 , 5 , 6 ] \mathbf{b} = [4, 5, 6] b=[4,5,6]
  • Bray-Curtis 不相似度

Bray-Curtis ( a , b ) = ∣ 1 − 4 ∣ + ∣ 2 − 5 ∣ + ∣ 3 − 6 ∣ 1 + 4 + 2 + 5 + 3 + 6 = 3 + 3 + 3 21 = 0.43 \text{Bray-Curtis}(\mathbf{a}, \mathbf{b}) = \frac{|1-4| + |2-5| + |3-6|}{1+4 + 2+5 + 3+6} = \frac{3 + 3 + 3}{21} = 0.43 Bray-Curtis(a,b)=1+4+2+5+3+6∣1−4∣+∣2−5∣+∣3−6∣=213+3+3=0.43

应用:

  • DNA分析
  • 拼字检查
  • 语音辩识
  • 抄袭侦测

概念

范数

  • L1范数就是曼哈顿距离
  • L2范数也称为欧式距离

闵氏距离

(欧几里得距离 曼哈顿距离 切比雪夫距离)
p ( A , B ) = ( ∑ i = 1 n ∣ a i − b i ∣ P ) 1 p p(A,B)=(\sum_{i=1}^n |a_i-b_i|^P)^{\frac{1}{p}} p(A,B)=(i=1∑n∣ai−bi∣P)p1

p=1时为曼哈顿距离

p=2时为欧几里得距离
p → + ∞ p\to +\infty p→+∞切比雪夫距离

欧氏距离VS.余弦距离

欧氏距离与余弦距离的差异-CSDN

欧氏距离是超球面上的直线距离,余弦距离是超球面上的球面距离

欧式距离

  • 数值受到维度的影响
  • 体现的是距离上的绝对差异(注重数值)
  • 在[0,无穷)之间,无判别准则
  • 复杂度 O ( l o g ) O(log) O(log)
  • 对于高维稀疏向量,距离值往往很大,无法很好反映相似度

余弦相似度

  • 在高维的情况下也依然保持低维完全相同时相似度为1等性质
  • 体现的是方向上的相对差异(注重维度,相对差异)
  • 在[0,1]之间,有准则
  • 复杂度 O ( n 2 ) O(n^2) O(n2)
  • 仅考虑词语之间的方向,而不受向量模长影响,能更好反映语义相似度

调整后(调整余弦相似度)

余弦相似度对数值的不敏感 导致了结果的误差,需要修正这种不合理性就出现了调整余弦相似度 ,即所有维度上的数值都减去一个均值

X和Y两个用户对两个内容的评分分别为(1,2)和(4,5)那么调整后为(-2,-1)和(1,2)

余弦相似度 vs 相关系数

皮尔逊系数就是cos计算之前两个向量都先进行中心化(centered)

中心化的意思是说, 对每个向量, 我先计算所有元素的平均值avg, 然后向量中每个维度的值都减去这个avg

观察皮尔逊系数的公式:分子部分:

  • 每个向量的每个数字要先减掉向量各个数字的平均值, 这就是在中心化.
  • 分母部分: 两个根号式子就是在做取模运算, 里面的所有的 r 也要减掉平均值, 其实也就是在做中心化.
相关推荐
浊酒南街4 分钟前
吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)2.7-2.8
人工智能·深度学习·神经网络
DuoRuaiMiFa39 分钟前
ChatGPT全新功能Canvas上线:开启智能编程与写作新篇章
人工智能·chatgpt
DisonTangor42 分钟前
Windows 11将新增基于AI的搜索、生成式填充和其它AI功能
人工智能
soso196844 分钟前
【AI自然语言处理应用】通过API调用通义晓蜜CCAI-对话分析AIO应用
人工智能·自然语言·ccai
网安-搬运工1 小时前
RAG再总结之如何使大模型更好使用外部数据:四个不同层级及查询-文档对齐策略
人工智能·自然语言处理·大模型·llm·大语言模型·ai大模型·rag
大模型八哥1 小时前
大模型扫盲系列——大模型实用技术介绍(上)
人工智能·程序人生·ai·大模型·llm·llama·ai大模型
被制作时长两年半的个人练习生1 小时前
【pytorch】权重为0的情况
人工智能·pytorch·深度学习
Elastic 中国社区官方博客1 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
说私域2 小时前
地理定位营销与开源AI智能名片O2O商城小程序的融合与发展
人工智能·小程序