Reading — step 1 of 5
Read
Relevance Feedback (Rocchio)
Users rarely formulate the perfect query on the first try. Relevance feedback asks the user to mark some returned docs as relevant or not, then reformulates the query to look more like the relevant docs and less like the non-relevant ones.
The classic algorithm is Rocchio (1971) — Manning, IIR Ch.9.
The vector-space view
Every doc is a vector in term-space (e.g. TF-IDF weights). The original query q_0 is also a vector. Rocchio shifts the query vector:
q_m = alpha * q_0 + beta * (1/|D_rel|) * sum(d for d in D_rel)
- gamma * (1/|D_nonrel|) * sum(d for d in D_nonrel)
Typical parameters: alpha = 1.0, beta = 0.75, gamma = 0.15.
Geometrically: pull the query toward the centroid of relevant docs, push it away from the centroid of non-relevant docs.
After reformulation
Re-rank all docs with the new query vector. Typically the new query has many MORE terms than the original (it absorbed vocabulary from the relevant docs), so it captures synonymy and topic drift the user couldn't express directly.
Variants
- Pseudo-relevance feedback (blind): assume the top-k initial results are relevant, no user input. Cheap; can improve recall but risks topic drift on bad initial queries.
- Implicit feedback: use clicks as relevance signal.
- Negative weights clamp to 0: Manning recommends zeroing negative components (otherwise the math says "actively avoid this term").
Why it works
The user can't easily articulate why a doc is relevant, but they CAN spot relevant docs. Rocchio harvests the LATENT vocabulary they couldn't have typed.
Discussion
Ask a question, share an insight, or help someone who’s stuck.
Sign in to post a comment or reply.
Loading…