【导读】推荐系统是机器学习的一个子领域,并且是一个偏工程化、在工业界有极大商业价值的方向。大量应用于提供toC类产品的互联网企业服务中,通过推荐系统为用户提供精准的个性化服务。推荐系统通过推荐算法来为用户生成个性化推荐结果,而推荐算法依赖数据输入来构建算法模型。
本篇文章我们来讲解推荐系统所依赖的数据,怎么处理这些数据,让数据转换成推荐算法可以直接使用的形式,最终我们就可以构建高效、精准的推荐模型,这些处理好的适合机器学习算法使用的数据即是特征,而从原始数据获得特征的过程就是特征工程。
具体来说,我们会从推荐算法建模的一般流程、推荐系统依赖的数据源介绍、数据处理与特征工程简介、常用推荐算法之数据与特征工程、推荐系统数据与特征工程未来趋势等5个部分来介绍相关知识点,期望本文的讲解能够让读者更加深入地理解推荐系统依赖的数据源的特点、数据预处理方法以及基于这些数据之上的特征工程方法与技巧。
一、推荐算法建模的一般流程
在引入推荐系统数据源与特征工程之前,我们先介绍一下推荐算法建模的一般流程,这样我们就可以更好地理解数据与特征工程在整个推荐系统业务流程中的地位和作用。
推荐系统是机器学习的一个子领域,因此推荐系统处理问题的方式遵循机器学习的一般思路。我们可以将机器学习过程看成一个打造生产某种产品的机器的过程,我们根据过往的生产经验来制造一款生产该产品的机器,过往的生产经验就是我们的训练集,构建好的机器就是我们的机器学习模型。我们将原材料加工好,按照某种方式灌入这个机器,这个机器的最终输出就是我们需要的预测结果,构建的机器是否完善、能否生产出误差在可接受范围内的商品,代表了我们模型的精准度。
根据上面的简单类比,推荐算法为用户进行个性化推荐的一般流程如下面图1。我们通过收集不同来源的数据汇聚成推荐算法需要的原始数据,通过特征工程对原始数据处理生成最终特征,再通过选择合适的推荐算法对特征进行训练获得最终的推荐模型,在预测/推断阶段,我们根据某个用户的特征,将特征灌入模型获得该用户的推荐结果。
图1:推荐算法建模的一般流程
从上图可以看出,数据和特征工程在整个推荐系统业务流的起点,因此是非常重要的。数据是原材料,原材料(推荐数据源)是否齐备、质量是否优良直接决定是否可以生产出好的产品,而对原材料的处理加工(特征工程)决定了我们是否可以高效、快速、高质量地生产出好的产品。
下面我们会对推荐系统的数据及特征工程这两个部分详细讲解,模型构建及预测不在我们本文的讨论范围。
二、推荐系统依赖的数据源介绍
推荐系统根据用户在产品(APP、网站等)上的操作行为,猜测用户的兴趣偏好,最终给用户做个性化推荐。在整个推荐过程中,涉及到可能产生数据的地方有用户自身、标的物、用户的操作行为、用户所在的场景(上下文)等4个部分。因此推荐算法根据这4个触点,依赖4类数据。根据承载数据的载体,又可以分为数值类数据、文本类数据、图片类数据、音视频数据等4类。根据推荐系统依赖的数据的组织形式(数据格式),又可以分为结构化数据、半结构化数据、非结构化数据3大类。下面我们分别按照这三种分类方式来详细描述推荐系统所依赖的数据及这些数据的特点。
1 根据数据来源来划分
根据数据来源的触点来分,推荐系统依赖的数据分为用户行为数据、用户属性数据、标的物(物品)属性数据、上下文数据4大类,见下面图2,下面我们分别介绍各类数据及其特点。
图2:推荐系统依赖的4类数据源
1.1(用户)行为数据
就是用户在产品上的各种操作,比如浏览、点击、播放、购买、搜索、收藏、点赞、转发、加购物车、甚至滑动、在某个位置的停留时长、快进等等一切操作行为。用户在产品上的操作行为为我们了解用户提供了“蛛丝马迹”,用户的操作行为也是用户最真实意图的反馈,这些行为反应了用户的兴趣状态,通过分析用户行为,我们可以获得对用户的兴趣偏好的深刻洞察。
根据用户的行为是否直接表明用户对标的物的兴趣偏好,用户行为一般分为显式行为和隐式行为。显式行为是直接表明用户兴趣的行为,比如点赞、评分等。隐式行为虽不是直接表示用户的兴趣,但是该行为可以间接反馈用户的兴趣变化,只要不是用户直接评分、点赞的操作行为都算隐式反馈,包括浏览、点击、播放、收藏、评论、转发等等。
用户行为数据是最重要、最容易收集、数据量最多的一类数据,在构建推荐系统算法中起着举住轻重的作用。这类数据往往种类繁多,需要我们进行收集、预处理才能最终被推荐算法使用。
1.2 用户属性数据
用户属性数据也叫做用户人口统计学数据,就是用户自身所带的属性,比如年龄、性别、地域、学历、家庭组成、职业等等。这些数据一般是稳定不变(如性别)或者缓慢变化(如年龄)的。
人类是一个社会化物种,用户的不同属性决定了用户处在不同的阶层或者生活圈,不同的阶层或生活圈又有不同的行为特征、生活方式、偏好特点,在同一圈层具备一定的相似性,这种相似性为我们做个性化推荐提供了一定的保证。
1.3 标的物属性数据
推荐系统中最重要的一个“参与方”是待推荐的标的物(物品),物品自身是包含很多特征和属性的。对于视频来说,出品方、导演、演职员、主演、国别、年代、语言、是否获奖、剧情、海报图等等都是视频的元数据。对于电商商品来说,品类、用途、价格、产地、品牌等等也是非常重要的属性。
通过用户对物品的操作行为,我们可以将物品所具备的特征按照某种权重赋予用户,这些特征就构建了用户的兴趣偏好,相当于给用户打上了相关的标签(比如喜欢看“恐怖片”的人)。从这些兴趣偏好出发,我们又可以给用户进行个性化推荐。
1.4 上下文数据
上下文数据是用户在对物品进行操作时所处的环境特征及状态的总称,比如用户所在地理位置、当时的时间、当时的天气、用户当时的心情、用户所在产品的路径等等。这些上下文数据对用户的决策是非常重要的、甚至是起决定作用的。比如,美团饿了么这类基于地理位置服务的产品,给用户推荐餐厅是一定要是在用户所在位置或者用户指定位置附近的。
合适地使用上下文数据,将该类数据整合到推荐算法中,可以更加精准、场景化地为用户进行个性化推荐。
2 根据数据载体来划分
随着互联网的发展,网络上传输、交换、展示的数据种类越来越多样化,从最初的数字、文本到图片再到现在主流的音视频,基于这些数据载体的不同,推荐系统建模依赖的数据也可以分为4类,见下面图3。
图3:推荐系统依赖的4种数据载体
2.1 数值类数据
所有推荐系统用到的、可以用数值来表示的数据都属于这一类,比如用户年龄、用户评分、物品价格、播放次数等等。数值数据也是计算机最容易处理的一类数据,其他类型的数据要想很好地被计算机处理,一般也会利用各种方法转化为数值数据。
2.2 文本数据
文本数据是互联网中数量最多的、最普遍的一类数据,标的物的类别、标的物的描述信息、甚至整个标的物可能都是文本(如新闻等)、用户地域、用户性别等等都是用文本来描述的。如果某个特征可以取的所有值是有限的(比如性别只有男女两种),也可以非常容易地转化为数值类数据。处理文本类数据需要借助自然语言处理相关技术。
2.3 图片数据
随着智能手机摄像头技术的成熟以及相关图像应用的爆发增长,媒体及投资人的推波助澜,图片数据是互联网上的主流数据类型,商品的海报图、电影的缩略图等等都以图片的形式存在。
对于图片类数据的处理,目前的深度学习技术相对成熟,包括图片的分类、图片的特征提取等等,精度已经到达了产品可用的成熟度,在某些方面(如图片分类)甚至超越了人类专家的水平。
2.4 音视频数据
在互联网视频出现以来就有了音视频数据,直到现在音视频数据才应用到更多的领域和产品中,音视频数据火爆背景跟图片类似,目前的抖音、快手等短视频应用非常受欢迎,游戏直播、电商导购直播等应用也是视频类数据的产出方。音乐的数字化,各类音频学习软件(如樊登读书、蜻蜓FM等)也促进了音频数据的增长。
音视频数据的价值密度小,占用空间多,处理相对复杂,在深度学习时代,这些复杂数据的处理也变得可行了。音频数据可以通过语音识别转换为文字,最终归结为文本数据的处理,视频数据可以通过抽帧转换为图片数据来处理。
图片、音视频数据属于富媒体数据,随着传感器种类的丰富、精度的增强(比如拍照能力越来越强)、相关网络应用的繁荣(如抖音、快手等都是基于富媒体数据的应用),网络上出现了越来越多的富媒体数据,并且占据了互联网数据整体的绝大多数,因此是非常重要的一类数据。
3 根据数据组织形式来划分
按照数据组织形式不同,不同类型的数据处理起来难易程度是不一样的,人类是比较善于理解和处理二维表格类数据的,这就是为什么关系型数据库(主要是处理表格类数据)在计算机发展史上具有举足轻重地位的原因。随着互联网的发展,数据形式越发丰富,不是所有数据都是结构化的,有些数据是半结构化甚至是无结构化的(具体见下面图4),下面分别对这三类数据加以说明。
图4:推荐系统依赖的三种数据组织形式
3.1 结构化数据
所谓结构化数据就是可以用关系型数据库中的一张表来存储的数据,每一列代表一个属性/特征,每一行就是一个数据样本。一般用户属性数据和物品属性数据都可以用一张表来存储,用户和物品的每一个属性都是表的一个字段,因此是结构化数据。下表就是视频的结构化表示。
表1:视频属性数据的结构化表示
结构化数据是一类具备Schema的数据,也就是每一列数据的类型、值的长度或者范围是确定的,一般可以用关系型数据,如MySQL、ProgreSQL等来存储,这类数据可以用非常成熟的SQL语言来进行查询处理。
3.2 半结构化数据
半结构化数据虽不符合关系型数据库这么严格的结构,但数据组织是有一定规律或者规范的,利用特殊的标记或者规则来分隔语义元素以及对记录和字段进行分层。因此,也被称为自描述的结构。常见的XML或者Json类数据就属于这一种。
对于用户在产品上的操作行为,我们一般按照一定的规则来对相关字段进行记录(比如可以用Json格式来记录日志,或者按照规定的分割字符来分割不同字段,再拼接起来记录日志),这类数据也属于半结构化数据,一些半结构化数据通过一定的预处理是可以转化为结构化数据的。
3.3 非结构化数据
非结构化数据,是数据结构不规则或不完整,没有预定义的数据模型,不方便用数据库二维逻辑表来表示的数据,也没有半结构化数据这种有一定的规律或者规范。包括文本、图片、HTML、各类数据报表、图像和音视频信息等等。非结构化数据由于没有固定的数据范式,也是最难处理的一类数据。
文本类标的物(如新闻资讯)、短视频、音频、商品等都包含大量的非结构化数据。即使是非结构化的标的物