mahout-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sean Owen <sro...@gmail.com>
Subject Re: [Taste] Sanity Check and Questions
Date Fri, 19 Jun 2009 12:04:08 GMT
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.)


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:

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.

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.


On Fri, Jun 19, 2009 at 7:16 AM, Grant Ingersoll<gsingers@apache.org> 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.

Mime
View raw message