wiki:ExpertRecommender

Version 3 (modified by fmittag, 16 years ago) (diff)

--

Wikipedia says:

An expert is someone widely recognized as a reliable source of technique or skill whose faculty for judging or deciding rightly, justly, or wisely is accorded authority and status by their peers or the public. An expert, more generally, is a person with extensive knowledge or ability in a particular area of study.

Definitions:

  • rating: personal meaning, liking (e.g. "I like this song.", "I don't like this feature.")
  • opinion: personal view (e.g. "I think this song has sad lyrics.", "I don't think that this has breathing female vocals.")

Content-based recommendation:

  • goal: find rating function, that predicts the user's rating based on the features of an item
  • rating function is highly personalized, different for each user
  • in SkipForward, the feature annotation depends on the user, too
  • conclusion: perfect rating function could still be wrong, because the features may be inaccurate
  • goal: find similarity function, that calculates the similarity between user's opinions
  • => expert: someone with the same opinion like me

Problem:

  • hierarchical feature space
  • subclass-of relation has no well-defined semantic

Examples

Example 1:

  • SongArtist (links to an artist)
    • RemixedBy
    • SongAlsoArtist
    • SongMainArtist

Let there be the following opinions

  • User A says that song S has the feature SongAlsoArtist artist Z.
  • User B says that song S has the feature SongMainArtist artist Z.

In a strict sense, they share no opinion because they have expressed opinions on different features. But one could infer that both users think that artist Z is some kind of SongArtist of song S. So in some way, the opinions of user A and B and more similar than to some user C who says that artist Z is NOT a SongArtist of song S.

Example 2:

  • Electric_Guitar_Riffs
    • Dirty_Electric_Guitar_Riffs
    • Layered_Electric_Guitar_Riffs

Let there be the following opinions

  • User A says that song S has the feature Dirty_Electric_Guitar_Riffs.
  • User B says that song S has the feature Layered_Electric_Guitar_Riffs.
  • User C says that song S has the feature Electric_Guitar_Riffs.
  • User D says that song S does NOT have the feature Layered_Electric_Guitar_Riffs.

Again, the only two opinions directly comparable are the ones of users B and D, as they are oppositional. Users A and B are similar, because they both think that the song has some sort of Electric_Guitar_Riffs, but the have a dissens in the special type of guitar riffs. But does this mean, that user A and C are more similar than A and B?

It gets worse, because the opinion of user D does NOT state that the song has no Electric_Guitar_Riffs at all, just that is has no Layered_Electric_Guitar_Riffs.

Example 3:

  • Player_order
    • All_players_simultaneously
    • Player_order_changes
      • Bidding_on_player_order

Let there be the following opinions:

  • User A says that game G has the features: +All_players_simultaneously
  • User B says that game G has the features: +Player_order_changes
  • User C says that game G has the features: -Bidding_on_player_order
  • User D says that game G has the features: +Player_order_changes, -Bidding_on_player_order

Naturally, one would say that users B and D have a similar opinions, so have users C and D. But what about B and C? One might be tempted to say, that the opinions of users A and B exclude each other, but this can't be known for sure, because there might be some game that has different phases, one with all players playing simultaneously, one with changing player order. Stating that the opinion of A and B are equal because both state that there is some playing order would also be wrong, because here the feature Player_order is merely for grouping purposes and has no own meaning.

Conclusion

I looked into the SkipTrax and the Ludopinions ontology and only found two cases:

  • a feature with sub-features is for grouping purpose only and it would have no meaning to state something about this feature
  • the sub-features of a feature are specialized cases of the super-feature, so the super-feature should have at least the maximum appliance value of all of its sub-features

Suggestion

Comparing features

Define a similarity metric that compares two features x and y of the same (direct) type. Until now, the value of a feature is only the applicability value of the feature.

sim(x,y) = 1 - dist(x,y)/2

The distance between two features x and y is defined as follows:

dist(x,y) = |x-y|

This means, that two features with the same applicability have the distance 0 and thus the similary 1 - 0/2 = 1. Two features with applicability -1 and 1 would have the distance 2 and the similarity 1 - 2/2 = 0. (TODO: prove the properties of a metric)

Comparing items

The similarity of two items is defined through the similarity of their features. The outline of a potential algorithm looks like this:

  • The similarity of two items is the arithmetic mean of the similarities of all features
  • Features that are not annotated will be ignored
  • If a feature type is only annotated in one item, feature values need to be inferred until they can be compared

Example:

Let there be a simple feature-hierarchy as follows:

  A
 / \
B   C

Example similarities would be: ("-" means: not annotated)

  1      -1
 / \  ;  / \      => similarity = 0
-   -   -   -
   1       1
  / \  ;  / \     => similarity = (1 + 0) / 2 = 0.5
-1   -   1   -

Some non-trivial cases:

   -      -1                               -       -
  / \  ;  / \     => similarity = ?       / \  ;  / \     => similarity = ?
-1   -   -   -                          +1   -   -  -1

Suggestion: Propagate possible values as intervals up or down the hierarchy

We extend the distance metric on intervals, where x1 and x2 denote the interval bounds of x = [x1;x2] (if x1 = x2, we just write [x1], which is equal to the value x1)

dist(x,y) = (|x1-y1| + |x2-y2|) / 2

The above example can then be compared:

   -      -1        [-1;+1]       -1
  / \  ;  / \   =>   /   \   ;    / \    => similarity = (sim(-1,[-1]) + sim([-1;+1],-1)) / 2 = (1 + 0.5) / 2 = 0.75
-1   -   -   -     -1     -    [-1]  -