文章目录
1 时序数据的表示sequence representation
序列的表示: [seq_len, feature_len]
seq_len : 表示序列的长度
feature_len : 表示序列的特征数
2 举个时序数据的例子
- 这是一个房价数据的变化趋势。这样的数据有2d,第一个维度表示时间,第二个维度表示房价。
[time, price]
3 举一个图片数据的例子
- 最常用的手写数据集 MNIST
[28,28]
- 这里和卷积神经网络是不一样的,我们需要把图片数据打平,看成
[1, 28*28]
4 词向量表示
- 如何表示一个单词,
[word, word_vec]
4.1 one-hot 编码方式
缺点:
(1) 高维、稀疏
(2)占用大量空间、数据
- 考虑到语义相关性,因此在编码时要考虑上下文信息。
- 下面是一个简单的示例,计算“king” 和“queen” 与之最相似的词向量。
5 一次Batch 的数据结构重组
- 二维的数据: [batch, channel, weight, height]
- 一维的数据: [batch, word_num, word_vec], 比如说下图,一共是100个时间点,3表示三条线,1表示每次用1维的数据来表示。
6 nn.embedding 集成好的查表操作
- 如果没有下载
word2vec
或者是GloVe
,那么右边的表就是随机生成的。 - 对照敲的代码如下下:
- 代码可以运行!
import torch
from torch import nn
word = {"hello":0, "world":1}
lookup = torch.tensor([word["hello"]], dtype=torch.long)
print(lookup)
embeds = nn.Embedding(2, 5)
print(embeds)
hello_emb = embeds(lookup)
print(hello_emb)
- embeds = nn.Embedding(2, 5) 表示的是随机生成一个
2 × 5
的数据表 2
是因为现在只需要表示 两个单词(hello 和world)5
表示 每个词都用一个长度为5的向量来表示,也可以说成是每个向量有5d的特征深度。
最后的输出:
tensor([0])
Embedding(2, 5)
tensor([[ 1.8404, 0.7479, -1.2801, -0.3989, -1.1557]],
grad_fn=<EmbeddingBackward>)
7 下载GloVe来表示词向量
- 我的环境里没有安装 torchnlp,所以大家可以自行安装,执行下面的代码。