Выход из предварительно подготовленной модели 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", что делает намеченное сокращение. Пожалуйста, смотрите документацию к модулю.