前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >角度和文本相似度原理

角度和文本相似度原理

作者头像
老齐
发布2021-12-27 14:32:49
6830
发布2021-12-27 14:32:49
举报
文章被收录于专栏:老齐教室

1.5.4 角度

在欧几里得空间中定义了距离和向量长度(范数)之后,就可以继续定义角度,以平面几何空间为例,如图1-5-9所示,设

\pmb u = \begin{bmatrix}a\\b\end{bmatrix}, \pmb v = \begin{bmatrix}c\\d\end{bmatrix}

两个向量,并且围成了三角形

\Delta OAB

,其中角度

\theta

即为向量

\pmb u

和向量

\pmb v

之间的夹角。

图 1-5-9

对于

\Delta ABC

,依据边角关系中的余弦定理,得:

AB^2 = OA^2 + OB^2 - 2(OA)(OB)\cos\theta

其中,

AB, OA, OB

分别代表三角形的三条边的长度,

OA, OB

又分别是向量

\pmb u, \pmb v

的长度(即范数)。所以:

\cos\theta = \frac {OA^2+OB^2-AB^2}{2(OA)(OB)}

又因为:

\begin{split}OA^2 + OB^2 - AB^2 &= \begin{Vmatrix} \pmb u \end{Vmatrix}^2 + \begin{Vmatrix} \pmb v \end{Vmatrix}^2 - \begin{Vmatrix} \pmb {v - u} \end{Vmatrix}^2 \\ &= (a^2 + b^2) + (c^2 + d^2) - [(c-a)^2 + (d-b)^2] \\&= 2ac + 2bd \\&= 2\pmb u \cdot \pmb v \end{split}
2(OA)(OB)=2\begin{Vmatrix} \pmb u\end{Vmatrix}\begin{Vmatrix} \pmb v\end{Vmatrix}

则:

\cos \theta = \frac {\pmb u \cdot \pmb v}{\begin{Vmatrix}\pmb u\end{Vmatrix}\begin{Vmatrix}\pmb v\end{Vmatrix}}

以上我们在平面几何空间中推导出了两个向量的夹角余弦,此结论也适用于所有的欧几里得空间。

★设

\pmb u, \pmb v

是欧几里得空间中的两个非零向量,它们的夹角余弦为:

\cos \theta = \frac {\pmb u \cdot \pmb v}{\begin{Vmatrix}\pmb u\end{Vmatrix}\begin{Vmatrix}\pmb v\end{Vmatrix}},\quad (0 \le \theta \le \pi)

如果把上述结论向内积空间推广,则角度的定义是:

\cos\theta = \frac{\langle \pmb u, \pmb v \rangle}{\begin{Vmatrix}\pmb u\end{Vmatrix}\begin{Vmatrix}\pmb v\end{Vmatrix}}

结合图1-5-9和上述对角度定义,不难发现,如果

\theta

角度越小,两个向量越趋于一致(包括大小和方向)。可以考虑一种极端条件,当

\theta = 0

时,

\cos\theta = 1

,即

\langle\pmb u, \pmb v \rangle = \begin{Vmatrix}\pmb u \end{Vmatrix}\begin{Vmatrix}\pmb v \end{Vmatrix}

,由此可得

\pmb u = \pmb v

。如果用距离来衡量,比如欧几里得距离也是

0

\theta=\frac{\pi}{2}

时,

\cos\theta=0

,即

\langle\pmb u, \pmb v\rangle=0

,在欧几里得空间中,即为

\pmb u \cdot \pmb v = 0

,以几何的方式表现就是两个向量相互垂直,也称正交(参阅3.4.1节)。例如我们已经熟知的三维几何空间的一个标准基

\begin{Bmatrix}\begin{bmatrix}1\\0\\0\end{bmatrix}, \begin{bmatrix}0\\1\\0\end{bmatrix}, \begin{bmatrix}0\\0\\1\end{bmatrix}\end{Bmatrix}

中的向量就是两两互相垂直。显然,这样的向量是线性无关的。

前面用scipy.spatial.distance中的函数cityblock()计算了向量间的曼哈顿距离,此模块中也有与余弦值计算相关的函数cosine(),但是注意:所计算的并不是两个向量夹角的余弦值

\cos\theta

,而是

1-\cos\theta

代码语言:javascript
复制
import numpy as np
from scipy.spatial.distance import cosine

a = np.array([1, 0, 0])
b = np.array([0, 1, 0])
cosine(a, b)

# 输出
1.0

上述代码中的两个数组所表示的向量是正交的,根据两个向量夹角余弦的定义,它们的夹角余弦值应该是

0

,但这里的实际输出的结果是

1

余弦反应的是两个向量的夹角大小,在前面的讨论中也可以看出来,夹角越小,两个向量越趋同,因此可以用夹角的余弦来度量两个向量之间的相似程度(称为“余弦相似度”)。例如一种特殊情况,当两个向量相同的时候,

\theta=0

\cos\theta=1

。夹角越大,两个向量的相似度越小。1.5.1节中探讨的向量间的距离与此异曲同工,基于距离分类,就是将更相似的向量归为一个类别。距离、余弦是以不同方式度量向量的关系。

余弦相似度的最典型应用就是判断文本内容的相似程度,这是自然语言处理(natural language processing,NLP)中的一项计算。例如有如下两条文本:

  • 文本1:数学是基础,基础很重要
  • 文本2:数学很重要,要打牢基础

按照人的理解,以上两条文本虽然文字不完全相同,但表达的意思是一样的。那么,用余弦相似度来衡量,也会得到此结论吗?

为了计算余弦相似度,先根据1.1.1节所述,将两个文本向量化,如表1-5-1所示。

表1-5-1

数学

基础

重要

打牢

文本1

1

1

2

1

1

0

0

文本2

2

0

1

1

1

1

1

从而可以用如下两个向量表示两条文本:

\pmb d_1 = \begin{bmatrix}1\\1\\2\\1\\1\\0\\0\end{bmatrix}, \quad \pmb d_2 = \begin{bmatrix}2\\0\\1\\1\\1\\1\\1\end{bmatrix}

计算这两个向量夹角的余弦值:

\cos\theta = 0.7

,即上述两个文本的相似性为0.7。当然,在真实的NLP项目中,一般要计算1.1.1节中提到的tf-idf的值。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老齐教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档