datawhale的新闻推荐赛事
1.数据和任务
新闻数据来自某新闻APP平台的用户交互数据,包括30万用户,近300万次点击,共36万多篇不同的新闻文章,同时每篇新闻文章有对应的embedding向量表示。
训练集:20万用户的点击日志数据
测试集A:5万用户的点击日志数据
测试集B:5万用户的点击日志数据
官方给出的数据
分别看看各个csv的前十行是什么样子
文件1是关于文章的信息,有四列,分别代表文章id,种类id,,文章创建时间和单词个数。
文件2是各个文章的embedding,每篇文章的向量是250维度。
文件3是提交示例,对于每一个用户按照可能点击率概率大小依次分布
文件4、5分别是测试集和训练集,列分别代表用户id,点击文章id,点击的时间,点击环境,点击设备组,点击操作系统,点击所在国家,点击地区,点击人类型。
评价推荐算法的目标函数:
假如article1就是真实的用户点击文章,也就是article1命中, 则s(user1,1)=1, s(user1,2-4)都是0, 如果article2是用户点击的文章, 则s(user,2)=1/2,s(user,1,3,4,5)都是0。也就是score(user)=命中第几条的倒数。如果都没中, 则score(user1)=0。
即越早命中得分越高。
2.代码思路
1.调出所需要的包(略)
2.节约内存函数
传入df,目的是压缩df的内存,返回一个压缩前的大小,压缩后的大小,以及压缩所需要的时间。
3.读取采样或者全量数据
第一个函数是随机采样出来一小部分,并且去除重复数据,用作测试。
第二个函数比较重要,读取点击数据,这里分成线上和线下,如果是为了获取线上提交结果应该将测试集中的点击数据合并到总的数据中
接下来说明是线下测试,读取文件夹的数据。
4.获取用户-文章-点击时间字典
根据点击时间获取用户的点击文章序列 {user1: [(item1, time1), (item2, time2)..]...}的格式
5.获取点击最多的topk个文章
获取热门的文章
6.itemcf的物品相似度计算
利用文章的embedding计算文章的相似度,并考虑时间因素,计算出相似性矩阵并保存到本地。
接着将前文的全量数据集输入这个函数里,进行文章之间的相似度计算。
7.召回(baseline里用到的是最简单的基于内容的推荐,可以换成其他的召回+精排策略替代)
召回一定数量的文章,不够数量的话用点击数量比较多的热门文章补齐。
对于具体的用户,从已经得知到的用户点击文章的序列字典,文章相似性矩阵,要召回的文章数量,热门的文章(用作补全)得到一个用户可能点击概率最大的K个项目的一个列表。
之后便是设置一系列的参数,从召回的十篇文章中选取五篇进行生成提交的文件csv。