据说,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维向量。这很令人困惑。
谢谢。
答案 0 :(得分:3)
我想我找到了答案。 在https://tfhub.dev/google/elmo/2中。
输出字典包含:
word_emb:具有形状的基于字符的单词表示 [batch_size,max_length,512]。
lstm_outputs1:形状为[batch_size, max_length,1024]。
lstm_outputs2:形状为[batch_size, max_length,1024]。
elmo:3层的加权总和,其中权重为 可训练的。该张量的形状为[batch_size,max_length,1024]
默认值:所有上下文化单词的固定均值池 形状为[batch_size,1024]的表示形式。
第4层是实际的单词嵌入。第5个将第4层输出的序列减少为一个向量,从而有效地将整个事物转化为句子嵌入。