个性化推荐系统是如何搭建的?阿里算法专家带你3步get!

Posted 阿里云数据库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了个性化推荐系统是如何搭建的?阿里算法专家带你3步get!相关的知识,希望对你有一定的参考价值。


作者: 汉朝 ,阿里云数据库算法专家


0 1

背景信息

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


0 2

个性化推荐系统概述

以个性化新闻推荐系统为例,一篇新闻包含新闻标题、正文等内容,可以先通过NLP(Neuro-Linguistic Programming,自然语言处理)算法,从新闻标题和新闻正文中提取关键词。
然后,利用AnalyticDB PostgreSQL版向量内置的文本转换为向量函数,将从新闻标题和新闻正文中提取出的关键词转换为新闻向量导入AnalyticDB PostgreSQL版向量数据库中,用于用户新闻推荐,具体实现流程如图1所示。
个性化推荐系统是如何搭建的?阿里算法专家带你3步get!
图1.推荐算法整体框架
整个新闻推荐系统由以下步骤实现:
1.构建AnalyticDB PostgreSQL版向量库,得到用户特征向量。 通过分析 用户历史浏览数据,构建相应的用户画像,建立用户偏好模型,得到用户特征向量。 新闻推荐系统可以从用户的浏览日志中得到用户历史浏览新闻详情,再从每条历史浏览新闻中提取关键词,建立用户画像。
例如,某用户浏览了多条NBA(National Basketball Association,美国职业篮球联赛)季后赛新闻,这些新闻中包含了NBA、篮球、球星、体育等关键词,通过这些关键词可以得出该用户是一个NBA球迷。 通过AnalyticDB PostgreSQL版向量将这些文本关键词转换为向量并导入到AnalyticDB PostgreSQL版向量库中,得到用户特征向量。
2.根据AnalyticDB PostgreSQL版向量数据库和逻辑回归预测模型,将用户感兴趣的新闻推荐给用户。 通过AnalyticDB PostgreSQL版向量数据库,可以从互联网检索出前500条用户没有浏览过的新闻,但是这500条新闻却是该用户最感兴趣的新闻。 然后,从这500条新闻中提取每条新闻的创建时间和点击率,根据逻辑回归预测模型(该模型来自于用户以往的浏览的历史记录中),将用户感兴趣的新闻推荐给用户。
AnalyticDB PostgreSQL版内置的文本转换为向量函数采用BERT(Bidirectional Encoder Representations from Transformers)模型,同时支持中文和英文两种语言。该模型基于大量的语料进行训练,其中包含了语义信息,而且其查询精度比简单的TF-IDF(term frequency–inverse document frequency)算法高。


0 3

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

图2是个性化新闻推荐系统中AnalyticDB PostgreSQL版数据库表结构设计,系统包含了三张表(News, Person,Browses_History),分别存储新闻信息、用户基本信息、用户浏览记录。
个性化推荐系统是如何搭建的?阿里算法专家带你3步get!
图2. 个性化推荐系统AnalyticDB 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);


0 4


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



01

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

AnalyticDB PostgreSQL版通过内置的文本转换为向量函数,抽取新闻特征向量,然后将新闻特征向量存入新闻表news中。例如,执行以下SELECT将返回文本“ADB For PG is very good!”对应的特征向量。
select feature_extractor('text', 'ADB For PG is very good!');
假设新闻如下图所示,通过以下两个步骤将新闻信息存入新闻表news表中。
个性化推荐系统是如何搭建的?阿里算法专家带你3步get!
(1)提取新闻关键词。由于AnalyticDB 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);



02

提取用户特征向

(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 体育 总决赛 热火 火箭'));



03

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

通过用户特征向量,到新闻表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:逻辑回归模型学习中各个属性的权重。


05

小结

详细的AnalyticDB系统请加我们的钉钉群,欢迎大家讨论和使用。( 请使用钉钉扫码
个性化推荐系统是如何搭建的?阿里算法专家带你3步get!
往期文献:



点击 阅读原文
了解云原生数据仓库AnalyticDB PostgreSQL版
更多详情
快来get你的个性化推荐系统吧!


以上是关于个性化推荐系统是如何搭建的?阿里算法专家带你3步get!的主要内容,如果未能解决你的问题,请参考以下文章

1元带你从零起步实现音乐推荐系统

告别1人年,教你21天搭建推荐系统!

推荐系统[八]算法实践总结V1:淘宝逛逛and阿里飞猪个性化推荐:召回算法实践总结冷启动召回复购召回用户行为召回等算法实战

一天一更: 推荐算法专家|北京

推荐系统手把手带你学推荐系统 4 知识补充

推荐系统手把手带你学推荐系统 3 实现第一个推荐系统