Embedding在序列建模中是标配组件,在NLP任务中更是不可或缺,那么Embedding是什么呢?

这里以NLP作为背景来谈谈Embedding,其他领域也是可以这样迁移理解。

什么是Embedding?

Embedding是一个没有激活函数和偏置项的Dense网络,也就是一个矩阵$\boldsymbol{W} \in \mathbb{R}^{|V| \times m}$​​,

对于词$w_i$表示词表中的第$i$个词,用one-hot表示有,

位置$i$为1,其他为$0$​。Embedding要做的事情就是把词$w_i$的onehot离散表示转变为稠密的向量,

也就相当于取矩阵$\boldsymbol{W}$的第$i$行作为词$w_i$的稠密表示,也就是说对于onehot与矩阵相乘,结果直接取矩阵相应行即可,而避免复杂的矩阵乘积过程。这就是Embedding的原理和作用,可以简单表示为,

词$w_i$在字表V中对应编码$i$输入Embedding,获得该词的稠密表示。于是,对于句子(词ID序列)$i,j,k,\dots$,有

再多说一点,有了这样的词向量序列之后,就可以直接计算它们的背景向量,如

然后就可以送入一个分类器完成简单的分类任务。

总结

本文用十分简洁的语言解释了Embedding的本质就是不带偏置项、激活函数的Dense层,即全连接层,由于输入为one-hot,因此用查表的方式来替代矩阵乘积。

转载请包括本文地址:https://allenwind.github.io/blog/6498
更多文章请参考:https://allenwind.github.io/blog/archives/