Embedding:数据的奇妙之变

在深度学习的领域,Embedding是连接符号与连续的一座桥梁。它通过将高维离散数据映射到低维连续向量空间,为大模型提供了更好的处理能力。

在这一部分,我们将深入研究Embedding的基本概念、作用以及在深度学习中的广泛应用。

一、向量Embedding与ChatGPT大模型

ChatGPT 大模型是 OpenAI 开发的一种基于 Transformer 架构的预训练语言模型。它在大规模语料库上进行了训练,可以实现连贯且富有逻辑的对话生成。ChatGPT 能够理解上下文,生成自然流畅的回复,并且在多轮对话中保持语境的连贯性。

而对于Embedding技术,那么,什么是向量Embedding?简单地说,向量Embedding是可以表示许多类型数据的数字列表。

向量Embedding非常灵活,包括音频、视频、文本和图像都可以表示为向量Embedding。

简单来说,苹果,香蕉,橘子这样的数据,是不可能直接进入到神经网络的模型,需要转化为神经网络可以接受的形式。最开始的时候,我们使用的是One-hot编码格式,one-hot编码的原理举一个简单的例子:

考虑书籍类型:“小说”、“非小说”和“传记”。每一种体裁都可以编码成一个热向量,然而,这样的向量会非常稀疏,因为书籍通常只属于两个体裁。

下图显示了这种编码是如何工作的。注意这里0的数量是1的两倍。对于像图书类型这样的类别,随着更多的类型被添加到数据集中,这种稀疏性将会呈指数级恶化。

稀疏性会给机器学习模型带来挑战。对于每一种新的类型,编码表示的大小都会增长,因此数据集的计算成本会变得很高。

对于图书类型,或者任何具有相对较少类别的分类数据,我们可以使用简单的one-hot编码,但是,对于整个英语语言呢?对于这种规模的语料库,这种编码方法将变得不切实际。因此就进入我们的主题——向量Embedding

Embedding 在 ChatGPT 中的应用:

在 ChatGPT 中,Embedding 起到了将输入文本转换为向量表示的作用。当用户输入一段文本时,ChatGPT 首先会使用Embedding嵌入层将文本中的词语转换为对应的向量表示,然后输入这些向量表示到模型中进行处理。这样做有助于模型更好地理解语义和上下文,从而生成合理的回复。

二、向量Embedding的优势与原理

向量Embedding呈现固定大小的表示,不随数据中观测值的数量而增长。由模型创建的结果向量,通常是384个浮点值,比其他编码方法(如one-hot编码)的表示密度要高得多。这意味着在更少的字节中存在更多的信息,因此在计算上的利用成本更低。以下是一个Embedding的编码示意原理图。

对于每一个字(实则是字ID)输入到Embedding组件中,输出一个表示该字的向量,如上图,“太”字对应的ID输入,输出为向量[e11,e12,e13,e14]。这个字(词)向量的每一维可以当做是隐含的主题,只不过这些主题并没有明显的现实语义。这就是Embedding的文本编码原理。

三、向量Embedding的实践应用

存在大量的预训练模型,可以很容易地用于创建向量Embedding。Huggingface Model Hub (https://huggingface.co/models)包含许多模型,可以为不同类型的数据创建Embedding。

例如,all-MiniLM-L6-v2模型是在线托管和运行的,不需要专业知识或安装。

像sentence_transformers这样的包,也来自HuggingFace,为语义相似度搜索、视觉搜索等任务提供了易于使用的模型。要使用这些模型创建Embeddings,只需要几行Python代码:

  1. 安装 sentence_transformers 编码包
!pip install sentence_transformers
  1. 执行编码

在我们的查询向量和上图中的其他三个向量之间运行这个计算,我们可以确定句子之间的相似程度。

  1. 测试语义搜索的空间向量的判断
import numpy as np
from numpy.linalg import norm
from sentence_transformers import SentenceTransformer# Define the model we want to use (it'll download itself)
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
sentences = ["a very happy person","a happy dog","a sunny day"
]
embeddings = model.encode(sentences)
# query vector embedding
query_embedding = model.encode("a happy person")
# define our distance metric
def cosine_similarity(a, b):return np.dot(a, b)/(norm(a)*norm(b))
# run semantic similarity search
print("Query: a happy person\n")
for e, s in zip(embeddings, sentences):print(s, " -> similarity score = ",cosine_similarity(e, query_embedding))

四、Embedding在大模型中的价值

说到Embedding在大模型中的价值,不如我们先说说目前大模型还存在哪些问题?尽管目前GPT-4或者ChatGPT的能力已经很强大,但是目前它依然有很大的缺陷:

  1. 知识不足或信息丢失
  2. 训练数据是基于2021年9月之前的数据,缺少最新的数据
  3. 无法访问私有的文档
  4. 基于历史会话中获取信息
  5. 对输入的内容长度有限制

因此,OpenAI发布了这样一篇文档,说明如何使用两步搜索回答来增强GPT的能力:

  • 搜索:搜索您的文本库以查找相关的文本部分。
  • 请求:将检索到的文本部分插入到发送给GPT的消息中,并向其提出问题。

GPT可以通过两种方式学习知识:

  • 通过模型权重(即在训练集上微调模型)
  • 通过模型输入(即将知识插入到输入消息中)

尽管微调可能感觉更自然——毕竟,通过数据训练是GPT学习所有其他知识的方式——但OpenAI通常不建议将其作为教授模型知识的方式。微调更适合于教授专业任务或风格,对于事实回忆来说则不太可靠。

测试代码demo:

https://github.com/openai/openai-cookbook/blob/main/examples/Question_answering_using_embeddings.ipynb

此外,可以在大量文本数据上预训练Embedding,然后在小型数据集上进行微调,这有助于提高语言模型在各种自然语言处理应用程序中的准确性和效率。

五、Embedding让大模型解决长文本的输入

这里我们给一个案例来说明如何用Embedding来让ChatGPT回答超长文本中的问题。

如前所述,大多数大语言模型都无法处理过长的文本。除非是GPT-4-32K,否则大多数模型如ChatGPT的输入都很有限。假设此时你有一个很长的PDF,那么,你该如何让大模型“读懂”这个PDF呢?

首先,你可以基于这个PDF来创建向量embedding,并在数据库中存储(当前已经有一些很不错的向量数据库了,如Pinecone)。

接下来,假设你想问个问题“这个文档中关于xxx是如何讨论的?”。那么,此时你有2个向量embedding了,一个是你的问题embedding,一个是之前PDF的embedding。此时,你应该基于你的问题embedding,去向量数据库中搜索PDF中与问题embedding最相似的embedding。然后,把你的问题embedding和检索的得到的最相似的embedding一起给ChatGPT,然后让ChatGPT来回答。

当然,你也可以针对问题和检索得到的embedding做一些提示工程,来优化ChatGPT的回答。

六、Embedding技术的未来发展

模型的细粒度和多模态性:例如,字符级(Char-level)的嵌入、语义级的嵌入,以及结合图像、声音等多模态信息的嵌入。

更好的理解和利用上下文信息:例如,动态的、可变长度的上下文,以及更复杂的上下文结构。

模型的可解释性和可控制性:这包括模型的内部结构和嵌入空间的理解,以及对模型生成结果的更精细控制。

更大规模的模型和数据:例如,GPT-4、GPT-5等更大规模的预训练模型,以及利用全球范围的互联网文本数据。

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

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

相关文章

如何一台电脑操作两个adb 设备

1.首先使用 adb devies 命令 2.然后使用 adb -s 上面的返回的id号 shell 进入对应的开发板

机器学习:自然语言处理介绍

机器学习在自然语言处理(NLP)领域扮演着关键的角色,它利用算法和统计模型来处理和理解人类语言。以下是一些与机器学习和自然语言处理相关的关键概念和技术: 文本分类: 机器学习可以用于对文本进行分类,例如…

matlab/simulink风电光伏储能虚拟同步机VSG下垂控制虚拟惯量控制,光伏变压减载控制一次调频二次调频研究,储能下垂控制SOC

非无穷大系统! 第一个介绍风光储VSG算例研究。 其中风机采用虚拟惯性控制,下垂控制,网侧采用VSG虚拟同步机控制。储能下垂控制。 上述结果为整个系统的仿真波形,包括频率,pmsg永磁风机出力,储能出力&…

Python 使用类实现装饰器

一、基本原理 使用类实现装饰器的基本原理: 定义一个类,__init__ 方法用于初始化装饰器的状态, __call__ 方法用于定义在调用被装饰函数时所执行的逻辑。通过类创建一个可调用对象(类的实例),该对象在被调用时执行 _…

批量合并PDF 文件的 5 大解决方案

PDF 可以将一个、两个、三个甚至更多的记录封装在一起,以显示完整的信息和用于逻辑和交互式结构化的不同元素。由于 PDF 可以提出多层结构,因此当用户知道如何最大化这种格式时,将所有文件组织到其中非常有效。正如许多经验丰富的用户和 PDF …

中国飞行模拟器行业研究与投资前景报告(2024版)

内容简介: 国外从事飞行模拟器研究的公司主要有加拿大航空电子设备(CAE)公司和MSI公司,法国的泰雷兹公司,美国的飞安国际公司、罗克韦尔•科林斯公司、L3技术公司和红雀模拟飞行技术公司,德国Simtec六自由度运动模拟系统公司等。…

c# 人脸识别的思路

在C#中实现人脸识别,您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤: 安装与引用SDK: 首先,您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK,并将其安装…

运维大模型评测基准OpsEval发布及解读

在2023年CCF国际AIOps挑战赛暨“大模型时代的AIOps”研讨会上,由清华大学、中国科学院计算机网络信息中心、南开大学、必示科技、中兴通讯、中亦科技、腾讯、华为、联想、国泰君安证券、基石数据、Zabbix中国宏时数据、日志易等多家首批社区成员单位共同发布了国内首…

基于Java SSM框架实现新生入学信息管理系统项目【项目源码+论文说明】

基于java的SSM框架实现新生入学信息管理系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认…

基于Java SSM框架实现学生寝室管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现学生寝室管理系统演示 摘要 寝室管理设计是高校为学生提供第二课堂,而我们所在学院多采用半手工管理学生寝室的方式,所以有必要开发寝室管理系统来对进行数字化管理。既可减轻学院宿舍长工作压力,比较系统地对宿舍通告…

省略文字,动态行,查看更多显示全部 组件

备注: 使用 TypeScript 和 React的函数式组件语法。此组件的目的是显示文本,如果文本内容超出了指定的行数,它将显示一个“查看更多”的按钮。当用户点击这个按钮时,将展示全部的文本内容。组件使用了自定义的钩子 useBoundingCli…

JWT相关问题及答案(2024)

1、什么是 JWT,它通常用于什么目的? JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在不同实体之间安全地传输信息。它由三个部分组成:头部(Header)、载…

微信商家转账到零钱如何开通?场景说明

商家转账到零钱是什么? 通过商家转账到零钱这个功能,如果我们系统需要对用户支付费用,比如发放佣金、提成、退款之类的,可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版,2022年5月1…

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频

Java 开源扫雷游戏 JMine 发布新版 3.0 及介绍视频 Java 开源扫雷游戏 JMine 是笔者开发的基于 Swing 的 Java 扫雷游戏,现已发布新版 3.0 及其介绍视频。视频请见: https://www.bilibili.com/video/BV1RK4y1z7Qz/ 老版本 JMine 1.2.5 的介绍视频请见…

js sort方法的使用

JavaScript中的数组sort()方法用于对数组元素进行排序。默认情况下,sort()方法会按照字符串的Unicode编码进行排序。即使数组中的元素是数字,它们也会被转换为字符串进行比较。 sort()方法会修改原始数组,并返回排序后的数组。 sort()方法的…

【python】12.字符串和正则表达式

使用正则表达式 正则表达式相关知识 在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要,正则表达式就是用于描述这些规则的工具,换句话说正则表达式是一种工具,它定义了字符串的匹配模式(…

机器学习-线性回归

1、线性回归解决的问题 线性回归是利用被称为线性回归方程的最小平方函数对一个或者多个自变量和因变量之间关系进行建模的一种回归分析。这种函数是一个或者多个被称为回归系数的模型参数的线性组合。 2、一元线性回归 一元线性回归分析:找到一条直线能够最大程…

socket网络编程几大模型?看看CHAT是如何回复的?

CHAT回复:网络编程中常见的有以下几种模型: 1. 阻塞I/O模型(Blocking I/O):传统的同步I/O模型,一次只处理一个请求。 2. 非阻塞I/O模型(Non-blocking I/O):应用程序轮询…

医疗器械分类及是否需要临床

1、医疗器械的分类: 在中国,医疗器械的管理分为一类、二类和三类,这是根据《医疗器械监督管理条例》的规定划分的。不同类别的医疗器械受到不同的监督和管理,包括注册审批、生产质量监督、市场监管等方面。 一类医疗器械&#x…

S1-12 中断

中断 在计算机系统中,中断(Interrupt)是指某个硬件设备或软件程序发出一个信号,通知 CPU 暂停当前正在执行的任务并转而执行另一个任务。中断用于处理一些需要立即响应、优先级较高的事件,例如输入设备(例…