文本分析 | 词频与余弦相似度

这个系列打算以文本相似度为切入点,逐步介绍一些文本分析的干货,包括分词、词频、词频向量、文本匹配等等。

上一期,我们介绍了文本相似度的概念,通过计算两段文本的相似度,我们可以:

  • 对垃圾文本(比如小广告)进行批量屏蔽;
  • 对大量重复信息(比如新闻)进行删减;
  • 对感兴趣的相似文章进行推荐,等等。

那么如何计算两段文本之间的相似程度?上一篇我们简单介绍了夹角余弦这个算法,其思想是:

  • 将两段文本变成两个可爱的小向量;
  • 计算这两个向量的夹角余弦cos(θ):
    • 夹角余弦为1,也即夹角为0°,两个小向量无缝合体,则相似度100%
    • 夹角余弦为0,也即夹角为180°,小向量可怜的两两不相见,则相似度为0%

回顾点击这里:文本分析 | 余弦相似度思想

本文会具体介绍如何计算文本的夹角余弦相似度,包括两部分:

  • 向量的夹角余弦如何计算
  • 如何构造文本向量:词频与词频向量

1. 向量的夹角余弦如何计算

在扯到文本之前,这个要先介绍一下。

余弦定理告诉我们:

不记得的翻看书本......

然而对于两个向量a、b的夹角余弦呢?

它的公式为:

分子就是2个向量的内积,分母是两个向量的模长乘积。


用两个向量的坐标即可计算出来,简单了解一下这个推导:


这是两个二维向量,如果是两个n维向量的夹角余弦相似度,只要记得,分子依然是向量内积,分母是两个向量模长乘积。

知道了向量的夹角余弦相似度计算方法,现在只要想办法将文本变成向量就可以了。

2. 词频与词频向量

文本是由词组成的,我们一般通过计算词频来构造文本向量——词频向量。

比如有一句话:

我是数说君,我爱你们,你们爱我吗?

这段文本是由几个词组成的:

我/ 是/ 数说君 我/ 爱/ 你们 你们/ 爱/ 我/ 吗

其中“我”出现了3次,“是”出现一次......依次计算,我们就可以构造如下词频向量:

我3, 是1, 数说君1, 爱2, 你们2, 吗1 → (3,1,1,2,2,1)

这就是一个6维向量了。

需要注意的是,如果这时候有另一段文本需要跟它比较,比如就是:

我是数说君,我爱你们,你们爱我吧?

这时候我们应该这样分词:

我3, 是1, 数说君1, 爱2, 你们2, 吗0, 吧1 → (3,1,1,2,2,0,1)

这里“吗”这个维度也需要加上,相应的,别忘了第一句话中也要加上“吧”这个维度:

我3, 是1, 数说君1, 爱2, 你们2, 吗1, 吧0 → (3,1,1,2,2,1,0)

这就是两个7维向量了,现在可以将这两个文本向量进行夹角余弦的相似度比较,带入上面的公式:

两个向量内积=3*3+1+1+2*2+2*2=19

两个向量模长乘积=sqrt(9+1+1+4+4+1)*sqrt(9+1+1+4+4+1)=20

两个向量夹角余弦相似度=19/20=95%

所以这两段文本的相似度为95%。

这里有2个问题值得提一下:

(1)当两个词频向量进行比较的时候,维度会扩大。

比如刚刚例子中,彼此没有出现的“吗”、“吧”两个维度会加进来,保证比较的两段文本维度统一。那么问题来了,如果两段很长的文本进行比较(比如上万字的文章),岂不是维度要扩增很多倍?而且矩阵会非常稀疏,就是很多取值都是0,计算开销大且效率低,怎么办?

因此需要寻求一种有效的特征降维方法,能够在不损伤核心信息的情况下降低向量空间的维数,比如TF-IDF算法。这就是后面会介绍的。

(2)英文文本的比较

与中文不同的是,英文不需要分词,因为英文天然就是由一个一个词组组成的。

I Love Shushuojun → I/ Love/ Shushuojun

原文发布于微信公众号 - 数说工作室(shushuojun)

原文发表时间:2017-02-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏null的专栏

论文阅读——利用Binary Hash Codes的深度图像检索

这篇文章是阅读《Deep Learning of Binary Hash Codes for Fast Image Retrieval》后的总结,该文章提出了...

43840
来自专栏xingoo, 一个梦想做发明家的程序员

吴恩达机器学习笔记 —— 15 降维

降维的第一个作用就是进行数据的压缩,解决磁盘和计算的问题。比如把二维数据降维到一维:

10700
来自专栏Petrichor的专栏

深度学习: 学习率 (learning rate)

ωn←ωn−η∂L∂ωnωn←ωn−η∂L∂ωn\omega^{n} \leftarrow \omega^{n} - \eta \frac{\partial ...

1.4K20
来自专栏码洞

人工稚能之sklearn数据降维

机器学习模型拟合的输入数据往往是多维数据,这个维度可能会非常庞大。比如统计一篇文章中的单词频率,就可以把文章看成单词的向量。而单词的数量又是非常庞大,每个单词都...

5510
来自专栏机器之心

教程 | 从基本概念到实现,全卷积网络实现更简洁的图像识别

选自 Medium 机器之心编译 参与:蒋思源、晏奇、黄小天 众所周知,图像就是像素值的集合,而这个观点可以帮助计算机科学家和研究者们构建一个和人类大脑相似并能...

371110
来自专栏YoungGy

词向量综述

词向量综述 one-hot by neighbor 基于全文档的词向量 基于window的词向量 SVD Skip-Gram 结构 输入输出 学习算法 优化角度...

48760
来自专栏机器学习算法与理论

基于LDA KNN的人脸识别详解

人脸识别(LDA+KNN方法): dataTrain=creatData(TrainDatabasePath); dataTest=creatData(Tes...

81540
来自专栏媒矿工厂

HDR关键技术—色域映射

HDR系列前几期为大家介绍了HDR的色调映射技术(Tone Mapping)。其中提到:在色调映射环节,为了便于操作,且不使图像颜色产生巨大失真,色调映射算法通...

53030
来自专栏AlgorithmDog的专栏

Metropolis-Hastings 和 Gibbs sampling

在科学研究中,如何生成服从某个概率分布的样本是一个重要的问题。 如果样本维度很低,只有一两维,我们可以用反切法、拒绝采样和重要性采样等方法。 但是对...

27390
来自专栏机器学习算法原理与实践

用scikit-learn进行LDA降维

    在线性判别分析LDA原理总结中,我们对LDA降维的原理做了总结,这里我们就对scikit-learn中LDA的降维使用做一个总结。

33120

扫码关注云+社区

领取腾讯云代金券