使用余弦相似度算法计算文本相似度
在求相似度的时候经常会有以下一些方法,
1.基于词向量
- 余弦相似度
- 曼哈顿距离
- 欧几里得距离
- 明式距离(是前两种距离测度的推广),在极限情况下的距离是切比雪夫距离
2.基于字符的
- 编辑距离
- simhash
- 共有字符数(有点类似 onehot 编码 ,直接统计两个文本的共有字符数,最 naive 的相似度算法了)
3.基于概率统计的
- 杰卡德相似系数
4.基于词嵌入模型的
- word2vec/doc2vec
在求文本相似度的时候经常会使用余弦相似度来求,下面来记录一下余弦相似度的原理。
余弦相似度
余弦相似度量:计算个体间的相似度。
相似度越小,距离越大。相似度越大,距离越小。
假设有3个物品,item1,item2和item3,用向量表示分别为:
item1[1,1,0,0,1],
item2[0,0,1,2,1],
item3[0,0,1,2,0],
即五维空间中的3个点。用欧式距离公式计算item1、itme2之间的距离,以及item2和item3之间的距离,分别是:
item1-item2=
item2-item3=
用余弦函数计算item1和item2夹角间的余弦值为:
用余弦函数计算item2和item3夹角间的余弦值为:
由此可得出item1和item2相似度小,两个之间的距离大(距离为7),item2和itme3相似度大,两者之间的距离小(距离为1)。
余弦相似度算法: 一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
余弦相似度量: 计算个体间的相似度。
相似度越小,距离越大。相似度越大,距离越小。
余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
下面我们介绍使用余弦相似度计算两段文本的相似度。思路:1、分词;2、列出所有词;3、分词编码;4、词频向量化;5、套用余弦函数计量两个句子的相似度。
句子A:这只皮靴号码大了。那只号码合适。
句子B:这只皮靴号码不小,那只更合适。
1、分词:
使用结巴分词对上面两个句子分词后,分别得到两个列表:
listA=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘大‘, ‘了‘, ‘那‘, ‘只‘, ‘号码‘, ‘合适‘]
listB=[‘这‘, ‘只‘, ‘皮靴‘, ‘号码‘, ‘不小‘, ‘那‘, ‘只‘, ‘更合‘, ‘合适‘]
2、列出所有词,将listA和listB放在一个set中,得到:
set={‘不小’, ‘了’, ‘合适’, ‘那’, ‘只’, ‘皮靴’, ‘更合’, ‘号码’, ‘这’, ‘大’}
将上述set转换为dict,key为set中的词,value为set中词出现的位置,即‘这’:1这样的形式。
dict1={‘不小’: 0, ‘了’: 1, ‘合适’: 2, ‘那’: 3, ‘只’: 4, ‘皮靴’: 5, ‘更合’: 6, ‘号码’: 7, ‘这’: 8, ‘大’: 9},可以看出“不小”这个词在set中排第1,下标为0。
3、将listA和listB进行编码,将每个字转换为出现在set中的位置,转换后为:
listAcode=[8, 4, 5, 7, 9, 1, 3, 4, 7, 2]
listBcode=[8, 4, 5, 7, 0, 3, 4, 6, 2]
我们来分析listAcode,结合dict1,可以看到8对应的字是“这”,4对应的字是“只”,9对应的字是“大”,就是句子A和句子B转换为用数字来表示。
4、对listAcode和listBcode进行oneHot编码,就是计算每个分词出现的次数。oneHot编号后得到的结果如下:
listAcodeOneHot = [0, 1, 1, 1, 2, 1, 0, 2, 1, 1]
listBcodeOneHot = [1, 0, 1, 1, 2, 1, 1, 1, 1, 0]
下图总结了句子从分词,列出所有词,对分词进行编码,计算词频的过程
5、得出两个句子的词频向量之后,就变成了计算两个向量之间夹角的余弦值,值越大相似度越高。
listAcodeOneHot = [0, 1, 1, 1, 2, 1, 0, 2, 1, 1]
listBcodeOneHot = [1, 0, 1, 1, 2, 1, 1, 1, 1, 0]
根据余弦相似度,句子A和句子B相似度很高。
使用余弦相似度算法计算文本相似度相关推荐
- 使用余弦相似度算法计算文本相似度-数学
20211201 也就是效果 皮尔逊>余弦>欧式 余弦相似度的局限 皮尔逊的优势,相当于是改进版余弦相似度 欧式与 余弦 欧式侧重于直线距离 归一化之后的欧式和余弦的效果也不同 比如 0, ...
- python中文相似度_基于TF-IDF、余弦相似度算法实现文本相似度算法的Python应用
基于TF-IDF算法.余弦相似度算法实现相似文本推荐--文本相似度算法,主要应用于文本聚类.相似文本推荐等场景. 设计说明 使用jieba切词,设置自定义字典 使用TF-IDF算法,找出文章的关键词: ...
- DSSM算法-计算文本相似度
转载请注明出处: http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下quer ...
- 使用余弦相似度计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 2.向量余弦计算文本相似度 2.1 原理 余弦相似 ...
- sklearn tfidf求余弦相似度_【基础算法 】文本相似度计算
在自然语言处理中,文本相似度是一种老生常谈而又应用广泛的基础算法模块,可用于地址标准化中计算与标准地址库中最相似的地址,也可用于问答系统中计算与用户输入问题最相近的问题及其答案,还可用于搜索中计算与输 ...
- 【基础算法 】文本相似度计算
在自然语言处理中,文本相似度是一种老生常谈而又应用广泛的基础算法模块,可用于地址标准化中计算与标准地址库中最相似的地址,也可用于问答系统中计算与用户输入问题最相近的问题及其答案,还可用于搜索中计算与输 ...
- 使用simhash计算文本相似度
1. 使用simhash计算文本相似度 2. 使用余弦相似度计算文本相似度 3. 使用编辑距离计算文本相似度 4. jaccard系数计算文本相似度 文本相似度计算常用于网页去重以及NLP里文本分析等 ...
- Python协同过滤推荐算法(Collaborative Filtering)2.相似度的计算,相似度计算方法
1.数据分类 实物值(物品或者其他的评分) 布尔值(是或者否的行为),1,0这种布尔值,表肯定或者否定的行为 2.余弦相似度 度量的是两个向量之间的夹角,用夹角的余弦值来度量相似的情况 两个向量的夹角 ...
- 使用gensim计算文本相似度
使用gensim计算文本相似度 计算文本相似度步骤逻辑 1.将文本数据,通过jieba分词进行处理,形成一个二维数组 2.将二维数组生成词典 3.将二维数组通过doc2bow稀疏向量,形成语料库 4. ...
最新文章
- (转载)一种根据纠偏数据对火星坐标进行完美拟合的方法
- tomcat 5.5 jdbc myeclipse8.0
- Android Zygote分析
- Salesforce 数据备份和恢复小知识
- yarn container写token目录选择bug
- WSDM 2022 | 基于元学习的多场景多任务商家建模
- 前端学习(2244):计算器显示问题
- 数据仓库之电商数仓-- 1、用户行为数据采集
- unixodbc mysql安装_ubuntu12下安装unixODBC(mysql)
- Typora Mermaid 使用指南
- JavaScript对象创建对象的四种方式
- sql in语句优化_优化SQL语句的一般步骤
- python验证软件签名
- Activiti6教程一
- RealSense D435i深度相机介绍
- 解耦电容选型定性与定量分析
- 视频切割:python将视频文件按秒存储成图片
- nginx lua读redis
- Go-Micro微服务框架使用
- 喜讯:我国首个火星探测器萤火一号顺利升空
热门文章
- Freetype的使用
- python中关于np.array初始化不同维度矩阵的有趣现象
- 停车场设计软件测试,停车场车位视频检测系统设计
- 论文解读:K-BERT:Enabling Language Representation with Knowledge Graph(AAAI-20)
- PHP对接国际验证码接口DEMO示例
- 公司新来了个00后卷王,一副毛头小子的样儿,哪想到...
- 机器学习系列(二)——回归模型
- MVC5_Identity登录原理 - Claims-based认证和OWIN
- JasperReport:几个莫名其妙的问题的解决
- MongoDB的基础指令和练习笔记