计算公式
- \(\cos (\theta) = \frac{\vec{A} \cdot \vec{B}}{||\vec{A}|| \times ||\vec{B}||}\)
- 其中 \(\theta\) 是 余弦相似度.
- 当\(\cos (\theta)\)越靠近1,则表示向量A和向量B在向量空间中的夹角越靠近0,意味着它们之间更相似。
- 夹角等于0,则表示这俩向量相等。
例子
-
假如要计算两段文本之间的相似性,总共可以分成以下五个步骤:
- 分词
- 作出语料库
- 计算词频
- 将原句转为词频向量
- 计算余弦相似性
-
A:今天天气真好,明天天气也一样。
-
B:今天天气不差,明天也一样。
- 分词
今天/天气/真好,明天/天气/也/一样。
今天/天气/不差,明天/也/一样。 - 语料库
今天,天气,真好,明天,也,一样,不差 - 计算词频
A:今天1,天气2,真好1,明天1,也1,一样1,不差0
B:今天1,天气1,真好0,明天1,也1,一样1,不差1 - 词频向量
\(\vec{A} = \begin{bmatrix} 1\\2\\1\\1\\1\\1\\0 \end{bmatrix}\)\(\vec{B} = \begin{bmatrix} 1\\1\\0\\1\\1\\1\\1 \end{bmatrix}\) - 余弦相似性计算
套入上述公式中可得\(\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\)
- 最终结果为0.816更靠近1,于是通过余弦相似度计算的结果表示这两个句子之间是颇为相似的。