大家好,今天看到小伍哥的一篇文章,分享给大家,做文本相似的一个基础方法。

一、 余弦相似概述

余弦相似性通过测量两个向量的夹角的余弦值来度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1。

从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为-1到1之间。

例如在信息检索中,每个词项被赋予不同的维度,而一个维度由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。另外,它通常用于文本挖掘中的文件比较,在数据挖掘领域中,会用到它来度量集群内部的凝聚力。

二、 余弦相似应用场景

原创文章检测:通过文本相似,可以检测公众号文章、论文等是否存在抄袭

垃圾邮件识别:如“诚聘淘宝兼职”、“诚聘打字员”、“文章代写”、“增值税发票”等这样的小广告满天飞,作为网站或者APP的风控,不可能简单的加几个关键字就能进行屏蔽的,一般常用的方法就是标注一部分典型的广告文本,与它相似度高的就进行屏蔽。

内容推荐系统:在腾讯新闻、微博、头条、知乎等,每一篇文章、帖子的下面都有一个推荐阅读,那就是根据一定算法计算出来的相似文章。

冗余新闻过滤:我们每天接触过量的信息,信息之间存在大量的重复,相似度可以帮我们删除这些重复内容,比如,大量相似新闻的过滤筛选。

可用于文本相似的方法非常多,比如基于字符的杰卡德相似、编辑距离相似、最长公共子串等,基于距离的相似也很多,比如汉明距离、欧几里得距离等。本文介绍的是余弦距离相似,比较简单,可以作为风控领域文本相似的入门。

废话不多说,先看一个案例,我们用三句话作为例子,我从自己的邮箱里面扒出来的垃圾邮件,具体步骤如下。

三、 计算文本余弦相似

第一步,分词。

A句子:有/发票/加/薇/45357

B句子:有/发票/加/微/45357

C句子:正规/ 增值税/ 发票

第二步,列出所有的词(所有词的长度作为向量长度)

有,发票,加,薇,微,45357,正规,增值税

第三步,计算词频

A句子:有 1,发票 1,加 1,薇 1,微 0,45357 1,正规 0,增值税 0

B句子:有 1,发票 1,加 1,薇 0,微 1,45357 1,正规 0,增值税 0

C句子:有 0,发票 1,加 0,薇 0,微 0,45357 0,正规 1,增值税 1

第四步,写出词频向量。

A句子:[1, 1, 1, 1, 0, 1, 0 ,0]

B句子:[1, 1, 1, 0, 1, 1, 0 ,0]

C句子:[0, 1, 0, 0, 0, 0, 1 ,1]

到这里,问题就变成了如何计算这两个向量的相似程度。我们可以把它们想象成空间中的两条线段,都是从原点(0, 0, ...)出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

以二维空间为例,上图的a和b是两个向量,我们要计算它们的夹角θ。根据初中知识,余弦定理告诉我们,可以用下面的公式求得:

假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:

数学家已经证明,余弦的这种计算方法对n维向量也成立,假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

使用这个公式,我们就可以得到,句子A与句子B的夹角的余弦。

下面我们用Python代码计算看看

import numpy as np
A = np.array([1, 1, 1, 1, 0, 1, 0 ,0])
B = np.array([1, 1, 1, 0, 1, 1, 0 ,0])
C = np.array([0, 1, 0, 0, 0, 0, 1 ,1])
#定义相似计算函数
def cos_simi(x,y):num = x.dot(y.T)denom = np.linalg.norm(x) * np.linalg.norm(y)return num / denom
cos_simi(A,B)
0.7999999999999998
cos_simi(A,C)
0.2581988897471611
cos_simi(B,C)
0.2581988897471611

[有/发票/加/薇/45357]  [有/发票/加/微/45357] 只有一个字的差异,相似度0.80

[有/发票/加/薇/45357]  [正规/ 增值税/ 发票] 只有一个词相同,相似度0.2581,结果符合我们的感知。到此,我们就学会了计算两个句子的相似度

···  END  ···

风控中的文本相似方法之余弦定理相关推荐

  1. 统计一行文本的单词个数_NLP中的文本表示方法

    先回顾下数据挖掘和计算机视觉任务.数据挖掘中给定n个样本,每个样本有m个特征,这样组成了n×m的样本矩阵,然后丢给计算机中建好的模型进行回归或分类任务.计算机视觉中我们把图片的像素看作特征,每张图片看 ...

  2. 如何在 Excel 中对齐或旋转单元格中的文本?

    欢迎观看 Microsoft Excel 教程,小编带大家学习 Microsoft Excel的使用技巧,了解如何在 Excel 中对齐或旋转单元格中的文本. 在 Excel 中,对齐或旋转单元格的文 ...

  3. web前端培训:CSS中单行文本溢出显示省略号的方法

    CSS中单行文本溢出显示省略号的方法你知道吗?在web前端技术学习中,这个问题其实是属于老生常谈了,因为css单行文本的应用是非常频繁的,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没 ...

  4. java读取pdf_Java 读取PDF中的文本和图片的方法

    本文将介绍通过Java程序来读取PDF文档中的文本和图片的方法.分别调用方法extractText()和extractImages()来读取. 使用工具:Free Spire.PDF for Java ...

  5. ​linux中使用文本工具截取ip 的几种方法

    linux中使用文本工具截取ip 的几种方法 1,使用awk工具 [root@mycentos data]# ifconfig ens33 ens33: flags=4163<UP,BROADC ...

  6. 获取Domain中Value Range值和描述文本的方法

    访问Domain中Value Range的方法 1.直接访问表(dd07l--值和dd07T--描述文本) select * from dd07l where domname = 'domname' ...

  7. python提取列表中文本_python提取图像的名字*.jpg到txt文本的方法

    如下所示: # -*- coding:utf-8 -*- import sys sys.path.append('E:\\Anaconda\\libs') import os #os:操作系统相关的信 ...

  8. python自动翻译pdf_python实现从pdf文件中提取文本,并自动翻译的方法

    针对Python 3.5.2 测试 首先安装两个包: $ pip install googletrans $ pip install pdfminer3k googletrans会提供一个命令tran ...

  9. python用来自动修改pdf_python实现从pdf文件中提取文本,并自动翻译的方法

    针对Python 3.5.2 测试 首先安装两个包: $ pip install googletrans $ pip install pdfminer3k googletrans会提供一个命令tran ...

最新文章

  1. gradle平级项目引用
  2. Android .classpath文件的作用
  3. python处理excel奖金_60万行的Excel数据,Python轻松处理
  4. VTK:vtkArrayCalculator用法实战
  5. 大数据:Parquet文件存储格式
  6. cpu频率_新版win10修复CPU频率显示不正确的bug
  7. OpenCV中的函数waitKey()函数简介
  8. 隔离存取空间IsolatedStorage【WP7学习札记之十】
  9. 【TDS学习文档5】IBM Directory schema的管理3——attributes
  10. L1-012 计算指数
  11. 男友升级为老公的时候
  12. 【转】 测试人员的职业规划 --整理标注
  13. Ubuntu18.04操作系统sudo apt-get update报错
  14. 用计算机清点木材的数量,计算机在木材工业中的应用.doc
  15. 白杨SEO:推广与运营有什么区别和相同?推广如何转运营?
  16. [NDK]-搭建ndk-build环境
  17. 1. ARMv9-A Overview
  18. mongoose 更新保存数据的时候自动插入__v
  19. 第15课:ul,添加新闻信息列表ol,添加图书销售排行榜
  20. 计算机专业一级学报,【讨论】计算机类一级学报 - 信息科学 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. 【转】NAS 黑群晖 配置完成(不含硬盘),NAS能做什么?
  2. 拉格朗日插值法(图文详解)
  3. 拉伸流变仪VADER 1000-丹麦RHEO FILAMENT
  4. 运行wordcount程序
  5. 获取自然周;一年中总的周数,以及当前日期处于第几周
  6. Linux 如何设置密码复杂度?
  7. Deep Learning × ECG (5) :利用循环神经网络RNN对心律失常ECG数据进行分类
  8. SVN 代码到Git仓库 只需几步简单粗暴 代码和小乌龟都可以
  9. 利用朴素贝叶斯模型识别垃圾邮件
  10. wordpress mysql 5.7_CentOS7 运维 - 搭建WordPress论坛 | 超详细 | MySQL安装使用