前言

终于,我也到了当修士的时候了;终于,我也到了要上课的时候了。时间真快,来日本已经一年多了,回首仿佛还在昨天。虽然说大学院的课程很水,但是总归是让我有些充实的感觉(虽然平时研究也很充实。。。简单抒情到这里。还是说正事吧。

这学期我一共修了六节课,其中有三门,是我觉得需要做笔记做成博客的程度。其中这一门就是 《推荐系统》(recommender system) 。另外的两门分别是《人机交互》和《可视化》(都是属于比较工科的课程,即会用到数学或者物理的知识),但是这两门我在本科的时候都有修习过,所以算是有点基础。而这门《推荐系统》,是我第一次接触。在上了两节课之后,我觉得非常的有意思。首先,推荐系统本身是面向用户(客户)吸引用户的一种手段,和我这个“希望引人注目”的人的个性很契合,我也很希望视频网站能把我的视频推荐给大家(XS);其次,我认为推荐系统中的算法和思想和数学建模有很大的关系,有些非常的巧妙,且没有过于的硬核。

我们上课的形式是网课,而且老师只会提供PDF和word文档,所有的内容也并非老师原创,都是来自于书本 《Recommender Systems: The Textbook(推荐系统:原理与实践)》

这本书内容不深,很适合初学者学习。
这里附上该课本的购买连接:亚马逊

但是,大家也知道,这本书的原著是英文的,而我又在日本,所以老师只提供英文版本和日本版本的教材,不过,还好有万能的淘宝!!只花了两块钱,就买到了中文版本的PDF,爽!

这里给大家分享买到的教材:点击这里

ok,接下来,我们就将进入推荐系统的世界。

推荐系统概述

推荐系统,想必大家都不陌生,日常生活中处处可见。作为一个B站抽象老用户,B站现在首页推送给我的全是抽象的内容(笑。而我选择 网飞 作为该系列封面,也包含相同的原因,一是,Netflix同样作为流媒体网站,二是,Netflix为推荐系统的发展做出了巨大的贡献——网飞曾经话重金举办了推荐系统的算法大赛,用以提高推荐算法的效率,意在提高算法效率1010%,史称“1010问题”。因为这个大赛,推荐算法得到了巨大的提升。

推荐系统与用户的喜好存在相当强的关系,所以最经典的推荐系统就是依据用户对项目的 “评分” 来构建的。
例如,在电影平台上,用户A会给电影评分,如果A给X电影评5星,那么系统就能给A推荐类型相同的电影Y;也有可能给和用户A很像的用户B推荐电影X……

上面提到的这两种方法,其实就是最经典的推荐算法模型
——近邻模型(neighborhood model)。这类算法还属于一类更大的模型——协同过滤(collaborative filtering)“协同过滤"是指协同处理大量用户的评分来预测遗失的评分。

**推荐系统面向的对象称为用户(user), 推荐的产品称为物品(item)。**由于用户曾经的兴趣喜好通常预示着未来的选择, 因此推荐分析也通常是基于先前用户与物品之间的关系。但仍有一个特例——基于知识的推荐系统是根据用户指定需求而非用户的历史记录进行推荐。

所以我们暂时得到了这样的结构图:

推荐系统的目标

在讨论推荐系统的目标之前,我们首先需要知道,推荐系统是干什么的。简单来说,推荐系统主要干了两件事情:

  1. 预测。对应的就是预测模型。例如,我们现在知道了用户A对电影X的评分是4分,那我们就会想要知道: 1. 用户A对电影Y评分会是多少? 2. 用户B对电影X评分会是多少? 通常,我们对用户-物品的评分值进行组合。对于m个用户和n件物品, 这个训练集相当千一个mXn的不完全矩阵, 矩阵中的已知值(或观测值)被用来训练。矩阵中的缺失值(或未观测值)则通过这个训练模型进行预测。因为是根据不完整的数值矩阵用学习算法预测出剩余的未知值, 所以这个问题又被称作矩阵补全问题
  2. 排名。对应的则是排名模型。想一下,淘宝要给用户A推送商品,A刚刚搜索过“书包”,可是淘宝上卖书包的商家有辣么多,我们需要挑最相关的店铺放到第一页,这就是一个rank问题。也被称为 “top-k问题”。通常来说,这里的top-k指的是为一个用户推荐K个商品,但有些情况,也可能反过来,为一个商家推荐K个用户,不过前者更加普遍。

推荐系统本质上是一种商业手段,用来给公司赚钱的呀。所以,一切的目标都是——利润,为了提高利润,我们要求推荐系统有:

  1. 相关性:推荐用户最相关的东西。
  2. 新颖性:给用户推荐新鲜的东西。
  3. 意外性:给用户推荐意外的东西, 指眼前一亮。例如, 如果隔壁新开了一家印度菜馆, 推荐给一个平常就吃印度菜的顾客. 他大概只
    会觉得新颖而不一定惊喜。另一方面, 同样是这名顾客, 如果向他推荐埃塞俄比亚菜, 尝试之前, 这名顾客并不知道是否喜欢这种食物, 这种推荐就是意料之外的。
  4. 多样性:top-k里面的K件物品,不能都很相似。

以下是一些著名的推荐系统:
groupLens、Amazon.com、Netflix、Google、facebook(推荐的是好友)

推荐系统的基本模型

推荐系统的基本模型处理两种数据: (i)用户-物品之间的相互关系, 比如评分或是购买行为;(ii) 用户和物品的属性信息, 例如文本画像或是相关关键词。用到前一种数据的方法叫作协同过滤法, 用到后一种数据的方法叫作基于内容的推荐方法。

协同过滤模型

协同过滤方法在前文已经讲过,就是找用户或者项目的相同点。有两种方法经常会被用到:

  1. 基于记忆的方法(memory)
  1. 基于用户(user)的协同过滤:简单来说,就是找“谁和用户A相似”。 假设Alice和Bob过去曾以类似的方式评价过一部电影, Alice 看过并且评价了Terminator》这部电影,而Bob没看过, 就可以用Alice 的评分来预测Bob 的评分。在一般情况下, 可以用K个与Bob 最相似的用户来预测Bob的评分。
  2. 基于物品(item)的协同过滤:简单来说,就是找“什么和项目X相似。 因此, Bob 对科幻电影《Alien》和《Predator》的评价可以通过他对类似科幻电影《Terminator》的评价推断出来。通过计算评分矩阵列之间的相似度函数来发现相似的物品。
  1. 基于模型的方法(model)
    在基于模型的方法中会用到机器学习和数据挖掘技术。这是因为模型的参数需要通过一个优化框架学习得到。基于模型的方法包括决策树、基千规则的模型、贝叶斯方法和潜在因子模型。

评分系统

众所周知,推荐系统和用户的评分有很大关系。关于评分系统,也是一个复杂的课题。
评分常见的有5分制,10分制(序数评分),二元评分(赞或踩),一元评分。主要讲一讲后面一种,因为比较特殊。
一元评分,就意味着用户只能点赞,就像朋友圈,或者购买行为。一元评分能够展示的信息是非常有限的,只能表现用户对项目有态度,但是不能表示程度。这样的信息被称为“隐式反馈矩阵”。
值得一提的是,从客户操作中推导一元评分也被称为隐式反馈(implicit feedback),因为反馈不是由客户直接提供,而是隐式地从客户操作中推断出来。这种类型的“评分”往往更容易获得,因为用户更愿意与网站上的物品进行交互操作而不是显式地评价它们。隐式反馈(即一元评分)可以被看成是分类和回归建模中的正例-无标记学习问题的矩阵补全。

基于内容的推荐系统

在基于内容的推荐系统中,物品的描述性属性用来做出推荐。术语“内容” 指的就是这些描述。在基于内容的方法中, 用户的评分和购买行为与在物品中可以获得的内容信息相结合。例如, 考虑John 给予电影《Terminator》很高的评分, 但是我们没办法知道其他用户的评分。然而, 电影《Terminator》的物品描述包含着与其他科幻电影如《Alien》和《Predator》类似的关键词。在这种情况下. 这些电影可以推荐给John。

基于知识的推荐系统

基于知识的推荐系统在不常购买的物品背景下特别有用, 像购买房产、汽车、旅游需求、金融服务或者昂贵奢侈品这样的物品。在这些情况下, 推荐过程可能不能获得足够的
评分。当物品购买率低并且有不同类型的详细选择时, 对千这种物品, 是很难获得足够数批的对于一个特定的实例化(即各类选项的组合)的评分的。

推荐系统常常遇到的是 “冷启动问题(cold start)”,意思就是,对于一个新用户,TA没有使用记录,自然系统就很难给TA推荐东西。 在这种情况下,常常就需要用户填写一些自己的相关信息,作为系统 开始推荐的依据。比如,新注册微博的人,微博会让他填写,你喜欢啥啥啥,是体育?动漫?还是科普?这就是“基于知识的推荐系统”。这里的知识指的是一个人的信息需求。

可以根据界面的类型(和相关的知识)将基于知识的推荐系统划分成如下几类:

  1. 基于约束的推荐系统:这里的约束,形象来说,比如淘宝买衣服时候的一些约束条件——“价格:100~300元 or 胸围:88~92”,这种 范围性的限制条件,就是所谓的约束
  2. 基于案例的推荐系统:这里的案例,也可以形象来说,例如买衣服时候——“材质:棉花 or 牌子:耐克”,这种确定单一的约束条件,就叫案例。(虽然我觉得案例不也是一种特殊的约束嘛,但是根据教科书,这两种在数学模型上,有本质的区别,暂时我不能理解。)
  • 实际上,基于知识的系统有时会被认为是基于内容的系统的“表兄妹”。它们的主要区别是,基于内容的系统是从用户过去的行为中进行推荐,而基于知识的系统是以活跃用户的具体需求和喜好来进行推荐的。

所以到现在,我们关于“推荐系统”的结构图,扩展成了这样。

习题:

  1. 解释在推荐系统的设计中为什么一元评分是明显不同于其他类型的评分。
    我的回答:因为一元评分只能表达出用户隐性的选择信息,没有喜爱程度。同时,也不能表达相反的评分。
    GPT:
    信息简单: 一元评分只包含了极少的信息,通常只有两个取值。相比之下,多元评分可以提供更丰富的信息,包括用户的喜好程度,使得推荐系统更容易理解用户的需求。
    缺乏细节: 一元评分无法提供关于用户和物品之间关系的详细信息。例如,如果一个用户只能选择“喜欢”或“不喜欢”一个电影,那么推荐系统无法知道用户具体喜欢哪些类型的电影,或者不喜欢电影的哪些方面。
    不适用于个性化推荐: 一元评分难以满足个性化推荐的需求。在多元评分中,可以根据用户的具体评分倾向性,进行更精细的个性化推荐,比如向用户推荐那些用户评分较高的物品。
    难以处理冷启动问题: 一元评分难以应对推荐系统的冷启动问题,因为它无法提供足够的信息来推断新物品或新用户的特性和偏好。
    难以评估推荐系统性能: 一元评分难以用来准确评估推荐系统的性能,因为它无法反映用户的真实喜好程度,可能导致推荐系统在用户体验和满意度上表现不佳。

  2. 讨论在何种情况下基于内容的推荐不如基于评分的协同过滤方式。
    我的回答:例如线上购物,看视频记录等情况下。简单来说,就是推荐系统主要是以用户的使用记录或者过去的行为为依据的时候,就更适合评分模式而不是内容模式。
    GPT:缺乏丰富内容描述的情况: 如果物品的内容描述信息非常有限,或者无法提供足够的特征来描述物品的特性,基于内容的推荐就会受到限制。在这种情况下,基于评分的协同过滤可以利用用户的历史评分数据来推断用户的喜好,而无需依赖物品的内容信息。

  3. 假设你需要设计一个系统, 能利用可视化界面来判断用户所感兴趣的产品。这种情况下应使用哪种类别的推荐系统呢?
    我的回答:会话式、基于搜索、基于导航

  4. 讨论在推荐过程中位置起着重要作用的一个场景。
    我的回答:GPS结合推荐系统,例如,大众点评——我们需要找附近餐馆的时候。

  5. 本章提到协同过滤可以视为分类问题的泛化这一事实。讨论一种将分类算法变成协同过滤的简单方法。解释为什么难以在稀疏评分矩阵上使用该方法。
    GPT:将分类算法变成协同过滤的简单方法是将分类问题转化为一个二分类问题,并使用用户-物品交互数据(通常是评分数据)来训练分类模型。具体来说,可以将用户对物品的评分分为两类:高评分(比如大于等于某个阈值)和低评分(小于阈值)。然后,可以使用分类算法(比如逻辑回归、决策树等)来建立一个分类模型,该模型可以根据用户和物品的特征,预测用户是否会给物品一个高评分。在实际推荐时,可以使用模型预测用户对未评价物品的评分,从而进行推荐。
    然而,在稀疏评分矩阵上使用这种方法存在一些困难和挑战:
    数据稀疏性: 推荐系统中的评分矩阵通常非常稀疏,即大部分用户-物品组合都没有评分数据。在这种情况下,分类模型很难得到足够的训练样本,因为很多用户-物品组合没有评分数据,无法用于分类模型的训练。
    标签不平衡: 在评分数据中,高评分和低评分的比例通常是不平衡的,即大部分评分都集中在某个区间。这样的话,在训练分类模型时,可能会面临标签不平衡的问题,影响模型的性能和泛化能力。
    特征选择: 协同过滤方法通常依赖于用户和物品的隐含特征,而分类算法通常需要显式特征作为输入。在推荐系统中,确定哪些特征对于预测用户-物品评分是一个挑战,尤其是在没有领域知识的情况下。
    稀疏特征问题: 协同过滤的特征通常是高度稀疏的,例如用户和物品的ID。这种稀疏特征在一些分类算法中可能不容易处理,需要进行特殊的处理或者特征工程来转换为适合模型的形式。