mahout-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Grant Ingersoll <>
Subject Re: [Taste] Sanity Check and Questions
Date Fri, 19 Jun 2009 12:40:59 GMT

On Jun 19, 2009, at 8:04 AM, Sean Owen wrote:

> PS if it wasn't clear in my last message -- there is already support
> for what Ted is talking about in the library. Well almost -- the
> item-item similarity computation needs to be ported to user-user,
> that's all.
> 1. There isn't really support for this -- it isn't really a
> *personalized* recommendation problem per se since there is no data.
> The solutions are simpler than what the framework provides (though,
> I'm open to adding stuff to support this, even if it should be easy).
> You could:
> a. Pick from among the n most popular items across the data model or  
> something
> b. Pick the most similar items to what they are looking (per below)
> c. Construct a canned list of items to recommend in this case, which
> are suitably diverse
> (And yep, there is an interesting problem to solve here -- automating
> that. Building a list of the n *most dissimilar* items on the theory
> it's most likely to give the user something recognizable to start
> looking at and rating.)

OK, that makes sense.  Rereading my "average" idea now, I realize that  
it would be meaningless to assume an average for all items.

> 2.  Nah I don't think you want to go to all the trouble of
> transposing, that's quite heavy. I think you want one of two things
> based on your description:

I don't know, "Programming Collective Intelligence" (page 17) seems to  
suggest transposing as being pretty useful for product-product  
suggestions.  I suppose, however, that it really is just getting the  
neighborhood then and not going the extra step of getting items (er  
users in this case).

The main cost is in having a second model in memory, I suppose.

> a. Given an item you want to find all the most similar items. This is
> a subset of what an item-based recommender does, and that core logic
> is factored out into TopItems.getTopItems(). You can see how it's
> called in GenericItemBasedRecommender for reference, but you're
> basically passing a number of things you want back, a list of all
> items, (optional Rescorer but just pass null), and finally an
> Estimator. This last thing should return the similarity between your
> item and the item given as a parameter, using some similarity metric.
> Then the method does the work.

That seems like it should work for what I want.

> b. Maybe instead you want to simply *influence* the recommendations to
> favor things that are similar to a currently viewed item. In that case
> use Recommenders as usual but pass in a Rescorer object. This is a
> hook that lets you modify the estimated preference, and thus the
> ranking, for recommended items. You could cook up logic that boosts
> the score for high similarities or penalizes it for low similarities.

OK, this makes sense too.

> On Fri, Jun 19, 2009 at 7:16 AM, Grant  
> Ingersoll<> wrote:
>> This is all good stuff, here, Ted.  Thank you.
>> For the task at I hand, I am focusing on what is available in Taste  
>> as an
>> expression of some level of capability for doing CF.
>> Two things that aren't clear to me just yet from the Taste APIs are:
>> 1. Given a new user with no ratings, recommend items.  I see the
>> recommenders have an estimatePreference() method, maybe that  
>> helps.  I
>> suppose the other option is to assume the user rates all items as  
>> average
>> and go from there.
>> 2.  As a related approach, given a user visiting an item, recommend  
>> other
>> items.  For the latter, I imagine that if I transpose the model to  
>> go from
>> items->users, I can then get a set of recommended users.  Then,  
>> from those
>> users (reverting back to the original model) I can then get  
>> recommended
>> items.

Grant Ingersoll

Search the Lucene ecosystem (Lucene/Solr/Nutch/Mahout/Tika/Droids)  
using Solr/Lucene:

View raw message