如果你想吃第5个馒头,总要先吃了前4个才可以。
学习也一样,需要循序渐进。
很多同学觉得Transformer模型难学,看不懂;
这是因为Transformer是一个非常复杂的模型。
其中包括了很多的基础知识;
这些基础知识都需要同学们提前掌握;
然后才能开始学习Transformer模型中的特有内容。
例如,图中的红框圈出了:
线性层(Linear);
词嵌入(Embedding);
前馈神经网络(Feed-Forward);
…等等。
这些部分,都是学习Transformer模型的前提依赖。
就比如我们完全没办法跳过线性层,直接去学习多头注意力机制;
这是因为多头注意力机制,就是由多个线性层构成的。
对于初学者来说,Transformer模型的第一个组件:
词嵌入(Embedding)层,第一个学习难点。
看不明白Embedding层,就很容易就被劝退了。
今天,我就试着从头,从零讲解Transformer模型。
其中会详细讲解Transformer模型的第一个组件:
什么是词嵌入,Embedding技术。
这里我先笼统、概述的说一下Embedding技术。
实际上,只要是使用深度学习模型处理NLP问题;
都需要在模型中添加,Embedding层。
例如,在下面的llama3架构中:
其中的2号位置,就是词嵌入层。
Embedding层用于将离散的单词数据,转换为连续且固定长度的向量:
这样使模型才能处理和学习这些数据的语义信息。
例如,我们希望将“Are you OK ?”这句话,作为神经网络模型的输入。
此时神经网络是没办法直接处理这句文本的。
我们需要先将“Are you OK ?”,基于词表vocab,转为整数索引序列的形式。
例如,转为1、2、3、4。
然后再基于Embedding层,将整数索引序列,转换为单词向量的序列。
过程如下图所示:
这里假设每个单词用4维的向量表示。
那么四个词的句子“Are you OK ?”,就会被转换为4*4的词向量矩阵;
每行对应一个单词。
得到输入文本的词向量矩阵后,才可以继续使用神经网络对文本进行特征提取和处理。
下面,我就重点讲解词嵌入技术的三个关键部分:
1.词嵌入的作用
2.嵌入矩阵的计算
3.Embedding层的代码实验
帮助大家理解词嵌入(Embedding)技术的原理和使用方法。
1.词嵌入有什么用
词嵌入是一种将词汇表中的词或短语,映射为固定长度向量的技术。
通过词嵌入,我们可以将高维且稀疏的单词索引,转为低维且连续的向量。
转换后的连续向量,可以表示出单词与单词之间的语义关系。
例如,假设词汇表中有10000个单词:
此时我们希望表示出man、woman、king、queen四个词语
这四个词语的索引是1~10000中的4个整数。
如果用one-hot向量表示这4个词;
那么就需要4个10000维度的one-hot向量。
这种表示方法,不仅维度高,而且非常的稀疏。
在向量中,只有1个维度是1,其他维度都是0。
不仅如此,单词向量和单词向量之间,都是正交的,没有任何语义关系。
我们使用词嵌入技术,可以把上述的4四个高维稀疏的onehot向量,转换为低维连续向量。
转换后的向量,每个维度都是一个浮点数。
图中就表示了,将单词映射到一个7维的空间中;
那么每个词语就都对应了一个7维的浮点数向量。
为了进一步说明词与词之间的关系:
我们还可以使用PCA降维算法,将7维的词嵌入向量降维至2维。
从而将单词向量在平面上绘制出来。
例如,在下图中:
语义相近的词语,词语对应的向量位置也更相近。
例如,cat猫与kitten小猫的含义相近,它们就聚在一起。
horse、dog与cat的语义差异比kitten大,所以它们距离cat,就相对较远。
不仅如此,我们还可以通过词嵌入向量的数学关系,来描述词语之间的语义关联。
例如,从图中可以看出:
向量(“king”)−向量(“man”)≈向量(“queen”)-向量(“woman”)。
总结来说:
词嵌入技术能够有效地将自然语言中的词语,转换为数值向量;
从而表达词语之间的语义关系。
这种技术也为后续更高级的自然语言处理任务,提供了坚实的基础。
2.嵌入矩阵的计算
为了实现词嵌入,我们会通过特定的词嵌入算法;
例如,word2vec、fasttext、Glove等等,训练一个通用的嵌入矩阵。
下图就表示了一个嵌入矩阵:
这个嵌入矩阵,就是embedding层。
矩阵中的每一行都代表了一个词向量。
这些词向量,都是连续的浮点数。
一旦训练完成,就可以用在不同的NLP任务中。
具体来说:
嵌入矩阵的行,是语料库中词语的个数。
矩阵的列是表示词语的维度。
例如:
上图中的嵌入矩阵,就表示了语料库中包括了5000个单词;
每个单词,都使用一个128维的向量表示;
这个嵌入矩阵是一个5000*128维的矩阵。
下面我们详细说明嵌入矩阵的使用方法。
我们具体使用两种方式来解释:
第1种方式,基于矩阵相乘说明嵌入矩阵。
第2种方式,基于索引的查找说明嵌入矩阵。
首先声明一些关键信息:
设词表中包括5000个单词;
每个词使用一个128维的向量表示。
因此嵌入矩阵的大小就是5000*128;
我们将该矩阵记为E。
我们要将句子“Are you OK ?”进行词嵌入。
通过词嵌入,会将句子中的每个词,都表示为一个128维的向量。
例如:
图中就表示了“Are you OK ?”4个词的嵌入矩阵;
每一行是一个单词的词向量;
4个词的词向量矩阵,大小是4*128。
第1种解释方式,基于矩阵相乘的进行解释。
将“Are you OK ?”中的每个词,进行One-Hot编码:
编码后得到如图中的矩阵。
其中每个词是一个5000维的向量;
整个句子是4*5000的矩阵。
我们将这个矩阵记作V。
将矩阵V和嵌入矩阵E相乘,就会得到一个4*128的矩阵。
计算过程如下:
这个4×128的矩阵,就是句子“Are you OK ?”的嵌入向量。
第2种解释方式,基于索引查找的进行解释。
对于“Are you OK ?”中的4个单词,每个单词都对应一个1~5000的整数索引。
这个整数,就是它们的one-hot向量中,不是0的那个维度数。
例如在图中:
不为1的位置就对应了单词的索引序号。
也就是“Are you OK ?”的整数索引,分别对应2、1、3和5000。
此时,我们根据2、1、3、和5000;
获取嵌入矩阵的第2行、第1行、第3行与第5000行就可以了。
计算过程如下:
最后获取到的四行向量,
就代表“Are”、“you”、“OK”和“?”四个词的词向量。
这相当于词语1就是you;
词语2是are;
词语3是OK;
词语5000是问号。
总结来说:
使用矩阵V和矩阵E相乘得到的词向量矩阵;
与通过索引获取到的词向量矩阵;
它们的结果是完全一样的。
3.Embedding层的使用
最后,我们要讲解如何基于Pytorch,创建词嵌入层。
具体会使用torch.nn,创建一个embedding层;
然后使用这个embedding层,计算出单词的词向量;
最后并将词向量其进行可视化。
实验代码如下:
1)首先从torchtext.vocab中导入GloVe词向量
简单介绍GloVe词向量,它是斯坦福大学的研究者在2014年开发和发布的。
GloVe和word2vec与fasttext,是当前最常用的3个词向量版本。
这里调用GloVe接口,传入词向量的名字6B与对应维度300。
6B表示了模型是基于60 亿个单词的语料库训练的;
300表示一个单词,使用300维的向量表示。
2)接着使用nn.Embedding创建词嵌入层
将glove.vectors,通过from_pretrained接口,导入到Embedding层中。
此时的embedding层,就载入了GloVe词向量数据。
打印embedding层中的weight的尺寸。
可以看到,程序的输出是一个400000×300尺寸的矩阵。
它代表了该词向量层,包含40万个单词,每个单词使用300维来表示。
3)获取单词的索引形式
接着,我们要将man、woman、king、queen等8个词语的索引和对应的词向量打印出来。
首先需要将单词word,通过glove的词汇表,转换为单词的索引index。
然后将这些索引index保存到indices数组中。
打印单词word和索引index的对应关系。
观察程序输出,可以看到:
man对应300、woman对应787等等。
4)根据单词的索引获得词向量
得到单词的索引后,将索引列表,使用torch.tensor,转为张量的形式。
然后通过embedding层,将索引列表indices转换为,词向量的矩阵vector。
打印vector的尺寸,可以看到vector是一个8×300的矩阵。
8代表8个单词,300代表每个单词是一个300维的向量。
5)通过PCA降维和plt接口,绘制词向量
最后,我们使用PCA降维算法,将向量vectors进行降维。
这里使用pca.fit_transform接口,参数n_components设置为2;
将vectors从300维降维到2维。
最后调用plt.scatter和plt.annotate,将单词和向量,绘制到二维平面上。
观察绘制效果:
可以看到,cat和dog位置相近;
king和queen相近;
father、mother、man、woman四个词位置相近。
那么到这里,什么是词嵌入,Embedding技术,就讲完了。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。