НЛП - Использование текстовых метаданных в качестве входных данных в Tensorflow / Keras - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь построить модель распознавания сущностей, используя Tensorflow / Keras. Для каждого слова я также генерирую некоторые двоичные и некоторые числовые c функции (метаданные), такие как 'StartsWithCapital', 'HasDigits', 'SizeofFont' и т. Д. c .. Я пытаюсь реализовать остаточную модель Bi-LSTM, но Я не уверен, как я должен использовать эти метаданные вместе с текстом?

Как я понимаю, в основном предлагается следующее:

input_text = Input(shape=(max_length,))
input_x = Input(shape=(max_length, 1))
input_y = Input(shape=(max_length, 1))
input_z = Input(shape=(max_length, 1))

embedding = Embedding(input_dim=embedding_matrix.shape[0],
                      output_dim=embedding_matrix.shape[1],
                      weights=[embedding_matrix], 
                      trainable=False, 
                      input_length=max_length)(input_text)

# Option 1 - Concatenate before model
embedding = Concatenate()([embedding, input_x, input_y, input_z])

# Residual Bi-LSTM Model
x = Bidirectional(LSTM(units=128, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(embedding)
x_rnn = Bidirectional(LSTM(units=128, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(x)
x = Add()([x, x_rnn])
out = TimeDistributed(Dense(n_tags, activation="softmax"))(x)

model = Model(inputs=[input_text, input_x, input_y, input_z], outputs=out)

Но я хотел бы знать, будет ли это неправильно не передавать дополнительные функции слоям LSTM, объединенным со словами встраивания следующим образом, будет ли это рассматриваться как уделение большего внимания этой функции, или это просто неправильно? Также можем ли мы иметь другой тип слоя LSTM для этих функций параллельно?

input_text = Input(shape=(max_length,))
input_x = Input(shape=(max_length, 1))
input_y = Input(shape=(max_length, 1))
input_z = Input(shape=(max_length, 1))

embedding = Embedding(input_dim=embedding_matrix.shape[0],
                      output_dim=embedding_matrix.shape[1],
                      weights=[embedding_matrix], 
                      trainable=False, 
                      input_length=max_length)(input_text)

# Residual Bi-LSTM Model
x = Bidirectional(LSTM(units=128, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(embedding)
x_rnn = Bidirectional(LSTM(units=128, return_sequences=True, recurrent_dropout=0.2, dropout=0.2))(x)
x = Add()([x, x_rnn])

# Option 2 - Concatenate after model (Maybe pass the inputs to other layers first?)
x = Concatenate()([x, input_x, input_y, input_z])

out = TimeDistributed(Dense(n_tags, activation="softmax"))(x)

model = Model(inputs=[input_text, input_x, input_y, input_z], outputs=out)

Спасибо за помощь.

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