新闻推荐系统搭建

我要开发同款
廷翰2021年07月31日
233阅读

作品详情

项目描述:对平台用户的点击日志(用户id, 点击文章id, 点击时间戳, 点击环境, 点击设备组, 点击地区, 文章类型id, 文章字数, 文章创建时间戳等信息)进行收集,再等所有用户的日志进行数据预处理,特征工程,相似度计算,模型排序,模型融合,召回出每个用户最可能点击的5篇文章责任描述:⚫ 使用 pandas 读取平台用户点击的所有新闻文章;⚫ 使用hanzi.sentence对每一篇新闻文章进行分句⚫ 使用 jieba.posseg.cut()对文章进行中文切词和词性标注,然后用stopwords和停用词性表['m','x','uj','ul','mq','u','v','f']对分词进行过滤⚫ 使用Counter()及most_common()对所有新闻文章进行词频统计并排序,舍弃掉词频小于5的分词⚫ 将所有分词组成的语料库喂入Word2Vec模型进行训练⚫ 使用model.wv.get_vector()对文章进行word embedding处理⚫ 使用协同过滤及关联规则计算item2item的相似性矩阵,也就是在计算相似性矩阵的时候将用户点击的时间权重,用户点击的顺序权重,文章创建的时间权重考虑进行⚫ 使用协同过滤及关联规则计算user2user的相似性矩阵,也就是在计算相似性矩阵的时候将用户活跃度考虑进来;用户的活跃度通过点击数来衡量⚫ 对新闻embedding矩阵进行行范数归一化,通过faiss.IndexFlatIP及add,search检索出每篇文章相似性最大的topk篇新闻及对应的score⚫ 使用youtubednn及faiss.IndexFlatIP及add,search检索出每个用户相似性最大的topk个用户及对应的score⚫ 定义一个多路召回的字典,将各路召回的结果都保存在这个字典当中; ⚫ itemcf_sim_itemcf_recall:根据i2i_sim,通过每个用户浏览的历史新闻,找到每一篇历史新闻对应的相似度最高的topk篇新闻及score,不足的用热门新闻补全,将最终的召回新闻列表按照score进行排序;⚫ embedding_sim_item_recall:原理同上;⚫ youtubednn_recall:原理同上 ⚫ youtubednn_usercf_recall:通过youtubednn及faiss得到user2user相似性矩阵,根据score排序选出每个用户对应相似性最高的topk个用户,再通过user-item-time字典将相似性用户看过的新闻推荐给此用户,不足的用热门新闻补全,将最终的召回新闻列表按照score进行排序;⚫ cold_start_recall:冷启动召回,首先我们通过item2item相似性矩阵召回很多篇新闻,然后再对每个用户的历史新闻的如下指标进行统计,新闻主题类型,新闻平均字数,最后一天的新闻id,最后一篇新闻的创建时间,要满足如下条件方可召回:召回新闻类型在历史新闻类型里;召回新闻字数与历史新闻平均字数相差在200以内;召回新闻不在历史浏览的最后一天的新闻里;召回新闻的创建时间与历史最后一次点击新闻的创建时间在90天内⚫ 多路召回合并,在做召回评估的时候就会发现有些召回的效果不错有些召回的效果很差,所以对每一路召回的结果,我们可以认为的定义一些权重,来做最终的相似度融合,对每一个召回类型,按照用户对score进行最大最小归一化,方便同一用户同一文章的score相加,最后控制召回数量,取最终的topk个;⚫ 排序模型:⚫ 用pad_sequences进行序列填充;⚫ 用SparseFeat,DenseFeat,VarLenSparseFeat构造用户特征项迭代器和用户项迭代器;⚫ 用MinMaxScaler对数据进行归一化;⚫ 用lgb.LGBMRanker对训练集进行fit;⚫ 用lgb_ranker对测试集进行predict,得到pred_score;⚫ 用rank函数根据pred_score进行排序;⚫ 将训练集均分为5份,训练5次,每次取其中4份作为训练集,剩余一份作为测试集,得到5个模型,用这五个模型,分别预测测试集,将5次预测得分求平均值,即为测试集的最终得分;⚫ 同理,lgb.LGBMClassifier, DIN分类模型和上面的LGB排序模型的操作方法类似;⚫ 模型融合:⚫ 将以上三种模型训练出来的得分按照user_id和click_article_id进行groupby,然后对每组的pred_score进行求和;按照user_id对结果模型融合后的数据进行groupby,用rank函数对pred_score进行排序(降序);⚫ 按照pred_score从大到小每个用户选出topk篇点击概率最大的新闻。⚫ 技 术 栈 : python + pandas + numpy + hanzi + jieba + Counter + Word2Vec + youtubednn + faiss + deepctr + tensorflow + LGB + DIN
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论