Embedding详解、怎么将多句话转为vector的?

API:

torch.nn.Embedding(num_embeddings,

embedding_dim,

padding_idx=None,

max_norm=None,

norm_type=2.0,

scale_grad_by_freq=False,

sparse=False, _weight=None)

  1. num_embeddings (python:int) – 词典的大小尺寸,比如总共出现5000个词,那就输入5000。此时index为(0-4999)
  2. embedding_dim (python:int) – 嵌入向量的维度,即用多少维来表示一个词。
  3. padding_idx (python:int, optional) – 填充id,比如,输入长度为100,但是每次的句子长度并不一样,后面就需要用统一的数字填充,而这里就是指定这个数字,这样,网络在遇到填充id时,就不会计算其与其它符号的相关性。(初始化为0)
  4. max_norm (python:float, optional) – 最大范数,如果嵌入向量的范数超过了这个界限,就要进行再归一化。
  5. norm_type (python:float, optional) – 指定利用什么范数计算,并用于对比max_norm,默认为2范数。
  6. scale_grad_by_freq (boolean, optional) – 根据单词在mini-batch中出现的频率,对梯度进行放缩。默认为False.
  7. sparse (bool, optional) – 若为True,则与权重矩阵相关的梯度转变为稀疏张量。

为什么使用nn.Embedding()?

其实一句话说明白就是:

将原来(bz, max_length, dict_len)–> (bz, dict_len, embedding_dim)维度上,避免了ont-hot带来的稀疏性

  • bz:batch-size
  • max_length:一句话的最大长度(在cv中就是总共有多少类别,例如imageNet有1000类)
  • dict_len:字典长度,也就是组成所有句子的所有的独一无二的词有多少
  • embedding_dim:隐藏维度的大小

详解:

提到embedding_dim,就不得先从one_hot向量说起。

最初的时候,人们将word转换位vector是利用one_hot向量来实现的。简单来讲,现在词典一共5个字,[‘我’,‘是’,‘中’,‘国’,‘人’],即num_embedding=5。

而现在有一句话‘我是人’,one_hot则利用一个长度为5的01 one_hot向量来代表这句话中的每个字【有多少个字,就有多少个one-hot编码,每个字都对应一个长度为字典长度的one-hot编码】,有:

  • 我:[1 0 0 0 0 ]
  • 是:[0 1 0 0 0 ]
  • 人:[0 0 0 0 1 ]

显然,这种方法简单快捷,但是当词典的字很多,比如50000个字的时候,这种方法会造成极大的稀疏性,不便于计算。因此,为了改进这些缺点,embedding算是它的一个升级版

embedding翻译word是这样操作的,首先,先准备一本词典,这个词典将原来句子中的每个字映射到更低的维度上去。比如,字典中有50000个字,那按照One-hot方法,我们要为每个字建立一个50000长度的vector,对于embedding来说,我们只需要指定一个embedding_dim,这个embedding_dim<50000即可:

embedding表示法

见下图,原来one-hot处理一句话(这句话有length个字),那我们需要一个(length,50000)的矩阵代表这句话,现在只需要(length,embedding_dim)的矩阵就可以代表这句话(见上图)。

原来one-hot处理一句话(这句话有length个字),那我们需要一个(length,50000)的矩阵代表这句话

上面这张图是计算示意图,为了计算方便,我们将句子的最大长度设置为max_length,也就是说,输入模型的所有语句不可能超过这个长度。原来用one_hot向量表示的话,如果浓缩起来就是上面的那个长条,如果展开则是下方的那个矩阵。也就是说,当整个输入数据X只有一句话时,经过字典的映射,这句话变成(1,max_length,embedding_dim)

当输入数据X有多句话时,即Batch_size不等于1,则经过翻译之后,输入数据X变成(batch_size,max_length,embedding_dim)

因此,nn.embedding(num_embeddings,embedding_dim)的作用就是将输入数据(每个单词)降维到embedding_dim的表示层上,将多句话变成(batch_size,max_length,embedding_dim)维度的vector,得到了输入数据的另一种表现形式

示例:

将2句话,每句话3个单词,字典大小为5,通过 nn.Embedding 到(batch_size,max_length,embedding_dim)维度上:

将词嵌入后的大小为(2,3,4),

更新的参数矩阵是一个 (5, 4)【这个就是nn.Embedding的大小】

import torch
from torch import nn


# 定义一个词典:{'!':0,'how':1, 'are':2, 'you':3,  'ok':4}
# 假定字典中有5个词,词向量维度为4
embedding = nn.Embedding(5, 4)

# 第一句话: how are you
# 第二句话:are you ok
# 将word用词典中的索引表示:
sentence = [[1, 2, 3],
            [2, 3, 4]]
# (2*3):相当于2个句子,每个句子有3个词
sentence = torch.LongTensor(sentence)

# 将这些句子中的每个词embedding,得到(2*3*4)维度,相当于每个词被embedding到4维,共6个词被embedding
# 其实嵌入的每个单词就是在Embedding的对应索引中取张量
word2vec = embedding(sentence)

print(embedding.weight)
print(word2vec)



embedding.weight:

就是将字典的每个词embedding到某个维度,然后参数是可以更新的

werd2vec:

其实将每个句子中的单词进行embedding的核心就是将在embedding参数矩阵中根据索引在对应的行取出张量

如下示例,2个句子,共6个单词,就是根据索引[1,2,3]、[2,3,4]在embedding参数矩阵中根据索引取出张量

为什么要将nn.Embedding()的维度设置为(num_calss, hidden_dim)维度?

根据上述例子就可以知道,这是因为我们需要在dict中取出每个句子对应的行(取出embedding.weight中的某些行),所以这个num_calss一般设置为字典大小(在CV中就是设置为和类别数目一致),这样就可以取出每个类别对应的tensor,从而进行计算了

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的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 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值