词嵌入nn.embedding的解释

一、embedding如何处理文本

在NLP任务中,首先要对文本进行处理,将文本进行编码转换,形成向量表达,embedding处理文本的流程如下:

(1)输入一段文本,中文会先分词(如jieba分词),英文会按照空格提取词

(2)首先将单词转成字典的形式,由于英语中以空格为词的分割,所以可以直接建立词典索引结构。类似于:word2id = {‘i’ : 1, ‘like’ : 2, ‘you’ : 3, ‘want’ : 4, ‘an’ : 5, ‘apple’ : 6} 这样的形式。如果是中文的话,首先进行分词操作。

(3)然后再以句子为list,为每个句子建立索引结构,list [ [ sentence1 ] , [ sentence2 ] ] 。以上面字典的索引来说,最终建立的就是 [ [ 1 , 2 , 3 ] , [ 1 , 4 , 5 , 6 ] ] 。这样长短不一的句子

(4)接下来要进行padding的操作。由于tensor结构中都是等长的,所以要对上面那样的句子做padding操作后再利用 nn.Embedding 来进行词的初始化。padding后的可能是这样的结构

[ [ 1 , 2 , 3, 0 ] , [ 1 , 4 , 5 , 6 ] ] 。其中0作为填充。(注意:由于在NMT任务中肯定存在着填充问题,所以在embedding时一定存在着第三个参数,让某些索引下的值为0,代表无实际意义的填充)

二、embedding使用示例

比如有两个句子:

I want a plane
I want to travel to Beijing

将两个句子转化为ID映射:

{I:1,want:2,a:3,plane:4,to:5,travel:6,Beijing:7}
转化成ID表示的两个句子如下:

1,2,3,4
1,2,5,6,5,7

import torch
from torch import nnif __name__ == "__main__":# 将第一个句子填充0,与第二个句子长度对齐# data.shape = (2, 6)# one-hot data = 2 * 6 * 10data = [[1, 2, 3, 4, 0, 0], [1, 2, 5, 6, 5, 7]]in_vector = torch.LongTensor(data)# 创建字典,最大词个数为10,每个词用维度为4表示embedding = nn.Embedding(10, 4)out_emb = embedding(in_vector)print("in_vector.shape:",in_vector.shape)print("embedding.weight.shape:",embedding.weight.shape)print("out_emb.shape:",out_emb.shape)print("out_emb:",out_emb)print("embedding.weight:",embedding.weight)

输出结果:

in_vector.shape: torch.Size([2, 6])
embedding.weight.shape: torch.Size([10, 4])
out_emb.shape: torch.Size([2, 6, 4])
out_emb: tensor([[[ 0.3840,  1.8390, -0.4930,  1.9279],[-0.8952,  0.1091, -0.2830,  0.4099],[-0.5144, -1.7991,  0.6782, -0.5414],[ 0.7053, -0.8193,  1.1752, -0.7090],[ 0.8880,  0.3052,  1.3366, -0.9206],[ 0.8880,  0.3052,  1.3366, -0.9206]],[[ 0.3840,  1.8390, -0.4930,  1.9279],[-0.8952,  0.1091, -0.2830,  0.4099],[-1.1050,  0.4040, -0.7571,  0.8230],[-0.4365, -0.9059, -3.7702, -0.0430],[-1.1050,  0.4040, -0.7571,  0.8230],[ 0.2677, -1.5236,  0.3324, -1.9825]]], grad_fn=<EmbeddingBackward0>)
embedding.weight: Parameter containing:
tensor([[ 0.8880,  0.3052,  1.3366, -0.9206],[ 0.3840,  1.8390, -0.4930,  1.9279],[-0.8952,  0.1091, -0.2830,  0.4099],[-0.5144, -1.7991,  0.6782, -0.5414],[ 0.7053, -0.8193,  1.1752, -0.7090],[-1.1050,  0.4040, -0.7571,  0.8230],[-0.4365, -0.9059, -3.7702, -0.0430],[ 0.2677, -1.5236,  0.3324, -1.9825],[-0.8469, -1.0805,  1.0592, -0.5903],[ 1.0013, -1.6504, -1.7999, -0.8189]], requires_grad=True)

如果使用one-hot编码,输入的向量维度为(2,6,10)
如果使用embedding,输入的向量维度为(2,6,4)维度大幅降低
nn.Embedding相当于是一本词典,本例中,词典中一共有10个词,每个词的嵌入维度为4。

链接:
1.https://blog.csdn.net/qq_41477675/article/details/114645012
2.https://blog.csdn.net/qq_43426908/article/details/133046902?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-133046902-blog-132993128.235v43pc_blog_bottom_relevance_base7&spm=1001.2101.3001.4242.1&utm_relevant_index=3
3.https://zhuanlan.zhihu.com/p/164502624

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

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

相关文章

python双色球选号程序的实现与解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;双色球选号游戏的魅力 二、程序设计与实现 1. 生成红色球号码 2. 生…

3.游戏中自定义数据类型的解读分析

知识来源于腾讯课堂易道云 结构的解释&#xff1a; 计算机里的所有东西都是用二进制表示的&#xff0c;二进制是数字&#xff0c;我们用的阿拉伯数字0-9这个数字是十进制&#xff0c;计算机用的是二进制只有0或1&#xff0c;然后都是一堆0或1的数字&#xff0c;游戏中怎么把这…

AD使用问题

设计流程&#xff1a; 1.先创建项目——添加原理图&#xff0c;原理图库&#xff0c;PCB&#xff0c;PCB库 2.画原理图库和封装库 主要有三种方法&#xff1a; &#xff08;1&#xff09;手动画库和封装&#xff0c;常常用于嘉立创查询不到的器件 &#xff08;2&#xff0…

双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境 两台机器两网卡同网段接入同一个二层交换机。 机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24 机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24 初始ARP表 只有管理口接口的ARP表项&#xff0c…

浙江大学数据结构MOOC-课后习题-第十讲-排序4 统计工龄

题目汇总 浙江大学数据结构MOOC-课后习题-拼题A-代码分享-2024 题目描述 测试点 思路分析 这道题很明显就是利用桶排序的思路 受到课程内容的影响&#xff0c;我一开始是想着建立一个链表数组&#xff0c;数组内每个元素下方都存放链表&#xff0c;最后再遍历统计输出。 但是&…

【华为OD机试-C卷D卷-200分】反射计数(C++/Java/Python)

【华为OD机试】-(A卷+B卷+C卷+D卷)-2024真题合集目录 【华为OD机试】-(C卷+D卷)-2024最新真题目录 题目描述 给定一个包含 0 和 1 的二维矩阵。 给定一个初始位置和速度,一个物体从给定的初始位置出发,在给定的速度下进行移动,遇到矩阵的边缘则发生镜面发射。 无论物体…

算法训练营第四十二天 | LeetCode 42 不同路径、LeetCode 63 不同路径 II

LeetCode 62 不同路径 这题首先确定下dp数组下标和含义。主要有两种方式&#xff0c;一种是按照位置在数组中下标直接确定&#xff0c;另一种是依据递推时边上的位置需要再往上和往左递推时会出界&#xff0c;将位置设为序号而非下标。这一题第二种方式会比较好一些。递推逻辑也…

Android和flutter交互,maven库的形式导入aar包

记录遇到的问题&#xff0c;在网上找了很多资料&#xff0c;都是太泛泛了&#xff0c;使用后&#xff0c;还不能生效&#xff0c;缺少详细的说明&#xff0c;或者关键代码缺失&#xff0c;我遇到的问题用红色的标注了 导入aar包有两种模式 1.比较繁琐的&#xff0c;手动将aar…

The Sandbox DAO:投票决定元宇宙的未来!

赋予用户治理权&#xff0c;打造由社群运营的开放式数码国度 随着The Sandbox DAO的启动&#xff0c;我们邀请全球社群——这个新数字国度的公民们——提出建议并参与治理&#xff0c;共同塑造开放元宇宙的未来。 介绍 在The Sandbox&#xff0c;我们正在建立一个开放的元宇宙…

聚酯输送带的原材料

揭秘聚酯输送带原材料&#xff1a;高效耐用背后的秘密武器 在现代化工业生产中&#xff0c;聚酯输送带以其出色的耐用性和稳定性&#xff0c;成为众多行业不可或缺的传输工具。然而&#xff0c;你是否好奇&#xff0c;究竟是什么原材料赋予了聚酯输送带如此卓越的性能&#xf…

opencv c++编程基础

1、图片的本质 图像在 OpenCV 中的本质 在 OpenCV 中&#xff0c;图像被表示为一个多维数组&#xff0c;其中每个元素对应于图像中的单个像素。图像的维度取决于其通道数和像素数。 **通道数&#xff1a;**图像可以有多个通道&#xff0c;每个通道存储图像的不同信息。例如&…

一维扫描线,有多少对相交线段

D - Intersecting Intervals 目录 正向&#xff1a; 反向&#xff1a; 正向&#xff1a; 从左往右扫描&#xff0c;记录当前边数。 来了新边&#xff0c;它此刻与当前边数相交&#xff0c;加到总数中。边结束&#xff0c;当前边数中减去即可。 const int maxn 5e55; int …

Uniapp横竖屏切换让某一个页面只能横屏或者竖屏

先看官方属性 plus.screen.lockOrientation(default); // 默认横竖屏切换 plus.screen.lockOrientation(portrait-primary);// 竖屏展示 plus.screen.lockOrientation(landscape-primary); // 强制横屏简单需求&#xff1a;允许横竖屏切换 在 page.json增加以下代码 "gl…

李廉洋:5.22黄金原油高位震荡,今日最新行情分析策略。

黄金消息面分析&#xff1a;根据4月份的通胀数据&#xff0c;加拿大央行6月5日降息应该是“理所当然的”。加拿大的整体通货膨胀率在4月份降至2.7%&#xff0c;为自2021年初以来的最低水平&#xff0c;核心CPI中加拿大央行的两项首选数据均降至3%以下。加拿大央行在决定降息之前…

鸿蒙学习第一课--认识目录结构

项目结构介绍 module.json5 src > main > module.json5&#xff1a;Stage模型模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。具体的配置文件说明&#xff0c;详见module.json5配置文件。 资源分类和访问 关于s…

vue使用asiox 下载后端返回的excel数据流

一、前端代码 <template><div class"hello"><h1>{{ msg }}</h1><button style"color: brown" click"exportExcel">excel导出</button></div> </template><script> import axios from &q…

awk编辑器

目录 工作原理 命令格式 普通格式 BEGIN格式 语句循环格式 awk常见的内建变量&#xff08;可直接用&#xff09; 按行打印行内容 统计行数量 按字段输出文本 通过管道、双引号调用 Shell 命令 awk编辑器是一种流编辑器 工作原理 逐行读取文本,默认以空格或tab键为分…

二叉树,先序遍历、中序遍历、后序遍历和层序遍历实现 C++

二叉树基类声明 template<typename T>class Tree{protected:Tree() default;virtual ~Tree() default;virtual const Tree& root()const 0;virtual Tree& root() 0;virtual const Tree& left()const 0;virtual const Tree& right()const 0;virtua…

java第十八课 —— 重载、可变参数

方法重载 基本介绍 java 中允许同一个类中&#xff0c;多个同名方法的存在&#xff0c;但要求形参列表不一致&#xff01; 比如&#xff1a;System.out.println(); out 是 PrintStream 类型 重载的好处 减轻了起名的麻烦减轻了记名的麻烦 注意事项和使用细节 方法名&…

【Vue】Vue2中的Vuex

目录 Vuex介绍Vuex 中的核心概念 在vue2中使用Vuex安装 Vuex创建一个 Vuex Store在 Vue 实例中使用 Vuex编写 Vuex 的 state、mutations 和 actions在组件中使用 Vuex Vuex的核心State组件中获取 Vuex 的状态mapState 辅助函数对象展开运算符 Getter基本使用示例 通过属性访问通…