Datawhale组队学习——推荐系统Task03 离线物料系统的构建

以下学习笔记参考自Datawhale12月组队学习的推荐系统课程,内容主要为离线物料系统的构建。
项目原链接: https://github.com/datawhalechina/fun-rec

Datawhale组队学习——推荐系统Task03 离线物料系统的构建_第1张图片

离线物料系统基本流程

  • 物料侧画像的构建:首先添加新物料,新物料通过每天凌晨在新闻网站上爬取并存储在MongoDB中,对于旧物料画像,通过用户的交互记录(阅读,点赞,收藏)进行更新并将其拆分为静态和动态分别存入Redis中。

  • 用户侧画像的构建:主要分为新注册用户画像的更新和老用户画像的更新两方面。用户通过前端注册页面,进行用户注册,新注册用户基本信息及其行为数据构造用户画像,存入MongoDB中的UserProtrai集合中。用户通过阅读、点赞及收藏新闻,将用户行为数据存入MySQL的用户阅读信息表(user_read)、用户点赞信息表(user_likes)和用户收藏信息表(user_collections)。

  • 画像自动化构建:编写脚本定时完成一系列任务,先爬取新闻数据,这里需要注意的是,虽然是今天零点爬数据,但是实际上爬的是前一天的新闻。数据爬完之后,离线更新用户画像,物料画像及线上要存储再redis中的画像。最后是离线推荐的流程,离线将用户的排序列表存到redis中,线上取出即可。

scrapy进行新闻爬取

使用scrapy创建爬虫项目

输入以下命令即可创建scrapy项目:

scrapy startproject sinanews

爬取流程

  • 调用start_request()方法开始爬取,并作为返回请求的迭代器。
  • 调用parse()方法对scrapy下载的URL链接进行处理。
  • 通过回调parse()方法,解析网页并返回在items.py中定义的对象,通过回调下一层的parse_content()方法,解析新闻内容。
  • 每天凌晨定时从sina网站爬取新闻信息,将不重复的新闻存入MongoDB。

物料画像构建

物料画像更新逻辑

  • 新物料添加到物料库这件事情肯定是发生在新闻爬取之后的,将新物料添加到物料库之前还需要对新物料做一些去重和其他简单的画像处理,具体则是将新物料画像添加到MongoDB的NewsRecSys库的FeatureProtrail
  • 将用户的动态行为信息(阅读,点赞,收藏)更新到旧物料(新闻动态画像)中
  • 将最新的物料库中的新闻信息往RedisProtrail物料库中写一份,并去掉一些前端展示不需要的字段内容,作为存储再redis中的新闻内容的备份内容。

核心函数功能

  • update_new_items():新物料画像的更新
  • update_dynamic_feature_protrail():更新动态特征
  • update_redis_mongo_protrail_data():redis展示新闻内容的备份

物料添加进redis数据库

    # 每次创建这个对象的时候都会把数据库中之前的内容删除
    news_redis_server = NewsRedisServer()
    # 将最新的前端展示的画像传到redis
    news_redis_server.news_detail_to_redis()

用户侧画像的构建

用户画像更新逻辑

  • 将用户的新闻曝光数据保存到MySQL中,用于进行去重。
  • 每日遍历用户日志,更新用户历史阅读的记录,对阅读、点赞和收藏三个用户行为表来做具体的用户兴趣相关画像。

核心函数功能

  • user_exposure_to_mysql():用户曝光数据落在mysql
  • update_user_protrail_from_register_table():更新用户画像

画像自动化构建

  • 物料更新脚本:process_material.py,用户画像更新脚本: process_user.py,redis数据更新脚本:update_redis.py
  • 将上面三个脚本穿起来的shell脚本:offline_material_and_user_process.sh
  • 使用crontab定时任务,每天凌晨1点执行shell脚本

你可能感兴趣的:(mongodb,redis,推荐系统,mysql)