onehot和embedding_lookup的关系,可以参考这里
主要讲一下,为什么每一次训练迭代,词向量就会更新一次:embedding_lookup不是简单的查表,id对应的向量是可以训练的,训练参数个数应该是 category num*embedding size,也就是说lookup是一种全连接层。啥意思?
1.先解释一下onehot:
onehot:onehot是通常用来处理文字的数据的方法,比如‘我喜欢你’(假设所有的训练数据就是这4个字)对应的onehot就是 [1000 0100 0010 0001],但是这样的矩阵丢进算法里会造成专家所说的数据太稀疏,因为训练数据肯定会有很多个,矩阵稀疏是我能想到的原因。
2. 如何解决onehot产生的矩阵过于稀疏的问题?——引出为什么词向量会在训练的每一次迭代时更新的原因:
embedding_look_up来救场,我们用一个去全连接层去和onehot矩阵相乘,那么就会出现,下面的情况:
[W11 W12 W13
[1000 W21 W22 W23 [W11 W12 W13
0100] X W31 W32 W33 = W21 W22 W23] 这样是很明显的全连接层的做法,而每一次训练,词向量会变化,是因为
W41 W42 W44]
我们将Wn1 Wn2 Wn3.......作为对应N词的词向量,当然全连接层的W在训练由于反向传播更新参数。