计算公式
- cos ( θ ) = A ⃗ ⋅ B ⃗ ∣ ∣ A ⃗ ∣ ∣ × ∣ ∣ B ⃗ ∣ ∣ \cos (\theta) = \frac{\vec{A} \cdot \vec{B}}{||\vec{A}|| \times ||\vec{B}||} cos(θ)=∣∣A∣∣×∣∣B∣∣A⋅B
- 其中 θ \theta θ 是 余弦相似度.
- 当 cos ( θ ) \cos (\theta) cos(θ)越靠近1,则表示向量A和向量B在向量空间中的夹角越靠近0,意味着它们之间更相似。
- 夹角等于0,则表示这俩向量相等。
例子
-
假如要计算两段文本之间的相似性,总共可以分成以下五个步骤:
- 分词
- 作出语料库
- 计算词频
- 将原句转为词频向量
- 计算余弦相似性
-
A:今天天气真好,明天天气也一样。
-
B:今天天气不差,明天也一样。
- 分词
今天/天气/真好,明天/天气/也/一样。
今天/天气/不差,明天/也/一样。 - 语料库
今天,天气,真好,明天,也,一样,不差 - 计算词频
A:今天1,天气2,真好1,明天1,也1,一样1,不差0
B:今天1,天气1,真好0,明天1,也1,一样1,不差1 - 词频向量
A ⃗ = [ 1 2 1 1 1 1 0 ] \vec{A} = \begin{bmatrix} 1\\2\\1\\1\\1\\1\\0 \end{bmatrix} A= 1211110 B ⃗ = [ 1 1 0 1 1 1 1 ] \vec{B} = \begin{bmatrix} 1\\1\\0\\1\\1\\1\\1 \end{bmatrix} B= 1101111 - 余弦相似性计算
套入上述公式中可得 cos ( θ ) = ∑ i n ( A i × B i ) ∑ i n A i 2 × ∑ i n B i 2 = 1 × 1 + 2 × 1 + 1 × 0 + 1 × 1 + 1 × 1 + 1 × 1 + 0 × 1 1 2 + 2 2 + 1 2 + 1 2 + 1 2 + 1 2 + 0 2 × 1 2 + 1 2 + 0 2 + 1 2 + 1 2 + 1 2 + 1 2 = 6 3 × 6 ≈ 0.816 \cos(\theta) = \frac{\sum_i^n(A_i \times B_i)}{\sqrt{\sum_i^nA_i^2}\times \sqrt{\sum_i^nB_i^2}} = \frac{1\times1 + 2\times1 + 1\times0 + 1\times1 + 1\times1 + 1\times1 + 0\times1}{\sqrt{1^2 + 2^2 + 1^2 + 1^2 + 1^2 + 1^2 + 0^2} \times \sqrt{1^2 + 1^2 + 0^2 + 1^2 + 1^2 + 1^2 + 1^2}} = \frac{6}{3 \times \sqrt{6}} \approx 0.816 cos(θ)=∑inAi2×∑inBi2∑in(Ai×Bi)=12+22+12+12+12+12+02×12+12+02+12+12+12+121×1+2×1+1×0+1×1+1×1+1×1+0×1=3×66≈0.816
- 最终结果为0.816更靠近1,于是通过余弦相似度计算的结果表示这两个句子之间是颇为相似的。