How does a cross-encoder operate differently from a bi-encoder, and when might you use one over the other? — Blankdot