Выход из предварительно подготовленной модели Elmo - PullRequest
0 голосов
/ 25 марта 2019

Я работаю над анализом настроений.Я использую метод 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 Ответ

0 голосов
/ 26 марта 2019

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

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

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

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

...