使用词向量以数学方式查找具有相似含义的单词

摄影:Nika Charakova
一、说明
简而言之,词向量只不过是表示自然语言词含义的一系列实数。这项技术是有用的NLP功能的重要推动力,使机器能够“理解”人类语言。本文讨论如何使用词向量以编程方式计算文本的语义相似性,例如,如果您需要根据文本涵盖的主题对这些文本进行分类,这将非常有用。它从一个概念视图和示例开始,然后说明如何使用spaCy(一个领先的NLPPython库)来确定文本的语义相似性。
二、词向量的概念
因此,让我们从概念上看一下词向量,以便您可以基本了解如何在数学上计算以向量形式表示的词之间的语义相似性。然后,您将查看spaCy的similarity()方法,该方法比较容器对象(Doc,Span,Token)的词向量以确定其含义的接近程度。
在统计建模中,将单词映射到反映单词语义相似性的实数向量。您可以将词向量空间想象成一个云,其中具有相似含义的单词向量位于附近。例如,表示单词“苹果”的向量应该更接近单词“梨”的矢量,而不是单词“car”的矢量。由于前两个是指可食用的水果,而后者是指四轮公路车辆。要生成这些向量,您需要对这些单词的含义进行编码。实际上,有几种编码含义的方法。
三、用坐标定义意义
生成有意义的词向量的一种方法是将现实世界中的对象或类别分配给词向量的每个坐标。例如,假设您正在为以下单词生成词向量:罗马、意大利、雅典和希腊。词向量应该在数学上反映罗马是意大利首都的事实,并且与意大利的关系与雅典不同。同时,它们应该反映雅典和罗马是首都,希腊和意大利是国家的事实。
下图说明了此向量空间以矩阵的形式可能是什么样子。

在这里,您将每个单词的含义分布在四维空间中的坐标之间,表示类别“国家”、“首都”、“希腊”和“意大利语”。在此简化示例中,坐标值可以是 1 或 0,指示相应的单词是否属于该类别。
一旦你有一个向量空间,其中的数字向量捕获对应单词的含义,你就可以在这个向量空间上使用向量算术来深入了解单词的含义。要找出雅典是哪个国家的首都,您可以使用以下等式,其中每个标记代表其相应的向量,X 是未知向量:
意大利 — 罗马 = X — 雅典
这个等式表达了一个类比,其中X表示与雅典具有相同关系的词向量,就像意大利与罗马的关系一样。要求解 X,您可以像这样重写等式:
X = 意大利 — 罗马 + 雅典
首先通过减去相应的矢量元素,从矢量意大利中减去矢量罗马。然后,将生成的向量和向量雅典的总和相加。下图中的图表总结了此计算。

通过从意大利的单词向量中减去罗马的单词向量,然后添加雅典的单词向量,您可以得到一个等于向量希腊的向量。
四、使用维度来表示意义
虽然您刚刚创建的向量空间只有四个类别,但现实世界的向量空间可能需要数万个这样的类别。这种大小的向量空间对于大多数应用程序来说是不切实际的,因为它需要一个巨大的词嵌入矩阵。例如,如果要编码 10,000 个类别和 1,000,000 个实体,则需要 10,000 个× 1,000,000 个嵌入矩阵。
减小嵌入矩阵大小的明显方法是减少向量空间中的类别数量。词向量空间的实际实现不是使用坐标来表示所有类别,而是使用向量之间的距离来量化和分类语义相似性。各个维度通常没有固有的含义。相反,它们表示向量空间中的位置,向量之间的距离表示相应单词含义的相似性。要查看实向量空间的示例,您可以在 English word vectors · fastText 下载 fastText 词向量库,该库在 300 维词向量空间中分发单词的含义。
五、spaCy's Similarity() 方法
在spaCy中,每种类型的容器对象都有一个相似性方法,允许您通过比较它们的词向量来计算任何类型的两个容器对象之间的语义相似性估计。为了计算没有自己的词向量的跨度和文档的相似性,spaCy 会平均它们包含的标记的词向量。
可以计算两个容器对象的语义相似性,即使这两个对象不同。例如,可以将 Token 对象与 Span 对象进行比较,将 Span 对象与 Doc 对象进行比较,等等。
以下示例计算 Span 对象与 Doc 对象的相似程度:
>>> doc=nlp(‘I want a green apple.’)
>>> doc.similarity(doc[2:5])
0.7305813588233471 此代码计算句子“我想要一个青苹果”和从同一句子派生的短语“一个青苹果”之间的语义相似性估计。如您所见,计算出的相似度足够高,可以认为两个对象的内容相似(相似度范围从 0 到 1)。毫不奇怪,当您将对象与自身进行比较时,similarity() 方法返回 1:
>>> doc.similarity(doc)
1.0
>>> doc[2:5].similarity(doc[2:5])
1.0
六、后记
注意:本文中使用的示例取自我最近由No Starch Press(https://nostarch.com/)出版的《Python and spaCy (https://nostarch.com/NLPPython)自然语言处理》(Natural Language Processing with Python and spaCy)一书。
相关文章:
使用词向量以数学方式查找具有相似含义的单词
摄影:Nika Charakova 一、说明 简而言之,词向量只不过是表示自然语言词含义的一系列实数。这项技术是有用的NLP功能的重要推动力,使机器能够“理解”人类语言。本文讨论如何使用词向量以编程方式计算文本的语义相似性,例如&#x…...
opencv实现以图搜图
这里写目录标题 1. 步骤1.1 导入OpenCV库:1.2 加载图像1.3 提取特征1.4 匹配特征1.5 显示结果 2. 完整代码3. 测试图片及效果 1. 步骤 1.1 导入OpenCV库: 在您的C代码中,首先需要导入OpenCV库。您可以使用以下语句导入核心模块:…...
爬虫工作中代理失效了怎么处理?
Hey!亲爱的爬虫小伙伴们,是不是经常在爬虫的工作中遇到代理IP失效的问题?别着急,今天我来分享一些应对代理失效的妙招!这些方法简单易行,让你爬虫顺利进行. 一、为什么代理会失效? 在爬虫过程…...
使用虚拟环境conda安装不同版本的cuda,cudnn,pytorch
背景:在学习深度学习时,我们不可避免的需要跑多个神经网络,而不同的神经网络环境都不一样,所以必须要使用到虚拟环境(如conda)去做环境隔离,安装属于自己的环境。在这环境中,大多神经网络都必须要用到cuda&…...
【24择校指南】华东师范大学计算机考研考情分析
华东师范大学(B) 考研难度(☆☆☆☆) 内容:23考情概况(拟录取和复试分数人数统计)、院校概况、23考试科目、23复试详情、各科目及专业考情分析。 正文2563字,预计阅读:3分钟。 2023考情概况…...
什么是LAXCUS分布式操作系统?
相较Linux、Windows,Laxcus是同时在多台计算机上运行的操作系统,处理大规模、高并发、高性能业务,其特点是资源共享和任务并行,并实现【数存算管】超融合一体化。环境中的资源:CPU、GPU、内存、硬盘、网络,…...
Redis数据结构——链表list
链表是一种常用的数据结构,提供了顺序访问的方式,而且高效地增删操作。 Redis中广泛使用了链表,例如:列表的底层实现之一就是链表。 在Redis中,链表分为两部分:链表信息 链表节点。 链表节点用来表示链表…...
[自学记录06|*百人计划]Gamma矫正与线性工作流
一、前言 Gamma矫正其实也属于我前面落下的一块内容,打算把它补上,其它的没补是因为我之前写的GAMES101笔记里已经涵盖了,而Gamma矫正在101里面确实没提到,于是打算把它补上,这块内容并不难,但是想通透的理…...
【数据结构】二叉树链式结构的实现及其常见操作
目录 1.手搓二叉树 2.二叉树的遍历 2.1前序、中序以及后序遍历 2.2二叉树的层序遍历 3.二叉树的常见操作 3.1求二叉树节点数量 3.2求二叉树叶子节点数量 3.3求二叉树第k层节点个数 3.3求二叉树的深度 3.4二叉树查找值为x的节点 4.二叉树的销毁 1.手搓二叉树 在学习…...
从零实战SLAM-第九课(后端优化)
在七月算法报的班,老师讲的蛮好。好记性不如烂笔头,关键内容还是记录一下吧,课程入口,感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…...
Python Opencv实践 - 图像金字塔
import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像上采样 #cv.pyrUp(src, dstNone, dstsizeNone, borderTypeNone) #参考资料:https://blo…...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK设置相机的固定帧率(C) Baumer工业相机Baumer工业相机的固定帧率功能的技术背景CameraExplorer如何查看相机固定帧率功能在BGAPI SDK里通过函数设置相机固定帧率 Baumer工业相机通过BGAPI SDK设置相机固定帧…...
计算机竞赛 python+大数据校园卡数据分析
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖&am…...
DNNGP模型解读-early stopping 和 batch normalization的使用
一、考虑的因素(仅代表个人观点) 1.首先我们看到他的这篇文章所考虑的不同方面从而做出的不同改进,首先考虑到了对于基因组预测的深度学习方法的设计 ,我们设计出来这个方法就是为了基因组预测而使用,这也是主要目的&…...
【目标检测】目标检测 相关学习笔记
目标检测算法 PASCALVOC2012数据集 挑战赛主要分为 图像分类 目标检测 目标分割 动作识别 数据集分为四个大类 交通(飞机 船 公交车 摩托车) 住房(杯子 椅子 餐桌 沙发) 动物(鸟 猫 奶牛 狗 马 羊) 其他&a…...
面试攻略,Java 基础面试 100 问(十六)
反射使用步骤(获取Class对象、调用对象方法) 获取想要操作的类的Class对象,他是反射的核心,通过Class对象我们可以任意调用类的方法。 调用 Class 类中的方法,既就是反射的使用阶段。 使用反射 API 来操作这些信息。 什么是 java 序列化&…...
章节5:脚本注入网页-XSS
章节5:脚本注入网页-XSS XSS :Cross Site Script 恶意攻击者利用web页面的漏洞,插入一些恶意代码,当用户访问页面的时候,代码就会执行,这个时候就达到了攻击的目的。 JavaScript、Java、VBScript、Activ…...
ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031)
安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) 二、CVE-2017-15031 一、ATF(TF-A)安全通告 TFV-5 (CVE-2017-15031) Title 未初始化或保存/恢复PMCR_EL0可能会泄露安全世界的时间信息 CVE ID CVE-2017-1503…...
迅捷视频工具箱:多功能音视频处理软件
这是一款以视频剪辑、视频转换、屏幕录像等特色功能为主,同时附带有视频压缩、视频分割、视频合并等常用视频处理功能为主的视频编辑软件。该软件操作简单易用,即使没有视频处理经验的用户也可以轻松上手。将视频添加到工具箱对应功能后,简单…...
linux--fork()详解
fork() 参考链接:链接 进程控制原语包括:进程的建立、进程的撤销、进程的等待和进程的唤醒。 fork,在英语用译为叉子,形状像Y,反过来就如下图: 就是本来只有一个进行app,然后它调用了fork()函数…...
还在对着学校格式手册掉头发?Paperxie 帮你一键搞定毕业论文排版
paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPThttps://www.paperxie.cn/format/typesettinghttps://www.paperxie.cn/format/typesetting 改完论文正文,本以为能松口气,结果学校的格式手册又把你打回原形。字体字号、页眉页…...
AIGC 检测‘信息密度‘到底是什么?嘎嘎降 AI 帮你 AI 率从 65% 降到 8%
AIGC 检测"信息密度"到底是什么?嘎嘎降 AI 帮你 AI 率从 65% 降到 8% AIGC 检测算法 4.0 版本看的 5 项底层指标里——信息密度权重排第二(约 25%)。理解了这一项你才知道为什么"工整学术风"也会被判 AI。这篇文章把&quo…...
MCUXPresso for VS Code插件实战:从零构建NXP MCU的HelloWorld项目
1. 项目概述:为什么选择MCUXPresso for VS Code?如果你是一位嵌入式开发者,尤其是使用恩智浦(NXP)MCU的工程师,那么你大概率对MCUXpresso IDE不陌生。它是一个功能强大的集成开发环境,但有时我们…...
3大核心功能解密:如何用CSL编辑器告别引用格式噩梦
3大核心功能解密:如何用CSL编辑器告别引用格式噩梦 【免费下载链接】csl-editor cslEditorLib - A HTML 5 library for searching and editing CSL styles 项目地址: https://gitcode.com/gh_mirrors/csl/csl-editor 还在为论文引用格式而烦恼吗?…...
Zephyr启动流程的“模块化”设计哲学:从链接脚本到设备树的初始化链条解析
Zephyr启动流程的模块化设计哲学:从链接脚本到设备树的初始化链条解析 在嵌入式系统开发中,实时操作系统(RTOS)的启动流程往往是系统可靠性的第一道门槛。Zephyr RTOS以其独特的模块化设计理念,构建了一套高度可配置、可扩展的初始化体系&…...
告别手写代码!用Roboflow的Auto-Orient和Mosaic增强你的YOLO数据集(附完整流程)
零代码实现YOLO数据集增强:Roboflow自动化工具全解析 在目标检测领域,数据质量往往直接决定模型性能上限。传统数据增强方法需要开发者手动编写Python脚本调整图像方向、处理标注格式,不仅耗时耗力,还容易因格式兼容性问题导致训练…...
从决策树到XGBoost:核心原理、目标函数与工程优化全解析
1. 从“头发长短”到“预测房价”:决策树的灵魂与回归树的诞生很多朋友第一次接触XGBoost,或者更广义的树模型时,都会被一堆公式和术语劝退。什么信息增益、基尼系数、正则项、二阶泰勒展开……看几篇博客,感觉每篇都在自说自话&a…...
Maintain Certificate Trust List,把 SAP 出站通信里的证书信任关口管清楚
做 SAP S/4HANA Cloud、SAP BTP ABAP environment 或者混合架构里的出站集成时,有一个问题很容易被业务侧低估,却经常成为接口上线前的最后一道卡点,SAP 系统到底信不信任通信伙伴的服务器证书。OAuth、Basic Authentication、Communication Arrangement、Destination、ODat…...
如何构建高效科研知识库:Obsidian文献管理系统的3种创新策略
如何构建高效科研知识库:Obsidian文献管理系统的3种创新策略 【免费下载链接】obsidian_vault_template_for_researcher This is an vault template for researchers using obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian_vault_template_for_r…...
手把手教你用Cubic为团队批量定制Ubuntu服务器模板镜像(含安全加固步骤)
企业级Ubuntu镜像定制实战:基于Cubic的自动化安全加固方案 在DevOps和云原生技术普及的今天,标准化系统镜像已成为企业IT基础设施的关键组成部分。想象一下这样的场景:当新服务器上线或集群需要扩容时,运维团队不再需要逐台安装系…...
