Tensorflow/Keras 应用于张量的嵌入层

Tensorflow/Keras embedding layer applied to a tensor

我想创建一个张量流模型,它将一个整数列表和 return 相应的预训练嵌入作为输入。

例如,如果输入批次为 [[1, 2, 3], [4, 5, 6]] 我希望模型为 return [[embed[1], embed[2], embed[3]], [embed[4], embed[5], embed[6]],其中 embed 是一个包含预训练嵌入的矩阵。

我想我能够创建一个带有预训练嵌入的嵌入层,但我的代码只有 return 一个嵌入。

embedding_dim = 5
vocab_size = 100

embedding_matrix = np.random.random((vocab_size, embedding_dim))

emb_model = tf.keras.Sequential()
embedder = tf.keras.layers.Embedding(vocab_size, 
                                     embedding_dim,
                                     embeddings_initializer=tf.keras.initializers.Constant(embedding_matrix),
                                     trainable=False,
                                     input_shape=(None,))
emb_model.add(embedder)

例如,如果我 emb_model([[[8, 2, 7], [2, 8, 4]]]) 只有第 8 项的嵌入是 returned

这是正确的做法

embedding_dim = 5
vocab_size = 100
test = np.asarray([[1, 2, 3], 
                   [4, 5, 6]])

embedding_matrix = np.random.uniform(-1,1, (vocab_size,embedding_dim))

emb_model = tf.keras.Sequential()
embedder = tf.keras.layers.Embedding(vocab_size, 
                                     embedding_dim,
                                     trainable=False,
                                     weights=[embedding_matrix],
                                     input_shape=(None,))
emb_model.add(embedder)

emb_model(test)

我们初始化一个权重矩阵并将其插入模型weights=[embedding_matrix]设置trainable=False

在这一点上,我们可以通过我们感兴趣的 id 直接计算我们的预测

结果是一个 dim 数组 (n_batch, n_token, embedding_dim)