1

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

> 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:第一个 LSTM 隐藏状态,形状为 [batch_size, max_length, 1024]
  • lstm_outputs2:形状为 [batch_size, max_length, 1024] 的第二个 LSTM 隐藏状态。
  • elmo:3 层的加权和,其中权重是可训练的。这个张量的形状为 [batch_size, max_length, 1024]
  • 默认值:具有形状 [batch_size, 1024] 的所有上下文化单词表示的固定均值池。

如何访问word_emb, lstm_outputs1, lstm_outputs2 ..输出字典中的字段?我正在按照使用示例从这个链接缓存数据集

4

1 回答 1

0

如果您遵循tf-Hub 网站上的示例,您将看到:

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 ..属性的字典。

希望这可以帮助 !

于 2020-02-19T08:07:43.590 回答