Transformer 通关秘籍8:词向量如何表示近义词?
上一节已经完成了 token 到词向量的转换。那么,使用转换后的词嵌入向量便可以表示 token 之间的语义了吗?便可以表示两个单词是否是近义词,是否是反义词了吗?
是的。
接下来先通过一个例子,来直观地理解一下词嵌入向量是如何表示这些意思的。
词嵌入向量的表示
假设我们要对以下的词:“猫”、“狗”、“鱼”、“跑”进行数学表示。
如6、词汇表:文本到数值的转换所讲述的那样,如果用简单的数字来表示这些词,那么计算机只能知道它们之间是不同的词,而无法确定“猫”和“狗”的关系。
比如,我可以用下面简单的熟悉代替每一个词:
- 猫:1
- 狗:2
- 鱼:3
- 跑:4
如此一来,在计算机的运算逻辑里,会得出如下的荒谬结论:鱼(3)= 狗(2)+ 猫(1),也就是说在计算机眼里,一只鱼等于一只狗加一只猫。
这种错误逻辑肯定是无法接受的。
为了改善这种情况,研究人员经过千辛万苦,并且利用一些算法(比如Word2Vec)对大量的文本进行训练,将每个词映射到了一个词嵌入向量,从而可以修正上面的错误。
词嵌入向量是怎么样的呢?
为了方便描述,这里将词嵌入向量用一个仅包含了2个数字的向量来表示,这些词嵌入向量可能是:
- 猫:[0.2, 0.7]
- 狗:[0.3, 0.9]
- 鱼:[-0.5, 0.2]
- 跑:[0.8, -0.1]
如此一来,首先通过向量的形式就无法得出一只鱼等于一只狗加一只猫的错误结果。并且,如果将这四个词的嵌入向量画在二维平面上,可以表示为下面的样子:

可以看到,“猫”和“狗”这两个向量之间的夹角非常小,两者非常接近,这是因为它们都属于动物,而“鱼”和“跑”这两个向量则相距很远,因为它们不论属性还是语义都相差很远。
这样的表示方式,可以让计算机能够更好地理解单词之间的关系。
比如在文本分类任务中,当计算机遇到一个句子“猫和狗在跑”,它会知道“猫”和“狗”是相似的词,而“跑”则和它们有些不同。
这样,通过使用词嵌入向量,便可以保留了单词之间的语义关系,计算机便能够更准确地理解文本,从而提高自然语言处理的性能。
需要注意的是,在真实使用的词嵌入向量中,一个向量中一般不会只有2个数字,而是512个数字或者更多。
向量中的每个数字代表了词的一个特征,可以认为512个数字代表了这个词在512个维度上的特征。
但是512维的向量很难在二维平面上绘制出来,我们无法对其直接进行可视化展示。
为此,谷歌开源了其Embedding Projector工具,利用一些算法对高维词嵌入向量做了降维处理,然后将其显示在三维空间中。网站链接在这里:https://projector.tensorflow.org/,如果你感兴趣的话,可以去操作一下。

这里有一个全程一站式的 Transformer 讲解和实战辅导,带你从零手写一个可对话的大模型,点击链接查看详情从零手写大模型实战
余弦相似度和欧式距离
既然我们将 token 都转换到了高维的数学空间中,那么在高维数学空间中,如何来衡量两个 token (高维空间中为向量)的含义是相似的,还是相反的呢?
比如,在人类的认知中,狗和猫可以认为是一对近义词(这是相比于其他词比如“跑”而言的)。而在数学上,衡量两者是近义词的方法便是认为“两个向量更接近或者更相似”。
这种数学意义上的“向量更接近”,可以称之为“向量的距离更小”,更进一步讲,称为多维空间中“两个向量的欧氏距离更小”。
在三维几何上中,表示为两个点之间的距离,可以通过平方根来进行计算:
而在高维空间中,则可以使用余弦相似度来计算。比如在 GPT-4模型中,官方就推荐使用余弦相似度来衡量两个向量的距离。
GPT-4 中的余弦相似度和欧氏距离的关系
当然这里有些细节还要说明一下,以免大家产生误导。
首先,欧氏距离和余弦相似度的含义和计算公式是不一样的,那么在 GPT-4 的词嵌入空间中,为什么可以使用余弦相似度来衡量两个向量之间的距离(欧式距离)呢?
先看下两者的概念:
余弦相似度:衡量的是向量在方向上的相似程度,而不是它们的大小。它是通过计算两个向量的点积然后除以它们的模长得到的,余弦相似度的公式如下:
cos_similarity = (A · B) / (||A|| * ||B||)
欧氏距离:衡量的是多维空间中两点之间的直线距离。在几何上,它是两点坐标差的平方和的平方根。欧氏距离对向量的长度和方向都敏感。
在 GPT-4 的嵌入空间中,嵌入向量都被标准化到长度1,也就是说所有的向量都是单位向量,在这种情况下,余弦相似度和欧氏距离之间存在一个有趣的关系:
● 点积:由于向量长度为1,余弦相似度就等于向量的点积,这样做不仅理解简单,还可以加速余弦相似度的计算。
● 欧氏距离:在标准化了的向量空间中,欧氏距离的平方是两个单位向量之差的平方和。由于所有向量的长度相同,这实际上就可以认为是两个向量在方向上的差异的一种衡量。
因为 GPT-4 的高维向量空间,将向量都做了标准化,因此,在词嵌入空间中,尽管余弦相似度和欧氏距离的计算结果在数值上不一致,但它们却都可以产生相同的顺序排名,两种指标仍然可以一起指示哪些向量更相似或更不同。
比如计算猫和狗的余弦相似度为 0.9, 欧式距离为 9.9,猫和“跑”的余弦相似度为0.1, 欧式距离为 2.0,鱼和跑的余弦相似度为 0.01, 欧式距离为 0.9。
虽然两种计算方法得到的数值不同,但是排名是相同的。两者都可以指示谁与谁更接近,谁与谁更相反,或没有关联。
这就是为什么在 GPT-4 的嵌入空间中,推荐使用余弦相似度的原因:一是因为它计算更高效,二是因为它的计算结果和欧式距离一样,具有相同的顺序排名。
总结一下本节
- 在进行文本处理之前,文本转换为词嵌入向量是必须的,并且要转换为具有多个维度的高维向量,以此来衡量文本的语义。
- 在GPT-4的词嵌入空间中,推荐使用余弦相似度来衡量向量的“距离”,这是因为 GPT-4 把嵌入向量标准化到了1,从而使得余弦相似度与欧氏距离在衡量向量相似性上具有一样的排名。
- 在其他的场景下,也可以使用余弦相似度这一指标来衡量向量的相似性。比如衡量两个文本或图像是否相似,直接计算其余弦相似度,也是一种简单有效的办法。
参考:
^维基百科余弦相似度: https://en.wikipedia.org/wiki/Cosine_similarity
相关文章:
Transformer 通关秘籍8:词向量如何表示近义词?
上一节已经完成了 token 到词向量的转换。那么,使用转换后的词嵌入向量便可以表示 token 之间的语义了吗?便可以表示两个单词是否是近义词,是否是反义词了吗? 是的。 接下来先通过一个例子,来直观地理解一下词嵌入向…...
Vue + Scss项目中实现自定义颜色主题的动态切换
当时面试的时候遇到面试官问的一个问题如何实现自定义颜色主题切换,当时我做的只是elementUIPlus提供的暗黑和默认主题切换 theme.scss // 增加自定义主题类型 $themes: (light: (/* 原有配置保持不变 */),dark: (/* 原有配置保持不变 */),custom: () // 空映射…...
搭建qemu环境
1.安装qemu apt install qemu-system2.编译内核 设置gcc软链接sudo ln -s arm-linux-gnueabihf-gcc arm-linux-gccsudo ln -s arm-linux-gnueabihf-ld arm-linux-ldsudo ln -s arm-linux-gnueabihf-nm arm-linux-nmsudo ln -s arm-linux-gnueabihf-objcopy arm-linux-objc…...
【MVC简介-产生原因、演变历史、核心思想、组成部分、使用场景】
MVC简介 产生原因: MVC(Model-View-Controller)模式诞生于20世纪70年代,由Trygve Reenskaug在施乐帕克研究中心(Xerox PARC)为Smalltalk语言设计,目的是解决图形用户界面(GUI&…...
基于NebulaGraph构建省市区乡镇街道知识图谱(二)
上次我们有讲到构建知识图谱,但是在实际使用的时候会发现某些乡镇街道丢失的问题,因为VID必须全局唯一,覆盖导致原因,另外在全国大批量导入时速度非常慢,为此,我们重新优化表结构与导入语法。 1. 表及索引…...
论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024)
转载至:何骏昊 开放知识图谱 原文地址:论文浅尝 | Interactive-KBQA:基于大语言模型的多轮交互KBQA(ACL2024) 笔记整理:何骏昊,东南大学硕士,研究方向为语义解析 论文链接ÿ…...
线性规划工具推荐篇 开源+商用 按需取用
一、开源免费工具 1. GLPK (GNU Linear Programming Kit) 特点: 支持线性规划(LP)、混合整数规划(MIP)使用MathProg语言建模,可通过glpsol命令行求解适合中小规模问题,性能低于商业求解器 适用…...
linux -- php 扩展之xlswriter
xlswriter - PHP 最强性能 Excel 扩展 linux 安装 完整编译安装步骤 ## 下载wget https://pecl.php.net/get/xlswriter tar -zxvf xlswriter cd xlswriterphpize # 执行配置 ./configure # 编译 make make install ./configure 如果报错,就指定配置路径 …...
Dockerfile文件构建镜像Anaconda+Python教程
文章目录 前言Dockerfile 核心模块解析**一、Dockerfile基础镜像选择二、系统基础配置1、时区设置2、镜像源替换 三、系统依赖安装四、复制本地文件五、指定路径六、Anaconda环境配置1、anaconda环境安装2、配置虚拟环境3、创建conda虚拟环境4、启动和安装环境 七、完整dockerf…...
本地部署大模型-web界面(ollama + open-webui)
一、安装ollama 二、安装部署open-webui 1、项目运行环境 (1)配置python环境—官方下载链接 可通过命令行直接更改python镜像源为阿里云镜像源: >pip config set global.index-url http://mirrors.aliyun.com/pypi/simple/也可手动修…...
Uniapp 实现微信小程序滑动面板功能详解
文章目录 前言一、功能概述二、实现思路三、代码实现总结 前言 Uniapp 实现微信小程序滑动面板功能详解 一、功能概述 滑动面板是移动端常见的交互组件,通常用于在页面底部展开内容面板。本文将介绍如何使用 Uniapp 开发一个支持手势滑动的底部面板组件࿰…...
redis一些常用的命令(1)
启动redis redis-server /home/XXX/myredis/redis.conf 默认不是后台运行的,修改配置文件,daemonized on /var/run/redis.pid when daemonized port 6380 默认端口的6379 bind:127.0.0.1 默认是本地 连接不同的端口 redis-cli -p 6380 制…...
Java虚拟机JVM知识点(已完结)
JVM内存模型 介绍下内存模型 根据JDK8的规范,我们的JVM内存模型可以拆分为:程序计数器、Java虚拟机栈、堆、元空间、本地方法栈,还有一部分叫直接内存,属于操作系统的本地内存,也是可以直接操作的。 详细解释一下 程…...
【C++进阶四】vector模拟实现
目录 1.构造函数 (1)无参构造 (2)带参构造函数 (3)用迭代器构造初始化函数 (4)拷贝构造函数 2.operator= 3.operator[] 4.size() 5.capacity() 6.push_back 7.reserve 8.迭代器(vector的原生指针) 9.resize 10.pop_back 11.insert 12.erase 13.memcpy…...
VUE3+Mapbox-GL 实现鼠标绘制矩形功能的详细代码和讲解
以下是如何使用 Mapbox GL JS 实现鼠标绘制矩形功能的详细代码和讲解。Mapbox GL JS 是一个强大的 JavaScript 库,可以用来创建交互式地图。下面将通过监听鼠标事件并动态更新地图图层来实现这一功能。 实现步骤 初始化地图 在 HTML 文件中引入 Mapbox GL JS 库&…...
《筋斗云的K8s容器化迁移》
点击下面图片带您领略全新的嵌入式学习路线 🔥爆款热榜 88万阅读 1.6万收藏 文章目录 **第一章:斗战胜佛的延迟焦虑****第二章:微服务化的紧箍咒****第三章:混沌中的流量劫持****第四章:量子筋斗的终极形态****终章&…...
面试遇到的几个问题小记20250401
一、echarts设置数据的几种方式 在 ECharts 里,设置数据存在多种方式,下面为你详细介绍: 在初始化配置项时设置数据 这是最为常见的方式,也就是在创建 ECharts 实例的时候,于配置项 option 里直接设置数据。 // 基于…...
java swing 密码框如何在获取到焦点时,输入法自动切换为英文状态
一、java swing 密码框如何在获取到焦点时,输入法自动切换为英文状态 在 Java Swing 中,JPasswordField 用于输入密码,默认情况下,输入法状态不受控。要在获取焦点时自动切换为英文状态,可以通过以下步骤实现…...
图像处理中的Transformer Block实现与解析
图像处理中的Transformer Block实现与解析 随着深度学习技术的不断进步,Transformer结构在自然语言处理领域取得了显著的成功。近年来,这种注意力机制也被引入到计算机视觉任务中,展示了其强大的表现力和效果提升能力。本文将从代码实现的角…...
基于SpringBoot的“考研学习分享平台”的设计与实现(源码+数据库+文档+PPT)
基于SpringBoot的“考研学习分享平台”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体功能结构图 局部E-R图 系统首页界面 …...
Web3.0隐私计算与云手机的结合
Web3.0隐私计算与云手机的结合 Web3.0隐私计算与云手机的结合,标志着从“数据垄断”向“数据自主”的范式转变。通过技术互补,两者能够构建更安全、高效且用户主导的数字生态。尽管面临技术整合和成本挑战,但随着区块链、AI和分布式存储的成…...
视觉与激光点云 融合的 三维重建算法
以下是一些结合激光点云(LiDAR)与其他数据(如图像、RGB-D等)的三维重建算法,这类方法通过融合多模态数据提升重建的精度和完整性: 1. 传统几何融合方法 (1) LiDAR 相机(RGB/LiDAR Fusion…...
Linux上位机开发实践(超越MPP去开发产品)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 对于芯片厂商来说,肯定希望客户的应用和自己的芯片绑定地越紧密越好。最好就是,他们自己成为客户的独家供应商。但是对于嵌…...
雪花算法生成的主键存在哪些问题,为什么不能使用自增ID或者UUID做MySQL的主键
MySQL 分布式架构中的主键选择:自增ID、UUID与雪花算法 为什么MySQL分布式架构中不能使用自增主键? 在分布式架构中,自增主键存在以下问题: 主键冲突风险:多个数据库实例同时生成自增主键会导致ID重复分片不均匀&am…...
SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer
前面介绍了获取容器可以让spring bean实现ApplicationContextAware,实际也是初始化执行了setApplicationContext接口, 初始化接口还可以借助一些注解或者spring bean的初始化方法,那么他们的执行顺序是什么样的呢? 一、验证&…...
【分享】内外网文件摆渡系统:让数据传输更安全更可靠
【分享】Ftrans内外网文件摆渡系统:让数据传输更安全更可靠! 随着大数据时代的到来,数据的重要性日渐得到重视,数据作为数字经济时代下的基础性资源和战略性资源,是决定国家经济发展水平和竞争力的核心驱动力。以行业…...
2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题)
2025年江苏省职业院校技能大赛 (高职组)大数据应用开发赛项任务书 (样题) 背景描述:任务A:离线数据处理(35分)子任务一:数据抽取子任务三:指标计算 任务B&…...
前端学习记录之HTML
1. 网页 1.1 什么是网页 网站是指在因特网上根据一定的规则,使用HTML等制作的用于展示特定内容相关的网页集合。 网页是网站中的一“页”,通常是HTML格式的文件,它要通过浏览器来阅读 网页是构成网站的基本元素。它通常由图片,…...
解释一下Unity碰撞的触发条件
Unity中碰撞的触发条件主要与物体的碰撞体(Collider)和刚体(Rigidbody)组件有关。具体来说,Unity的物理引擎会根据物体的配置来检测碰撞(Collision)和触发器(Trigger)事件…...
手机显示5GA图标的条件
最近有星友问在什么情况下才能显示5G-A?虽然这个我也不知道,但是我有几个运营商的5G终端白皮书,从上面就可以找到答案。 如上是几个运营商显示5G-A的条件,基本上考虑的都是3CC的情况,联通还有考虑200M CA 2CC的场景&am…...
