nn.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)

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


提到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算是它的一个升级版(没有说谁好和谁不好的意思,现在one hot向量也依旧在很多地方运用,选择特征时要选择自己合适的才行。)

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,得到了输入数据的另一种表现形式

示例:

将两句话,每句话3个单词,通过 nn.Embedding 到(batch_size,max_length,embedding_dim)维度上:

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
embed = embedding(sentence)
print(embed.size())

https://www.jianshu.com/p/63e7acc5e890

关于nn.Embedding的解释,以及它是如何将一句话变成vector的-CSDN博客

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

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

相关文章

Overcooked!(并查集区间元素合并优化)

本题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 题目&#xff1a; 样例&#xff1a; 输入 5 5 1 1 2 3 1 2 2 2 4 3 1 4 3 2 5 输出 YES YES NO 思路&#xff1a; 根据题意&#xff0c;这…

.NET开源免费、功能强大的 Windows 截图录屏神器

前言 今天大姚给大家分享一款.NET开源免费&#xff08;基于GPL3.0开源协议&#xff09;、功能强大、简洁灵活的 Windows 截图、录屏、Gif动图制作神器&#xff1a;ShareX。 功能特性 ShareX 是一个开源的屏幕捕捉工具&#xff0c;具有丰富的功能特性&#xff0c;包括但不限于…

内网exp对抗

内网工具对抗 首先&#xff0c;你需要分析&#xff1a; 1、安全工具是否有源代码 2、安全工具源代码逻辑复杂程度 3、当前源代码你是否有能力修改 其次&#xff0c;你需要考虑&#xff1a; 1、无源码或无能力修改 2、各种异常bug打包问题 3、修改打包后效果也不太好 故…

中证数据社招笔试题【第一卷带答案】

一、单选题 根据决策条件的可控程度&#xff0c;决策可以分为&#xff1a;确定型决策、风险型决策和非确定型决策打篮球时扭伤了脚&#xff0c;下列措施不可取的是&#xff1a;立即用热毛巾敷扭伤部位我国独立自主的和平外交政策&#xff0c;应坚持把&#xff1a;国家主权和国…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数&#xff0c;此时输入参数和返回结果的属性名称开头默认为小写&#xff0c;如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

代码随想录算法训练营第三十六天 | 35. 无重叠区间、763. 划分字母区间、56. 合并区间

代码随想录算法训练营第三十六天 | 35. 无重叠区间、763. 划分字母区间、56. 合并区间 35. 无重叠区间题目解法 763. 划分字母区间题目解法 56. 合并区间题目解法 感悟 35. 无重叠区间 题目 解法 更新区间&#xff0c;只保留最小区间&#xff0c;局部最优&#xff0c;推到最优…

阿里云服务器多少钱一个月?低至5元1个月

阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2G3M带宽服务器99元12个月&#xff0c;轻量应用服务器2核4G4M带宽165元12个月&#xff0c;4核16G服务…

力扣Lc23--- 290. 单词规律(java版)-2024年3月27日

1.题目描述 2.知识点 1&#xff09;思路 &#xff08;1&#xff09;s.split(" "); 是将字符串 s 按空格进行分割&#xff0c;得到一个单词列表。 &#xff08;2&#xff09;建立模式字符和单词之间的双向映射关系&#xff0c;我们可以使用两个哈希映射&#xff08;或…

验证码/数组元素的复制.java

1&#xff0c;验证码 题目&#xff1a;定义方法实现随机产生一个5位的验证码&#xff0c;前面四位是大写或小写的英文字母&#xff0c;最后一位是数字 分析&#xff1a;定义一个包含所有大小写字母的数组&#xff0c;然后对数组随机抽取4个索引&#xff0c;将索引对应的字符拼…

做跨境用什么代理IP?如何分辨代理IP类型?

跨境外贸是近几年来的热门行业&#xff0c;在众多助力跨境出海的工具中&#xff0c;代理IP也是强力的一大保障。不仅可以帮助企业拓展更大的地区市场&#xff0c;更加顺畅进行市场调查&#xff0c;更重要地&#xff0c;在TikTok、Amazon、Ebay、Instagram、Etsy等等跨境平台业务…

Day23:事务管理、显示评论、添加评论

事务管理 事务的定义 什么是事务 事务是由N步数据库操作序列组成的逻辑执行单元&#xff0c;这系列操作要么全执行&#xff0c;要么全放弃执行。 事务的特性(ACID) 原子性(Atomicity):事务是应用中不可再分的最小执行体&#xff08;事务中部分执行失败就会回滚 。一致性(C…

教程2_图像的合并及融合

1、图像加法 您可以通过OpenCV函数 cv.add() 或仅通过 numpy 操作 res img1 img2 添加两个图像。两个图像应具有相同的深度和类型&#xff0c;或者第二个图像可以只是一个标量值。 注意: OpenCV加法和Numpy加法之间有区别。OpenCV加法是饱和运算&#xff0c;而Numpy加法是模运…