一起学习大模型 - 从底层了解Token Embeddings的原理(2)

文章目录

  • 前言
  • 4. Token Embeddings综合运用演示
    • 4.1 Token Embeddings处理
    • 4.2 伪代码示例
    • 4.3 计算cat和dog两个词的相近程序
      • 4.3.1 计算方法
      • 4.3.2 例子
      • 4.3.3 输出结果


前言

上一篇文章了解了Token Embeddings的原理,这一篇,我们一起来综合运用学到的知识来深入了解Token Embeddings

4. Token Embeddings综合运用演示

4.1 Token Embeddings处理

假设我们有一个词汇表包含以下单词:['cat', 'dog', 'car', 'apple']。如果使用词袋模型,每个单词用一个独立的维度表示,我们会得到如下表示:

cat   -> [1, 0, 0, 0]
dog   -> [0, 1, 0, 0]
car   -> [0, 0, 1, 0]
apple -> [0, 0, 0, 1]

在这种表示中,单词之间的相似性无法体现出来。相反,如果我们使用词嵌入(例如,使用预训练的词向量模型),每个单词将被映射到一个高维向量空间:

cat   -> [0.2, 0.1, 0.5, 0.3]
dog   -> [0.3, 0.1, 0.6, 0.4]
car   -> [0.7, 0.8, 0.2, 0.1]
apple -> [0.5, 0.4, 0.9, 0.3]

在这个高维向量空间中,‘cat’ 和 ‘dog’ 由于具有相似的语义,因此它们的向量表示也相对接近。而 ‘car’ 和 ‘apple’ 的向量表示则与它们相距较远。

4.2 伪代码示例

下面是一个使用预训练词向量的简单示例,展示如何将单词映射到高维向量空间:

import numpy as np# 预训练的词嵌入示例
pretrained_embeddings = {'cat': [0.2, 0.1, 0.5, 0.3],'dog': [0.3, 0.1, 0.6, 0.4],'car': [0.7, 0.8, 0.2, 0.1],'apple': [0.5, 0.4, 0.9, 0.3]
}# 输入单词列表
words = ['cat', 'dog', 'car', 'apple']# 将单词映射到嵌入向量
word_embeddings = np.array([pretrained_embeddings[word] for word in words])print("Word Embeddings:")
print(word_embeddings)

4.3 计算cat和dog两个词的相近程序

4.3.1 计算方法

判断两个词的词向量是否相近,通常使用向量相似度度量,而不是简单的差值平方根算法。常见的相似度度量方法有以下几种:
1) 余弦相似度(Cosine Similarity)

余弦相似度(Cosine Similarity)是一种计算两个向量之间的相似度的方法,常用于文本相似度的计算。余弦相似度公式可以表示为:

cosine similarity = (A • B) / (||A|| * ||B||)

其中,A 和 B 分别是两个向量,A • B 表示两个向量的点积(内积),||A|| 和 ||B|| 分别表示两个向量的范数(长度)。

具体步骤如下:

第1步:计算向量 A 和向量 B 的点积(内积),即 A • B。
第2步:计算向量 A 的范数,即 ||A||,可以使用欧几里得范数或其他范数。
第3步:计算向量 B 的范数,即 ||B||。
第4步:将步骤 1 得到的点积除以步骤 2 和步骤 3 得到的范数,即得到余弦相似度。

余弦相似度的取值范围为 [-1, 1],值越接近 1 表示两个向量越相似,值越接近 -1 表示两个向量越不相似,值为 0 表示两个向量正交(不相关)。

2) 欧氏距离(Euclidean Distance)

欧氏距离,也称为欧几里得距离,是一种用于测量两个点之间的直线距离的度量方法。在二维或多维空间中,欧氏距离可以通过计算两个点之间的坐标差的平方和的平方根来计算。

欧氏距离的公式为:
d = √((x2 - x1)^2 + (y2 - y1)^2 + … + (xn - x1)^2)

其中,(x1, y1, …, xn) 和 (x2, y2, …, xn) 是两个点的坐标。欧氏距离可以用来衡量点之间的相似性或差异性。较小的欧氏距离表示点之间更接近,而较大的欧氏距离表示点之间更远。

欧氏距离在机器学习和数据挖掘中被广泛应用,特别是在聚类算法、分类算法和回归算法中。它可以用于计算两个样本的相似性,并在模式识别和图像处理等领域中用于比较特征向量之间的差异。欧氏距离,也称为欧几里得距离,是一种用于测量两个点之间的直线距离的度量方法。在二维或多维空间中,欧氏距离可以通过计算两个点之间的坐标差的平方和的平方根来计算。

欧氏距离的公式为:
d = √((Y1 - X1)^2 + (Y2 - X2)^2 + … + (Yn - Xn)^2)

其中,(X1, X2, …, Xn) 和 (Y1, Y2, …, Yn) 是两个点的坐标。欧氏距离可以用来衡量点之间的相似性或差异性。较小的欧氏距离表示点之间更接近,而较大的欧氏距离表示点之间更远。

欧氏距离在机器学习和数据挖掘中被广泛应用,特别是在聚类算法、分类算法和回归算法中。它可以用于计算两个样本的相似性,并在模式识别和图像处理等领域中用于比较特征向量之间的差异。

3) 曼哈顿距离(Manhattan Distance)

曼哈顿距离,也称为城市块距离(City Block Distance)或L1距离,是计算两点之间的距离的一种方法。它是通过计算两个点在坐标系中每个维度上坐标差的绝对值之和来确定的。在二维平面上,曼哈顿距离可以理解为通过直角路径从一个点移动到另一个点所需的最小步数。在三维空间中,曼哈顿距离可以理解为通过在x、y、z轴上移动的最小步数。

曼哈顿距离的计算公式为:
d = |x1 - x2| + |y1 - y2|

其中,(x1,y1)和(x2,y2)是两点的坐标。

曼哈顿距离的特点是,它只考虑了两点在各个维度上的坐标差,而没有考虑它们之间的直线距离。因此,曼哈顿距离在描述城市交通路径、电路板布线等问题时更为合适,因为它更符合实际情况。

在机器学习中,曼哈顿距离常用于聚类算法(如K均值聚类)中,用于度量样本之间的相似度或距离。它也可以用于特征选择、异常检测等任务中。

总结来说,曼哈顿距离是通过计算两个点在各个维度上坐标差的绝对值之和来度量它们之间的距离。它在城市交通路径、聚类算法等应用中具有重要意义。

4) 其他相似度度量

还有一些其他相似度度量方法,如杰卡德相似度(Jaccard Similarity)、汉明距离(Hamming Distance)等,具体选择取决于应用场景和需求。

4.3.2 例子

以下是使用余弦相似度和欧氏距离衡量两个词向量相似度的示例代码:

import numpy as np
from numpy.linalg import norm# 示例词向量
embedding_cat = np.array([0.2, 0.1, 0.5, 0.3])
embedding_dog = np.array([0.3, 0.1, 0.6, 0.4])# 计算余弦相似度
cosine_similarity = np.dot(embedding_cat, embedding_dog) / (norm(embedding_cat) * norm(embedding_dog))
print(f"Cosine Similarity between 'cat' and 'dog': {cosine_similarity}")# 计算欧氏距离
euclidean_distance = np.linalg.norm(embedding_cat - embedding_dog)
print(f"Euclidean Distance between 'cat' and 'dog': {euclidean_distance}")# 计算曼哈顿距离
manhattan_distance = np.sum(np.abs(embedding_cat - embedding_dog))
print(f"Manhattan Distance between 'cat' and 'dog': {manhattan_distance}")

4.3.3 输出结果

上述代码的输出如下:

Cosine Similarity between 'cat' and 'dog': 0.992
Euclidean Distance between 'cat' and 'dog': 0.141
Manhattan Distance between 'cat' and 'dog': 0.3
  • 余弦相似度:值接近 1,表明 ‘cat’ 和 ‘dog’ 的向量非常相似。
  • 欧氏距离:值较小,表明 ‘cat’ 和 ‘dog’ 的向量距离很近。
  • 曼哈顿距离:值也较小,同样表明 ‘cat’ 和 ‘dog’ 的向量距离较近。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15826.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

纯干货分享 机器学习7大方面,30个硬核数据集

在刚刚开始学习算法的时候,大家有没有过这种感觉,最最重要的那必须是算法本身! 其实在一定程度上忽略了数据的重要性。 而事实上一定是,质量高的数据集可能是最重要的! 数据集在机器学习算法项目中具有非常关键的重…

文章解读与仿真程序复现思路——电力系统保护与控制EI\CSCD\北大核心《计及温控厌氧发酵和阶梯碳交易的农村综合能源低碳经济调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

网络域名是什么意思

网络域名,顾名思义,就是网络上的名字,类似于现实中的地址或姓名一样,用来标识网络上的一个或一组计算机或服务器的位置,以及它们的相应服务资源。网络域名是互联网上最基础的基础设施之一,是网络通信的“标…

【mysql】更新操作是如何执行的

现有一张表,建表语句如下: mysql> create table T(ID int primary key, c int);如果要将 ID2 这一行的a字段值加 1,SQL语句会这么写: mysql> update T set c c 1 where ID 2;上面这条sql执行时,分析器会通过词…

Nacos 微服务管理

Nacos 本教程将为您提供Nacos的基本介绍,并带您完成Nacos的安装、服务注册与发现、配置管理等功能。在这个过程中,您将学到如何使用Nacos进行微服务管理。下方是官方文档: Nacos官方文档 1. Nacos 简介 Nacos(Naming and Confi…

操作符详解(上)(新手向)

操作符详解(上) 一,算术操作符(双目操作符)1:‘’,‘-’,‘*’2:‘/’,‘%’ 一,单目操作符1:‘’,‘-’2:‘!’3:‘&’4:‘*’5:…

linux 排查java内存溢出(持续更新中)

场景 tone.jar 启动后内存溢出,假设pid 为48044 排查 1.确定java程序的pid(进程id) ps 或 jps 都可以 ps -ef | grep tone jps -l 2.查看堆栈信息 jmap -heap 48044 3.查看对象的实例数量显示前30 jmap -histo:live 48044 | head -n 30 4.查看线程状态 jstack 48044

Spring 事件监听

参考:Spring事件监听流程分析【源码浅析】_private void processbean(final string beanname, fi-CSDN博客 一、简介 Spring早期通过实现ApplicationListener接口定义监听事件,Spring 4.2开始通过EventListener注解实现监听事件 FunctionalInterface p…

Rustdesk客户端源码编译

1.安装VCPKG windows平台vcpkg安装-CSDN博客 2.使用VCPKG安装: windows平台vcpkg安装-CSDN博客 配置VCPKG_ROOT环境变量: 安装静态库: ./vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static 静态库安装成…

【C语言深度解剖】(15):动态内存管理和柔性数组

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

I.MX6ULL的官方 SDK 移植实验

系列文章目录 I.MX6ULL的官方 SDK 移植实验 I.MX6ULL的官方 SDK 移植实验 系列文章目录一、前言二、I.MX6ULL 官方 SDK 包简介三、硬件原理图四、试验程序编写4.1 SDK 文件移植4.2 创建 cc.h 文件4.3 编写实验代码 五、编译下载验证5.1编写 Makefile 和链接脚本5.2编译下载 一、…

列表元素添加的艺术:从单一到批量

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言 二、向列表中添加单一元素 1. append方法 2. insert方法 三、向列表中添加批量…

MySQL 存储过程(实验报告)

一、实验名称: 存储过程 二、实验日期: 2024 年5 月 25 日 三、实验目的: 掌握MySQL存储过程的创建及调用; 四、实验用的仪器和材料: 硬件:PC电脑一台; 配置:内存&#xff0…

Android 配置本地解决下载 Gradle 慢的问题

步骤1 打开项目下 gradle/wrapper/gradle-wrapper.properties 文件。 步骤2 文件内容如下。 #Sat May 25 16:24:00 CST 2024 distributionBaseGRADLE_USER_HOME distributionPathwrapper/dists distributionUrlhttps\://services.gradle.org/distributions/gradle-8.7-bin…

SW焊接路径不能是闭合的

如果是整个圆,就不能作出焊件

【Docker学习】深入研究命令docker exec

使用docker的过程中,我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令,或是希望查看容器环境,进行某些操作或访问。这时就会用到这个命令:docker exec。 命令: docker container exec 描述&#x…

ssm275宠物医院管理系统+vue-手把手调试搭建

ssm275宠物医院管理系统vue-手把手调试搭建 ssm275宠物医院管理系统vue-手把手调试搭建

Jmeter预习第1天

Jmeter参数化(重点) 本质:使用参数的方式来替代脚本中的固定为测试数据 实现方式: 定义变量(最基础) 文件定义的方式(所有测试数据都是固定的情况下[死数据],eg:注册登录&#xff0…

Linux -- 进程间通信的五种方式

IPC(InterProcess Communication)的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中Socket和Stream支持不同主机上的两个进程IPC。 管道(Pipes)&#xff1a…

STM32中断编程入门

文章目录 一、 理论部分1.中断系统2.中断执行流程3.NVIC的基本结构4.EXTI介绍5.AFIO复用IO口 二、实验目的:学习stm32中断原理和开发编程方法。使用标准完成以下任务:(一)实验一 开关控制LED的亮灭1.代码部分2.运行结果 &#xff…