Моя обученная модель ELMo дает выходной словарь с полями, отличными от полей модели tf.hub

При использовании предварительно обученной модели 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: второе скрытое состояние LSTM с формой [batch_size, max_length, 1024].
  • elmo: взвешенная сумма 3-х слоев, где веса являются обучаемыми. Этот тензор имеет форму [batch_size, max_length, 1024]
  • по умолчанию: фиксированное среднее объединение всех контекстуализированных представлений слов с формой [batch_size, 1024].

как я могу получить доступ к word_emb, lstm_outputs1, lstm_outputs2 .. поля в выходном словаре? Я следую примеру использования для кэширования набора данных по этой ссылке

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 .. атрибуты.

Надеюсь это поможет!

Другие вопросы по тегам