1. 什么是embedding
embedding的本质是用一个较低维度的向量来代替较高维度的原始特征。在推荐系统中,原始向量往往会用超高维的稀疏one-hot向量来表示,使用embedding可以用较低的维度(即embedding size)来表示高维稀疏的特征,方便进行后续的模型训练。
2. 如何实现
如图所示,embedding的操作可以视为一个全连接层,是embedding之前的序列,是embedding之后的序列。FC层的权重为,与点乘之后得到embedding后的序列.
另外在实际的NLP或者广告推荐场景中,向量 往往是经过one-hot处理的高维稀疏向量,只有一个或几个值为1,其他均为0. 由此可见向量和相乘,相当于将的某一行或某几行之和的向量取出来作为 embedding的结果。因此embedding可以看做成一个查表(look up)的操作,即用sparse id(即原向量 )来查找embedding weight(即 )中特定的行。事实上,tensorflow中的embedding操作就是由tf.nn.embedding_lookup
和tf.nn.embedding_lookup_sparse
两个函数来实现的。
关于TF中的embedding操作的详细过程图解,推荐一篇文章:Tensorflow中的Embedding操作详解 ,讲的十分清晰,这里就不再重复了。有疑问建议去看tf源码。