Thank you for the reply.
I have a couple of questions I hope you or someone can help me with. So after a bit more researched, this is what I have:
def LSTM_model():

    inp = Input(shape=(MAXLEN,)) # check here
    x = Embedding(vocab_size, X_text.shape[1], trainable=False, mask_zero=True)(inp)
    x = Dropout(0.25)(x)
    x = Bidirectional(LSTM(64, dropout=0.2, recurrent_dropout=0.2, return_sequences=True))(x)
    x = Bidirectional(LSTM(32))(x)
    x = Dense(16, activation='relu')(x)
    x = Dropout(0.2)(x)
    x = Dense(3)(x) 

    model = Model(inputs=inp, outputs=x)
    model.compile(loss=SparseCategoricalCrossentropy(from_logits=True),
                  optimizer=Adam(learning_rate=1e-4), 
                  metrics=['sparse_categorical_accuracy'])

    return model

1-  What does the Embedding layer usually take? At the moment, it’s vocab_size (len of tokenizer.word_index), second dimension of vectorized text column (text_to_sequence and padding applied), and a couple of more arguments.
Now I’ve seen several variations where an input_length (equal to MAXLEN, others equal to shape of vectorized text column) is added to the Embedding layer, other variations that have MAXLEN (maximum number of words in one sentence in my column) as the output_dim, etc. It’s a bit confusing and I’m not sure which is correct…
2-  The first input layer takes (MAXLEN,) as shape. Is that correct?
3-  Are there any improvements someone can suggest?