Подтвердить что ты не робот

Какая разница между Collaborative Filtering Рекомендация на основе статей и рекомендация, основанная на контенте

Я озадачен тем, что рекомендация на основе элементов находится в "mahout in action". В книге есть алгоритм:

for every item i that u has no preference for yet
  for every item j that u has a preference for
    compute a similarity s between i and j
    add u preference for j, weighted by s, to a running average
return the top items, ranked by weighted average

что я могу рассчитать сходство между пунктами? Если вы используете контент, это не рекомендация на основе контента?

4b9b3361

Ответ 1

Совместная фильтрация по элементам

Исходная рекомендация по позиции полностью основана на рейтинге пользовательских позиций (например, пользователь оценивает фильм с 3 звездами, или пользователь "любит" видео). Когда вы вычисляете сходство между элементами, вы не должны знать ничего, кроме истории рейтингов всех пользователей. Таким образом, сходство между элементами вычисляется на основе рейтингов вместо метаданных содержимого элемента.

Позвольте мне привести вам пример. Предположим, у вас есть доступ только к некоторым данным рейтинга, как показано ниже:

user 1 likes: movie, cooking
user 2 likes: movie, biking, hiking
user 3 likes: biking, cooking
user 4 likes: hiking

Предположим, теперь вы хотите сделать рекомендации для пользователя 4.

Сначала вы создаете инвертированный индекс для элементов, вы получите:

movie:     user 1, user 2
cooking:   user 1, user 3
biking:    user 2, user 3
hiking:    user 2, user 4

Так как это двоичный рейтинг (например, или нет), мы можем использовать меру подобия, например Jaccard Similarity, чтобы вычислить сходство элементов.

                                 |user1|
similarity(movie, cooking) = --------------- = 1/3
                               |user1,2,3|

В числителе user1 является единственным элементом, в котором есть фильм и кулинария. В знаменателе объединение фильма и кулинарии имеет 3 разных пользователя (user1,2,3). |.| обозначим размер множества. Поэтому мы знаем, что сходство между фильмом и кулинарией в нашем случае составляет 1/3. Вы просто делаете то же самое для всех возможных пар элементов (i,j).

После того, как вы закончите вычисление подобия для всех пар, скажем, вам нужно сделать рекомендацию для пользователя 4.

  • Посмотрите на оценку подобия similarity(hiking, x), где x - любые другие теги, которые у вас могут быть.

Если вам необходимо сделать рекомендацию для пользователя 3, вы можете агрегировать оценку подобия по каждому элементу в своем списке. Например,

score(movie)  = Similarity(biking, movie) + Similarity(cooking, movie)
score(hiking) = Similarity(biking, hiking) + Similarity(cooking, hiking) 

Рекомендация на основе контента

Точка содержания - это то, что мы должны знать содержимое как пользователя, так и элемента. Обычно вы создаете профиль пользователя и профиль элемента, используя содержимое разделяемого пространства атрибутов. Например, для фильма вы представляете его со звездами кино в нем и жанрами (например, с использованием двоичного кодирования). Для профиля пользователя вы можете сделать то же самое, основываясь на том, что пользователи любят некоторые кинозвезды/жанры и т.д. Тогда сходство пользователя и элемента может быть вычислено, например, с помощью косинусного сходства.

Вот конкретный пример:

Предположим, что это наш профиль пользователя (с использованием двоичного кодирования, 0 означает не-похожее, 1 означает), который содержит предпочтение пользователя более 5 звезд кино и 5 жанров фильмов:

         Movie stars 0 - 4    Movie Genres
user 1:    0 0 0 1 1          1 1 1 0 0
user 2:    1 1 0 0 0          0 0 0 1 1
user 3:    0 0 0 1 1          1 1 1 1 0

Предположим, что это наш профиль фильма:

         Movie stars 0 - 4    Movie Genres
movie1:    0 0 0 0 1          1 1 0 0 0
movie2:    1 1 1 0 0          0 0 1 0 1
movie3:    0 0 1 0 1          1 0 1 0 1

Чтобы вычислить, насколько хорош фильм для пользователя, мы используем сходство с косинусом:

                                 dot-product(user1, movie1)
similarity(user 1, movie1) = --------------------------------- 
                                   ||user1|| x ||movie1||

                              0x0+0x0+0x0+1x0+1x1+1x1+1x1+1x0+0x0+0x0
                           = -----------------------------------------
                                         sqrt(5) x sqrt(3)

                           = 3 / (sqrt(5) x sqrt(3)) = 0.77460

Аналогично:

similarity(user 2, movie2) = 3 / (sqrt(4) x sqrt(5)) = 0.67082 
similarity(user 3, movie3) = 3 / (sqrt(6) x sqrt(5)) = 0.54772

Если вы хотите дать одну рекомендацию для пользователя i, просто выберите фильм j, который имеет самый высокий similarity(i, j).

Надеюсь, это поможет.

Ответ 2

"Основанный на предметах" действительно означает "основанность на элементах". Здесь вы можете поместить любую метрику сходства. Да, если он основан на контенте, подобно сходству с косинусом по векторам сроков, вы также можете назвать это "основанным на содержании".