三步在阿里云上面搭建一套个性化推荐系统

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 作者:汉朝

5-6-3.gif

背景信息

互联网时代个性化推荐已经渗透到人们生活的方方面面,例如常见的“猜你喜欢”、“相关商品”等。互联网能够对用户投其所好,向用户推荐他们最感兴趣的内容,实时精准地把握用户兴趣。目前很多成功的手机APP都引入了个性化推荐算法,例如,新闻类的有今日头条新闻客户端、网易新闻客户端、阿里UC新闻客户端等;电商类的有拼多多、淘宝、天猫等。分析型数据库PostgreSQL版推出的向量分析可以帮助您实现上述个性化推荐系统。

个性化推荐系统概述

以个性化新闻推荐系统为例,一篇新闻包含新闻标题、正文等内容,可以先通过NLP(Neuro-Linguistic Programming,自然语言处理)算法,从新闻标题和新闻正文中提取关键词。然后,利用分析型数据库PostgreSQL版向量内置的文本转换为向量函数,将从新闻标题和新闻正文中提取出的关键词转换为新闻向量导入分析型数据库PostgreSQL版向量数据库中,用于用户新闻推荐,具体实现流程如图1所示。

image.png


图1.推荐算法整体框架

  1. 1.构建分析型数据库PostgreSQL版向量库,得到用户特征向量。通过分析用户历史浏览数据,构建相应的用户画像,建立用户偏好模型,得到用户特征向量。新闻推荐系统可以从用户的浏览日志中得到用户历史浏览新闻详情,再从每条历史浏览新闻中提取关键词,建立用户画像。例如,某用户浏览了多条NBA(National Basketball Association,美国职业篮球联赛)季后赛新闻,这些新闻中包含了NBA、篮球、球星、体育等关键词,通过这些关键词可以得出该用户是一个NBA球迷。通过分析型数据库PostgreSQL版向量将这些文本关键词转换为向量并导入到分析型数据库PostgreSQL版向量库中,得到用户特征向量。
  2. 2.根据分析型数据库PostgreSQL版向量数据库和逻辑回归预测模型,将用户感兴趣的新闻推荐给用户。通过分析型数据库PostgreSQL版向量数据库,可以从互联网检索出前500条用户没有浏览过的新闻,但是这500条新闻却是该用户最感兴趣的新闻。然后,从这500条新闻中提取每条新闻的创建时间和点击率,根据逻辑回归预测模型(该模型来自于用户以往的浏览的历史记录中),将用户感兴趣的新闻推荐给用户。

分析型数据库PostgreSQL版内置的文本转换为向量函数采用BERT(Bidirectional Encoder Representations from Transformers)模型,同时支持中文和英文两种语言。该模型基于大量的语料进行训练,其中包含了语义信息,而且其查询精度比简单的TF-IDF(term frequency–inverse document frequency)算法高。

个性化推荐系统中数据库表结构设计

图2是个性化新闻推荐系统中分析型数据库PostgreSQL版数据库表结构设计,系统包含了三张表(News, Person,Browses_History),分别存储新闻信息、用户基本信息、用户浏览记录。

image.png


图2. 个性化推荐系统分析型数据库PostgreSQL版表结构

我们对着三张表进行分别介绍:

• News表存储新闻信息,包含新闻id(news_id)、新闻创建时间(create_time)、新闻名字(title)、新闻内容(content)、总的用户点击数(click_times)、两个小时内的用户点击次数(two_hour_click_times)。根据新闻的名称和内容得到新闻的关键词keywords,然后将新闻的关键词转化成向量(news_vector)。向news表中插入数据时,系统自动根据关键词转换为向量,将向量和其他新闻信息一起插入news表。

CREATE TABLE news (
  news_id bigint,
  create_time timestamp,
  title varchar(100),
  content varchar(200),
  keywords varchar(50),  
  click_times bigint,
  two_hour_click_times bigint,
  news_vector real[],
  primary key (news_id)
) distributed by (news_id);

• Browses_History表记录用户浏览的新闻的情况,包括新闻id(news_id)、用户id(person_id)、用户浏览新闻的时间(browse_time)。

CREATE TABLE browses_history (
  browse_id bigint,
  news_id bigint,
  person_id bigint,
  browse_time timestamp,
  primary key (browse_id)
) distributed by (browse_id);

• Person表记录用户信息,包括用户的id(person_id)、用户的年龄(age)、用户的星级(star)。

CREATE TABLE person(
  person_id bigint,
  age bigint,
  star float,
  primary key (person_id)
) distributed by (person_id);

三步实现一个个性化推荐系统:

1.从新闻中抽取新闻特征向量

分析型数据库PostgreSQL版通过内置的文本转换为向量函数,抽取新闻特征向量,然后将新闻特征向量存入新闻表news中。例如,执行以下SELECT将返回文本“ADB For PG is very good!”对应的特征向量。

select feature_extractor('text', 'ADB For PG is very good!');

假设新闻如下图所示,通过以下两个步骤将新闻信息存入新闻表news表中。
image.png
(1)提取新闻关键词。由于分析型数据库PostgreSQL版暂时不支持关键词提取函数,您可以调用jieba结巴中文NLP系统)中的关键词抽取函数(jieba.analyse.extract_tags(title + content, 3))提取关键词。

(2)执行INSERT将新闻信息(包含关键词和新闻特征向量)存入新闻表news表中。

insert into news(news_id, create_time, title, content, 
                 keywords, click_times,two_hour_click_times) 
values(1, now(),'韩国军方:朝鲜在平安北道一带向东发射不明飞行物','据韩国联合参谋本部消息,当地时间今天下午16时30分左右,朝鲜在其平安北道一带向东发射不明飞行物。', '韩国 朝鲜 不明飞行物', 123, 3);

2.提取用户特征向量

(1)提取用户浏览关键词。
根据用户的新闻浏览日志,我们很容易得到用户的浏览关键词。例如,执行以下SELECT得到用户 person_id为9527的浏览关键词。

select keywords    
from Person p, Browses_History bh, News n 
where p.person_id = bh.person_id and bh.news_id = n.news_id and p.person_id = 9527;

(2)将用户浏览关键词转换为用户特征向量。
将用户浏览关键词全部提取出来之后,就可以得到用户总的浏览关键词 。例如,用户person_id为9527浏览了关键词为“NBA 体育”、“总决赛”、“热火”、“火箭”的新闻。然后通过文本转换为向量函数,将用户person_id为9527浏览的关键词转换成向量。

select feature_extractor('text', 'NBA 体育 总决赛 热火 火箭'));

3.根据用户特征向量获取新闻推荐结果

通过用户特征向量,到新闻表news中查询相关的新闻信息。例如,执行以下SELECT将返回和用户相关的前500条新闻,同时系统也会过滤掉用户已经阅读过的文章。获取新闻推荐结果之后,应用就可以将用户感兴趣的新闻推荐给用户了。

select news_id, title, content, (extract(epoch from (now()-create_time)) * w1 + click_times/extract(epoch from (now()-create_time)) * w2 + two_hour_click_times/extract(epoch from (now()-create_time)) * w3 + ann_distance * w4) as rank_score
from (select *, l2_distance(news_vector, feature_extractor('textf', 'NBA 体育 总决赛 热火 火箭')) as ann_distance from news order by ann_distance desc limit 500) S 
order by rank_score desc;

参数说明:
• ann_distance:用户与新闻的相关度。
• create_time:新闻的创建时间。
• click_times/(now()-create_time):新闻热度点击率。
• two_hour_click_times/(now()-create_time):新闻近期热度点击率。
• w1、w2、w3、w4:逻辑回归模型学习中各个属性的权重。

结论

详细的AnalyticDB系统请加我们的钉钉群,欢迎大家讨论和使用。

image.png


往期文献:

[1] 戴口罩也能刷门禁?疫情下AnalyticDB亮出社区管理的宝藏神器!https://developer.aliyun.com/article/745160

[2] 阿里云提供高效基因序列检索功能,助力冠状病毒序列快速分析
https://developer.aliyun.com/article/753097

[3] 三步搭建一套声纹系统
https://developer.aliyun.com/article/765232

[4] 阿里云提供高效病原体检测工具助力精准医疗
https://yq.aliyun.com/articles/761891

相关实践学习
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
7月前
|
人工智能 运维 监控
客户案例 | 阿里云向量检索服务Milvus版助力中免日上搭建在线推荐系统
阿里云向量检索服务Milvus版对比开源版本具有性能高、稳定性强、管控功能齐全等优势,为中免日上技术团队在电商领域搭建推荐系统提供了强有力的支持。阿里云Milvus不仅具备良好的可观测性,而且弹性扩缩能力能够适应日益增长的数据规模,同时版本平滑升级也能让技术专家更便捷、无痛地升级和体验新版本的产品能力。
客户案例 | 阿里云向量检索服务Milvus版助力中免日上搭建在线推荐系统
|
存储 搜索推荐 Cloud Native
为什么要使用阿里云pairec来搭建推荐系统?
阿里云Pairec是一个用于搭建推荐系统的云原生解决方案,它可以帮助用户快速搭建高性能、高可用的推荐系统,并提供了代码生成、ab test服务、实验报表后台等多种功能和工具,使得搭建过程更加简单和高效。
457 2
|
存储 搜索推荐 关系型数据库
基于阿里云RDS PostgreSQL打造实时用户画像推荐系统(varbitx))
用户画像在市场营销的应用重建中非常常见,已经不是什么新鲜的东西,比较流行的解决方案是给用户贴标签,根据标签的组合,圈出需要的用户。通常画像系统会用到宽表,以及分布式的系统。宽表的作用是存储标签,例如每列代表一个标签。但实际上这种设计不一定是最优或唯一的设计,本文将以PostgreSQL数据库为基础,给大家讲解一下更加另类的设计思路,并且看看效率如何。
993 0
|
机器学习/深度学习 SQL 存储
阿里云与无邪科技合作:打造端到端的个性化推荐系统
无邪科技旗下产品「分配对象App」[5](参见图1)是致力于帮助走心、认真的95、00后单身年轻群体脱单的新一代“清新”恋爱社交平台,目前注册用户超过了300多万,覆盖全国34个省,301个城市,已经成功的帮助数千人脱单。
阿里云与无邪科技合作:打造端到端的个性化推荐系统
|
存储 分布式计算 监控
梨视频:基于阿里云E-MapReduce搭建视频推荐系统的实践
梨视频由前澎湃新闻掌门人邱兵创立。 在上线之前,它就获得了黎瑞刚华人文化近1亿美元投资,旗下《微辣》栏目总播放量已经超过4亿,并在上线1个月后获得“年度视频新媒体”大奖。 这样一款脱胎于传统媒体的创业型短视频软件,在视频领域异军突起,不仅让内人士在感叹梨视频内容生产力之强大的同时,也诧异于是谁在
13639 0
|
SQL 弹性计算 分布式计算
5块钱低成本阿里云大数据生态协同过滤推荐系统实战
前情提要 人工智能千千万,没法落地都白干。自从上次老司机用神经网络训练了热狗识别模型以后,群众们表示想看一波更加接地气,最好是那种能10分钟上手,一辈子受用的模型。这次,我们就通过某著名电商公司的公开数据集,在阿里云大数据生态之下快速构建一个基于协同过滤的推荐系统! 推荐系统大家都不陌生,早就已经和大家的生活息息相关。
5375 0
|
搜索推荐
【数据科学老司机在线教学第二期】阿里云大数据生态协同过滤推荐系统实战
人工智能千千万,没法落地都白干。 自从上次老司机用神经网络训练了热狗识别模型以后,群众们表示想看一波更加接地气,最好是那种能10分钟上手,一辈子受用的模型。 这次,我们就通过某著名电商公司的公开数据集,在阿里云大数据生态之下快速构建一个基于协同过滤的推荐系统!
5351 0
|
机器学习/深度学习 监控 算法
克拉克拉(KilaKila):借力阿里云快速构建短视频推荐系统
一文读懂如何利用阿里云PAI平台搭建个性化智能推荐系统
4405 0
|
存储 分布式计算 监控
梨视频:基于阿里云E-MapReduce搭建视频推荐系统的实践
深度解答:梨视频如何基于阿里云快速搭建一个套推荐系统?
4249 0
|
搜索推荐 算法 大数据
需求、系统、动机如何满足?阿里云推荐系统架构深度解析
阿里巴巴算法专家郑重分享了《阿里云推荐引擎》。他首先介绍了从搜索到导航到推荐的历程,然后分享了搜索引擎和推荐系统架构,推荐系统中需求、系统、动机的具体解决方案,最后介绍了阿里云推荐引擎、用户基因分析、行业解决方案。
6199 0