Tensorflow 错误连接 Char 和 Word 嵌入

Tensorflow Error Concatenating Char and Word embedding

我想将 Char Embeddings(使用 CNN 生成)与我的 Word Embedding(使用 Glove 向量)连接起来 但是由于 Char Embeddings 的形状与 Word Embeddings 不同而出现错误。

如何修复错误或连接这些错误?

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], [].**

我正在使用这个 repo https://github.com/Franck-Dernoncourt/NeuroNER 它使用 LSTM 进行字符级嵌入,我想为此使用 CNN。

Link 使用 LSTM 进行字符级嵌入,我的代码使用 CNN,如上所述。

如果需要任何其他信息或代码,请发表评论。

最后,我解决了问题,但将 char 嵌入展平,然后它可以很容易地与 Word 嵌入连接。 通过添加这一行,它起作用了。

character_embed_output = tf.layers.Flatten()(character_embed_output)