三步在阿里云上搭建一套个性化推荐系统?专家带你

作者:汉朝,阿里云数据库算法专家
背景信息互联网时代个性化推荐已经渗透到人们生活的方方面面,例如常见的“猜你喜欢”、“相关商品”等 。互联网能够对用户投其所好,向用户推荐他们最感兴趣的内容,实时精准地把握用户兴趣 。目前很多成功的手机App都引入了个性化推荐算法,例如,新闻类的有今日头条新闻客户端、网易新闻客户端、阿里UC新闻客户端等;电商类的有拼多多、淘宝、天猫等 。分析型数据库PostgreSQL版推出的向量分析「链接」可以帮助您实现上述个性化推荐系统 。
个性化推荐系统概述以个性化新闻推荐系统为例,一篇新闻包含新闻标题、正文等内容,可以先通过NLP(Neuro-Linguistic Programming,自然语言处理)算法,从新闻标题和新闻正文中提取关键词 。然后,利用分析型数据库PostgreSQL版向量内置的文本转换为向量函数,将从新闻标题和新闻正文中提取出的关键词转换为新闻向量导入分析型数据库PostgreSQL版向量数据库中,用于用户新闻推荐,具体实现流程如图1所示 。

三步在阿里云上搭建一套个性化推荐系统?专家带你

文章插图
图1.推荐算法整体框架
整个新闻推荐系统由以下步骤实现:
  1. 构建分析型数据库PostgreSQL版向量库,得到用户特征向量 。通过分析用户历史浏览数据,构建相应的用户画像,建立用户偏好模型,得到用户特征向量 。新闻推荐系统可以从用户的浏览日志中得到用户历史浏览新闻详情,再从每条历史浏览新闻中提取关键词,建立用户画像 。例如,某用户浏览了多条NBA(National Basketball Association,美国职业篮球联赛)季后赛新闻,这些新闻中包含了NBA、篮球、球星、体育等关键词,通过这些关键词可以得出该用户是一个NBA球迷 。通过分析型数据库PostgreSQL版向量将这些文本关键词转换为向量并导入到分析型数据库PostgreSQL版向量库中,得到用户特征向量 。
  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),分别存储新闻信息、用户基本信息、用户浏览记录 。
三步在阿里云上搭建一套个性化推荐系统?专家带你

文章插图
图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!”对应的特征向量 。


推荐阅读