#python #tensorflow #keras #nlp #embedding
#python #tensorflow #keras #nlp #встраивание
Вопрос:
Я хочу объединить встраивания символов (сгенерированные с использованием CNN) с моим встраиванием слов (с использованием векторов перчаток), но получаю ошибку, поскольку форма вложений символов отличается от вложений слов.
Как можно исправить ошибку или объединить их?
self.character_embedding_weights = tf.get_variable(
"character_embedding_weights",
shape=[dataset.alphabet_size, parameters['character_embedding_dimension']],
initializer=initializer)
embedded_characters = tf.nn.embedding_lookup(self.character_embedding_weights,
self.input_token_character_indices, name='embedded_characters')
if self.verbose:
print("embedded_characters: {0}".format(embedded_characters))
utils_tf.variable_summaries(self.character_embedding_weights)
s = tf.shape(embedded_characters)
char_embeddings = tf.reshape(embedded_characters, shape=[-1,25,20])
# Conv #1
conv1 = tf.layers.conv1d(
inputs=char_embeddings,
filters=30,
kernel_size=3,
padding="valid",
activation=tf.nn.relu)
# Conv #2
conv2 = tf.layers.conv1d(
inputs=conv1,
filters=30,
kernel_size=3,
padding="valid",
activation=tf.nn.relu)
pool2 = tf.layers.max_pooling1d(inputs=conv2, pool_size=2, strides=2)
# # Dense Layer
character_embed_output = tf.layers.dense(inputs=pool2, units=32, activation=tf.nn.relu)
Здесь я объединяю встраивания токена и символа.
with tf.variable_scope("concatenate_token_and_character_vectors"):
if self.verbose:
print('embedded_tokens: {0}'.format(embedded_tokens))
token_lstm_input = tf.concat([character_embed_output, embedded_tokens],
axis=1, name='token_lstm_input')
Получение этой ошибки
ValueError: Shape must be rank 3 but is rank 2 for'concatenate_token_and_character_vectors/token_lstm_input' (op: 'ConcatV2') with input shapes:[?,10,32], [?,100], [].**
Я работаю с этим репозиторием https://github.com/Franck-Dernoncourt/NeuroNER Он использует LSTM для встраивания на уровне символов, и я хочу использовать CNN для этого.
Ссылка, в которой используется LSTM для встраивания на уровне символов, и у меня есть код, использующий CNN, как упоминалось выше.
Прокомментируйте, если требуется какая-либо другая информация или код.
Ответ №1:
Наконец, я смог решить проблему, но сгладил встраивание символов, после чего его можно легко объединить с встраиванием слов. Добавив эту строку, это сработало.
character_embed_output = tf.layers.Flatten()(character_embed_output)