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

本文涉及的产品
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 作者:汉朝

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,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
目录
相关文章
|
9天前
|
Ubuntu Linux 数据中心
阿里云服务器纯净版系统及系统版本参考与相关使用说明
在我们选购阿里云服务器的时候,操作系统有公共镜像、自定义镜像、共享镜像、云市场镜像、社区镜像可选,其中公共镜像为纯净版系统,这些系统皆已正版授权,旨在为ECS实例上的应用程序提供安全、稳定的运行环境。本文为大家汇总了阿里云服务器纯净版系统及最新的系统版本以及相关使用说明,以供大家了解和选择。
阿里云服务器纯净版系统及系统版本参考与相关使用说明
|
6天前
|
存储 安全 API
"解锁企业级黑科技!用阿里云视觉智能打造钉钉级人脸打卡系统,安全高效,让考勤管理秒变智能范儿!"
【8月更文挑战第14天】随着数字化办公的发展,人脸打卡成为企业考勤的新标准。利用阿里云视觉智能开放平台构建类似钉钉的人脸打卡系统,其关键在于:高精度人脸识别API支持复杂场景下的快速检测与比对;活体检测技术防止非生物特征欺骗,确保安全性;云端存储与计算能力满足大数据处理需求;丰富的SDK与API简化集成过程,实现高效、安全的考勤管理。
20 2
|
1月前
|
存储 运维 监控
阿里云 SAE 助力修正商城 3 周内提升系统承载能力 20 倍,轻松应对春晚流量
在 2024 年春节前夕,修正电商事业部面临了前所未有的技术挑战,修正将参与春晚的全民健康好礼派发的活动,且在央视及各大平台进行广告投放,预计流量激增至 16 亿,系统需要承载保底 5 万 QPS,目标 10 万 QPS。修正技术团队迫切需要升级 APP 架构以应对即将到来的超高并发场景。这一挑战不仅是对技术的考验,更是对修正品牌实力的一次展示。为了应对这次巨大的技术挑战,修正技术团队选择与阿里云云原生团队合作,进行 APP 架构的升级。
21879 7
|
2月前
|
网络协议 安全 调度
阿里云公共DNS发布支持鸿蒙系统版的SDK
阿里云公共DNS发布支持鸿蒙系统版SDK,赋能鸿蒙开发者快速接入阿里云公共DNS服务。公共DNS将帮助接入的鸿蒙应用免除LocalDNS劫持困扰、解析加速、精准调度。
|
2月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用问题之在流水线中无法运行已在系统环境变量中配置的可执行命令,是什么导致的
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
弹性计算 监控 安全
【阿里云弹性计算】ECS实例监控与告警系统构建:利用阿里云监控服务保障稳定性
【5月更文挑战第23天】在数字化时代,阿里云弹性计算服务(ECS)为业务连续性提供保障。通过阿里云监控服务,用户可实时监控ECS实例的CPU、内存、磁盘I/O和网络流量等指标。启用监控,创建自定义视图集中显示关键指标,并设置告警规则(如CPU使用率超80%),结合多种通知方式确保及时响应。定期维护和优化告警策略,利用健康诊断工具,能提升服务高可用性和稳定性,确保云服务的卓越性能。
159 1
|
3月前
|
弹性计算 监控 数据库
【阿里云弹性计算】企业级应用上云实战:基于阿里云 ECS 的 ERP 系统迁移案例
【5月更文挑战第25天】制造企业将面临资源不足、维护成本高和数据安全问题的ERP系统迁移到阿里云ECS,实现业务上云。通过数据迁移、应用部署、网络配置和性能优化等步骤,企业享受到弹性计算资源、高可靠性和数据安全优势,降低维护成本。阿里云提供24小时支持,助力企业数字化转型。此案例展示企业级应用上云的可行性,鼓励更多企业借助云计算实现创新发展。
119 0
|
5天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
8天前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
7天前
|
机器学习/深度学习 弹性计算 人工智能
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考
目前企业对云服务器的性能、安全性和AI能力的要求日益提高。阿里云推出的第八代云服务器ECS g8i实例,以其卓越的性能、增强的AI能力和全面的安全防护,除了适用于通用互联网应用和在线音视频应用等场景之外,也广泛应用于AI相关应用。本文将深入解析ECS g8i实例的技术特性、产品优势、适用场景及与同类产品的对比,以供参考。
阿里云第八代云服务器ECSg8i实例深度解析:性能及适用场景参考