如何用余弦定理来进行文本相似度的度量

在做文本分析的时候,经常会到说将文本转化为对应的向量,之后利用余弦定理来计算文本之间的相似度。但是最近在面试时,重复上面这句话,却被面试官问到:“什么是余弦定理?”当时就比较懵逼,于是把余弦定理求文本相似度的过程叙述了一遍:“将样本转化为对应的空间中的两个向量,然后计算两个向量余弦值,之后根据余弦值的大小来判断两个样本相似度有多少”,但是话音刚落就被面试官否定了,当时感觉自己说的是正确的,但是由于自己的确记不记得余弦定理的数学含义以及公式,所以也就没有和面试官辩论,当时想请教下面试官他理解的余弦定理是什么,却被一句“回去自己查”给堵死。。。之后对这件事一直耿耿于怀,不过又一想,也是,面试官问的是余弦定理,但是我说的是余弦定理在空间向量中如何计算相似度,好像是有点跑题。。。anyway,过去的已经过去了,只要有收获就行。于是回来查了一下余弦定理是怎么应用于文本相似的度量的,下面是整个过程,其实很简单,只不过当时把余弦定理的公式忘了,不然很容易就能解释通(数学知识全还给老师了)。。。

相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越大说明个体差异越大。

对于多个不同的文本或者短文本对话消息要来计算他们之间的相似度如何,一个好的做法就是将这些文本中词语,映射到向量空间,形成文本中文字和向量数据的映射关系,通过计算几个或者多个不同的向量的差异的大小,来计算文本的相似度。下面介绍一个详细成熟的向量空间余弦相似度方法计算相似度

向量空间余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫”余弦相似性”。
这里写图片描述

上图两个向量a,b的夹角很小可以说a向量和b向量有很高的的相似性,极端情况下,a和b向量完全重合。如下图:
这里写图片描述

如上图二:可以认为a和b向量是相等的,也即a,b向量代表的文本是完全相似的,或者说是相等的。如果a和b向量夹角较大,或者反方向。如下图
这里写图片描述

如上图三: 两个向量a,b的夹角很大可以说a向量和b向量有很底的的相似性,或者说a和b向量代表的文本基本不相似。那么是否可以用两个向量的夹角大小的函数值来计算个体的相似度呢?

向量空间余弦相似度理论就是基于上述来计算个体相似度的一种方法。下面做详细的推理过程分析。

想到余弦公式,最基本计算方法就是初中的最简单的计算公式,计算夹角θ的余弦定值公式为:
这里写图片描述
这里写图片描述

但是这个是只适用于直角三角形的,而在非直角三角形中,余弦定理的公式是
这里写图片描述

三角形中边a和b的夹角 的余弦计算公式为:
这里写图片描述

在向量表示的三角形中,假设a向量是(x1, y1),b向量是(x2, y2),那么可以将余弦定理改写成下面的形式:
这里写图片描述

向量a和向量b的夹角 的余弦计算如下
这里写图片描述

扩展,如果向量a和b不是二维而是n维,上述余弦的计算法仍然正确。假定a和b是两个n维向量,a是 ,b是 ,则a与b的夹角 的余弦等于:
这里写图片描述

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,夹角等于0,即两个向量相等,这就叫”余弦相似性”。

总结:

其实只要知道余弦定理余弦值的计算公式,然后转化为空间中的两个向量后,直接就能代入余弦定理来得到对应的余弦值,毕竟你知道两个向量的坐标,也就意味着你知道了余弦定理公式中三角形的三条边a、b、c的值。
参考:https://blog.csdn.net/u012160689/article/details/15341303

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456534.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mongodb 备份和恢复

为什么80%的码农都做不了架构师?>>> Mongodb 备份和恢复 mongodump -h host -u "username" -p "userpass" -d dbname -o backfilename tar -cvzf backfilename.tar backfilename tar -xvzf backfilename.tar mongorestore -h…

【linux】Ubuntu 18.04 设置桌面快捷启动方式

使用Ubuntu终端进行打开: 方法一(使用vim): sudo vi /usr/share/applications/pycharm.desktop 方法二(使用gedit): sudo gedit /usr/share/applications/pycharm.desktop 然后就会弹出一个…

在 Pycharm下使Python2和Python3共用Anaconda中的各种库/包的解决方法

参考:https://www.cnblogs.com/MoonST/p/7610460.html 目录:前言:1、同时下载两个版本的anaconda2、主版本conda的安装3、辅助版本Anaconda的安装 目录: 前言: 最近在看一些机器学习方面的教程,里面的一…

form表单元素设置只读

form表单元素设置只读 CreateTime--2017年5月5日11:42:41 Author:Marydon 1.设置文本框只读 <!-- 方法一&#xff1a;简写 --> <input type"text" name"" value"文本框" class"" readonly/> <!-- 方法二&#xff1a;…

MySQL安装和完全卸载-Linux ubantu18.04

MySQL数据库 千万不要安装5.7版本全是坑~&#xff01;&#xff01; 千万不要安装5.7版本全是坑~&#xff01;&#xff01; 千万不要安装5.7版本全是坑~&#xff01;&#xff01; ubantu18.04版本 正确道路应该是走安装MySQL 8.0&#xff1a; 第一步&#xff1a;更新文件…

机器学习中的数学基础相关知识总结

文章目录目录&#xff1a;前言&#xff1a;1、导数(曲线变化的快慢)、二阶导数&#xff08;曲线斜率变化的快慢特别是反映曲线的凸凹性&#xff09;的概念。2、常用的导数公式&#xff1a;3、微分和积分的数学含义&#xff1a;4、泰勒公式及含义5、梯度的概念及数学含义&#x…

Linux中python的开发环境配置(虚拟环境)

1 pyenv pyenv是一个Python版本管理工具&#xff0c;它能够进行全局的Python版本切换&#xff0c;也可以为单个项目提供对应的Python版本。使用pyenv以后&#xff0c;可以在服务器上安装多个不同的Python版本&#xff0c;也可以安装不同的Python实现。不同Python版本之间的切换…

第一个冲刺周期-第三天

一、先把数据库弄好&#xff0c;然后连接上&#xff0c;写一个测试用例&#xff0c;看看能不能调用数据&#xff0c; 增删改查是否正确&#xff0c;可以了的话&#xff0c;这一部分就结束了 二、 然后去写UI层&#xff0c;先写XML&#xff0c;把界面效果做出来 三、 然后写UI…

特征工程

上周参加了学校的数据挖掘竞赛&#xff0c;总的来说&#xff0c;在还需要人工干预的机器学习相关的任务中&#xff0c;主要解决两个问题&#xff1a;&#xff08;1&#xff09;如何将原始的数据处理成合格的数据输入&#xff08;2&#xff09;如何获得输入数据中的规律。第一个…

Linux下快速安装MySQL教程

转自&#xff1a;https://blog.csdn.net/sl1992/article/details/53634674 目录&#xff1a;前言&#xff1a;1.执行yum install mysql-server进行安装2.输入y进行确认3.安装成功4.查看MySQL是否启动5.启动MySQL6.查看是否运行7.设置开机启动MySQL8.创建MySQL管理员root9.登录M…

SpringMVC实战(注解)

1.前言 前面几篇介绍了SpringMVC中的控制器以及视图之间的映射方式,这篇来解说一下SpringMVC中的注解,通过注解能够非常方便的訪问到控制器中的某个方法. 2.配置文件配置 2.1 注解驱动,配置扫描器 首先须要在SpringMVC中的核心文件里指定注解驱动,详细例如以下: <?xml vers…

UIView类绘图出现错误提示

一:问题: Jan 16 15:49:53 CUBOT Band Ⅲ[2082] <Error>: CGContextSetLineWidth: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable. Jan 16 15:49:53 CUBOT Band Ⅲ[2082] <Error>: CGCo…

Hbase2.0版本安装教程

目录&#xff1a;前言&#xff1a;1. 上传2. 解压3. 重命名4. 修改环境变量5. 修改配置文件6. 把hadoop的hdfs-site.xml和core-site.xml 放到hbase/conf下7. 发送到其他机器8. 启动9. 查看总结&#xff1a; 目录&#xff1a; 前言&#xff1a; 最近由于工作需要又把HBase重装…

MySQL8.0版本和5.7通过Navicat远程连接

首先在数据库创建好连接的用户 进入mysql服务器终端&#xff1a; 命令窗口终端&#xff1a; mysql -u用户名 -p密码 sudo mysql -uroot -p 创建用户部分-- 使用mysql 数据库 USE mysql&#xff1b; -- 为mysql创建用户&#xff1a;root1 密码为&#xff1a;root1 …

HUE配置文件hue.ini 的zookeeper模块详解(图文详解)(分HA集群)

不多说&#xff0c;直接上干货&#xff01; 我的集群机器情况是 bigdatamaster&#xff08;192.168.80.10&#xff09;、bigdataslave1&#xff08;192.168.80.11&#xff09;和bigdataslave2&#xff08;192.168.80.12&#xff09; 然后&#xff0c;安装目录是在/home/hadoop/…

CF #366(div.2) C 模拟,思维

CF #366(div.2) C. Thor 题意&#xff1a;一个手机n个联系人&#xff0c;有q个操作。每次给出ty和ai&#xff0c;如ty1&#xff0c;表示收到ai的一条信息&#xff1b;如ty2&#xff0c;表示将ai发的信息都看掉&#xff1b;如ty3&#xff0c;表示将第1条到第ai条信息都看掉…

MySQL基本指令汇总

创建数据库&#xff1a; create database 数据库名字; 删除数据库: drop database 数据库名字; 查看数据库: show databases; 切换数据库: use databasename; select database(); Create table 表名&#xff08;列名 数据类型 [约束]&#xff0c;列名 数据类型 [约束]&a…

linux命令行在任意目录下启动任意的脚本的方法

目录&#xff1a;前言&#xff1a;1、直接在命令行中设置PATH2、在profile中设置PATH3、在当前用户的profile中设置PATH 目录&#xff1a; 前言&#xff1a; 这应该算是一个常识吧&#xff0c;但是对于许多像我们这样的新手来说&#xff0c;一旦你出点小差错&#xff0c;整个…

阿里云centos 安装和配置 DokuWiki

DokuWiki 是一个开源的 wiki 项目&#xff0c; 可方便进行知识和内容的管理和分享&#xff0c;不用安装数据库&#xff0c;内置权限管理&#xff0c;书写直观方便&#xff0c;有大量的插件支持。特别适用于企业内部的内容和知识管理&#xff0c;只允许内部员工编辑和查阅的场景…

python-爬虫

网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在FOAF社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟…