还没准备好数据呢,为什么要着急用算法呢

2018-07-25 09:41:56 浏览数 (1)

开始之前,通知下我的读者,随着订阅读者越来越多,为了对读者们负责,有以下几件事情需要告知下:

  • 由于原创文章的创作是非常耗费精力与时间,为保证内容的质量,之后文章的更新会维持在 2-3篇/1周 左右。
  • 如果觉得文章对你有帮助,欢迎以任何方式的支持(点赞、评论、分享、打赏)。
  • 读者们如果对我有任何意见或建议,欢迎留言交流。

对于算法来说,如果没有了数据,就像鱼儿离开了水,算法工程师如果加入了一家没有历史数据的公司,就会产生巧妇难为无米之炊的感觉,由此可见数据对算法的重要性。不过令人遗憾的是,真实世界中的数据是获取成本是非常高的(否则也不会出现各种买卖数据平台、强制获取用户手机权限)。

但是令人欣慰的是,仍然会有一些教育机构、研究机构、某些公司将一些数据共享出来。这里分享一些与推荐系统有关的一些数据集。推荐系统中用到的数据集分为两种:显式和隐式,显式的数据集也就是用户-物品-评分数据集,隐式的数据集也就是用户-物品-行为数据集。下面是关于数据的盛宴,并且会介绍每个数据集所包含的信息,大家可以根据这些信息来根据自己需求决定使用哪些数据集。

预防针:文章比较长,建议收藏,文末有彩蛋。

在介绍这些数据之前,先来介绍下数据集中的一些术语。

  • Item:即我们要推荐的东西,如产品、电影、网页或者一条信息片段。
  • User:对item进行评分以及接受推荐系统推荐的项目的人。
  • Rating:用户对item的偏好的表达。评分可以是二分类的(如喜欢和不喜欢),也可以是整数(如1到5星)或连续(某个间隔的任何值)。 另外,还有一些隐反馈,只记录一个用户是否与一个item进行了交互。

一般来说,显式数据常被用于协同过滤、矩阵分解等算法,隐式数据常用于机器学习中的分类、回归等算法。现在来看下这些数据集吧。

显式数据(评分数据)

推荐系统被大家广为人知的一个原因是因为当年 netflix 举办的推荐系统大赛,另外很多人对推荐系统的了解局限于协同过滤上,而协同过滤所需要的数据恰恰就是这种显式数据,即评分数据。

MovieLens

MovieLens数据集由GroupLens研究组在 University of Minnesota — 明尼苏达大学(与我们使用数据集无关)中组织的。 MovieLens是电影评分的集合,有各种大小。 数据集命名为1M,10M和20M,是因为它们包含1,10和20万个评分。 最大的数据集使用约14万用户的数据,并覆盖27,000部电影。 除了评分之外,MovieLens数据还包含类似“Western”的流派信息和用户应用的标签,如“over the top”和“Arnold Schwarzenegger”。 这些流派标记和标签在构建内容向量方面是有用的。内容向量对项目的信息进行编码,例如颜色,形状,流派或真正的任何其他属性 - 可以是用于基于内容的推荐算法的任何形式。

MovieLens的数据在过去20年中已经由大学的学生以及互联网上的人们进行收集了。 MovieLens有一个网站(https://movielens.org/),您可以注册,贡献自己的评分,并接收由GroupLens组实施的几个推荐者算法这里之一的推荐内容。

MovieLens 数据包含了新旧两种格式的数据,我们这里以最新的新格式的 100K 小数据集合为例来简单说明下,这个数据集包含了 700 个用户对 9,000 部电影打的 100,000 条评分和 1,300 个标签。目前这个数据集显示的最后更新时间为 10/2016 。

新格式的数据都是csv文件,包含的文件为:links.csv, movies.csv, ratings.csv 和 tags.csv。

先来看下关于用户id和电影id的说明。

  • User Ids: 用户id 在 ratings.csv 和 tags.csv 中是一致的(在两个文件中相同的id表示同一个用户)
  • Movie Ids: 电影id 在 ratings.csv, tags.csv, movies.csv 和 links.csv 中是一致的(在四个文件中相同的id表示同一个电影)

再来看下每个文件的说明。

  • ratings.csv(电影评分数据文件):评分数据包含四列,分别是 userId,movieId,rating,timestamp 。每一行数据表示用户在某个时间为某个电影打的分数。rating 属于 0.5-5.0 星之间,timestamp 表示 unix 时间戳(10位,精确到秒)
  • tags.csv(电影标签数据文件):标签文件包含四列,分别是 userId,movieId,tag,timestamp 。每一行数据表示用户在某个时间为某个电影标记的标签。tag 通常是一个词或一个短语,timestamp 表示 unix 时间戳(10位,精确到秒)
  • movies.csv(电影文件):电影文件包含三列,分别是 movieId,title,genres 。每一行数据表示这个电影的标题和体裁。一部电影的体裁(genres)可能有多个,多个之间使用 “|” 分隔,genres 可选的值为:Action, Adventure, Animation, Children’s, Comedy, Crime, Documentary, Drama, Fantasy, Film-Noir, Horror, Musical, Mystery, Romance, Sci-Fi, Thriller, War, Western, (no genres listed)
  • links.csv(电影链接文件):电影链接文件包含三列,分别是 movieId,imdbId,tmdbId 。每一行数据表示这个电影对应在 imdb 和 themoviedb 电影网站的 id

数据下载地址:http://grouplens.org/datasets/movielens/

Jester

当你让一批学者写一个笑话评分系统,你会得到什么?Jester! Jester是由Ken Goldberg和他在加州大学伯克利分校的小组发展的,包含150个笑话大约600万的评分。 像MovieLens一样,Jester评分由互联网上的用户提供。 你可以在这里(http://eigentaste.berkeley.edu/)贡献你自己的评分。

与我们使用的其他数据集相比,Jester有两个方面是特殊的:它使用-10到10的连续等级,并且在量级上具有最高的评分密度。评分密度的意思是大概“平均每个用户评价多少个项目”?如果每个用户都对每个项目进行了评分,那么评级密度将为100%。 如果没有人评价过任何东西,那将是0%。Jester的密度约为30%,这意味着一个用户平均对30%的笑话进行了评分。 作为比较,MovieLens 1M 的密度为4.6%(其他数据集的密度低于1%)。当然不是那么简单。 不是每个用户都评价相同数量的项目。 相反,一些用户对许多项目进行评分,大多数用户只评价一些。

Jester 中包含了三个数据集,无论是哪个数据集,最终都能转换成用户-物品评分矩阵。我们以 Dataset 2 为例来简单说明下数据格式。

Dataset 2 包含了两个文件:jester_ratings.dat 和 jester_items.dat。

  • jester_ratings.dat:包含三列,分别是 User ID,Item ID,Rating,每一行数据表示用户对笑话的评分
  • jester_items.dat:item id 与 笑话之间的映射关系,是一个可读的文本文文件

注意评分的取值范围是 -10.00 ~ 10.00。

数据下载地址:http://eigentaste.berkeley.edu/dataset/

Book-Crossings

Book-Crossings是由Cai-Nicolas Ziegler根据bookcrossing.com的数据编写的图书评分数据集。 它包含 278,858 个用户的 271,379 本书的 1,149,780 个评分。评分范围从1到10,还包括隐性评分。

Book-Crossings 数据集是最不密集的数据集之一,也是具有明确评分的最不密集的数据集。Book-Crossings 数据集提供了csv格式和sql格式文件,无论哪种格式,都包含了三个文件:

  • BX-Users:包含三列,分别是 User-ID、Location、Age,表示某个用户的位置和年龄,为空的话则为 NULL
  • BX-Books:包含八列,分别是 ISBN、Book-Title、Book-Author、Year-Of-Publication、Publisher、Image-URL-S、mage-URL-M、mage-URL-L,表示某一个本书的 ISBN号、标题、作者、发布年份、不同尺寸的封面图片的URL链接(指向亚马逊)
  • BX-Book-Ratings:包含三列,分别是 User-ID、ISBN、Book-Rating,每一行表示用户对某一本书的评分。1-10 表示显性评分,0 表示隐性评分。

数据下载地址:http://www2.informatik.uni-freiburg.de/~cziegler/BX/

Amazon product 数据

亚马逊产品数据包括了亚马逊提供的一些用户-物品数据。这里包括了很多数据,例如亚马逊产品评论(评分、文本、有用的投票)和元数据(描述、类别信息、价格、品牌和图像特性)等。

这些数据中包含了亚马逊的多种产品相关的数据,如:书籍、电子产品、电影和电视、家居厨房、运动户外、数字音乐、乐器等等。

此外,包含的数据格式也是多种多样。这里我们以评论数据为例,来看一个样例:

代码语言:javascript复制
{
  "reviewerID": "A2SUAM1J3GNN3B",
  "asin": "0000013714",
  "reviewerName": "J. McDonald",
  "helpful": [2, 3],
  "reviewText": "I bought this for my husband who plays the piano.  He is having a wonderful time playing these old hymns.  The music  is at times hard to read because we think the book was published for singing from more than playing from.  Great purchase though!",
  "overall": 5.0,
  "summary": "Heavenly Highway Hymns",
  "unixReviewTime": 1252800000,
  "reviewTime": "09 13, 2009"}

解释下字段:

  • reviewerID:评论者的id
  • asin:产品id
  • reviewerName:评论者的名字
  • helpful:有用的投票评分
  • reviewText:评论的文本
  • overall:产品的评分
  • summary:评论简介
  • unixReviewTime:评论的unix时间戳
  • reviewTime:评论的原始时间

此外,还有关于产品的元信息,这些信息的字段相对较多,这里便不一一列举了,需要详细的信息可以查看下面的链接。

数据下载地址:http://jmcauley.ucsd.edu/data/amazon/links.html

隐式数据(行为数据)

相比于使用评分数据可以预测用户对物品的评分,实际生活中的推荐系统更多的是预测用户的行为,如是否阅读,是否购买,是否点赞,阅读时长等等。这些行为数据也就是隐式数据。

Last.fm

Last.fm 提供音乐推荐的数据集。 对于数据集中的每个用户,包含他们最受欢迎的艺术家的列表以及播放次数。它还包括可用于构建内容向量的用户应用标签。此外,还包括了用户之间的社交关系。

Last.fm 数据集包含六个文件,分别如下:

  • artists.dat:艺术家文件,包含四列,分别是 id(艺术家id)、name(艺术家名称)、url(艺术家主页url)、pictureURL(艺术家图片url)
  • tags.dat:标签id名称映射文件,包含两列,分别是 tagID、tagValue
  • user_artists.dat:用户艺术家文件,包含三列,分别是 userID、artistID、weight,每一行数据表示某个用户播放某个艺术家的歌曲的次数
  • user_taggedartists.dat:带标签的用户艺术家文件,包含六列,分别是 userID、artistID、tagID、day、month、year,标签是表示该艺术家身上所带有的标签,每行数据表示在某个时间点一个用户播放了带有某个标签的艺术家的歌曲
  • user_taggedartists-timestamps.dat:与 user_taggedartists.dat 表达的信息是一样的,唯一不同的是表示时间是使用的是 unix 时间戳
  • user_friends.dat:用户社交关系文件,包含两列,分别是 userID、friendID,表示这两个用户是朋友

数据下载地址:https://grouplens.org/datasets/hetrec-2011/

Mobile App User Dataset

手机app用户数据集收集了来自超过15个国家的10208人使用移动应用程序的行为。 这些国家包括美国、中国、日本、德国、法国、巴西、英国、意大利、俄罗斯、印度、加拿大、西班牙、澳大利亚、墨西哥和韩国。

手机app用户数据集包含了一个文件:mobile_app_user_dataset.xlsx。这个文件中包含了所收集到的所有相关的数据。这个数据集包含了用户的以下信息:

  • 使用的app store类型、触发寻找app的动机、下载app的原因、下载app的类型、放弃app的原因
  • 用户的人口统计信息,包括性别、年龄、婚姻状况、国籍、居住的国家,第一语言,种族,教育程度,职业,家庭收入
  • 用户所属 Big-Five personality traits 中的类型

数据下载地址:

  • https://soolinglim.wordpress.com/datasets/
  • http://soolinglim.com/datasets/

Steam Video Games

Steam 是世界上最受欢迎的电脑游戏中心,拥有超过6000的游戏和社区数以百万计的玩家。这里包括了 Steam 上的一些用户行为。

整个数据集包含以下几列:

  • user-id:用户id
  • game-title:游戏标题
  • behavior-name:行为名称,包括购买和玩两种行为
  • value:行为对应的取值,如果是购买,则一直是1,如果是玩,则表示用户玩游戏的小时数

数据下载地址:https://www.kaggle.com/tamber/steam-video-games/data

Retailrocket 数据集

Retailrocket 数据是从一个真实世界的电商网站收集的。它是原始数据,即没有进行任何内容转换,但是,由于隐私问题,所有值都经过了哈希处理。

这些数据包括了 1,407,580 个用户对物品的 2,756,101 次行为,包括 2,664,312 次浏览、69,332 次添加购物车以及 22,457 次购买行为。这些行为持续的时间范围是 4.5 个月。

整个数据集包含了三个文件:events.csv(行为数据文件),category_tree.csv(分类关系文件),item_properties.csv(物品属性文件)。

  • events.csv 用户行为文件,总共有四列,分别是timestamp(时间戳)、visitorid(用户id)、event(行为类型)、itemid(物品id)、transactionid(购买id)。event 可以取值为:view(浏览)、addtocart(添加购物车)、transaction(购买)等;transactionid 只有在 event 为 transaction 时(也就是购买时)才会有值。每行数据描述的就是用户在某个时间对某个物品的行为。
  • item_properties.csv 物品属性文件,总共有四列,分别是timestamp(时间戳)、itemid(物品id)、property(属性)、value(取值)。除了categoryid和available这两个属性外,其他的属性都经过了hash处理。详细信息可以参看下载链接中的说明。
  • category_tree.csv 分类关系文件,总共有两列,分别是 categoryid 和 parentid。表示当前分类id的父级分类id。

数据下载地址:https://www.kaggle.com/retailrocket/ecommerce-dataset

完整数据下载

完整的数据集除了可以根据单独链接下载外,也可也在公众号后台回复关键词:推荐系统数据集 来下载。

如果你对推荐系统感兴趣,欢迎扫码加入我们的交流群,在这里我们可以学到更多的推荐系统知识。如果群满100人,可以在后台回复关键字:加群,编辑会邀请你入群。

参考:

  • http://shuaizhang.tech/2017/03/15/Datasets-For-Recommender-System/
  • https://gab41.lab41.org/the-nine-must-have-datasets-for-investigating-recommender-systems-ce9421bf981c

往期精彩回顾

推荐系统EE问题与Bandit算法

矩阵分解之SVD和SVD

如何为协同过滤选择合适的相似度算法

推荐系统中重要却又容易被忽视的问题有哪些

作者:无邪 个人博客:脑洞大开(www.naodongopen.com) 研究领域:机器学习/推荐系统

0 人点赞