FunRec-task1

task1熟悉新闻推荐系统基本流程

(Datawhale32期组队学习)

基础点

  • 数据流图
    • 原理
  • 工具

知识点

1 数据流图

请添加图片描述离线offline+在线online两部分

1.1 物料
  1. 每天0点爬取前一天的内容,爬取完数据再更新特征库,更新完特征库之后再更新用户的画像,然后将redis中所有数据都清空,将特征库中的前端展示信息存入redis
  2. 物料爬取materials/sinanews,scrapy存入,MongoDB的SinaNews数据库
  3. process_material物料处理函数,处理最新爬取新闻的画像,存入特征库(redis库)更新新闻动态画像, 需要在redis数据库内容清空之前执行,生成前端展示的新闻画像,并在mongodb中备份一份
  4. process_users用户画像函数,将用户的曝光数据从redis落到mysql中,更新用户画像
  5. update物料更新函数,新闻数据写入redis(处理redis数据的时候是会将前一天的数据全部清空)将最新的前端展示的画像传到redis
1.2 数据库
  1. dao/entity包,记录用户数据(存MySQL库)
    • RegisterUser用户注册数据
    • UserCollections用户收藏新闻数据
    • UserExposure用户曝光数据
    • UserLikes用户喜欢新闻数据
    • UserRead用户阅读新闻数据
  2. 用户数据与MySQL数据库相连,记录engine,session
  3. 特征画像、新闻画像、用户画像等,存入mongo数据库,另,还有redis的备份数据
  4. 新闻信息,推荐列表,曝光列表存入redis。
1.3 离线offline
  1. 离线推荐流程,给每个用户存储一个倒排索引列表
  2. 热门页面:hot_list_template_to_redis函数
    • 采用update_hot_value函数更新物料库中所有新闻的热度值,初始化时每个用户一致
    • group_cate_for_news_list_to_redis将每个用户的推荐列表按照类别分开存入redis,方便后续打散策略的实现(热门页来说,只需要提前将所有的类别新闻都分组聚合就行,后面单独取就可以)
  3. 推荐页:rec_list_to_redis个性化推荐列表,千人千面
  4. cold_start_template_to_redis冷启动列表模板
    • generate_cold_user_strategy_templete_to_redis_v2:冷启动用户模板,总共分成了四类人群
      每类人群都把每个类别的新闻单独存储
    • user_news_info_to_redis:个性化,将每个用户涉及到的不同的新闻列表添加到redis中去
  5. 处理完物料之后,生成当前最新的用户推荐列表,热门列表,及冷启动内容模板
1.4 在线online
  1. 单例模式推荐服务类
  2. 推荐页
    • get_cold_start_rec_list获取冷启动用户的推荐列表,返回的是一个news_id列表,zrevrange排序分值从大到小,并把结果存入redis
    • get_rec_list:给定页面的展示范围进行展示,根据news_id获取新闻的具体内容,并返回一个列表,列表中的元素是按照顺序展示的新闻信息字典
    • get_cold_start_rec_list_v2,推荐页展示列表,使用轮询的方式进行打散
    • 老用户使用个性key,新用户使用冷启动key
  3. 热门页:get_hot_list_v2,热门页展示列表,使用轮询的方式进行打散
    • 老用户使用用户热门页,新用户,拷贝热门倒排模板
  4. 详情页:news_detail展示新闻详细信息
  5. 连接后端请求和后端数据记录(server.py)
    • 调用数据库函数,查数据

2 工具集

操作系统:Windows10
MySQL:8.0.25
Redis:5.0.14
Mongodb:5.0.5
Mini-Conda Python 3.8
前端IDE:WebStorm2021.1
后端IDE:PyCharm Professional
访问MySQL和Mongodb的数据库工具:DataGrip 2021.1
访问Redis的工具:redis-desktop-manager-0.9.9.99.exe

2.1 项目与工具

学习实验工程,在本机落地,工具均安装在wind10笔记本。

  1. 前端

安装

  1. 使用源:npm install -g cnpm --registry=https://registry.npm.taobao.org
  2. 安装依赖:cnpm instal
  3. 修改前端访问IP和端口:文件package.json,修改第49行的IP和端口(注意:json文件注释会报错,直接改)
  4. 修改后端访问IP和端口:src/main.js,修改第23行的IP和端口:axios.defaults.baseURL = “http://127.0.0.1:5000”

运行

  • npm run dev
  • 浏览器打开:http://127.0.0.1:8686/#/,通过开发者工具查看
  1. 后端

安装

  1. 建立虚拟环境: python -m venv recenv
  2. 安装依赖:pip install -r requirements.txt -i (源)
  3. 修改后端项目的IP和端口:server.py,修改第233行的IP和端口: app.run(debug=True, host=‘127.0.0.1’, port=5000, threaded=True)
  4. 修改项目路径配置文件conf/proj_path.py,拿到项目文件位置:proj_path = os.path.join(sys.path[1], ‘’)
  5. 核对数据库配置文件conf/dao_config.py:Mysql+MongoDB+Redis配置信息
  6. 雪花算法服务,用于生成用户ID:snowflake_start_server --address=127.0.0.1 --port=8910 --dc=1 --worker=1

运行

  1. 启动server.py程序(注:在此之前,必须启动完成数据库并创建数据库)python server.py
  1. 数据库:使用DataGrip工具,连接MySQL数据库+Mongodb

安装

  1. 三个数据库:安装
  2. 设置环境变量

MySQL

  1. 下一步
  2. 用户名+密码+端口号(注意不要用root用户,可能不允许外部连接,建立个普通用户)
  3. CREATE USER ‘yxx’@‘localhost’ identified by ‘123456’
  4. GRANT ALL PRIVILEGES ON . TO ‘yxx’@‘localhost’
    MySQL函数,用户名称密码

MongoDB

  1. 建立data(db+log)文件夹,配置文件,设置自己的path(db、log文件夹地址)
  2. 任务管理处开启MongoDB服务
  3. 命令行判断是否正常启动:mongod --config D:\xxx\mongod.cfg --install --serviceName “MongoDB”(xxx是自己的路径)

redis

  1. 任务管理处开启服务
  2. 命令行判断是否正常启动:redis-server --service-install redis.windows-service.conf --loglevel verbose

DataGrip

  1. 连接MongoDB
  2. 连接MySQL,建立loginfo表/userinfo表
    create database userinfo
2.2 运行调试
  1. 前端页面注册
  2. 爬取新闻/materials/news_scrapy/sinanews/run.py,配置参数—pages=30
  3. 更新物料画像materials/process_material.py,run物料处理函数
  4. 更新用户画像materials/process_user.py,run用户数据处理函数(用户数据落MySQL)
  5. 清除前一天redis中的数据,更新最新今天最新的数据materials/update_redis.py,update新闻数据(新闻数据存入redis)
  6. 离线将推荐列表和热门列表存入redis,recprocess/offline.py,run,内置倒排索引,登录前端可查看新闻。

3 参考

  1. https://github.com/datawhalechina/fun-rec
  2. 锋哥环境搭建笔记
  3. https://relph1119.github.io/my-team-learning/#/recommender_system32/task01

4 补充(大佬们的资料)

4.1 数据流向

1.离线

物料

  1. 系统将当天新闻数据爬取存入MongoDB中
  2. 系统更新前一天新闻动态画像数据(用户对新闻的行为数据)存入Redis中
  3. 以上两个数据通过物料画像处理程序,将特征画像更新到MongoDB中(备份)
  4. 生成热门页列表数据和推荐页列表数据,并存入Redis中

用户画像

  1. 用户注册之后,系统将用户注册信息存入MySQL中
  2. 用户对新闻进行阅读、点赞及收藏操作后,系统将行为数据存入MySQL中
  3. 将用户注册信息和其行为数据构建用户画像存入MongoDB中

2.在线

生成推荐页列表的数据流向:

  1. 根据用户ID,从Redis中获取推荐页列表数据
  2. 从Redis中获取用户曝光表,并对推荐页列表数据进行过滤
  3. 更新用户曝光表,并存入Redis中
  4. 生成详情信息,并存入Redis中
  5. 生成排序列表,再前端页面上展示

生成热门页列表的数据流向:

  1. 根据用户ID,从Redis中获取热门页列表数据
  2. 从Redis中获取用户曝光表,并对热门页列表数据进行过滤
  3. 更新用户曝光表,并存入Redis中
  4. 生成详情信息,并存入Redis中
  5. 生成排序列表,再前端页面上展示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值