For LSTM model, the expected input shape is (seq_len, batch, input_size), in your case (batch, seq_len, input_size) because you set batch_first as True. Similarly, the expected output tensor shape is (batch, seq_len, hidden_size) in your case.
When you pass a tensor in the shape of (batch_size, caption_length+1, embed_size), you are saying the seq_len is  caption_length+1. That’s why your output has the shape (batch_size, caption_length+1, vocab_size).
To get an output of the shape (batch_size, caption_length, vocab_size), your input should be of the shape (batch_size, caption_length, embed_size).