《推荐系统实践》 2. 数据来源

Posted 推荐系统新视野

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《推荐系统实践》 2. 数据来源相关的知识,希望对你有一定的参考价值。

2. 数据来源

2.1. 用户行为数据

基于用户行为数据获取数据也就是通过用户曾经进行过的行为来了解用户兴趣和需求。

用户行为数据一般存于网站的日志中,网站在运行过程中都产生大量原始日志(Raw Log),多种原始日志可以按照用户行为汇总成会话日志(Session Log),其中每个会话表示一次用户行为及其对应的服务。

下面给出一种用户行为的统一表示,可以作为数据库设计的参考:

字段 含义
user id 产生行为的用户的唯一标识
item id 产生行为的对象的唯一标识
behavior type 行为的种类(比如是购买还是浏览)
context 产生行为的上下文,包括时间和地点等
behavior weight 行为的权重(如果是观看视频的行为,那么这个权重可以是观看时长;如果是打分行为,这个权重可以是分数)
behavior content 行为的内容(如果是评论行为,那么就是评论的文本;如果是打标签的行为,就是标签)

用户行为在个性化推荐系统中一般分两种:

  • 显性反馈行为(Explicit Feedback)
    显性反馈行为包括用户明确表示对物品喜好的行为。例如用户评分、点赞之类的用户表态;
  • 隐性反馈行为(Implicit Feedback)
    隐性反馈行为指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为,用户进行浏览既可能是对该页面的内容感兴趣,也可能是误操作。

我们从几个不同方面来比较显性反馈数据和隐性反馈数据:


显性反馈数据 隐性反馈数据
用户兴趣 明确 不明确
数量 较少 庞大
存储 数据库 分布式文件系统
实时读取 实时 有延迟
正负反馈 都有 只有正反馈

下标列举了在各个领域的网站中这显性反馈数据和隐性反馈数据的例子:


显性反馈数据 隐性反馈数据
视频网站 用户对视频的评分 用户观看视频的日志、浏览视频页面的日志
电子商务网站 用户对商品的评分 购买日志、浏览日志
门户网站 用户对新闻的评分 阅读新闻的日志
音乐网站 用户对音乐/歌手/专辑的评分 听歌的日志

在很多时候我们并不使用统一结构表示所有行为,因为使用统一的结构会造成很大的空间浪费。一般来说,会用不同的数据集包含不同的行为,目前比较有代表性的数据集有下面几个:

  • 无上下文信息的隐性反馈数据集
    每一条行为记录仅仅包含用户ID和物品ID,Book-Crossing 就是这种类型的数据集;
  • 无上下文信息的显性反馈数据集
    每一条记录包含用户ID、物品ID和用户对物品的评分;
  • 有上下文信息的隐性反馈数据集
    每一条记录包含用户ID、物品ID和用户对物品产生行为的时间戳。Lastfm数据集 就是这种类型的数据集;
  • 有上下文信息的显性反馈数据集
    每一条记录包含用户ID、物品ID、用户对物品的评分和评分行为发生的时间戳。Netflix Prize 提供的就是这种类型的数据集。

2.2. 用户标签数据

标签是一种重要的特征表现方式,用户用标签来描述对物品的看法,可以说标签是联系用户和物品的纽带,也是反应用户兴趣的重要数据源。

根据给物品打标签的人的不同,标签应用一般分为两种:一种是让作者或者专家给物品打标签;另一种是让普通用户给物品打标签,也就是UGC(User Generated Content,用户生成的内容)的标签应用。

标签系统中的推荐问题主要有以下两个:

  • 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)
  • 如何在用户给物品打标签时为其推荐适合该物品的标签(推荐标签)

为了研究上面的两个问题,我们首先需要理解下面三个问题:

  • 用户为什么要打标签
    用户标注的动机一是便于上传者组织自己的信息,同时帮助其他用户找到信息;二是可以更好地组织内容,方便用户将来的查找,同时可以传达某些信息,比如照片的拍摄时间和地点等;
  • 用户是如何打标签的
    用户打标签的行为也具有长尾分布的特点,即只使用少数常用标签、只给少数热门物品打标签;
  • 用户打什么样的标签
    不同的系统有不同的标签系统,通常需要专家去定义一些标签给用户使用,否则用户很可能会给物品打上各种各样奇奇怪怪的标签。Delicious上的一种经典标签系统可以表示如下:
    1. 表明物品是什么。比如是一只鸟,就会有“鸟”这个词的标签;是豆瓣的首页,就有一个标签叫“豆瓣”;是乔布斯的首页,就会有个标签叫“乔布斯”。
    2. 表明物品的种类。比如表示一个网页类别的标签包括 article(文章)、blog(博客)、book(图书)等。
    3. 表明谁拥有物品。比如很多博客的标签中会包括博客的作者等信息。
    4. 表达用户的观点。比如用户认为网页很有趣,就会打上标签funny(有趣),认为很无聊,就会打上标签boring(无聊)。
    5. 用户相关的标签。比如 my favorite(我最喜欢的)、my comment(我的评论)等。
    6. 用户的任务。比如 to read(即将阅读)、job search(找工作)等。

2.3. 上下文信息

上下文信息是指用户访问推荐系统的时间、地点、心情等,对于提高推荐系统的推荐准确度是非常重要的。比如,一个卖衣服的推荐系统在冬天和夏天应该给用户推荐不同种类的服装。推荐系统不能因为用户在夏天喜欢过某件T恤,就在冬天也给该用户推荐类似的T恤。因此,准确了解用户的上下文信息,并将该信息应用于推荐算法是设计好的推荐系统的关键。

总的来说,一般在推荐系统中我们会主要利用用户的时间上下文信息和位置上下文信息。

2.3.1. 时间上下文信息

一般认为,时间信息对用户兴趣的影响表现在以下几个方面:

  • 用户兴趣变化
    用户兴趣变化是因为用户自身原因发生的变化。比如随着时间的推移,用户半年前喜欢看番剧,现在喜欢看文艺片。要准确预测用户现在的兴趣,就应该关注用户最近的行为,因为用户最近的行为最能体现他现在的兴趣。当然,考虑用户最近的兴趣只能针对渐变的用户兴趣,而对突变的用户兴趣很难起作用;
  • 物品生命周期
    当我们决定在某个时刻给某个用户推荐某个物品时,需要考虑该物品在该时刻是否已经过时了。典型的短生命周期物品有新闻、直播等;
  • 季节效应
    季节效应主要反映了时间本身对用户兴趣的影响。比如人们夏天吃冰淇淋,冬天吃火锅,夏天穿T恤,冬天穿棉衣,以及不同节假日的商品规律等等。

在给定时间信息后,推荐系统从一个静态系统变成了一个时变的系统,而用户行为数据也变成了时间序列。包含时间信息的用户行为数据集由一系列三元组构成,其中每个三元组 代表了用户 在时刻 对物品 产生过行为。在给定数据集后,通过统计如下信息研究系统的时间特性:

  • 数据集每天独立用户数的增长情况
    有些网站处于快速增长期,它们每天的独立用户数都在线性(甚至呈指数级)增加。而有些网站处于平稳期,每天的独立用户数都比较平稳。还有一些网站处于衰落期,每天的用户都在流失。在3种不同的系统中用户行为是不一样的;
  • 系统的物品变化情况
    比如新闻网站,每天都会出现大量新的新闻,而每条热门的新闻其时间周期都不会太长,今天热门的新闻也许明天就被人忘记了;
  • 用户访问情况
    有些网站用户来一次就永远不来了,有些网站用户每周来一次,而有些网站用户每天都来。为了度量这些特性,我们可以统计用户的平均活跃天数,同时也可以统计相隔 天来系统的用户的重合度。

2.3.2. 地点上下文信息

除了时间,地点作为一种重要的空间特征,也是一种重要的上下文信息。不同地区的用户兴趣有所不同,用户到了不同的地方,兴趣也会有所不同。

用户兴趣和地点相关的特征主要有两个:

  • 兴趣本地化
    不同地方的用户兴趣存在着很大的差别,不同国家和地区用户的兴趣存在着一定的差异。
  • 活动本地化
    一个用户在一段时间内往往只能在附近的地区活动。因此,在基于位置的推荐中我们需要考虑推荐地点和用户当前地点的距离,不能给用户推荐太远的地方。

2.4. 社交网络数据

社交网络可以很好地模拟现实社会,在社交网络中的用户通常相互认识,这大大提高了推荐的信任度,同时也缓解了推荐系统冷启动的问题。

不过,社会化推荐有一些明显的缺点,其中最主要的就是很多时候并不一定能提高推荐算法的离线精度(准确率和召回率)。特别是在基于社交图谱数据的推荐系统中,因为用户的好友关系不是基于共同兴趣产生的,所以用户好友的兴趣往往和用户的兴趣并不一致。比如,我们和自己父母的兴趣往往就差别很大。

现在互联网上充斥着各种各样带有社交性质的网站。那么,从什么方面可以获得社交网络数据呢?一般来说,有如下渠道:

  • 电子邮件
    电子邮件其实也是一个社交网络,可以通过分析用户的联系人列表了解用户的好友信息,进一步通过研究两个用户之间的邮件往来频繁程度度量两个用户的熟悉程度。
  • 用户注册信息
    在注册时引导用户填写一些诸如公司、学校等信息,就样就可以知道哪些用户曾经在同一家公司工作过,哪些用户曾经在同一个学校学习过。
  • 用户的位置数据
    位置信息也是一种反映用户社交关系的数据。在同一地点的用户更容易有相似的兴趣,甚至这些用户相互之间就认识。
  • 论坛和讨论组
    每个群聊或小组都包含一些有相同兴趣的人。如果两个用户同时加入了很多相同的小组,我们可以认为这两个用户很可能互相了解或者具有相似的兴趣。如果两个用户在讨论组中曾经就某一个帖子共同进行过讨论,那就更加说明他们之间的熟悉程度或兴趣相似度很高。
  • 即时聊天工具
    和电子邮件系统一样,用户在即时聊天工具上也会有一个联系人列表,而且往往还会给联系人进行分组。通过这个列表和分组信息,我们就可以知道用户的社交网络关系,而通过统计用户之间聊天的频繁程度,可以度量出用户之间的熟悉程度。
  • 社交网站
    社交网站是研究用户关系的绝佳地点,例如Facebook中的绝大多数用户联系基于社交图谱:由人们之间的亲属关系、工作关系而形成;Twitter中的绝大多数用户联系基于兴趣图谱:通过人们之间的共同兴趣和信念形成。

社交网络定义了用户之间的联系,我们通常用图描述社交网络。一般来说,有3种不同的社交网络数据:

  • 双向确认的社交网络数据
    以Facebook和人人网为代表,用户之间形成好友关系需要通过双方的确认;
  • 单向关注的社交网络数据
    以Twitter和新浪微博为代表,用户A可以关注用户B,而不用得到用户B的允许;
  • 基于社区的社交网络数据
    用户之间并没有明确的关系,但同在一个社区。比如豆瓣小组,属于同一个小组可能代表了用户兴趣的相似性;


以上是关于《推荐系统实践》 2. 数据来源的主要内容,如果未能解决你的问题,请参考以下文章

「实践」Yoo视频底层页推荐系统从0到1的实践

推荐实践深度学习在阿里B2B电商推荐系统中的实践

音乐推荐系统实践

详解 | 推荐系统的工程实现

推荐系统架构(摘自《推荐系统实践》)

干货 | 携程个性化推荐算法实践