【问题标题】:In tensorflow deep and wide tutorial, what's the embedding principletensorflow deep and wide教程中,embedding原理是什么
【发布时间】:2018-03-08 07:39:46
【问题描述】:
当我玩 tensorflow 教程时,Wide and Deep 教程中使用了一个嵌入技巧,就像这样。
本教程展示了如何将稀疏特征(通常是一种热编码)转移到嵌入向量。
我知道有一些方法可以创建这种嵌入,例如词嵌入、PCA 或 t-SNE 或矩阵分解。
但是在本教程中,他们没有展示如何为稀疏向量创建嵌入。
还是教程只是使用神经网络完成嵌入?
【问题讨论】:
标签:
tensorflow
machine-learning
deep-learning
embedding
【解决方案1】:
如果您知道词嵌入,那么您应该对这种转换很熟悉。来自"The Deep Model: Neural Network with Embeddings"部分:
嵌入值是随机初始化的,并与所有其他模型参数一起训练以最小化训练损失。
本质上,tf.feature_column.embedding_column(occupation, dimension=8) 所做的是它创建了一个[N, 8] 矩阵,其中N 是occupation 值的数量,或者如果您使用散列分类列,则为桶的数量。每个输入occupation 值就像一个索引来选择大小为[8] 的嵌入向量。网络的其余部分将使用这个[8] 向量,而不知道N 是什么。这个向量通常被称为 dense 以强调长度为 N 的 one-hot 编码(其中大多数值是零)和 [8] 向量之间的区别,所有值都很重要。 p>
嵌入是可训练的,因此在随机初始化之后,它们会漂移到一些对网络的其余部分有用的值。这与word2vec 或其他词嵌入非常相似,并且通常是非常有效的表示:
通过密集嵌入,深度模型可以更好地泛化,并对以前在训练数据中看不到的特征对进行预测。
【解决方案2】:
如果您想使用预训练的嵌入。只是你曾经受过 word2vec 或其他人的训练。您可以尝试在 tf.feature_column.embedding_column Feature Column Pre-trained Embedding 中设置初始化器
itemx_vocab = tf.feature_column.categorical_column_with_vocabulary_file(
key='itemx',
vocabulary_file=FLAGS.vocabx)
embedding_initializer_x = tf.contrib.framework.load_embedding_initializer(
ckpt_path='model.ckpt',
embedding_tensor_name='w_in',
new_vocab_size=itemx_vocab.vocabulary_size,
embedding_dim=emb_size,
old_vocab_file='FLAGS.vocab_emb',
new_vocab_file=FLAGS.vocabx
)
itemx_emb = tf.feature_column.embedding_column(itemx_vocab,
dimension=128,
initializer=embedding_initializer_x,
trainable=False)