计算文本相似度-Word2Vec计算_java word2vec 语义相似度-程序员宅基地

技术标签: 自然语言处理基础  自然语言处理  

来源于https://juejin.im/post/5b237b45f265da59a90c11d6
Word2Vec,顾名思义,其实就是将每一个词转换为向量的过程。
如果不了解的话可以参考:https://blog.csdn.net/itplus/article/details/37969519
这里我们可以直接下载训练好的 Word2Vec 模型,
模型的链接地址为:https://pan.baidu.com/s/1TZ8GII0CEX32ydjsfMc0zw
是使用新闻、百度百科、小说数据来训练的 64 维的 Word2Vec 模型,数据量很大,整体效果还不错,我们可以直接下载下来使用,这里我们使用的是 news_12g_baidubaike_20g_novel_90g_embedding_64.bin 数据,然后实现 Sentence2Vec,代码如下:

import gensim
import jieba
import numpy as np
from scipy.linalg import norm

model_file = './word2vec/news_12g_baidubaike_20g_novel_90g_embedding_64.bin'
model = gensim.models.KeyedVectors.load_word2vec_format(model_file, binary=True)

def vector_similarity(s1, s2):
    def sentence_vector(s):
        words = jieba.lcut(s)
        v = np.zeros(64)
        for word in words:
            v += model[word]
        v /= len(words)
        return v

    v1, v2 = sentence_vector(s1), sentence_vector(s2)
    return np.dot(v1, v2) / (norm(v1) * norm(v2))

在获取 Sentence Vector 的时候,我们首先对句子进行分词,然后对分好的每一个词获取其对应的 Vector,然后将所有 Vector 相加并求平均,这样就可得到 Sentence Vector 了,然后再计算其夹角余弦值即可。

调用示例如下:

s1 = '你在干嘛'
s2 = '你正做什么'
vector_similarity(s1, s2)

结果如下:

0.6701133967824016

这时如果我们再回到最初的例子看下效果:

strings = [
    '你在干什么',
    '你在干啥子',
    '你在做什么',
    '你好啊',
    '我喜欢吃香蕉'
]

target = '你在干啥'

for string in strings:
    print(string, vector_similarity(string, target))

依然是前面的例子,我们看下它们的匹配度结果是多少,运行结果如下:

你在干什么 0.8785495016487204
你在干啥子 0.9789649689827049
你在做什么 0.8781992402695274
你好啊 0.5174225914249863
我喜欢吃香蕉 0.582990841450621

可以看到相近的语句相似度都能到 0.8 以上,而不同的句子相似度都不足 0.6,这个区分度就非常大了,可以说有了 Word2Vec 我们可以结合一些语义信息来进行一些判断,效果明显也好很多。所以总体来说,Word2Vec 计算的方式是非常好的。另外学术界还有一些可能更好的研究成果,这个可以参考知乎上的一些回答:
https://www.zhihu.com/question/29978268/answer/54399062
。以上便是进行句子相似度计算的基本方法和 Python 实现,
本节代码地址:
https://github.com/AIDeepLearning/SentenceDistance

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Eric_LH/article/details/83151481

智能推荐

UWB定位:两种双向飞行时间法及TOA,TDOA,AOA介绍_uwb tdoa-程序员宅基地

文章浏览阅读1.9w次,点赞17次,收藏91次。UWB测距基本原理:TOF(Time Of Flight飞行时间测距法):测距方法属于双向测距技术,它主要利用信号在两个异步收发机(Transceiver)之间飞行时间来测量节点间的距离。因为在视距视线环境下,基于TOF测距方法是随距离呈线性关系,所以结果会更加精准。我们将发送端发出的数据包和接收回应的时间间记为TTOT,接收端收到数据包和发出回应的时间间隔记为TTAT,那么数据包在空中单向飞..._uwb tdoa

不同版本(2.3-3.1)web.xml文件的schema头部声明-程序员宅基地

文章浏览阅读1.6w次,点赞8次,收藏30次。1. Servlet 3.1Java EE 7 XML schema,命名空间是 http://xmlns.jcp.org/xml/ns/javaee/

[zotero] PDF translate 有道智云API接入_zotero有道翻译密钥-程序员宅基地

文章浏览阅读4.5k次,点赞8次,收藏13次。登录 https://ai.youdao.com/login.s登录后第一步:我们先创建应用 业务指南 → 应用总览 → 创建应用应用名称:任意选择服务:自然语言翻译服务 → 文本翻译接入方式:API开通成功成功后点击小卡片,复制 “应用 ID” 和 “应用密钥”_zotero有道翻译密钥

项目总结——STM32低功耗远程数据采集_远程下发采集指令 单片机-程序员宅基地

文章浏览阅读891次。总结一下之前做的一个项目。项目简介:设计并实现一套基于LORA协议的无线传感器网络,将其运用到某酒厂,实现了白酒酿造过程中的数据智能感知和显示。职责贡献:负责硬件系统模块搭建和低功耗无线传感器数据采集,通过CN3791太阳能充电管理电路和DC/DC升压控制器提供稳定电压,在STM32平台上通过485协议完成数据采集,采用温湿度和光照度三合一传感器,将采集到的数据通过LORA协议完成远程实时传输,并通过RTC待机唤醒等方式降低系统功耗;参与无线传感器网络路由算法研究。低功耗控制策略:1、降低系统时_远程下发采集指令 单片机

计算机保研学校推荐信,保研老师推荐信12篇-程序员宅基地

文章浏览阅读1k次。保研老师推荐信12篇导语:对于保研,各位老师会有什么样的推荐信呢?下面是小编整理的保研老师推荐信12篇,供大家阅读,希望对大家有所帮助。保研老师推荐信 篇1本人是**大学**学院一名教授,很乐意推荐**同学参加贵所的暑期学术夏令营。在与该生的接触过程中可以发现,该生勤奋努力,踏实认真,积极主动,好的专业基本功和英语读写能力。该生在课堂上主动提问,表现出了好的总结分析能力和文字表达能力。思维活跃,工..._计算机保研推荐信

GIS与BIM融合_gis与bim融合咋来的-程序员宅基地

文章浏览阅读607次。GIS与BIM融合GIS与BIM融合GIS与BIM融合美国时间2017年11月15日,Esri和Autodesk在拉斯维加斯召开联盟发布会,正式宣布合作。通过此次合作,双方计划在BIM与GIS技术间建立桥梁,将建筑环境、自然环境、人和网络组织在一起并可视化表达,为各行各业提供更优的基础数据。两大巨头都是看准了BIM与GIS的融合的未来,其实这个问题一直都存在,这个需求一直都有,为什么直到现在都没有实现?下面有一张2014年来自FME公司对GIS背景人员针对BIM与GIS融合的调查,希望大家看完之后可_gis与bim融合咋来的

随便推点

Android Installation failed with message Invalid File-程序员宅基地

文章浏览阅读767次。今天刚刚开始测试Android 项目的时候遇到了一个问题 无法在手机上运行报错如下:application installation failedInstallation failed with message Failed to finalize session : INSTALL_FAILED_USER_RESTRICTED: Install canceled by user.It ..._android installation failed with message invalid file: d:\androidworks\htqv_

【优化求解】基于蝗虫算法求解单目标问题matlab代码_rem(dim, 2)-程序员宅基地

文章浏览阅读159次。1 简介蝗虫算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一种元启发式仿生优化算法。具体原理如下:2 部分代码%_____________________________% Multi-objective Grasshopper Optimization Algorithm (MOGOA) source codes version 1.0%clc;clear;close _rem(dim, 2)

详述 MIMIC 数据库 26张数据表(二)之 五种字典表_mimic书库的变量词典-程序员宅基地

文章浏览阅读2k次,点赞2次,收藏7次。本文详述五个字典类型的表,分别为D_CPT(当前诊疗专用码编码表)、D_ICD_DIAGNOSES(疾病编码表)、D_ICD_PROCEDURES(手术编码表)、D_ITEMS(检查编码表)、D_LABITEMS(实验室检验编码表)。_mimic书库的变量词典

ros用rqt_graph显示节点关系、rqt_plot显示数据流、rqt_console显示节点的输出、rqt_logger_level_rqt_plot怎么画出cmd_vel-程序员宅基地

文章浏览阅读1.7w次。Using rqt_graphrqt_graph creates a dynamic graph of what's going on in the system. rqt_graph is part of therqt package. Unless you already have it installed, run:$ sudo apt-get install ros_rqt_plot怎么画出cmd_vel

git下载、安装、配置与简单应用(git上路之始)-程序员宅基地

文章浏览阅读5.3w次,点赞28次,收藏215次。目录1 git下载、安装与配置1.1下载与安装1.1.1登录git官网:Git (git-scm.com)点击击图中红线圈出的Downloads,进入下载页面。1.1.2根据自己系统,下载相应git软件(本人是win11)。​​​​​​1.1.3根据自己电脑,选择32位,或者64位的软件,本人选择64位安装版本。1.1.4下载完成后,运行安装软件,一路默认下去,完成安装(本人修改了安装路径,其他一路默认)。1.2 git配置1.2.1 在桌面空白处右键点击:Git Bas.._git下载

Android Studio中arr包的引用_调用arr包中页面-程序员宅基地

文章浏览阅读2.6k次。一、arr包的引用 在android 开发中我们除了引入jar包之外,有时候还会需要使用到arr包,那么既然有了jar为什么还要arr呢?这里就要说一下arr的不同了,arr包除了包含了字节码文件之外,还会包含一些资源文件,也就是说jar只不过是arr的一个子集而已。下面是正常的arr包引用步骤:1、复制arr文件到项目的libs中2、在build.gradle中配置依赖compil..._调用arr包中页面