Elmo是词嵌入还是句子嵌入?

时间:2018-12-16 01:04:24

标签: python tensorflow keras nlp

据说,Elmo是一个词嵌入。 因此,如果输入是句子或单词序列,则输出应该是向量序列。显然不是这样。

下面的代码使用keras和tensorflow_hub。

a = ['aaa bbbb cccc uuuu vvvv wrwr', 'ddd ee fffff ppppp']
a = np.array(a, dtype=object)[:, np.newaxis]
#a.shape==(2,1)

input_text = layers.Input(shape=(1,), dtype="string")
embedding = ElmoEmbeddingLayer()(input_text)
model = Model(inputs=[input_text], outputs=embedding)

model.summary()

ElmoEmbedding类来自https://github.com/strongio/keras-elmo/blob/master/Elmo%20Keras.ipynb

b = model.predict(a)
#b.shape == (2, 1024)

显然,嵌入为每个句子分配了一个1024维向量。这很令人困惑。

谢谢。

1 个答案:

答案 0 :(得分:3)

我想我找到了答案。 在https://tfhub.dev/google/elmo/2中。

输出字典包含:

  1. word_emb:具有形状的基于字符的单词表示 [batch_size,max_length,512]。

  2. lstm_outputs1:形状为[batch_size, max_length,1024]。

  3. lstm_outputs2:形状为[batch_size, max_length,1024]。

  4. elmo:3层的加权总和,其中权重为 可训练的。该张量的形状为[batch_size,max_length,1024]

  5. 默认值:所有上下文化单词的固定均值池 形状为[batch_size,1024]的表示形式。

第4层是实际的单词嵌入。第5个将第4层输出的序列减少为一个向量,从而有效地将整个事物转化为句子嵌入。