自然语言处理(2)——文档相似度计算

文档相似度算法 Simhash 这篇文档简单介绍一下Simhash算法 一. Simhash 计算文档相似度的算法, 比如用在搜索引擎的爬虫系统中,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费。有 时候我们需要处理类似的文档,比如新闻,很多不同新闻网的新闻内容十分相近,标题略有相似。如此问题,便可以应用Simhash 文档相似度算法,查 看两篇文档相似程度,删去相似度高的web文档。 二. 阅读详情

上一篇讲了如何利用ICTCLAS分词工具进行分词,这一次讲一下文本相似度计算,从字面上理解就是比较两个文本之间的相似性。在文本分类和聚类中都会用到文本相似度的计算。

1.VSM

在讲文本相似度之前,先讲一下VSM即向量空间模型,该模型将文档映射到向量空间中。假设文档用表示文档集中D中的第i个文本,则可以表示为:


其中 可以有两种表达方式

(1)布尔类型表达,用0或1表示该词条是否在中出现,即该词出现则为1,否则为0;

(2)表示该词在中的权重,即,N代表文档中词的总数,表示词j在文档中出现的次数。

举个例子:

=小米 n 手机 n 4m 的 u 屏幕 n 太 d 给力 a 了 y , w 5m 英寸 q 的 u 高 a 色彩 n 饱和度 n 夏普 n wJ DI n 屏幕 n , w 1920x1080 n 全 d 高清 a 分辨率 n 。 w

=锤子 n 手机 n 终于 d 要 v 发货 v 了 y ! w 只 d 是 v 没 v 4Gn 的 u 机子 n , w 我 r 基本 a 不 d 要 v 了 y ! w 有 v 哪 r 位 q 同学 n 要 v 的 u , w 这 r 单子 n 给 p 你 r ! w 不 d 加收 v 任何 r 费用 n ! w

过滤掉停用词后,则抽取出词袋<小米,手机,屏幕,太,给力,高,色彩,饱和度,完善,全,高清,分辨率,锤子,终于,要,发货,4G,机子,基本,同学,单子,加收,费用>。用VSM模型表示该文本,采用第1种布尔类型表达方式



2.文本相似度计算

本文采用余弦相似度来度量文本的相似度,该公式如下:


表示两个向量的内积,即假设两个向量为n维向量,则


可以通过下式计算:

现在可以通过余弦相似度公式计算上述两个文档的相似度。


最后我们就需要确定阈值来进行判断两个文档是否相似。这在以后分类和聚类中来讨论阈值的选定。

如果只是想了解一下文本相似度那么到这里已经差不多了,如果是想实现的那么可以接着往下看。
3.文本相似度计算C++实现
(1)构建词袋
int foundWordBag(char *file,vector<string> &vc_word){
	ifstream ifs;
	string word;
	char mark;
	int flag=0;
	vector<string>::iterator vc_ite;

	ifs.open(file,ios::in);
	while(!ifs.eof()){
		ifs>>word>>mark;
		if(mark=='n'||mark=='a'||mark=='d'||mark=='v'){
			flag=0;
			for(vc_ite=vc_word.begin();vc_ite!=vc_word.end();vc_ite++){
				if(*vc_ite==word){
					flag=1;
					break;
				}
			}
			if(flag==0)
				vc_word.push_back(word);
		}
	}
	ifs.close();
	return 0;
}

第一个参数是所需要计算相似度的文本路径,其格式是在上一篇中讲的分词处理后的格式,第二个参数是一个string类型的vector容器,用于存放词袋的。

(2)构建VSM矩阵

int foundVSMMatrix(char *file,char *result,vector<string> vc_word){
	ifstream ifs;
	ofstream ofs;
	string words;
	char mark;
	vector<string>::iterator ite;
	int n=vc_word.size();
	float *matrix=new float[n];
	int i;

	ifs.open(file,ios::in);
	ofs.open(result,ios::ate);
	for(i=0;i<n;i++)
			matrix[i]=0;
	while(!ifs.eof()){
		ifs>>words>>mark;
		if(ifs.fail())
			break;
		if(mark!='l'){//文档结尾标记
			if(mark=='n'||mark=='a'||mark=='d'||mark=='v'){
				for(ite=vc_word.begin(),i=0;ite!=vc_word.end();ite++,i++)
					if(*ite==words){
						matrix[i]++;
					}
			}
		}else if(mark=='l'){
			for(i=0;i<n;i++)
				ofs<<matrix[i]<<"\t";
			ofs<<endl;
			for(i=0;i<n;i++)
				matrix[i]=0;
		}
	}
	ifs.close();
	ofs.close();
	return 0;
}

第一个参数为文档分词处理文件路径,第二个参数是VSM矩阵存放的文件路径,第3个参数为词袋。

(3)计算相似度

float countSimilarity(int v,float d1[],float d2[]){
	float sim;
	float m=0;
	float n1=0,n2=0;
	int i;

	for(i=0;i<v;i++){
		m=m+d1[i]*d2[i];
		n1=n1+d1[i]*d1[i];
		n2=n2+d2[i]*d2[i];
	}
	sim=m/(sqrt(n1)*sqrt(n2));
	return sim;
}
第一个参数是向量的维度,第二个和第三个参数是一个n维的向量,即用VSM模型表示的两个文档。返回值是两个文档的相似度。

文档相似度计算就介绍到这里,感兴趣的同学可以自己做一个模型自己测试一下。


东方财富网股票API逆向分析:手把手教你破解动态参数(2024最新版) 本文详细解析了2024年东方财富网股票API的动态参数生成机制,包括回调函数、身份验证和时效控制参数的逆向工程方法。通过实战代码演示,帮助开发者破解动态参数,实现高效稳定的股票数据爬取,适用于金融数据分析和量化交易场景。 阅读详情

相关推荐

人大金仓数据库Kingbase FlySync同步程序安装

Kingbase FlySync同步程序(以下简称 KFS)是面向异地容灾、数据集中共享的场景推出的具备在异构数据平台间实现实时、增量数据同步的工具类产品,主要采用了物理日志解析技术,帮助用户解决不同数据平台的数据间可实现任意方向实时移动流转的问题,并保证此过程中数据不丢失,状态可监控,流转数据量可统计。KFS 需要安装的主要组件有 2 个,分别是后端同步程序和管理控制平台,另外KFS的部署方式也有2种,为分离部署何集中部署•集中部署:KFS与数据库部署在同一机器上。

weixin_44312518的博客 1179

词频和逆文档频率算法 TF-IDF

词频和逆文档频率算法简单快速,结果处理符合实际情况,可以用在关键词提取,信息检索等很多地方。 如果我们有一篇很长的文章,如何获得关键词呢? 根据信息熵理论,一个词出现的次数越多,这个词包含的信息量就越小。可以说,TF-IDF算法就是基于这一理论的。 这篇文章我们称之为Document, 这篇文章属于一个 Collection(集合)。 TF, Term Frequency, 词频 IDF, Inverse Document Frequency, 逆文档频率 处理 将Document进行分词,去停留词。 计

Chatopera 3371

AD9361 FIR 滤波器设计

matlab 得到滤波器系数

weixin_44630490的博客 1万+

文本挖掘学习笔记(三):文档相似度、文档分类和情感分析

全文基于《射雕英雄传》语料库,下面是读入数据的一个基于Pandas的通用操作框架。 1.文档相似度 计算两个词相似度的原理:简单的说,就是将每个词的向量在空间上进行余弦运算,当cos越接近0时候,两者越相似。词袋模型不考虑词条之间的相关性,因此无法用于计算词条相似度。分布式表达会考虑词条的上下文关联,因此能够提取出词条上下文中的相关性信息,而词条之间的相似度就可以直接利用此类信息加以计算。.........

憬淮的博客 2626

学习Python,小白如何搭建Python环境?

学习Python,首先需要搭建好Python环境,主要分为【运行环境搭建】、【开发环境搭建】以及【Python环境配置】三个环节,接下来我将对Python环境搭建这三个部分进行介绍。

weixin_72923265的博客 9005

KMS服务器一键部署与激活实战指南

本文详细介绍了KMS服务器的一键部署与激活实战指南,包括快速入门、安装步骤、服务管理技巧及常见问题排查。特别针对Windows和Mac用户提供了Office激活的具体操作步骤,并分享了高级配置与优化方案,帮助IT管理员高效管理批量授权激活。

weixin_29305313的博客 461

文本相似度综述

本文目录文本相似度的定义文本相似度计算方法基于字符串的方法基于语料库的方法基于词袋VSMLSA、PLSALDA(需要进一步了解)基于神经网络基于搜索引擎基于世界知识基于本体基于网络知识其他方法句法分析混合方法 文本相似度的定义 其中, common(A,B) 是 A 和 B 的共性信息,description(A,B) 是描述 A 和 B 的全部信息, 公式(1)表达出相似度与文本共性成正相关。...

weixin_44735126的博客 5401

深度解析:如何通过NodeRed实现私有485协议VRF中央空调与HomeAssistant的无缝对接

本文详细介绍了如何利用NodeRed的灵活流程化编程,破解并处理VRF中央空调的私有485协议,实现与HomeAssistant的无缝本地化集成。文章从协议分析、硬件准备到NodeRed核心流程搭建、数据映射及双向通信控制,提供了一套完整的实战方案,帮助用户将非标设备深度融入智能家居生态,摆脱对厂家云服务的依赖。

weixin_29173777的博客 408

词嵌入(一):基于矩阵分解的静态词嵌入(VSM、TF-IDF、SVD)

从Distributional Hypothesis出发介绍Distributional Representation,对词-文共现矩阵使用TF-IDF赋值和SVD分解,并尽可能说明相应的原理和实现

qq_52441682的博客 1551

【银河麒麟服务器】银河麒麟V10 SP3高级服务器操作系统网卡配置完全指南:图形界面、Network、NetworkManager、IP 地址、路由与端口聚合详解

本文系统介绍了银河麒麟V10SP4服务器操作系统的网络配置方法,涵盖图形界面、NetworkManager、nmcli命令行等多种配置方式。重点讲解了IP地址设置、路由管理以及端口聚合(Bonding)的实现,包括传统配置文件、nmcli和nmtui三种Bonding配置方案。文章对比了NetworkManager与传统network服务的区别,并提供了常见网络问题的排查建议。通过多种配置方法的详细说明,帮助用户掌握银河麒麟服务器系统的网络管理技能,构建稳定可靠的网络环境。

YHLCCY的博客 5387

微信小程序|基于小程序实现人脸识别对比

此文主要通过小程序实现对比人脸相似度,并返回相似度分值,可以基于分值判断是否为同一人。人脸登录、用户认证等场景都可以用到。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 2万+

nomic-embed-text-v2-moe快速上手:3步完成文本相似度计算

本文介绍了如何在星图GPU平台自动化部署nomic-embed-text-v2-moe镜像,快速实现文本相似度计算。该多语言嵌入模型能将文本转换为向量,通过余弦相似度分析语义关联,广泛应用于文档检索、内容推荐等自然语言处理场景,提升信息匹配效率。

weixin_30923011的博客 130

高级数据库--作业及答案

中科大金培权老师的高级数据库课程作业及答案

一杯水果茶!足矣~ 1658

如何快速上手msmarco-distilroberta-base-v2:5步实现语义相似度计算

想要快速掌握语义相似度计算技术吗?msmarco-distilroberta-base-v2是一个强大的句子嵌入模型,能够将文本转换为768维的密集向量空间,专门用于语义搜索、文本聚类和相似度计算任务。这个基于DistilRoBERTa的模型经过MS MARCO数据集训练,在保持高性能的同时大幅减少了计算资源需求,是自然语言处理入门者和开发者的理想选择。😊 ## 📋 模型核心特点与优势 m

gitblog_00608的博客 796

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

手把手教你使用nomic-embed-text-v2-moe计算句子相似度(附Python代码)

本文介绍了如何在星图GPU平台上一键自动化部署nomic-embed-text-v2-moe镜像,实现高效的句子相似度计算。该模型能将文本转换为向量表示,通过余弦相似度比对,广泛应用于智能问答匹配、文档去重等自然语言处理场景,提升语义理解与文本处理效率。

weixin_35732273的博客 306

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

all-MiniLM-L6-v2快速上手:5分钟学会文本相似度计算与验证

本文介绍了如何在星图GPU平台上自动化部署all-MiniLM-L6-v2镜像,快速实现文本相似度计算与验证。该轻量级BERT模型支持高效语义表示,适用于问答匹配、文档检索等场景,5分钟即可完成部署并投入实际应用,显著提升文本处理效率。

weixin_42465332的博客 18

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Jina Embeddings v2 Base ES实战应用:10个文本相似度计算案例

Jina Embeddings v2 Base ES是一款支持8192序列长度的西班牙语/英语双语文本嵌入模型,能够将文本转换为高维向量,通过计算向量间的余弦相似度来衡量文本间的相似程度,广泛应用于自然语言处理领域的各种场景。 ## 一、模型简介与安装 ### 1.1 模型特点 Jina Embeddings v2 Base ES作为西班牙语-英语双语嵌入模型,采用mean pooling方

gitblog_00595的博客 344

终极指南:5分钟掌握Text2Vec文本向量化工具,轻松实现文本相似度计算

你是否曾经面对海量文本数据却不知如何快速提取特征?是否想要一个简单易用的工具来计算文本相似度?Text2Vec正是你需要的解决方案!这是一个强大的开源文本向量化工具,能够将文本(包括词、句子、段落)转化为向量矩阵,让你轻松实现文本表征和相似度计算。无论你是NLP新手还是经验丰富的开发者,Text2Vec都能为你提供简单、快速、免费的文本处理能力。 ## Text2Vec是什么?为什么你需要它?

gitblog_00825的博客 398

all-MiniLM-L6-v2实战指南:快速构建语义相似度计算系统

本文介绍了如何在星图GPU平台上自动化部署all-MiniLM-L6-v2镜像,快速构建语义相似度计算系统。该轻量级模型能够高效生成文本向量,并通过计算余弦相似度,广泛应用于智能问答匹配、文档去重等自然语言处理场景,显著提升语义理解任务的效率。

weixin_42181686的博客 433

zhouhui/stsb-roberta-base-v2高级应用:聚类分析与语义相似度实战

zhouhui/stsb-roberta-base-v2是一款基于RoBERTa架构的预训练模型,专门优化了语义相似度计算任务。它能够将文本转换为高维向量,通过比较向量间的距离来量化句子间的语义关联程度,为自然语言处理任务提供强大的语义理解能力。 ## 二、快速上手:环境准备与基础使用 ### 2.1 一键安装核心依赖 使用以下命令克隆项目并安装必要依赖: ```bash git clon

gitblog_01000的博客 864

从零开始:使用nomic-embed-text-v2-moe实现文本相似度分析的完整流程

本文介绍了如何在星图GPU平台上自动化部署nomic-embed-text-v2-moe镜像,实现高效的文本相似度分析。该平台简化了部署流程,用户可快速构建语义搜索、文档检索等应用,适用于多语言环境下的智能内容匹配与推荐场景。

weixin_42599558的博客 313

all-MiniLM-L6-v2新手入门:从零到一搭建语义相似度计算环境

本文介绍了如何在星图GPU平台上自动化部署all-MiniLM-L6-v2镜像,快速搭建语义相似度计算环境。该轻量级模型能够高效处理文本相似度分析,适用于智能客服问答匹配、文档去重等场景,帮助开发者轻松实现自然语言处理应用。

weixin_35750483的博客 29

零基础入门GTE中文文本嵌入:手把手教你计算文本相似度

本文介绍了如何在星图GPU平台上自动化部署GTE中文文本嵌入模型,并利用该模型计算文本语义相似度。通过该平台,用户可快速搭建服务,将中文文本转化为语义向量,进而应用于智能问答、文档去重等场景,轻松实现基于语义的文本匹配与检索。

weixin_31869917的博客 223

all-MiniLM-L6-v2效果展示:22.7MB小模型实现BERT级语义相似度计算

本文介绍了如何在星图GPU平台上自动化部署all-MiniLM-L6-v2镜像,实现高效的语义相似度计算。该轻量级模型仅22.7MB,却能提供接近BERT的语义理解能力,广泛应用于智能搜索、文档去重和问答系统等场景,帮助用户快速构建高效的NLP应用。

weixin_31938351的博客 86

一键部署BGE-Large-Zh:中文文本相似度计算实战

本文介绍了如何在星图GPU平台上自动化部署BGE-Large-Zh 语义向量化工具镜像,快速实现中文文本相似度计算。用户无需配置环境,即可通过可视化界面实时分析客服话术匹配、知识库检索等典型场景,显著提升RAG系统构建与验证效率。

weixin_35749786的博客 293

all-MiniLM-L6-v2入门必看:语义相似度任务从原理到Ollama调用全流程

本文介绍了如何在星图GPU平台上自动化部署all-MiniLM-L6-v2镜像,实现高效的语义相似度计算。该轻量级模型能将文本转换为向量,并通过计算向量间的余弦相似度,快速应用于智能搜索、文档检索和内容推荐等场景,提升文本处理效率。

weixin_42234168的博客 422
上一篇: 自然语言处理(1)——文本分词
下一篇: Java基础之IO总览
VioletCherry
博客等级 码龄14年 21粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值