Выход из предварительно подготовленной модели Elmo

Я работаю над анализом настроений. Я использую метод elmo, чтобы получить вложения слов. Но меня смущает вывод, который дает этот метод. Рассмотрим код, приведенный на сайте тензорного потока:

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

Векторы встраивания для конкретного предложения варьируются в зависимости от количества строк, которые вы даете. Чтобы объяснить подробно, давайте

 x = "the cat is on the mat"
 y = "dogs are in the fog"
 x1 = elmo([x],signature="default",as_dict=True)["elmo"]
 z1 = elmo([x,y] ,signature="default",as_dict=True)["elmo"] 

Так x1[0] не будет равно z1[0], Это меняется, когда вы меняете входной список строк. Почему вывод для одного предложения зависит от другого. Я не тренирую данные. Я использую только существующую предварительно обученную модель. Поскольку это так, меня смущает, как преобразовать текст моих комментариев во вложения и использовать для анализа настроений. Пожалуйста, объясни.
Примечание: чтобы получить векторы вложения, я использую следующий код:

 with tf.Session() as sess:
            sess.run(tf.global_variables_initializer())
            sess.run(tf.tables_initializer())
            # return average of ELMo features
            return sess.run(tf.reduce_mean(x1,1))

1 ответ

Когда я запускаю ваш код, x1[0] и z1[0] совпадают. Однако z1[1] отличается от результата

y1 = elmo([y],signature="default",as_dict=True)["elmo"]
return sess.run(tf.reduce_mean(y1,1))

потому что у у есть меньше токенов, чем у х, и слепое сокращение выходных данных в конце концов вызовет мусор.

Я рекомендую использовать вывод "default" вместо "elmo", что делает намеченное сокращение. Пожалуйста, смотрите документацию к модулю.

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