I was indeed using  nn.BCELoss with sigmoid activation. I tried with your suggestion, i.e. to remove the sigmoid and train with nn.BCEWithLogitsLoss but I did not get any improvement. This is the loss throughout training for 15 epochs.

Screenshot 2021-04-08 at 10.24.39776×504 9.58 KB

Do you have any idea why this may not be working?
To your second question - yes, the idea is to get a score for each user-item pair, so this is why the output tensors is of size [batch_size, batch_size].