日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度學習實戰(不定時更新)
1.1 產品概述
學習目標
- 目標
- 瞭解泛娛樂推薦系統產品
- 應用
- 無
1.1.1 產品概述
- 產品定位:
一款專爲粉絲打造的粉絲追星服務平臺,讓粉絲輕輕鬆鬆即時瞭解愛豆微博、Instagram、Facebook、Twitter等社交動態信息,守護自家idol(愛豆)的社交類產品
- 產品功能:
包含了明星動態,明星行程,飯圈動態等,爲用戶推薦他們喜愛的帖子(帖子是一種以圖文/視頻形式展現的信息載體,發表自己對明星的看法或表達對某個明星的喜愛), 以引發其他粉絲的共鳴。
- 產品運營指標:
1、當前用戶詳情: 全球累計下載用戶2000萬+, 年齡主要集中在16~39歲之間。 2、當前DAU(日活躍用戶): 60萬+ 3、當前用戶日平均使用時長: 13min 4、商業化手段: 廣告
首頁推薦界面
- 包含明星的社交動態信息以及飯圈用戶的相關帖子信息
1.2 推薦系統架構介紹
學習目標
- 目標
- 瞭解泛娛樂推薦系統前後端架構
- 說明泛娛樂推薦系統架構
- 說明召回模塊的結構以及流程
- 說明排序模塊的結構以及流程
- 應用
- 無
1.2.1 泛娛樂推薦系統前後端結構
- 推薦系統嵌入在後端框架當中,作爲一個模塊調用
- 前端:提供IOS/Android客戶端
- 後端:使用python Django Web框架
1.2.1.1 主要目標以及方案
- 推薦系統的主要目標:
通過向用戶推薦更合適的帖子, 增加用戶交互行爲(點贊,評論,轉發,收藏等), 進而增加用戶平均使用時長。(在數據分析側,相關實驗表明: 用戶交互行爲與該用戶的APP使用時長成正相關.)推薦系統應滿足的用戶體驗要求: 多樣性,新穎性和數據合理性。
-
推薦系統的冷啓動方案:
- 推薦系統使用熱門召回, 時間召回,和運營策略召回作爲最初推薦方案,並將該方案作爲推薦效果對比基線。
-
推薦系統的總體設計必須滿足數據閉環邏輯: 即用戶最新產生的數據應及時用於更新召回策略和排序模型,以便更好的響應用戶需求變化
1.2.2 推薦系統架構設計
- 推薦系統架構: Retrive-Ranking(召回-排序)。召回模塊與排序模塊是該推薦系統的重要組成部分
1.2.3 召回模塊概述
- 召回模塊作用: 針對當前用戶儘可能多的覆蓋其喜好而進行帖子的篩選。
- 召回模塊組成: 召回模塊包括, ETL模塊, 召回池(包含各種召回策略), 召回池二級緩存, 規則過濾器服務。
- 召回策略計算技術解決方案: 圖數據neo4j的內部計算與查詢。
- ETL模塊計算技術解決方案: 使用AWS彈性雲計算服務, 針對海量數據進行處理, 以最小的代價獲取和配置計算能力。
召回模塊組成圖
1.2.4 排序模塊概述
- 排序模塊作用: 針對當前用戶的召回數據進行指定數量的篩選並排序來對應產品推薦位置。
- 排序模塊組成: 模型訓練和預測服務。
- 模型訓練技術解決方案: GCP雲端分佈式訓練與tensorflow。
- 模型預測技術解決方案: GCP雲端預測服務。
排序模塊組成圖
1.3 開發環境介紹
學習目標
- 目標
- 瞭解泛娛樂推薦系統的開發環境組成
- 應用
- 無
1.3.1 整體環境介紹
- 基礎組件:
- 後臺服務: Django, uwsgi, supervisor, Nginx
- 數據庫服務: Neo4j, Redis
- AI訓練: tensorflow, gcp ML-engine(GCP)
- AI預測: gcp ML-engine(GCP)
1.3.2 搭建步驟
- 1、使用服務器系統:centos7, 安裝必備環境包
yum install supervisor
yum install nginx
yum install redis
還有Centos 安裝neo4j圖數據庫安裝與使用。請參見:http://yum.neo4j.org/stable/, yum install neo4j-3.3.5
- 2、創建一個虛擬環境安裝:
conda create -n recreation python=3.6
source activate recreation
# 安裝的包, 在requirements.txt文件中,pip install -r requirements.txt
Django>=1.11.7
djangorestframework>=3.7.3
django-filter>=1.1.0
flower>=0.9.2
requests>=2.18.4
django-cors-headers
uwsgi
neo4j-driver==1.7.2
numpy
redis
1.3.3 啓動配置文件介紹
因爲我們這裏需要將web服務以及數據庫redis服務啓動,才能後續對接推薦系統接口。
這裏介紹的是配置nginx+django,以及redis啓動服務。使用supervisor進行管理的三個服務。整體需要啓動的服務
django後臺服務
- 1、uwsgi配置在項目config目錄下
uwsgi配置文件uwsgi.ini:
#uWSGI configuration
[uwsgi]
#chdir=
http=0.0.0.0:5000
module=server.wsgi
master=True
vacuum=True
max-requests=5000
# can also be a file
socket=0.0.0.0:3001
processes=2
#wsgi-file=server/wsgi.py
pcre=True
#pidfile=/tmp/project-master.pid
#daemonize=/var/log/uwsgi/yourproject.log
配置分析: 設置監聽http協議的5000端口來替代django自帶runserver測試級服務,Django配置:配置文件setting.py在server目錄下
- 2、nginx配置文件nginx.conf在conf目錄下
- 配置分析:設置監聽8087端口作爲對外服務端口,並反向代理至uwsgi的5000端口,同時可根據使用現狀進行合適的負載均衡
#user nobody;
worker_processes 4;
error_log /home/zhoumingzhen/log/nginx/error.log;
pid /home/zhoumingzhen/log/nginx/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream test {
server 0.0.0.0:5000;
#server 0.0.0.0:8718 weight=1;
#server 0.0.0.0:8000 weight=1;
}
server {
listen 8087;
server_name 0.0.0.0;
#charset koi8-r;
#access_log log/host.access.log main;
location /static/ {
alias /home/zhoumingzhen/static/;
}
location / {
proxy_pass http://test;
#uwsgi_pass 127.0.0.1:3001;
include /home/zhoumingzhen/conf/nginx/uwsgi_params;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
include servers/*;
}
supervisor啓動配置
supervisor配置文件supervisor.conf,執行命令
supervisord -c /root/recreation_project/supervisord.conf
- 配置分析:
1、開啓http9001端口作爲可視化監控界面的訪問端口 2、監控uwsgi, nginx, redis等組件, 並指定日誌打印位置和容量限制
[unix_http_server]
file=/tmp/supervisor.sock ; the path to the socket file
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; ip_address:port specifier, *:port for all iface
[supervisord]
logfile=/root/recreation_project/log/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=/root/recreation_project/log/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=http://0.0.0.0:9001 ; use an http:// url to specify an inet socket
[program:main_server]
command=uwsgi --ini /root/recreation_project/conf/uwsgi.ini --close-on-exec
stopsignal=QUIT ; signal used to kill process (default TERM)
stopasgroup=false ; send stop signal to the UNIX process group (default false)
killasgroup=false ; SIGKILL the UNIX process group (def false)
stdout_logfile=/root/recreation_project/log/main_server_out.log ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
stderr_logfile=/root/recreation_project/log/main_server_err.log ; stderr log path, NONE for none; default AUTO
stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
[include]
files = /root/recreation_project/supervisord.conf.d/*.ini
nginx的啓動配置
/root/recreation_project/supervisord.conf.d/start_nginx.ini
[program:nginx]
command=/usr/sbin/nginx -c /root/recreation_project/conf/nginx/nginx.conf -g "daemon off;"
stdout_logfile=/root/recreation_project/log/nginx_out.log
stderr_logfile=/root/recreation_project/log/nginx_err.log
stdout_logfile_maxbytes=1MB
stderr_logfile_maxbytes=1MB
redis數據庫服務
- 配置redis的啓動命令輸出日誌位置
/root/recreation_project/supervisord.conf.d/start_redis.ini
[program:redis]
command=redis-server /root/recreation_project/conf/redis.conf
stdout_logfile=/root/recreation_project/log/redis_out.log
stderr_logfile=/root/recreation_project/log/redis_err.log
stdout_logfile_maxbytes=1MB
stderr_logfile_maxbytes=1MB
1.3.4 小結
- 開發環境組件
- 後臺:django+uwsgi+nginx+supervisor
- 數據庫服務:redis+neo4j
- 模型訓練與預測:GCP
- 環境結構
- 安裝系統環境包與python虛擬化境包
- nginx+uwsgi配置,supervisor三個啓動服務的配置