Embedding技术学习

可能很多人并没有关注Embedding技术,但实际上它是GPT非常重要的基础,准备的说,它是GPT模型中理解语言/语义的基础。

【解释什么是Embedding】

对于客观世界,人类通过各种文化产品来表达,比如:语言,艺术品,图书,手机,电脑等……

我们可以用语言表达,通过人的意识,比如问题,猜想,理论,反驳 来进一步表达。

对于脑科学家,一直在研究人的意识从何而来,但截止目前,并没有什么突破。人的大脑是怎么回事,我们并没有搞明白。但OpenAI的工程师说,他们现在就是在模仿人的意识的生成来进行AI的研发(一种说法)。

对于计算机,是如何记录或进一步理解客观世界呢?所有人都知道的答案,就是使用 0 和1了。

具体的来看一下:

灰度的图像:会使用0,1生成灰度的矩阵。

彩色的图像:将RGB拆出三个通道 

西文的表示:这个很简单,一一对应就好了。

中文如何表示的呢?

        Unicode, UTF-8(包含全世界的所有语言进行表达)(可变长度,1-4个字节,按需扩展)

但这些只表达了单个元素的存储,并没有有语义,没有理解。

在机器学习中,为了学习这些,我们进一步采用了 One-hot 编码,你可以理解按单词来进行记录。比如:OpenAI ,利用了 10万个编码。

那如何表达单词之间的关系呢?和其它一样,也是使用特征维度,比如gpt-4的embedding-data2采用了1536维的向量。也就是说,每个单词和其它单词,可以在1536个维度上进行比较。

        这就是我们所说的语言模型了:

        为了表达词语的语义,我们必须能计算和存储词与词之间的关联关系,也就是需要有一个多维的向量空间来理解语义。而这个多维的向量空间与每个词都有对应关系。我们认为单词映射到这个高维空间就是词嵌入(Embedding),通过这个高维空间可以捕捉到词的语义信息。

        不知道绕了这么大一圈,有没有说清楚词嵌入是个什么概念,可能是中文翻译的原因,感觉这个嵌入的说法并不准确。

        在进一步介绍Embedding之前,我们不得不说一下表示学习。

什么是表示学习?

      我们通过算法,通过机器学习,从原始数据中学习到表示形式和特征,最终可理解数据的含义,学会一些知识。这叫做表示学习。

        嵌入,然后通过降维,保留高维空间的含义,它是表示学习的重要表达方式。

        在表示学习的表达时,为了人可以看懂,需要通过Embeding 进行降维,变成人可以理解的信息。

        我们拿大语言模型为例 ,为了表达语义,会使用嵌入将学习的特征存储起来。因为这些存储值都是实数,它们之间实际上是可以进行运算的。而运算的关系,会表达出语义(后面会举例)

Embedding的作用

其实讲了它的定义,它的作用就显而易见了。

看下图的输出,通过数据降维,可以通过颜色,位置就可表达学习的结果。

比如:我们认为图中在三维坐标离得近的,一定有相似的语义。而颜色可能是我们想比较的另外一个特征,我们通过颜色与位置的比较,可以得出一些结论。

再看这个,可以得出向量运算得到如下的关系,是不是有一定的道理。提取出了语义。

我们认为 King 和 Queern的差距 雷同于 Man 和 Woman的差距,这显然是符合语义的。

背后的原理是什么?

        下面这张图,可以很是确的表达出Embedding技术在LLM中的重要性。

        它的原理也很简单,就是一个提取文字特征的一种方式。而它们的语义的相似性,实际上也是我们通过现实世界中的一些存在的文本训练出来的(因为训练的过程会根据词之间的出现频率来进行推导,最终得到相互间的多维空间的关系值)

        所以,可能训练出来的结果会存在偏见,但这种偏见一定是你给的语料里面存在的。

        而因为我们对于训料语义的一视同仁,也可能在某些领域,得出的语义并不是真实的,只能说是大多数人的理解。(真理有时会掌握在少数人手里),碰到这种情况,就只能通过后期的微调来改善了。

如何使用Embedding

        那我们可以直接使用它吗?其实OpenAI的API里面,对这个模型也可以付费使用的。

我们目前可用到的模型是:

注意这里的1536维度,说明单词可以在1536维的空间中比较它们的相似度,这个其实很难用人的思维来理解了(为什么是1536,这应该是大量训练得出的经验值 ,实际上最新的版本已经扩展到3072维,不知道这种维度会带来什么惊喜)

如果我们单独使用,可以完成 文本的搜索,评论聚类等功能:

下面有三个例子来说明使用方法:

数据:对于羡食平台的评论,我们将评论的标题 和评论的主体内容放到一起来分析。

对于评论的评分做为一个相关因素来考察。

下面给了三个例子。

# 设置调用的API
embedding_model = "text-embedding-ada-002"
embedding_encoding = "cl100k_base"
from openai import OpenAI
client = OpenAI()# 调用embedding,获得1536维的向量
def embedding_text(text, model="text-embedding-ada-002"):res = client.embeddings.create(input=text, model=model)return res.data[0].embedding
df["embedding"] = df.combined.apply(embedding_text)# 示例一:评分和评论的相似度关系图
# 可以使用 t-SNE对结果进行降维显示,下面降为2维
# 可以得到 聚类后的图,查看效果
import numpy as np
import matplotlib.pyplot as plt
import matplotlibfrom sklearn.manifold import TSNE
matrix = np.vstack(df_embedded['embedding_vec'].values)
tsne = TSNE(n_components=2, perplexity=15, random_state=42, init='random', learning_rate=200)
vis_dims = tsne.fit_transform(matrix)
colors = ["red", "darkorange", "gold", "turquoise", "darkgreen"]
x = [x for x,y in vis_dims]
y = [y for x,y in vis_dims]color_indices = df_embedded.Score.values - 1
colormap = matplotlib.colors.ListedColormap(colors)
plt.scatter(x, y, c=color_indices, cmap=colormap, alpha=0.3)
plt.title("Amazon ratings visualized in language using t-SNE")
plt.show()# 示例二:评论的聚类 与评论的文本相似度的关系
import numpy as np
from sklearn.cluster import KMeans
n_clusters = 4
kmeans = KMeans(n_clusters = n_clusters, init='k-means++', random_state=42, n_init=10)
kmeans.fit(matrix)
df_embedded['Cluster'] = kmeans.labels_
colors = ["red", "green", "blue", "purple"]tsne_model = TSNE(n_components=2, random_state=42)
vis_data = tsne_model.fit_transform(matrix)
x = vis_data[:, 0]
y = vis_data[:, 1]
color_indices = df_embedded['Cluster'].values
colormap = matplotlib.colors.ListedColormap(colors)
plt.scatter(x, y, c=color_indices, cmap=colormap)
plt.title("Clustering visualized in 2D using t-SNE")
plt.show()# 示例三:文本检索,输入关键字,查找相似的评论
# cosine_similarity 函数计算两个嵌入向量之间的余弦相似度。
def cosine_similarity(a, b):return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))# 定义一个名为 search_reviews 的函数,
def search_reviews(df, product_description, n=3, pprint=True):product_embedding = embedding_text(product_description)df["similarity"] = df.embedding_vec.apply(lambda x: cosine_similarity(x, product_embedding))results = (df.sort_values("similarity", ascending=False).head(n).combined.str.replace("Title: ", "").str.replace("; Content:", ": "))if pprint:for r in results:print(r[:200])print()return resultsres = search_reviews(df_embedded, 'delicious beans', n=3)

例子一的输出:

上图可以看出,评论分成了几大块,分别有正面,负面,狗粮相关评论(通过实际数据可以看出,这个分类没有问题)。

        但是,评分与评论的关系好像并不明显?

        其实这也很好解释:因为网络评价就是这样,高分有可能是个负面评论,正面评论可能是个高分,没有直接相关性。下面例子进一步说明。

例子二:

        我们通过聚类,用聚类的值替代评分,发现了KMeans的聚类 和 评论相似度的计算是一致的,仔细查看四个色块的评论,确实是四种不同的评论。分别是:两个正面,一个狗粮评论,一个负面评论)

例子三的输出:

Good Buy:  I liked the beans. They were vacuum sealed, plump and moist. Would recommend them for any use. I personally split and stuck them in some vodka to make vanilla extract. Yum!

Jamaican Blue beans:  Excellent coffee bean for roasting. Our family just purchased another 5 pounds for more roasting. Plenty of flavor and mild on acidity when roasted to a dark brown bean and befor

Delicious!:  I enjoy this white beans seasoning, it gives a rich flavor to the beans I just love it, my mother in law didn't know about this Zatarain's brand and now she is traying different seasoning

可以看出,搜索的效果非常不错,

对了,RAG的向量知识库的检索,背后的技术原理应该就是使用Embedding来完成的。

好了,差不多就这些内容了,Embedding技术了解这么多就足够了。

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

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

相关文章

如何快速提取出一个文件里面全部指定类型的文件的全部路径

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 打开工具,切换到第五个模块,文件批量复制模块(快捷键:Ctrl5) 点击右边的“搜索添加”按钮&#…

unordered系列关联式容器底层哈希结构的介绍,哈希表的模拟实现(哈希冲突的解决方法采用闭散列线性探测)

目录 前言 unordered系列关联式容器之所以处理数据的效率比较高,是因为底层使用了哈希结构,哈希结构的优点是:不经过任何比较,一次直接从表中得到要搜索的元素,通过某种函数(hashFunc)使元素的存储位置与它的关键码之…

mapreduce | 自定义Partition分区(案例2)

1.需求 统计每个手机号消费总金额,按照消费金额降序排序,最终联通、电信、移动分别写入不同的文件。 130、131、132(联通) 133(电信) 135、136、137、138、139 (移动) 手机号,消费记…

全局变量在函数中的使用:Python 编程技巧解析

在Python编程中,全局变量是一种在程序的多个部分中共享数据的机制。全局变量在函数中使用时,需要特别注意其作用域和访问方式。本文将详细讲解如何在函数中使用全局变量,并提供示例代码,帮助初学者深入理解这一概念。 基本原理 …

AI作画涉及的深度学习算法

AI作画中使用的深度学习算法多种多样,这些算法主要基于神经网络的结构和训练方式,以生成和改进艺术作品。以下是一些在AI作画中常用的深度学习算法: 生成对抗网络(GANs, Generative Adversarial Networks)&#xff1a…

Linux —— 线程

Linux —— 线程 什么是线程Linux如何实现线程Winodws如何实现线程使用一下线程pthread_create函数原型参数说明返回值 如何解决 ps -aL 查看线程线程为什么轻量 我们今天进入线程的学习: 什么是线程 我们先来了解一个笼统的概念:简单来说,…

计算机发展史故事【12】

芯片计算机 众所周知,所谓286、386、486 个人电脑等名称的起源,在于它们采用了英特尔公司研制的微处理器X86 系列芯片286、386 和486。然而,这种以数字为电脑命名的奇特现象,却来源于霍夫博士等人发明的世界上第一个微处理器芯片…

动态路由-链路状态路由协议ospf案例

实验拓扑和要求如图 ospf实验 1.设置各个接口地址 2.测试ar5到ar6的连通性 3.配置ospf协议,routerid,area, 详细的网络信息,等待网络收敛后, 查看ospf信息,路由表信息,再次测试连通性 注意区域…

防火墙技术基础篇:网络地址转换(NAT):防火墙技术的核心机制

防火墙技术基础篇:网络地址转换(NAT):防火墙技术的核心机制 网络地址转换(NAT)是现代网络架构中不可或缺的一个组成部分,尤其在防火墙技术的实现中扮演着重要角色。本文旨在全面解读NAT的工作机…

AI算法-高数5.1-线性代数-向量定义、表示和向量间的关系

看线性代数这篇文章(AI算法-高数5-线性代数1-基本概念、向量-CSDN博客)理解有些吃力的朋友们,可以先学下宋浩老师的这些课程。 宋浩老师: 3.1 n维向量及其运算_哔哩哔哩_bilibili 3.2 向量间的线性关系(一&#xff…

MFC编程之设计美丽的对话框

目录 写在前面: Part 1:美美的设计一下计算器的布局 1.描述文字: ​编辑 2.ID: Part 2:美美熟悉一下计算器的工作流程 Part 3:美美设计一下控件功能 1.edit control: 2.相关变量初始化&…

Agilent MSO9404A、Keysight MSO9404A示波器,4 GHz,4 通道,20 GSa/s

Agilent MSO9404A、Keysight MSO9404A、HP MSO9404A 示波器,4 GHz,4 通道,20 GSa/s Keysight MSO9404A 示波器配备 15 英寸 XGA 显示屏,封装深度仅为 9 英寸(23 厘米),重量仅为 26 磅&#xff…

AI地名故事:笔岗村

笔岗村,实际上是由笔村和宏岗村两个古老的村落合并而成的。南宋度宗元年,也就是公元1265年,笔村开始建立。随着时间的推移,到了宋代后期,宏岗村也相继建立。这两个村落各自承载着丰富的历史和文化,最终在历…

铁山靠之数学建模 - Matlab入门

Matlab基础 1. Matlab界面与基本操作1.1 matlab帮助系统1.2 matlab命令1.3 matlab功能符号1.4 matlab的数据类型1.5 函数计算1.6 matlab向量1.7 matlab多项式1.8 M文件1.9 函数文件1.10 matlab的程序结构1.11 echo、warning和error函数1.12 交互输入1.13 程序调试1.14 设置断点…

‌‍‬⁣⁡​⁤⁢​⁢⁡⁣‬‍‌​​‬ ​‍⁤‬ ‬⁡⁡⁡‍‌‬⁡⁡⁢‬⁤⁢⁢⁤​‍‌​​‬ ​⁣‌绘唐3一键追爆款反推软件哪家好

‌‍‬⁣⁡​⁤⁢​⁢⁡⁣‬‍‌​​‬ ​‍⁤‬ ‬⁡⁡⁡‍‌‬⁡⁡⁢‬⁤⁢⁢⁤​‍‌​​‬ ​⁣‌绘唐3一键追爆款反推软件哪家好 支持单镜精绘,可以根据故事情节进行单镜头绘图调整,并支持对SD各类模型的自定义调整。 支持一键完成图文视频合成&am…

Windows11“重置此电脑”后,Edge浏览器在微软应用商店显示“已安装”,但是开始菜单搜索不到的解决办法

Windows11“重置此电脑”后,Edge浏览器在微软应用商店显示“已安装”,但是开始菜单搜索不到的解决办法 为什么重新使用Edge?问题描述不该更新可用更新问过AI(通义千问),并且AI提供方法全都无效。现象 操作步…

国产分布式数据库高可用故障检测实现

在分布式数据库架构下,当数据库节点异常时,数据库管理组件能够自动感知到异常并触发节点隔离或者自动切换,是数据库高可用容灾的基本能力。在节点服务器异常、网络异常或进程异常等场景下,各数据库产品本身已经具备了可靠的检测能…

为什么说气膜是环保建筑呢—轻空间

气膜建筑,作为一种绿色环保建筑,其环保特性主要体现在以下几个方面: 1. 节约水资源: 气膜建筑在施工和运行过程中不需要大量水资源,与传统建筑相比,可以每年节约数万吨水资源。这种节约不仅有利于缓解水资源…

【学习AI-相关路程-工具使用-自我学习-Ubuntucudavisco-开发工具尝试-基础样例 (2)】

【学习AI-相关路程-工具使用-自我学习-cuda&visco-开发工具尝试-基础样例 (2)】 1、前言2、环境说明3、总结说明4、工具安装0、验证cuda1、软件下载2、插件安装 5、软件设置与编程练习1、创建目录2、编译软件进入目录&创建两个文件3、编写配置文…

【iOS开发】—— 初识锁

【iOS开发】—— 初识锁 线程安全锁的种类自旋锁定义原理自旋锁缺点OSSpinLock(自旋锁) 互斥锁os_unfair_lockpthread_mutexNSLockNSRecusiveLockSemaphore信号量synchronized 总结两种之间的区别和联系: 线程安全 当一个线程访问数据的时候…