nn.Embedding使用

article/2025/4/27 21:51:28

nn.Embedding是一种词嵌入的方式,跟one-hot相似但又不同,会生成低维稠密向量,但是初始是随机化的,需要根据模型训练时进行调节,若使用预训练词向量模型会比较好。

1. one-hot

one-hot是给定每个单词一个索引,然后根据输入文本是否含有这个单词来决定向量。

单词索引
we0
have1
are2
any3
all4
excellent5
people6

给定“We are all excellent people”,生成one-hot向量[1,0,1,0,1,1,1,0,0,…]


2. nn.Embedding

nn.Embedding参数设置:
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, device=None, dtype=None)

  • num_embeddings:字典的大小,如上表中字典大小是5000,就写5000。
  • embedding_dim:嵌入向量的维度,表示将单词编码为多少维的向量。
  • padding_idx:填充索引,意思是填充的索引,向量值默认为全0(可以自定义),相当于unknown,对未知的词编码为零向量。

其他参数并不常用,详情可以参考官网
Note, embedding只接受LongTensor类型的数据,且数据不能大于等于词典大小。

3. 应用

3.1 示例一

import torch
from torch import nn
embedding = nn.Embedding(10, 3)  #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]])  #设置为LongTensor
vector = embedding(input)
print(vector)

在这里插入图片描述

3.2 示例2

import torch
from torch import nn
embedding = nn.Embedding(10, 3, padding_idx=2)  #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]])
vector = embedding(input)
print(vector)
print("查看词典:",embedding.weight)  #weight可以查看全部词的向量

在这里插入图片描述
通过结果可以看到,词向量跟字典中的向量一一对应。

3.3 示例三

import torch
from torch import nn
padding_idx = 2
embedding = nn.Embedding(10, 3, padding_idx=2)  #设置字典大小为10,维度为3
input = torch.LongTensor([[0,2,0,5]])
vector = embedding(input)
with torch.no_grad():   embedding.weight[padding_idx] = torch.ones(3)  #设置填充向量
print(vector)
print("查看词典:",embedding.weight)  #weight可以查看全部词的向量

在这里插入图片描述

目前在自然语言中,主要使用词向量模型生成词向量,如word2vec,glove之类的静态词向量模型,BERT、RoBERT之类的动态词向量模型,或者使用超大模型bloom等,效果都比之前要好,具体使用那种模型根据具体情况而定。


http://chatgpt.dhexx.cn/article/oFJZxUQh.shtml

相关文章

深度学习中Embedding的解释

转载于https://zhuanlan.zhihu.com/p/164502624 什么是Embedding? 近年来,NLP自然语言处理、推荐系统,以及计算机视觉已成为目前工业界算法岗的主流方向,无论在哪个领域,对“Embedding”这个词概念的理解都是每个庞大知…

Embedding理解+代码

目录 Embedding主要思想 Word2vec主要思想两种模型:目的: 算法一、定义超参数二、将语料库转换one-hot编码表示三、模型训练 代码手动实现 skip-gram模型一、数据准备二、定义超参数三、定义word2vec模型数据清洗及生成词汇表训练模型 四、 获取词向量和…

Embedding 基础

一、什么是Embedding 简单来说,Embedding 就是用一个数值向量“表示”一个对象(Object)的方法,这里说的对象可以是一个词、一个物品,也可以是一部电影等等。一个物品能被向量表示,是因为这个向量跟其他物品…

终于有人把Embedding讲明白了

导读:如果要总结深度学习大获成功的原因,那至少有两样东西必须入选:一样当然是很“深”的神经网络模型,这也是深度学习的“深度”的由来,另一样就是Embedding。 在深度学习中,Embedding是个很重要的概念&am…

计算机网络(二) | 网络编程基础、Socket套接字、UDP和TCP套接字编程

目录 一、网络编程基础1.1 为什么需要网络编程1.2 什么是网络编程1.3 网络编程中的基本概念 二、Socket套接字2.1 概念2.2 分类2.3 Java数据报套接字通信模型2.4 Java流套接字通信模型2.5 UDP数据包套接字编程2.6 TCP流套接字编程 一、网络编程基础 1.1 为什么需要网络编程 丰…

C#编程并实现网络UDP套接字

文章目录 一、UDP介绍二、C#命令行/控制台hello world程序(一)创建项目(二)客户端程序(三)服务端程序(四)使用wireshark抓包 三、C#Form窗口程序(一)创建项目…

Linux C语言高级

一、软件包管理及shell命令 1.流行的两种软件包管理机制 1.Deb软件包:由Debian Linux首先提出的软件包管理机制 2.RPM软件包:由Redhat Linux推出的软件包管理机制 2.Debian Linux开发了APT软件包管理器 1.检查和修复软件包依赖关系 2.利用Internet网络帮…

精心收集了60个C语言项目源码,分享给大家

C语言文章更新目录 C/C学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单…

python基于c语言开发_C高级编程:基于模块化设计思想的C语言开发 PDF 超清版

给大家带来的一篇关于C语言相关的电子书资源,介绍了关于C高级编程、模块化、设计思想、C语言开发方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小80 MB,吉星编写,目前豆瓣、亚马逊、当当、京东等…

【Linux】网络基础+UDP网络套接字编程

只做自己喜欢做的事情,不被社会和时代裹挟着前进,是一件很奢侈的事。 文章目录 一、 网络基础1.局域网和广域网2.协议初识和网络协议分层(TCP/IP四层模型)3.MAC地址和IP地址(子网掩码,路由表,I…

C#使用TCP/UDP协议通信并用Wireshark抓包分析数据

目录 一、Wireshark抓包软件下载安装二、控制台程序使用 UDP 通信1)创建新项目2)编写代码3)编译结果4)抓包分析数据 三、Form窗口程序使用 TCP 通信1)创建新项目2)设计图形界面3)编写代码4&…

SimpleFOC之ESP32(九)—— WIFI、UDP和TCP

目录 说明一、网络通信1.1、准备工作1.2、UDP通信1.3、TCP通信 二、硬件准备三、代码参考四、代码演示4.1、WIFI_AP模式UDP通信4.2、WIFI_STA模式TCP client通信 五、UDP通信控制电机5.1、硬件准备5.2、代码演示5.2.1、串口通信更改为UDP通信5.2.2、笔记本连接AP5.2.3、UDP发送…

如何进行网络编程(代码利用UDP socket实现)

目录 一、什么是网络编程? 二、那么在Java中能调用C语言的函数吗? 三、操作系统提供的socket API主要有两类(实际上不止两类) 1.流套接字(底层使用TCP协议) TCP协议的特点: 2.数据报套接字…

北斗系统学习—JT808协议用C语言解析

前言: 本人从事于Linux应用开发(音视频应用方向),现在主要是负者AI摄像头的开发,在学音视频的途中,虽然是个小白,但是更愿意把自己所学音视频的一些知识分享给大家,以后每周都会更新哦! 本期介绍…

TCP/IP协议(一、自己动手实现udp)

对TCP/IP协议都只是听过,没有仔细研究过,一些知识体系也比较零散,什么三次握手,四次挥手,滑动窗口,零拷贝技术等等,都是知识有这么个东西,而不知道具体是啥,这几天还是根…

【Linux】传输层协议:UDP和TCP

但人不能永远浪漫下去,那会走向自我毁灭的。浪漫都是水字旁,会把人淹死的。人最终还是要进入一个规则体系,所谓,随心所欲不逾矩嘛 文章目录 一、UDP协议1.端口号2.理解UDP报头3.UDP的特点(面向数据报,全双…

Linux网络:UDP协议 | TCP协议

文章目录 前言端口号netstat -- pidof UDP协议TCP协议三次握手 四次挥手确认应答(ACK)机制超时重传机制连接管理机制理解TIME_WAIT状态理解 CLOSE_WAIT 状态 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结 基于TCP 和 UDP 的应用层协议TCP/UD…

C语言SOCKET编程指南

转载自:http://blog.sina.com.cn/s/blog_79b01f66010163q3.html 这篇文章完全可以作为c语言socket编程指南,无论在任何系统下。感谢作者fenglovel! C语言SOCKET编程指南 1、介绍 Socket 编程让你沮丧吗?从man pages中很难得到有…

【socket】从计算机网络基础到socket编程——Windows Linux C语言 + Python实现(TCP+UDP)

一、部分基础知识1.1 计算机网络的体系结构1.11 互联网简介1.12 计算机网络的分类1.13 协议与网络的分层体系结构▶ 协议▶ 网络的分层体系结构 1.14 OSI 七层模型(重要)▶ OSI 模型的结构▶ OSI 模型各层的功能 1.15 TCP/IP 的体系结构(重要…

C语言 C语言基础

C语言 C语言基础 一、简述 对于C语言基础相关方面的表面理解,简单介绍。 二、二进制 生活中常用的是十进制,基数0,1,2,3,4,5,6,7,8,9,。满10进1。 时钟60进制。基数0,1,2...57,58,59。满60进1。60秒为1分钟,60分钟为1小时。 计算机二进制&a…