首页 > 其他分享 >一起学习大模型 - 从底层了解Token Embeddings的原理(2)

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

时间:2024-05-27 10:02:34浏览次数:14  
标签:Embeddings dog 距离 cat Token 相似 欧氏 向量 底层

文章目录


前言

上一篇文章了解了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’ 的向量距离较近。

标签:Embeddings,dog,距离,cat,Token,相似,欧氏,向量,底层
From: https://blog.csdn.net/kljyrx/article/details/139146920

相关文章

  • 什么是Token?为什么大模型要计算Token数
    本文分享自华为云社区《【技术分享】什么是Token?为什么GPT基于Token定价》,作者:开天aPaaS小助手Tracy。在使用LLM大模型时,我们经常会遇到一个关键词,叫:Token。比如:最新版GPT-4Turbo模型最高支持128ktoken上下文;曾经GPT最强对手Claude-2.1支持最高200Ktoken上下文;......
  • 一起来聊聊大模型的token
    文章目录前言一、token是什么二、常用分词方法三、GPT-3的分词方式1.代码示例2.`Ġworld`和`world`的区别1)分词中的空格前缀2)后续计算中的区别3.为什么使用子词分词总结前言学习大模型的朋友肯定听说过大模型接口按token,自己编写代码的时候也经常看到tok......
  • 在微服务架构中使用token exchange主要的优势
    在微服务架构中使用tokenexchange有以下几个主要的优势:服务解耦:微服务之间通过tokenexchange进行解耦,每个服务只需关注自身的功能实现,而不需要关心其他服务的具体实现细节。这样可以提高系统的灵活性和可扩展性。安全性:通过tokenexchange进行服务间的认证和授权,可以......
  • Java虚拟机揭秘-底层驱动力,性能保障!
    Java虚拟机作为Java技术体系的核心组成部分,其重要性不言而喻。它不仅为Java提供了跨平台的能力,更是Java程序运行的基石。本文将为您深入解析Java虚拟机的工作原理、作用和应用场景,并通过生动的实例让您彻底理解这一关键技术。一、Java虚拟机详细介绍1、什么是Java虚拟......
  • 【AQS与ReentrantLock】剖析AQS与ReentrantLock底层源码,实现一个属于你的锁
    AQS引言在多线程高并发场景下,我们为了保证操作的原子性,必要的需要对代码块进行线程同步。我们知道ReentrantLock可以在Java中实现公平锁和非公平锁,它是类层面实现的锁,可以起到像sychronized关键字那样的同步功能,那么它是如何做到的呢?为了深入了解ReentrantLock的实现,那......
  • Minecraft中BossBar、Recipe的底层实现与扩展应用(学习笔记)
    看到有位博主写得很不错,直接上链接:《进度条与自定义合成表》本人在学习这篇博客的基础上进行实践与验证(使用1.12Bukkit接口开发),对上面的文件做几点总结与补充:正如文中所说,一定要记得在插件卸载时对注册的进度条和合成配方进行注销。文中所说的对进度条进行卸载的方法Buk......
  • SpringCloud + Python 混合微服务架构,打造AI分布式业务应用的技术底层
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析
    1.初始MyBatis,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析文章目录1.初始MyBatis,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析每博一文案2.前沿知识2.1框架(framework)2.2三层架构2.3分析JDBC的缺点3.初始了解MyBatis4.MyBatis......
  • 浅谈C#中取消令牌CancellationTokenSource
    基础操作CancellationTokenSourcecancellationTokenSource=newCancellationTokenSource();cancellationTokenSource.Token.Register(()=>{Console.WriteLine("取消了1111");});......
  • 聊聊 JSON Web Token (JWT) 和 jwcrypto 的使用
    哈喽大家好,我是咸鱼。最近写的一个Python项目用到了jwcrypto这个库,这个库是专门用来处理JWT的,JWT全称是JSONWebToken,JSON格式的Token。今天就来简单入门一下JWT。官方介绍:https://jwt.io/introduction先聊聊TokenToken的意思是令牌,通常用于身份验证。例如,......