做网站前,东莞房价多少,用图片设置网站首页,国际市场那个app可以看深度学习#xff1a;到底怎么理解embedding 注意到embedding这个词#xff0c;很大可能是在进行时间序列上的处理过程中遇到的#xff0c;遇到的时间序列模型中#xff0c;很大部分需要用到embedding过程#xff0c;同时在看相关的程序代码的时候看到模型的结构设计中设计…深度学习到底怎么理解embedding 注意到embedding这个词很大可能是在进行时间序列上的处理过程中遇到的遇到的时间序列模型中很大部分需要用到embedding过程同时在看相关的程序代码的时候看到模型的结构设计中设计到embedding层。那么到底什么是embedding还有embedding完成了什么操作这里记录一下最直观的解释。
1. 何为Embeddings–何为嵌入
Embeddings: 中文名词嵌入 OpenAI的文本嵌入衡量文本字符串的相关性。
说的简单一点就是一种编码只不过这个编码的过程与one-hot这种简单的编码表示方式不同这个embedding是有一个字典同时通过这种嵌入方式所表示的数据可以含有数据之间的相似性信息相似性可以通过计算相似度。如下面的余弦相似度计算方式。
通俗一点解释嵌入的过程现在有一本字典字典规定了每一个单词可以通过一个长度为10的向量进行表示。那么 现在有一句话I like cats,那么用字典每一个词都可以用长度为10的向量表示则这个最终的表示维度大小为[3,10]现在你有另一句话I love cats,这句话用这个字典可以通过维度[3,10]的数据表示。
如果采用one-hot 编码的方式表示假设是有十个不同的单词那么I like cats 这句话需要同样需要[3,10],但是其中只有三个数字是1其他全是0。在NLP处理中并不是一个好的编码方式。
总的来说嵌入具有以下优势可以完成语义表示完成降维学习语义关系提高计算效率。最重要一点这个嵌入是从数据中学习得到的。
这是有一本字典的前提如果要是没有就相当于在自己的网络中Embedding层然后通过训练得到Embedding的权重完成嵌入过程。
余弦相似度 s i m i l a r i t y cos ( θ ) A ⋅ B ∥ A ∥ ∥ B ∥ ∑ i 1 n A i × B i ∑ i 1 n ( A i ) 2 × ∑ i 1 n ( B i ) 2 \mathrm{similarity}\cos(\theta)\frac{A\cdot B}{\|A\|\|B\|}\frac{\sum_{i1}^nA_i\times B_i}{\sqrt{\sum_{i1}^n{(A_i)^2}}\times\sqrt{\sum_{i1}^n{(B_i)^2}}} similaritycos(θ)∥A∥∥B∥A⋅B∑i1n(Ai)2 ×∑i1n(Bi)2 ∑i1nAi×Bi 其中 A ⋅ B \mathbf{A}\cdot\mathbf{B} A⋅B表示点积 ∥ A ∥ \|\mathbf{A}\| ∥A∥表示范数,结果越靠近1越相近。
import numpy as np
from numpy.linalg import normdef cosine_similarity(a, b):dot_product np.dot(a, b)norm_a norm(a)norm_b norm(b)similarity dot_product / (norm_a * norm_b)return similarity# 示例向量
vector_a np.array([1, 2, 3])
vector_b np.array([4, 5, 6])# 计算余弦相似度
similarity cosine_similarity(vector_a, vector_b)print(fCosine Similarity: {similarity})下面用代码说明可能更直观。
2.torch.nn.Embeddings()
在torch中提供了一个nn.Embedding()层可以构建网络的过程中使用这里面涉及的参数包括以下
num_embeddings(int) : 嵌入字典的大小embedding_dim(int) 每个嵌入向量的大小…
通过程序理解这两个参数
import torch
import torch.nn as nn
embedding nn.Embedding(20, 5)
input torch.LongTensor([[1,2,3,4], [4,3,2,9]])
print(input.shape)
print(embedding(input).shape)
print(embedding(input))
print(embedding.weight.shape)运行之后会得到
torch.Size([2, 4])
torch.Size([2, 4, 5])
torch.Size([20, 5])-第一个参数就是说你添加的这个字典的大小对应的是训练更新权重的第一个维度第二个参数对应的是训练更新权重的第二个维度同时embedding_dim大的大小相当于在输入数据的后面添加了一个嵌入向量大小的维度。
通俗解释输入数据是包含2句话每一句话有四个数据单词(torch.Size([2,4])),经过embedding之后还是有两句话每一句话中的每一个数据都用长度为5的向量表示则输出的维度为torch.Size([2,4,5])。