迫于生计,从今天开始学习推荐系统相关的内容,先来读一篇推荐系统领域的综述 Toward the next generation of recommender systems: a survey of the state-of-the-art and possible extensions
由于目前的工作其实偏向推荐系统的 serving、训练的开发,因此这些 paper 可能都是粗读,也不会把 paper 中的内容逐句翻译,而是找出我认为最为重要的一些概念加以记录。
INTRODUCTION#
- 推荐问题简单来说可以归纳成对 user 未看见的 item 进行打分的过程,这个分一般称之为 rating。有了 rating,推荐时取 rating 最高的 top k 个 item 给用户即可。
- 推荐系统的预测内容有两种不同的类别,一种是预测绝对的 rating,另一种是预测 user 对不同 item 的相对喜好,称为 “preference-based recommender systems”。本文只讲前者,也就是预测具体的 rating 数值。
- 根据使用的方法不同,推荐系统又分为三类:
- 基于内容的推荐:user 会被推荐与他之前喜欢的 item 相似的 item
- 基于协同过滤的推荐:user 会被推荐其他和该 user 品味相近的 user 喜欢的 item
- 将上述两种方法结合在一起使用
基于内容的方法( Content-Based Methods )#
常用在基于 text 内容的领域,可以用一些keyword来描述内容。具体做法是先拿到 keyword 的 weight,然后基于这些 weight 来做推荐。计算 keyword weight 的方法中,比较有名的是 TF-IDF。
TF-IDF#
tf–idf 是一个用来衡量一篇 text 中每个 keyword 的重要性(或者叫 weight)的方法。 从名字就可以看出,这个方法分为两部分:tf 和 idf。
tf 是 “term frequency” 的缩写,表示的是某个 keyword 在一篇 text 里的频率,也就是出现的次数除以所有字词出现的次数。 idf 是 “inverse document frequency” 的缩写,衡量的是某个 keyword 在语料库里的普遍性。越普遍,该值越小(比如结构助词 “的”,几乎在每一个 text 里都会出现,那么 idf 值就会很小)。
tf 和 idf 两部分都有一个公式来计算得到数值,tf-idf 算法是将两个数值相乘起来,使得最终结果可以被这两部分影响。 tf-idf 算法认为,某个 keyword 的 tf 值越高、idf 值越大,说明这个 keyword 对这篇 text 越重要。
直观地说,tf-idf 的 tf 是保留高频重要词语,idf 是将常见的词语去除的过程。
我们刚刚说 tf-idf 可以用来分析一个 text(也就是 item)中每个 keyword 的 weight,那么实际上,tf-idf 也可以用来分析对于一个 user,每个 keyword 的 weight。 这样我们就得到了两个 weight vector,分别表示每个 keyword 对一个 user 的重要性和每个 keyword 对一个 item(text)的重要性。
此时可以算一下两个向量的相似度,比如算个 cos 距离,然后根据这个相似度进行推荐。
缺点#
- 非 text-based 的 item 不好提取 feature
- top k keyword 相同的两个 item,不好区分
- 只会推荐之前打分过的 item,使得推荐系统缺乏多样性
- 新用户的冷启动问题,推荐系统中没有新用户的喜好,导致无法做推荐
基于协同过滤的方法#
- 找到和某个 user taste 类似的 user group,然后将这个 user group 喜欢的 item 推给这个 user
- 根据使用的方法不同,通常分为两类:memory-based(or heuristic-based)和 model-based。前者更多是基于某个 rule 做预测,后者是通过 ML 以及之后的 DL 方法来 train 一个 model,用这个 model 做预测
- 由于可能需要计算任意两个 user 的相似度来判断 taste,很多 sys 会先将任意两个 user 的相似度预处理出来。
- 虽然协同过滤的方法最初是用于计算 user 的相似度来做推荐,但是后面也有基于 item 的相似度来做推荐的方法,通常被写作 “user-based CF” 和 “item-based CF”
优点#
- 能够推荐给 user 他没见过,但是和他品味类似的 user group 喜欢的 item
- 由于是基于 ratings 算相似度,所以适用于任何形态的内容(而不仅仅是 text-based content,说白了就是当时其他形态的内容不容易拿到 feature)
缺点#
- new user problem:不知道新用户的喜好,不知道哪些才是与 new user taste 相似的 user
- new item problem:新 item 没有被足够的用户打分,很难被推荐给其他 user
- Sparsity:协同过滤依赖于大量的 user。如果某个 item 没有很多 user 打分,那么就不会被经常推荐;如果某个 user 的口味独特(因此和它口味相近的人很少),那么也不会有很好的推荐效果。
混合方法#
就是将 content-based 和协同过滤的方法混合起来。有几种混合方法:
- 两个方法分别做,然后把最终结果混合,类似 model Ensemble,或者直接在某个步骤时取一个更好的。
- 在协同过滤方法中添加 content-based 的特征。可以用这些 content-based 的特征算 user 的 profile。得到的 profile 不仅可以用来计算 user 之间的相似度(而不仅仅是根据 user 喜欢的 items 来计算),还可以通过计算 user 的 profile 与 item 之间的相似度直接推荐,解决了冷门 item(对应了口味独特的 user)的推荐问题。
- 在 content-based 的方法中添加协同过滤的特征
- 搞一个使用两种方法的统一模型