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

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

原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

漫画通信:惊呆了,手机登录还可以这么玩!

原文链接 本文为云栖社区原创内容,未经允许不得转载。

备战春招:阿里一面,给了几条SQL,问需要执行几次树搜索操作?

作者 | 捡田螺的小男孩来源 | 捡田螺的小男孩有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知…

阿里高级技术专家:如何结构化地思考、做事、成长?

作者 | 承风 阿里巴巴高级前端技术专家 导读:建立结构化的思维,以结构化的模式驱动工作,以结构化的体系构建自身的能力,小到写 PPT、大到为业务提供更大价值,都是非常值得我们使用的模式。阿里巴巴数字供应链事业部高…

都在说云原生,它的技术图谱你真的了解吗?

来源 | K8sMeetup社区作者 | Catherine Paganini翻译 | Sarah(K8sMeetup)校对 | 木子(才云)如果你研究过云原生应用程序和相关技术,大概率你遇到过 CNCF 的云原生全景图。这张全景图技术之多规模之大无疑会让人感到震惊…

“玄姐”孙玄,特立独行的架构师

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 简介: 曾任58集团技术委员会主席、转转首席架构师的孙玄,一头飘逸长发,江湖人称“玄姐”。…

后端数据库中返回date日期时 前端显示为一串数字

解决方法:加上JsonFormat注解 出参时自动转换为设定格式 问题解决 ! /*** 开始时间*/JsonFormat(pattern "yyyy-MM-dd HH:mm:ss", timezone "GMT8")private Date startTime;(也可以把数据库的格式变成字符串存入数据库…

从Android到Java:如何从不同视角解决问题?

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 阿里妹导读:Android 转 Java 开发在技术栈上有哪些差异?思考和解决问题时又会有怎样的转变&#xff1…

为什么我直接在servlet里面直接输出message不乱码,而跳转到web页面就出现乱码,而且存到数据库的也是乱码,我尝试了网上的各种方法,还是不成功。。

为什么我直接在servlet里面直接输出message不乱码,而跳转到web页面就出现乱码,而且存到数据库的也是乱码,我尝试了网上的各种方法,还是不成功。。 public class HandleRegister extends HttpServlet { public void init(Servle…

CPU 是如何执行任务的?

作者 | 小林coding来源 | 小林coding头图 | 下载于视觉中国前言关于 CPU ,你清楚下面这几个问题吗?有了内存,为什么还需要 CPU Cache?CPU 是怎么读写数据的?如何让 CPU 能读取数据更快一些?CPU 伪共享是如何…

@DateTimeFormat和@JsonFormat注解

文章目录一、场景复现1. 准备实体vo2. 定义⼀个Controller3. 请求测试二、⼊参格式化2.1. 日期转换2.2. 请求测试三、 出参格式化3.1. 现象3.2. 改造3.4. 测试验证3.5. 时间少了8小时3.6. 解决方案3.7. 效果图一、场景复现 1. 准备实体vo 定义⼀个pojo,它有⼀个 j…

初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

1 设计目的 《Web应用开发课程设计》是实践性教学环节之一,是《Web程序设计》课程的辅助教学课程。通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握软件开发的基本概念、…

使用AnalyticDB轻松实现以图搜图和人脸检索

1. 背景 以图搜图在生活中有着广泛的应用, 当我们在电视上看到有人穿着一件美丽的裙子或者帅气的球鞋也想拥有时, 我们可以拍张照片然后打开淘宝然后上传照片就可以快速的找到这个商品. 我们看到一张电影截图想知道出处的时候只要将图片粘贴到百度或者谷歌的图搜框中就可以找到…

年后跳槽季,如何在编程面试中大获成功?

【CSDN 编者按】作为技术人,在面向编程面试之前,应该如何进行相应的准备?作者 | Noj Vek 译者 | 弯月责编 | 屠敏出品 | CSDN(ID:CSDNnews)本文的作者经历过100多场面试,而且也担任过50多场面试…

HbuilderX中 华为手机 真机调试

文章目录一、场景浮现1. 真机运行2. 问题描述二、解决方案2.1. 终端设置2.2. 开启开发者模式2.3. 开启USB调试2.4. 连接模式选择2.5. 重新运行2.6. 选择设备2.7. 手机真机调试一、场景浮现 1. 真机运行 直接运行Hbuilder中的“运行”,无法显示对应设备 2. 问题描述…

一云多端,连接万物:智能接入网关2.0升级技术揭秘

一云多端,连接万物:全新发布SAG-APP和SAG-vCPE 阿里云提供了多种产品形态支持各种场景上云,SAG2.0发布了SAG-APP支持各种操作系统的终端接入上云,同时发布了SAG-vCPE支持3rd云资源通过虚拟机或容器环境接入阿里云,本次…

网上购物商城 html+css+MVC+sql server+idea编辑器实现。

最近又找到了jsp学习结束后时,最后做的一个网上购物商城小项目,总体分为用户和管理员两个模块,用户注册之后登录,进行商品浏览加购物车并购买评价,管理员负责商品的增删查改以及订单的发货等等,可以说功能比…

幕享手机投屏

前提:手机电脑连接同一个局域网或者无线网 https://letsview.cn/

通俗的讲,这就是容器CPU隔离的底层实现机制

来源 | 刘超的通俗云计算责编 | 寇雪芹头图 | 下载于视觉中国在真正的生产实践过程中,对于CPU的隔离要求比容器的默认策略要严格的多,因而需要对于Linux内核底层机制有所理解,才能很好的做CPU隔离,甚至在离线业务混合部署隔离等策…

OAM创始团队:揭秘OAMKubernetes实现核心原理

作者 | Andy Shi(阿里云高级技术专家)、天元(阿里云技术专家) 今年 5 月,阿里云和微软云共同宣布,Open Application Model (OAM) 社区携手知名混合云管理项目 Crossplane 社区&…

一文读懂人类信息存储进化史

感兴趣的同学,欢迎点击查看详情哦 在很久很久以前 那个时代语言和文字还没出现 人们的还都是通过“呜呜呜”的方式来进行沟通 但是事情还是得记的 因此“结绳记事”这种方法开始在人群里开始流行 但是,事情总归是越来越多,结也会越来越多 到最…