这两天在费劲的研究单词嵌入Embedding,好不容易稍微懂了一点,赶紧记下来省的忘了。

ont-hot编码:

一般在输入的时候,都会将所有的单词看作一个向量,只把当前的单词置为1,以下为几组单词表和单词向量的表示方式:

当前单词为apple

[apple,man,banana,cat......,orange,kite]

[1,0,0,0...0,0]

当前单词为cat

[apple,man,banana,cat......,orange,kite]

[0,0,0,1...0,0]

cos余弦相似度:

图中向量a和向量b夹角重合,余弦值等于1,表示完全相同

图中向量a和向量b夹角很小,余弦值接近1,表示很相似

图中向量a和向量b夹角很大,余弦为负,表示相似度很低

二维坐标系中的向量相似度计算:

因此,当向量不是二维而是n维时,可以得出以下公式:

举例,对以下两句话判断相似度:

这只小狗特别可爱,那只小猫也很可爱。

这只小狗不可爱,那只小猫可爱。

划分词语:

这只/小狗/特别/可爱,那只/小猫/也/很/可爱。

这只/小狗/不/可爱,那只/小猫/可爱。

生成词汇向量:

        【这只,小狗,特别,可爱,那只,小猫,也,很,不】

两句话对应的向量,元素即对应单词在该句中出现的频率:

        [1,1,1,2,1,1,1,1,0]

        [1,1,0,2,1,1,0,0,1]

带入公式计算:

因此对于上边那个one-hot编码,每一个单词对应的向量只有一位为1其余为0,值是离散的,所以各向量之间的cos余弦相似度为0,这样很不利于判断句子中各单词的关系因此要进行降维,将离散值变为连续值,使不同向量的相似度发生改变而不全部为0.

词嵌入Word Embedding:

通常一个词在一开始的one-hot编码时维度为几千上万的,这时候,向量之间cos余弦相似度为0,完全没有联系,通常较为完整的代码中进行降维会通过Embedding使之降维到128维或者256维,降维后每个元素表示的是一个概率值,是连续的。

举例,假设有十个名词:足球、比赛、教练、队伍、裤子、上衣、编织、折叠、拉,这里降到二维可视化显示如图所示:

我们可以发现,十个词基本被分为了三类,每一类包含的内容大致很像,有都属于衣物的,有都属于动作的,有都属于运动的。

对于将一个高维one-hot编码向量降维成为一个低维向量,简单代码如下:

import torch as t
from torch import nn as nnembedding = nn.Embedding(10, 4)  # num_embeddings表示10个词,embedding_dim表示每个词2维
input = t.arange(0, 6).view(3, 2).long()  # 将0-6中6个数字分配为3个句子,每个句子有2个词(其实是3行2列的矩阵),其中N为3,M为2
output = embedding(input)#如果Embedding层的输入形状为NxM(N是batch size,M是序列的长度),则输出的形状是N*M*embedding_dimension.
print(input.size())
print(output.size())
print(embedding.weight.size())   #权重大小为num_embeddings*embedding_dim

运行结果:

单独的看嵌入的那个过程是这个样的:这里注意画成矩形只是为了方便看,这都是矩阵,是高维的,不要理解成平面矩形的二维。

对于整个嵌入层来说,执行过程如下图,上图的10->4可以认为是对高这个维度进行变化:

注意Embedding的输入形状是n*w,n是batch_size表示一共有几个句子,就是图中的3,w是seq_size表示每个句子有几个单词,就是图中的2,embedding_dim表示降维后的维度,就是图中的4,因此Embedding的最终输出维n*w*embedding_dim。

深度学习-Word Embedding的详细理解(包含one-hot编码和cos余弦相似度)相关推荐

  1. 深入理解深度学习——Word Embedding(三):Skip-Gram模型

    分类目录:<深入理解深度学习>总目录 相关文章: · Word Embedding(一):word2vec · Word Embedding(二):连续词袋模型(CBOW, The Con ...

  2. 深入理解深度学习——Word Embedding(六):负采样(Negative Sampling)优化

    分类目录:<深入理解深度学习>总目录 相关文章: · Word Embedding(一):word2vec · Word Embedding(二):连续词袋模型(CBOW, The Con ...

  3. 深度学习技术在机器阅读理解应用的研究进展

    深度学习解决机器阅读理解任务的研究进展:https://blog.csdn.net/malefactor/article/details/52832134 深度学习技术在机器阅读理解应用的研究进展:h ...

  4. 用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  5. tensorflow linux多卡训练_用Windows电脑训练深度学习模型?超详细配置教程来了

    公众号关注 "DL-CVer" 设为 "星标",DLCV消息即可送达! 转自 机器之心 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Window ...

  6. windows python 访问mtp存储空间_用Windows电脑训练深度学习模型?超详细配置教程来了...

    虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多机器学习初学者更为熟悉的系统.要在 Windows 上开发模型,首先当然是配置开发环境. ...

  7. windows所有版本列表_用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  8. tensorflow linux多卡训练_用 Windows 电脑训练深度学习模型?超详细配置教程来了...

    点击上方 蓝色小字 ,关注 并 星标 ,更多干货,第一时间送达 转载自公众号:AI有道 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多 ...

  9. 详解深度学习之 Embedding

    深入理解深度学习之 Embedding 1. 从 one-hot 编码引入 Embedding 在正式介绍 Embedding 之前,我们必须先理解它提出的背景,也就是说研究者提出 Embedding ...

最新文章

  1. app.config中增加appSettings节点,conn.open时报初始化错误
  2. linux日志发送,Linux中将执行过的命令记录到日志并发送到服务器的方法
  3. UOJ59 WC2013 小Q运动季
  4. 如何在Flutter上优雅地序列化一个对象
  5. java 比较器类_java常用类——比较器
  6. Ubunut14.04安装wps最新方法
  7. 关于silverlight打印功能
  8. Luogu4366[CodePlus#4] 最短路
  9. 网站如何集成支付宝!原来要给钱的
  10. 基于SpringBoot+Vue的企业入库出库系统
  11. win10 重置登录账户密码
  12. jdt 解析java语句,利用JDT 回分析java 源代码
  13. 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系互转
  14. 大周末的不休息,继续学习pandas吧,pandas你该这么学,No.7
  15. OpenGL编程入门学习
  16. 在浏览器中输入URL并回车后都发生了什么?
  17. 电能质量分析方法与控制技术探讨
  18. CAD图纸怎么快速转换图片格式?
  19. AOJ:Areas on the Cross-Section Diagram水域面积
  20. 千分位格式C语言编程,金额数值的千分位显示格式

热门文章

  1. java // for // 俄文字母表
  2. QQ群78928780记录整理:90523花絮-部分
  3. 2018年中国游戏行业发展现状及发展前景分析
  4. DL/T645-1997通信规约解读
  5. 阅读和了解什么是形式化方法?
  6. 线性代数库 Armadillo 学习笔记
  7. 网络能看到计算机 但是进不去,共享文件夹 在网络邻居看到别人的电脑 进不去...
  8. 南宁供电局抄表及电量电费管理系统的开发设计
  9. webdriver.Chrome.set_network_conditions:Chrome网络仿真设置。
  10. Java毕设项目线上教学平台(java+VUE+Mybatis+Maven+Mysql)