Search and Recommendation

Search and recommendation are very interrelated concepts.

What is search, but query-directed recommendation? Or recommendation, but zero-query search?

My students asked me about this relationship in my recommender systems class last spring. Trying to answer this question brought me to a formulation that seemed to help them, and perhaps it will be more broadly illuminating as well. For some of you this may well be old hat.


In information seeking, there are several things that may influence the suitability of an item. These include:

  • the item's properties
  • the user's preferences and interaction history
  • a query or other articulated information need provided by the user
  • the context at the point and time of recommendation

Further, most common recommendation and retrieval algorithms operate by first computing a score for each candidate item, and then ranking items by score. There are exceptions, of course, and many algorithms post-process either the score or the recommendation list (e.g. for diversification). But at the core of many algorithms is a scoring function:

s(i;u,q,x):I×U×Q×XRs(i;u,q,x): I \times U \times Q \times X \to \mathbb{R}

The purpose of this function is to score an item i for a user u who articulated a query q in context x. We could also envision a direct retrieval function r(u,q,x):U×Q×XInr(u,q,x): U \times Q \times X \to I^n.

Under this formulation, the difference between traditional recommendation, traditional search, and other retrieval settings is simply the variables taken into account when computing the scores. We can define several kinds of tasks:

  • If ss depends only on uu (and ii), we get a traditional recommender, producing suggestions for the user.
  • If ss depends only on qq and ii, we have a traditional non-personalized search engine.
  • If ss depends on xx and uu, we have a context-aware recommender system.
  • If ss depends on all its parameters, uu, qq, xx, and ii, we have a context-aware personalized search system, e.g. Google.

We discussed this formulation in a couple different class sessions, and it seemed to click with students. I'm thinking that I'll work it in more deeply next time I teach the class, perhaps even as the overall framing: our goal, students, is to study this function and different ways of computing it, assessing its effectiveness, and building it in to a user experience.