投稿:极链科技算法
做者:点心(AI实验室)框架
不知不觉,你是否发现身边的小伙伴们都在疯狂的玩抖音,刷微博,你的购物APP也变得愈来愈聪明,很了解你想要的东西,就连点个外卖,美团和饿了么都知道你想要吃什么呢?是什么黑科技让这些APP变得如此神通,能深深的吸引着你的目光和味蕾呢?其实,之因此你以为它愈来愈聪明愈来愈懂你,固然少不了你跟它之间的亲密“沟通”,看似不经意的一次点击,一次停留,它都默默的记了下来,等待你的再次临幸。这位神秘的幕后主使就是咱们今天要讲的——个性化推荐算法。目前它已经深刻到互联网的各种产品中,也经历了数次更新迭代,变得愈来愈贴心了。接下来,我将经过一个近期咱们参加比赛具体讲解一些其中的算法原理。机器学习
此次比赛是由今日头条主办的短视频内容理解与推荐竞赛,咱们的成绩在大规模亿级的赛道中拿了第四名,千万级数据规模的赛道中第五名。这也是咱们极链AI实验室首次尝试推荐算法。学习
首先,来说讲什么是推荐算法。推荐算法大体能够分为三类:基于内容的推荐算法,协同过滤推荐算法和混合推荐算法。基于内容的推荐算法,原理是将用户喜欢和本身关注过的Item在内容上相似的Item推荐给用户,好比你看了复仇者联盟1,基于内容的推荐算法发现复仇者联盟二、三、4,这些与你之前观看的item在内容上有很大关联性。协同过滤算法,包括基于用户的协同过滤和基于item的协同过滤,其中基于用户的协同过滤是经过用户之间的类似性,挖掘与用户具备类似兴趣的用户喜欢过的item,好比你的朋友喜欢复仇者联盟,那么就会推荐给你。基于item的协同过滤是找到跟用户喜爱最类似的商品,而后推给他。混合推荐算法,则会融合以上方法,以加权或者串联、并联等方式进行建模。经常使用的包括传统机器学习算法如因子分解机(FM,FFM),LR,GBDT,RF和近几年流行起来的DNN和FM结合的算法。测试
这三种类型的推荐算法各有千秋,内容推荐算法的优势在于能够避免Item的冷启动问题(冷启动:若是一个Item从没有被关注过,其余推荐算法则不多会去推荐,可是基于内容的推荐算法能够分析Item之间的关系,实现推荐),但弊端在于推荐的Item可能会重复,典型的就是新闻推荐,若是你看了一则关于某某明星出轨的新闻,极可能推荐的新闻和你浏览过的,内容一致;协同过滤算法能够随着用户对商品的交互记录增长更准确的捕捉用户行为习惯,进而使得模型可以不花费额外的人工的方式来提升精度(但在初期会面临冷启动问题的困扰)。ui
不管哪一种推荐算法,都离不开特征工程、模型学习这两个重要的步骤。接下来,经过比赛这个实例,来说解每一个步骤具体是如何实现的。此次比赛的任务是经过一个视频及用户交互行为数据集对用户兴趣进行建模,而后预测该用户在另外一视频数据集上的点击行为。该任务属于机器学习中两个基本任务之一分类,并且是二分类即给给定的数据打标签(0,1),0表明unlike,unfinish,1表明like或者finish.编码
一.特征工程3d
众所周知,短视频App中的视频通常都有一个醒目的标题,有一段内容丰富的连续画面,和一段有趣的声音组成,经过nlp,cv,audio等深度学习模型提取这些信息特征就组成了视频item的特征;对于用户来讲,用户的身份(年龄,性别,地域)等组成用户特征,用户点击视频的过程,停留的时间,点赞等行为则构成了基本的交互信息。比赛提供的交互信息字段,咱们将它划分为三个部分包括用户信息(user_id,user_city),视频信息(item_id,item_city,author, songs, duration time)和交互信息(did, channel)。除此以外,视频特征,音频特征,人脸特征等都属于视频信息。cdn
接下来,信息有了,怎么去挖掘这些信息中隐藏的秘密呢?这就是特征工程的意义所在,尽量多的挖掘用户和item之间的相关信息,而后将这些信息送入后面的模型进行学习。视频
比赛初期,主办方提供了一个简单的特征构建和模型训练的框架,上文提过的FM算法,公式以下:
该算法利用交互信息,构建矩阵,经过因子分解,来挖掘信息的交互特征。其中x表明特征属性,y是预测结果,n就是特征的交互阶数,阶数越高,求解越难。由于特征x分为category特征(离散)和numeric特征(稠密)两种,category特征须要进行one-hot编码,一旦进行交互,特征的维度将会很是高,使得计算机的算力不够。实际应用中,通常只取二阶特。那么,还有其余方法去挖掘更多更深的交互信息吗?别急,下面我会介绍比赛中咱们尝试的重要的特征工程方法。
推荐算法的数据记录的是用户的历史行为信息,而数据的前后顺序反映了时间信息,那么利用全部的历史数据去计算将来的行为的特征生成咱们暂时称之为全局特征,只利用一部分历史数据来计算特征的生成方式咱们称之为局部特征。
基于全局的特征咱们主要从svd分解、统计特性、和时间相关特征,三个方面去考虑进行特征提取。
svd分解特征,提到svd,想到最多的天然是特征降维,主成分分析,那么利用svd将高维的交互特征进行降维,就能够输入模型进行训练了,好比用户和item,构造一个user-item矩阵,矩阵的每一个元素表明了该用户和该item间是否有交互,有的话就是1,没有的话就是0,这个矩阵是一个极其稀疏的高维矩阵(比赛中赛道二7w*400w),经过svd分解,提取前n个主成分组成稠密特征,输入模型中训练,能够大大减小计算量。对于比赛提供的特征,咱们进行了user-item,user-author,user-title的svd分解。
统计特征,之因此称统计特征,是由于全部的计算涉及的都是经常使用的统计方法,包括求均值,方差,以及用户特征和item特征之间的条件几率P(did|uid), P(channel|uid), P(did|item_id), P(channel|item_id), P(item_author| uid), P(item_city|uid), P(uid_city|item_id) 等。
时间相关特征,这些特征主要挖掘用户某个时间段内观看视频的频率,从而获得用户在时间维度上的爱好。具体的,就是定义一个时间长度,好比1000,5000,10000等等,而后统计该段时间内用户或者item出现的频率。
局部特征的构造,是根据时间顺序,划分出一部分做为历史数据,另外一部分做为训练数据(即如今和将来),经过历史数据构造特征组合(只针对category),并统计训练数据须要的信息,如图1所示,按照时间的远近,靠近测试数据的30%数据做为训练数据,前面70%数据做为历史数据,能够去除最后5%的数据以后屡次划分,训练多模型来提高效果。根据马尔可夫理论,当前的状态通常只和前面一个状态相关,这也是为什么如此划分数据集的依据。提取的特征描述如表格1所示。
图1.局部特征构造示意图
Tabel 1:local feature deion
二.模型训练
特征构造完成后,后续的任务就能够交给强大的机器学习算法来进行训练。经常使用的算法有基于boost算法的决策树和dnn算法(比赛中咱们仅使用了前面的算法,是由于dnn的算法在增长全局特征后有提高的,可是和其余模型的结果进行融合后并无提高,并且也没有boost的效果好)。如图2所示,针对不一样特征使用不一样的训练器训练流程,feature0表明局部特征,feature1表明全局特征,最后将两个框架的结果进行融合。每一个阶段的比赛成绩如表2所示,只列出来赛道二中的部分红绩,“——”表明没有进行该项实验,因为全局特征在like任务的表现一直不理想,因此基于该特征的xdeepfm并未进行实验。中间关于参数选择和特征选择的成绩未列出。Final是最终提交的public成绩。
图2 模型训练示意图
Tabel2:比赛数据(Track2)