我的ELMo训练模型为输出字典提供了与tf.hub模型不同的字段

时间:2019-04-24 15:04:08

标签: tensorflow machine-learning elmo

使用预先训练的ElMo模型时,我得到的输出字典不同于已发布的tf.hub model中解释的输出字典 我的输出字典的签名是

> model = BidirectionalLanguageModel(options_file, weight_file)
> ids_placeholder = tf.placeholder('int32', shape=(None, None, max_word_length))
> ops = model(ids_placeholder)
> print (ops)
{'token_embeddings': <tf.Tensor 'bilm/Reshape_1:0' shape=(?, ?, 512) dtype=float32>, 
'lengths': <tf.Tensor 'sub:0' shape=(?,) dtype=int32>, 
'mask': <tf.Tensor 'Cast_1:0' shape=(?, ?) dtype=bool>, 
'lm_embeddings': <tf.Tensor 'concat_3:0' shape=(?, 3, ?, 1024) dtype=float32>}

tf hub的输出词典包含:

  • word_emb:形状为[batch_size,max_length,512]的基于字符的单词表示形式。
  • lstm_outputs1:形状为[batch_size,max_length,1024]的第一个LSTM隐藏状态
  • lstm_outputs2:第二个LSTM隐藏状态,形状为[batch_size,max_length,1024]。
  • Elmo:权重可训练的3层的加权总和。此张量的形状为[batch_size,max_length,1024]
  • 默认值:形状为[batch_size,1024]的所有上下文化单词表示形式的固定均值池。

如何访问输出字典中的word_emb, lstm_outputs1, lstm_outputs2 ..字段? 我正在按照使用示例从this link

缓存数据集

1 个答案:

答案 0 :(得分:0)

如果您遵循tf-Hub website中的示例,则会看到:

elmo = hub.Module("https://tfhub.dev/google/elmo/3", trainable=True)
embeddings = elmo(
    ["the cat is on the mat", "dogs are in the fog"],
    signature="default",
    as_dict=True)["elmo"]

确保将as_dict参数设置为True。 在此示例中,如果您摆脱了它,则直接检索字典的["elmo"]值:

elmo = hub.Module("https://tfhub.dev/google/elmo/3", trainable=True)
embeddings = elmo(
    ["the cat is on the mat", "dogs are in the fog"],
    signature="default",
    as_dict=True)

创建的变量elmo将是具有所需word_emb, lstm_outputs1, lstm_outputs2 ..属性的字典。

希望这会有所帮助!