深度学习推荐系统学习笔记1——deep_crossing

又接近年底了,毫无意外的被相亲姑娘再一次pass了,面试机会都没给,不过微信聊天也基本是不拒绝、不主动、不联系,所以也算是意料之中。伤心之余还是学习学习吧,化悲痛为迷茫,毫无目标的乱学,啥时候是个头呢?

目前在看王喆大神的深度学习推荐系统这本书,希望能从中吸取日月之精华,在毫无根基和硬件的情况下领会推荐系统在实际场景中的应用,幻想一下自己能够闭着眼睛搭建一套完整的推荐系统。

前言

初读《深度学习推荐系统》这本书,感觉各方面都介绍到了,包括算法具体落地场景、算法进化史、如何去解决实际问题、程序猿应该关注的点等等吧。给人一种如沐春风、原地成神经的感觉。

再细读之后,发现这本书理论部分不多,还是需要一定的机器学习基础的。部分细节理解起来很难,特别是自己尝试实现里边算法,有些地方的确不知道具体如何做的,还要适当找论文或者博客进行研究。

这次学习先跳过机器学习推荐系统阶段,直接从深度学习部分开始,处理数据、搭建网络、算法评价等。由于没有生产环境支撑,所以这次学习只停留在理论部分。没有spark、TensorFlow集群,数据处理和特征变换单纯用pandas。没有推荐系统实际应用,只对书里边的算法进行实现和评估。当然,没有计算集群,只能减少数据,网络规模尽量小,模仿个大致意思,意思意思就好,不能强求。

实验以英文新闻类文本内容推荐基础,主要是英文文本embedding用的比较熟练,bert用过好多次了。还有就是省去了用户、行为、文本特征提取过程,直接向量化搞起。

准备

1、环境

(1)python3.7,可以利用anaconda,这里不赘述了。
(2)创建2个虚拟环境,分别安装TensorFlow1.14和TensorFlow2.0,1.14用于跑Bert程序,2.0用于构建深度学习网络(DNN、CNN等)。
(3)其它需要的包,pandas等。

2、数据程序下载

本文用的是一个新闻推荐论文中的数据。
(1)Data source. 数据源
https://recodatasets.blob.core.windows.net/newsrec/MINDdemo_train.zip
https://recodatasets.blob.core.windows.net/newsrec/MINDdemo_dev.zip

(2)data description. 数据说明
https://github.com/msnews/msnews.github.io/blob/master/assets/doc/introduction.md

(3)源程序git地址
https://github.com/ConstellationBJUT/recommender_system_study

deep crossing

deep crossing是书中讲到算法比较简单的一种,也算是深度学习应用于推荐系统的起源吧。它的逻辑很简单,用户特征、产品特征,经过embedding后或直接拼接在一起,然后送入多层神经网络,预测是否点击。

本文以新闻推荐为场景,直接利用tiny bert预训练模型将新闻标题转换为向量作为产品特征,用户特征就是用户点击新闻特征向量的平均值。

然后将用户曝光和点击新闻行为作为数据集,点击是正例,曝光没点击的是负例。由于正例太少,应用过采样(复制正例若干次)丰富数据集。

最终输入模型的训练数据是,用户向量(128维)拼接曝光或点击新闻向量(128维),即256维输入特征,标签为0,1。采用的网络是Resnet。

小感悟:发现这样的确简单,但是Resnet真心还是挺大的,自己电脑计算极慢。还是用LR做二分类,算的挺快,收敛也快。不过都是实验,2个算法都尝试了,结果当然是都和随机差不多喽。

用的是下面论文的数据,这是2019年比较新的论文,专门用于新闻推荐的。本次所学书上的算法相对来说比较老一点点,还是以视频、电商领域为主。所以初衷还是学习,不想也不太可能超越论文的结果吧。

https://msnews.github.io/

程序说明

代码中注释比较齐全,可能能看懂吧,哈哈哈,程序猿最怕的注释。这里简要说一下。代码里边生成和加载数据,需要手动修改dev和train路径,分2次完成。
深度学习推荐系统学习笔记1——deep_crossing_第1张图片

1、data文件夹

(1)bert是tf1.14程序,利用bert将文本转换为向量,这里用的tiny bert,下载地址为,https://github.com/google-research/bert
(2)dev和train,是数据文件,上面数据源下载的
​(3)bert_sentence_vector.py,调用bert向量化程序
(4)build_data_set.py,根据向量和用户点击行为,生成用户、新闻向量和中间用到的字典数据。从上到下各个函数,有to_csv和save保存文件的程序,跑一下就好了。

2、deep_crossing文件夹

(1)model,模型文件保存文件夹。
(2)dc_model,模型训练程序,包括简单神经网络和Resnet。
(3)evaluate,加载模型,进行评估,auc和ndcg@k。

总结

先实现一个算法,主要是向量化,pandas数据变换,评估函数,这几部分之后就可以完全应用到其它算法中了​。比较麻烦的是算法不容易训练,需要找个gpu​。不过即使好好训练感觉也很难好于MIND论文里边的专门新闻推荐算法吧​。

你可能感兴趣的:(推荐系统,深度学习,推荐系统,tensorflow,python)