Elmo - это вложение слов или предложений? - PullRequest
0 голосов
/ 16 декабря 2018

Предположительно, Elmo - это вложение слова.Таким образом, если входные данные представляют собой предложение или последовательность слов, выходные данные должны представлять собой последовательность векторов.По-видимому, это не так.

В приведенном ниже коде используются keras и tenorflow_hub.

a = ['aaa bbbb cccc uuuu vvvv wrwr', 'ddd ee fffff ppppp']
a = np.array(a, dtype=object)[:, np.newaxis]
#a.shape==(2,1)

input_text = layers.Input(shape=(1,), dtype="string")
embedding = ElmoEmbeddingLayer()(input_text)
model = Model(inputs=[input_text], outputs=embedding)

model.summary()

Класс ElmoEmbedding имеет значение https://github.com/strongio/keras-elmo/blob/master/Elmo%20Keras.ipynb.

b = model.predict(a)
#b.shape == (2, 1024)

По-видимому,вложение назначает 1024-мерный вектор каждому предложению.Это сбивает с толку.

Спасибо.

1 Ответ

0 голосов
/ 16 декабря 2018

Я думаю, что нашел ответ.Он находится в https://tfhub.dev/google/elmo/2.

Выходной словарь содержит:

  1. word_emb: символьные представления слов с формой [batch_size, max_length, 512].

  2. lstm_outputs1: первое скрытое состояние LSTM с формой [batch_size, max_length, 1024].

  3. lstm_outputs2: второе скрытое состояние LSTM с формой [batch_size, max_length, 1024].

  4. elmo: взвешенная сумма 3-х слоев, где веса являются обучаемыми.Этот тензор имеет форму [batch_size, max_length, 1024]

  5. по умолчанию: фиксированный средний пул всех контекстуализированных представлений слов с формой [batch_size, 1024].

4-й слой - это фактическое вложение слова.Пятый сводит вывод последовательности 4-м слоем к одному вектору, эффективно превращая все это в вложение предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...