一般来说词向量的获取方式有两种 (本文以机器翻译为例 使用pytorch 框架)
torch
vocabsize :词表大小 emb_dim:生成的向量维度
在机器翻译中 首先要构建词典,即将文本中的词汇进行统计,设定一个阈值,将出现次数大于这个阈值的词汇放进这个词汇表中
在得到词汇表之后,开始随机生成词向量
即 :torch.nn.Embedding(vocab_size,emb_dim) 这段代码的作用是,随机生成一个矩阵,这个矩阵的行数为词汇表的长度 ,即词汇表中一共有多少个单词, 每一个单词生成的向量的维度就是emb_dim
例如:
torch.nn.Embedding(2,5)
矩阵中每一行是一个词汇的向量 ,每个词汇初始化为5维 对应emb_dim
那么又是如何从词汇表的索引,查找到词向量的呢?
在构建词汇表的时候我们会生成一个很大的map {} ,在map{} 中贮藏了所有的词汇信息以及相应的索引
{ pad :1 , eos : 2 , bos : 3 ...... }
在获取到索引值之后我们可以将其转化成one-hot编码,假设词汇表中一共有5个词,那pad的one-hot编码就是 [1 0 0 0 0]
通过矩阵相乘得到 词汇表矩阵中第一行的向量 ,这个向量也就是pad对应的向量,这就是查表过程。值得注意的是,将这种词向量送入模型后,权重矩阵是会通过梯度的反向传导逐渐变化的,最终得到适合具体任务和具体模型的有语义相关性的词向量
第二种获得词向量的方式 更为方便 可以直接下载网上已经训练好的预训练词向量 ,在使用的时候直接查找并使用即可
Embedding Dataset -- NLP Center, Tencent AI Labai.tencent.com