深度解析大语言模型中的词向量

news2024/10/9 20:21:09

在学习完语言模型中的编码器与解码器知识后,让我们继续深入学习大语言模型中一个非常关键的技术:词向量表示,以及如何通过Transformer模型实现对next token的预测。

1、词向量

要了解语言模型的工作原理,首先需要了解它们如何表示单词。人类用字母序列来表示英文单词,比如C-A-T表示猫。语言模型使用的是一个叫做词向量的长串数字列表。例如,这是一种将猫表示为向量的方式:

[0.0074, 0.0030, -0.0105, 0.0742, 0.0765, -0.0011, 0.0265, 0.0106, 0.0191, 0.0038, -0.0468, -0.0212, 0.0091, 0.0030, -0.0563, -0.0396, -0.0998, -0.0796, …, 0.0002]

(注:完整的向量长度实际上有300个数字)

为什么要使用如此复杂的表示法?这里有个类比,华盛顿特区位于北纬38.9度,西经77度,我们可以用向量表示法来表示:
 

• 华盛顿特区的坐标是[38.9,77]

• 纽约的坐标是[40.7,74]

• 伦敦的坐标是[51.5,0.1]

• 巴黎的坐标是[48.9,-2.4]

这对于推理空间关系很有用。你可以看出,纽约离华盛顿特区很近,因为坐标中38.9接近40.7,77接近74。同样,巴黎离伦敦也很近。但巴黎离华盛顿特区很远。

语言模型采用类似的方法:每个词向量代表了“词空间(word space)”中的一个点,具有相似含义的词的位置会更接近彼此。例如,在向量空间中与猫最接近的词包括狗、小猫和宠物。用实数向量表示单词(相对于“C-A-T”这样的字母串)的一个主要优点是,数字能够进行字母无法进行的运算。
 

单词太复杂,无法仅用二维表示,因此语言模型使用具有数百甚至数千维度的向量空间。人类无法想象具有如此高维度的空间,但计算机完全可以对其进行推理并产生有用的结果。

几十年来,研究人员一直在研究词向量,但这个概念真正引起关注是在2013年,那时Google公布了word2vec项目。Google分析了从Google新闻中收集的数百万篇文档,以找出哪些单词倾向于出现在相似的句子中。随着时间的推移,一个经训练过的神经网络学会了将相似类别的单词(如狗和猫)放置在向量空间中的相邻位置。
 

Google的词向量还具有另一个有趣的特点:你可以使用向量运算“推理”单词。例如,Google研究人员取出最大的(biggest)向量,减去大的(big)向量,再加上小的(small)向量。与结果向量最接近的词就是最小的(smallest)向量。


你可以使用向量运算来做类比!在这个例子中,大(big)与最大的(biggest)的关系,类似于小(small)与最小的(smallest)的关系。Google的词向量捕捉到了许多其他的关系:

• 瑞士人与瑞士类似于柬埔寨人与柬埔寨。(国籍)

• 巴黎与法国类似于柏林与德国。(首都)

• 不道德的与道德的类似于可能的与不可能的。(反义词)

• Mouse(老鼠)与mice(老鼠的复数)类似于dollar(美元)与dollars(美元的复数)。(复数形式)

• 男人与女人类似于国王与女王。(性别角色)

因为这些向量是从人们使用语言的方式中构建的,它们反映了许多存在于人类语言中的偏见。例如,在某些词向量模型中,(医生)减去(男人)再加上(女人)等于(护士)。减少这种偏见是一个很新颖的研究领域。

尽管如此,词向量是语言模型的一个有用的基础,它们编码了词之间微妙但重要的关系信息。如果一个语言模型学到了关于猫的一些知识(例如,它有时会去看兽医),那同样的事情很可能也适用于小猫或狗。如果模型学到了关于巴黎和法国之间的关系(例如,它们共用一种语言),那么柏林和德国以及罗马和意大利的关系很可能是一样的。

2、词的意义取决于上下文

像这样简单的词向量方案并没有捕获到自然语言的一个重要事实:词通常有多重含义。
 

例如,单词“bank”可以指金融机构或河岸。或者考虑以下句子:

• John picks up a magazine(约翰拿起一本杂志)。

• Susan works for a magazine(苏珊为一家杂志工作)。

这些句子中,“magazine”的含义相关但又有不同。约翰拿起的是一本实体杂志,而苏珊为一家出版实体杂志的机构工作。
 

当一个词有两个无关的含义时,语言学家称之为同音异义词(homonyms)。当一个词有两个紧密相关的意义时,如“magazine”,语言学家称之为多义词(polysemy)。

像ChatGPT这样的语言模型能够根据单词出现的上下文以不同的向量表示同一个词。有一个针对“bank(金融机构)”的向量,还有一个针对“bank(河岸)”的向量。有一个针对“magazine(实体出版物)”的向量,还有一个针对“magazine(出版机构)”的向量。正如你预想的那样,对于多义词的含义,语言模型使用的向量更相似,而对于同音异义词的含义,使用的向量则不太相似。
 

到目前为止,我们还没有解释语言模型是如何做到这一点——很快会进入这个话题。不过,我们正在详细说明这些向量表示,这对理解语言模型的工作原理非常重要。

传统软件的设计被用于处理明确的数据。如果你让计算机计算“2+3”,关于2、+或3的含义不存在歧义问题。但自然语言中的歧义远不止同音异义词和多义词:

• 在“the customer asked the mechanic to fix his car(顾客请修理工修理他的车)”中,“his”是指顾客还是修理工?

• 在“the professor urged the student to do her homework(教授催促学生完成她的家庭作业)”中,“her”是指教授还是学生?

• 在“fruit flies like a banana”中,“flies”是一个动词(指在天空中飞的水果像一只香蕉)还是一个名词(指喜欢香蕉的果蝇)?

人们根据上下文来解决这类歧义,但并没有简单或明确的规则。相反,这需要理解关于这个世界的实际情况。你需要知道修理工通常会修理顾客的汽车,学生通常完成自己的家庭作业,水果通常不会飞。

词向量为语言模型提供了一种灵活的方式,以在特定段落的上下文中表示每个词的准确含义。现在让我们看看它们是如何做到这一点的。

3、将词向量转化为词预测


ChatGPT原始版本背后的GPT-3模型,由数十个神经网络层组成。每一层接受一系列向量作为输入——输入文本中的每个词对应一个向量——并添加信息以帮助澄清该词的含义,并且更好地预测接下来可能出现的词。
 

让我们从一个简单的事例说起。
 


LLM的每个层都是一个Transformer,2017年,Google在一篇里程碑的论文中首次介绍了这一神经网络结构。
 

在图表底部,模型的输入文本是“John wants his bank to cash the(约翰想让他的银行兑现)”, 这些单词被表示为word2vec风格的向量,并传送至第一个Transformer。这个Transformer确定了wants和cash都是动词(这两个词也可以是名词)。我们用小括号中的红色文本表示这一附加的上下文,但实际上模型会通过修改词向量的方式来存储这一信息,这种方式对人类来说很难解释。这些新的向量被称为隐藏状态(hidden state),并传递给下一个Transformer。

第二个Transformer添加了另外两个上下文信息:它澄清了bank是指金融机构(financial institution)而不是河岸,并且his是指John的代词。第二个Transformer产生了另一组隐藏状态向量,这一向量反映的是该模型之前所学习的所有信息。

上述图表描绘的是一个纯假设的LLM,所以不要对细节过于较真。真实的LLM往往有更多层。例如,最强大的GPT-3版本有96层。
 

研究表明(https://arxiv.org/abs/1905.05950),前几层专注于理解句子的语法并解决上面所示的歧义。后面的层(为保持图表大小的可控性上述图标没有显示)则致力于对整个段落的高层次理解
 

例如,当LLM“阅读”一篇短篇小说时,它似乎会记住关于故事角色的各种信息:性别和年龄、与其他角色的关系、过去和当前的位置、个性和目标等等。
 

研究人员并不完全了解LLM是如何跟踪这些信息的,但从逻辑上讲,模型在各层之间传递时信息时必须通过修改隐藏状态向量来实现。现代LLM中的向量维度极为庞大,这有利于表达更丰富的语义信息。
 

例如,GPT-3最强大的版本使用有12288个维度的词向量,也就是说,每个词由一个包含12288个的数字列表表示。这比Google在2013年提出的word2vec方案要大20倍。你可以把所有这些额外的维度看作是GPT-3可以用来记录每个词的上下文的一种“暂存空间(scratch space)”。较早层所做的信息笔记可以被后来的层读取和修改,使模型逐渐加深对整篇文章的理解。
 

因此,假设我们将上面的图表改为,描述一个96层的语言模型来解读一个1000字的故事。第60层可能包括一个用于约翰(John)的向量,带有一个表示为“(主角,男性,嫁给谢丽尔,唐纳德的表弟,来自明尼苏达州,目前在博伊西,试图找到他丢失的钱包)”的括号注释。同样,所有这些事实(可能还有更多)都会以一个包含12288个数字列表的形式编码,这些数字对应于词John。或者,该故事中的某些信息可能会编码在12288维的向量中,用于谢丽尔、唐纳德、博伊西、钱包或其他词。

这样做的目标是,让网络的第96层和最后一层输出一个包含所有必要信息的隐藏状态,以预测下一个单词。


 

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

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

相关文章

VSCode美化

今天有空收拾了一下VSCode,页面如下,个人觉得还是挺好看的~~ 1. 主题 Noctis 色彩较多,有种繁杂美。 我使用的是浅色主题的一款Noctis Hibernus 2. 字体 Maple Mono 官网:Maple-Font 我只安装了下图两个字体,使…

UE4_普通贴图制作法线Normal材质

UE4 普通贴图制作法线Normal材质 2021-07-02 10:46 导入一张普通贴图: 搜索节点:NormalFromHeightmap 搜索节点:TextureObjectparameter,并修改成导入的普通贴图,连接至HeightMap中 创建参数normal,连接…

32. UE5 RPG使用增强输入激活GameplayAbility(二)

在上一篇文章中,我们实现了Tag和InputAction的数据对应,后面,我们会通过InputAction触发对应的Tag,然后在GameplayAbility身上设置对应的Tag,然后通过Tag遍历角色身上的所有应用的技能去激活。为了实现这个功能&#x…

数据结构进阶篇 之 【交换排序】(冒泡排序,快速排序递归、非递归实现)

当你觉的自己不行时,你就走到斑马线上,这样你就会成为一个行人 一、交换排序 1.冒泡排序 BubbleSort 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 冒泡排序的特性总结 2.快速排序 QuickSort 2.1 基本思想 2.2 递归实现 2.2.1 hoare版 2.2.2 …

蓝桥杯真题:递增序列

import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改 public class Main {public static int is1(char ch[][],int m,int n){int ans0;for (int i0;i<m;i){for (int j0;j<n;j){int add1;while(jadd<n){if(ch[i][j]<ch[i][jadd]) ans; //横…

MySQL - 基础二

6、表的增删改查 CRUD : Create(创建), Retrieve(读取)&#xff0c;Update(更新)&#xff0c;Delete&#xff08;删除&#xff09; 6.1、Create 语法&#xff1a; INSERT [INTO] table_name[(column [, column] ...)]VALUES (value_list) [, (value_list)] ...value_list: v…

JAVA学习笔记22(面向对象三大特征)

1.面向对象三大特征 ​ *封装、继承和多态 1.1 封装 ​ 封装(encapsulation)就是把抽象出的数据[属性]和对数据的操作*[方法**]封装在一起&#xff0c;数据被保护在内部&#xff0c;程序的其它部分只有通过被授权的操作[方法]&#xff0c;方能对数据进行操作 ​ 1.封装的理…

椋鸟数据结构笔记#6:堆及其实现

文章目录 堆的概念堆的实现由数组调整为堆堆向下调整算法通过向下调整算法构建堆 从空堆开始插入节点堆向上调整算法通过向上调整算法构建堆 删除堆顶的元素实现代码 堆的作用 萌新的学习笔记&#xff0c;写错了恳请斧正。 堆的概念 如果有一个关键码的集合 K { k 0 , k 1 , …

基于java的电影院售票网站

开发语言&#xff1a;Java 框架&#xff1a;ssm 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclip…

Doris实践——同程数科实时数仓建设

目录 前言 一、早期架构演进 二、Doris和Clickhouse选型对比 三、新一代统一实时数据仓库 四、基于Doris的一站式数据平台 4.1 一键生成任务脚本提升任务开发效率 4.2 自动调度监控保障任务正常运行 4.3 安全便捷的可视化查询分析 4.4 完备智能的集群监控 五、收益与…

网络与并发编程(一)

并发编程介绍_串行_并行_并发的区别 串行、并行与并发的区别 串行(serial)&#xff1a;一个CPU上&#xff0c;按顺序完成多个任务并行(parallelism)&#xff1a;指的是任务数小于等于cpu核数&#xff0c;即任务真的是一起执行的并发(concurrency)&#xff1a;一个CPU采用时间…

Java 变得越来越像 Rust?

随着编程技术的增强和复杂性的提升&#xff0c;许多编程语言也纷纷效仿&#xff0c;Java 也不例外。 另一边&#xff0c;尽管社区内部问题重重&#xff0c;但 Rust 仍逐年获得开发人员的喜爱。这背后都是有原因的&#xff1a;Rust 的编译器让开发人员避免了各种问题。编译器对…

Spring的BeanFactory和FactoryBean有什么区别?

两者的区别 BeanFactory定义了ioc容器的最基本形式,并提供了ioc容器应遵守的的最基本的接口,也就是Spring ioc所遵守的最底层和最基本的编程规范,它只是个接口,并不是ioc容器的具体实现。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。再来说说…

jvisualvm 使用教程

之前看过 jvisualvm&#xff0c;但是那个时候对 JVM 并不是很熟悉&#xff0c;后面看了下八股文&#xff0c;看了下 JVM 的相关知识之后&#xff0c;发现多了解点 JVM 的东西&#xff0c;对我们 CRUD 其实是有指导意义的&#xff0c;就比如我们通常会 new 一堆的没有用到的对象…

Vue项目+ 打包解决静态资源无法加载和路由加载无效(404)问题

vue项目npm run build打包发到服务器上&#xff0c;背景图片消失 问题 登录页背景图片丢失 控制台报错 找到我们的 config文件夹下面的 index.js 配置文件找到其中的 build 相关配置&#xff0c;assetsPublicPath 这一项默认配置的是‘/’ 我们将他改成 ‘./’ 修改后 修…

【数据结构】初识数据结构与复杂度总结

前言 C语言这块算是总结完了&#xff0c;那从本篇开始就是步入一个新的大章——数据结构&#xff0c;这篇我们先来认识一下数据结构有关知识&#xff0c;以及复杂度的相关知识 个人主页&#xff1a;小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1.什么是数据结构 2.…

k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群&#xff0c;RocketMQ 模式 k8s 部署 canal 集群&#xff0c;RocketMQ 模式前提MySQLRocketMQ制作 canal-admin、canal-server 镜像 部署 zookeeper部署 canal-admin部署 canal-server测试 k8s 部署 canal 集群&#xff0c;RocketMQ 模式 前提 MySQL 开启…

Excel制作甘特图

使用Excel表格制作甘特图&#xff0c;可根据任务开始时间和结束时间自动计算工时&#xff0c;并自动用指定颜色填充横道图。 1.新建Excel文档&#xff0c;先设置项目基本信息&#xff0c;包括表格名称&#xff0c;这里设置为“**项目甘特图”&#xff1b;然后添加任务序号列&a…

移动端WEB开发之响应式布局

一、响应式开发 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进行布局和样式的设置&#xff0c;从而适配不同设备的目的。 1.2 响应式布局容器 响应式需要一个父级做为布局容器&#xff0c;来配合子级元素来实现变化效果。原理就是在不同屏幕下&#xff0c;通过媒体…

机器狗首次阵亡!美国警方披露详情

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了免费的人工智能中文站https://ai.weoknow.com 新建了收费的人工智能中文站https://ai.hzytsoft.cn/ 更多资源欢迎关注 那天&#xff0c;唯一的伤亡者是我们的机器狗。 美国警察最新公布一则案件&#xff1a;波士顿…