热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

词向量计算文本相似度,通过词向量求文本相似度

基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp


基于单词向量计算文本相似度1 .测试数据:链接: https://pan.Baidu.com/s/1 fxjjcujamawtfsutg2c BWA


抽屉代码: f4vx


2 .实验代码: importmathimportosimportpandasaspdimportnumpyasnp #两个向量的余弦相似度defcos_Similarity(vec_dim, 计算vector_1,输入vector_2) : #个向量#两个向量的点积x=0I=0#vec_dim=len(vector_1) # 向量维度whileIvec_dim3360x=xvector_1[ 2两个向量的模I=0sq _1=0sq _2=0while ivec _ dim 3360 sq _1=sq _1vevector ] vector_2[I]I=I1result=float(x )/(math.sqrt ) sq_1) math.sqrrt 3360withopen(path,encoding='utf8 ' ) ] row=data[0].split (()0) #embedding的行数col=data[0].split ) ) (1) #embedding的列数dim=int ) ) col (I=1 . split (' ) word=item [0] embedding=item [ 1: ] embedding=list (map ) ) )。 embedding ) (item_list.append ) word ) embeddings.append ) embedding ) I=1#embeddings.append ) item_list ) dimdeffind_each(path ) :path_list=[] files_dir=OS.listdir ) path ) forfileinfiles _ dir 3360 file _ patth file ) ) path_list.append(file_path ) path path_2) : #单输入vec _ dim _1=get _ embedding s (path _1) embeddings_2, vec _ dim _2=get _ embedding s (path _2) #成语向量相似度矩阵ifvec _ dim _1==vec _ dim _ 23360 matrix=[ ] forem _1ineer forem_2inem beddings _ 23360 cos _ sim=cos _ similarity (vec _ dim _ 1,em_1,em _2) score.aaad 输入错误:打印(input error : thedimensionsaredifferent )返回矩阵#卷积层,卷积核敏感区为2*2,参数为、 输入词向量矩阵defcnn_folding(dict_vec ) :c=len ) dict_vec[1]#获取输入矩阵的水平长度r=len ) dict_vec )获取输入矩阵的垂直长度result=

python构造的二维列表 for i in range(r-1): # 通过循环实现整个矩阵的运算 for j in range(c-1): re = (dict_vec[i][j] + dict_vec[i][j+1] + dict_vec[i+1][j] + dict_vec[i+1][j+1])/4 # 实现卷积层的运算,这里卷积核默认是[[1,1],[1,1]] result[i][j] = re return result# 池化层,采用max-pooling方式实现池化,参数表示输入矩阵def cnn_pooling(dict_pooling): c = len(dict_pooling[1]) r = len(dict_pooling) result = [[0 for col in range(c - 1)] for row in range(r - 1)] # python构造的二维列表 for i in range(r - 1): for j in range(c - 1): re = max(dict_pooling[i][j], dict_pooling[i][j + 1], dict_pooling[i + 1][j], dict_pooling[i + 1][j + 1]) # max-pooling方法实现池化 result[i][j] = re return result# 实现卷积层和池化层的连接层def pooling_folding(matrix): res = [] data_list = matrix while 1: # 交替实现卷积层和池化层 c = len(data_list[0]) r = len(data_list) if c == 1 or r == 1: # 判定池化层跳出循环条件 for i in range(len(data_list)): for j in data_list[i]: res.append(j) break pool = cnn_pooling(data_list) # 实现池化层 if len(pool) == 1 or len(pool[1]) == 1: # 判定卷积层跳出循环的条件 data_list = pool for i in range(len(data_list)): for j in data_list[i]: res.append(j) break else: fold = cnn_folding(pool) # 实现卷积层 data_list = fold pool = [[0 for col in range(c - 1)] for row in range(r - 1)] fold = [[0 for col in range(c - 1)] for row in range(r - 1)] return resjd_path = r'D:\thesis\0811\jd_graph\graph_embeddings'user_path = r'D:\thesis\0811\user_graph\graph_embeddings'jd_em_paths = find_each(jd_path) # 得到目录下的user_em_paths = find_each(user_path)job_list = []sim_lists = []for jd_file in jd_em_paths: sim_dict = {} jd_file_name = os.path.basename(jd_file) jd_name = jd_file_name.split('.')[0] # jd的类型名称 job_list.append(jd_name) for user_file in user_em_paths: sim_matrix = get_sim_matrix(jd_file, user_file) # 行代表job的embedding,列代表user的embedding,值为两个embedding的相似度 sim_res = pooling_folding(sim_matrix) # 送入卷积、池化层,全连接 sim_score = sum(sim_res)/len(sim_res) # 求和平均 user_file_name = os.path.basename(user_file) user_name = user_file_name.split('.')[0] # user id sim_dict.update({user_name: sim_score}) # 或.update(b=2) # 每个岗位与各用户的相似度 sim_list = sorted(zip(sim_dict.values(), sim_dict.keys()), reverse=True) # 降序排列 sim_list = sim_list[:100] # 取前100个 sim_lists.append(sim_list)df = pd.DataFrame()df['jd_sub_type'] = job_listdf['sim_users'] = sim_listsdf.to_csv("../data/jd_user_sim_2.csv", encoding="utf8", index=None, header=True) # 写入文件,每个岗位与各用户的相似度# df = pd.read_csv("../data/jd_user_sim.csv", encoding='utf8', header=0) # 读取文件print('end') 3.说明

代码实现的是两个文件夹中,文本embedding两两之间的相似度。测试只提供了两个embedding,需要更改合适的路径运行。

参考:https://blog.csdn.net/Mr_carry/article/details/80996454(有核心代码的详解。)


推荐阅读
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何使用 Python 将一个字符串按照指定的行和元素分隔符进行两次拆分,最终将字符串转换为矩阵形式。通过两种不同的方法实现这一功能:一种是使用循环与 split() 方法,另一种是利用列表推导式。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 本文介绍如何使用 Python 编写程序,检查给定列表中的元素是否形成交替峰值模式。我们将探讨两种不同的方法来实现这一目标,并提供详细的代码示例。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
author-avatar
廊坊0316慢摇酒吧_196
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有