[参考] 基于标签的用户推荐系统
version 1.0 基于标签的推荐
- 根据userid查询该用户创建和参与的所有圈子
- 查出每一个圈子对应的标签,及其重复次数lableCount(体现用户对标签的兴趣程度)
- 查出每一个标签对应的所有圈子(排除该用户创建和参与的所有圈子),作为推荐候选圈子集合
- 计算每一个圈子的兴趣程度,降序排列
- 查询各推荐圈子详情
- 2019-03-06 测试成功,满足预期
version 1.1 引入兴趣值统计
CREATE TABLE `user_item_value` (
`id` INT NOT NULL AUTO_INCREMENT,
`userid` BIGINT(20) NOT NULL COMMENT '用户id',
`itemid` BIGINT(20) NOT NULL COMMENT '内容id,如圈子id',
`itype` CHAR(1) NULL DEFAULT 0 COMMENT '类型0-圈子(默认)',
`createtime` DATETIME NULL COMMENT '创建时间,如圈子创建时间',
`ivalue` INT NOT NULL DEFAULT 0 COMMENT '兴趣值',
`actions` VARCHAR(1024) NULL COMMENT '用户行为轨迹,尾部累加行为类型 a-创建 b-参与 c-点赞 d-献花 e-送钻 f-评论 g-分享',
PRIMARY KEY (`id`));
- 根据userid查询该用户感兴趣的所有圈子
- 查出每一个圈子对应的标签,及其兴趣值value加权和(体现用户对标签的兴趣程度)
- 查出每一个标签对应的所有圈子(排除该用户浏览过的所有圈子??),作为推荐候选圈子集合
- 计算每一个圈子的兴趣程度,降序排列
- 查询各推荐圈子详情
- todo 解决分页问题 : 补足条数,已解决
- 目前:前台展示的圈子中,ORDER BY sortnum DESC, recommendtime DESC
- TODO??:按照所有用户的兴趣值总和(考虑时间衰减因素)推荐人气圈子
- 考虑分页,必须联表circle(isdel=0 and ispublic = 1,已删除和非前台展示圈子)
- 联表必须按circleid分表
- 分表后,itemid只能是circleid,itype失效,只能是一种类型
- 圈子和榜单、教室之间的推荐行为不能贯通了
- 如果圈子和榜单、教室想贯通推荐,必须统一标签/分类;目前是独立的
- 将标签系统融入到了整个产品线中(典型案例:豆瓣)
- 统一分类/标签的必要性,限定内容范围
- 后台运营不需要排序了
- 如果圈子默认前台展示(有问题关闭;后期考虑敏感词检测,图片鉴黄)
- 使用轮播图引导用户
- 2019-03-08 测试成功,满足预期
- TODO:推荐理由??
- 您创建的
- 您参与的
- 。。。
- 根据您创建的xxx圈子/标签推荐(私密圈子的行为是否记录,若是,是否根据私密圈子行为推荐)
- 根据您参与的xxx圈子推荐
- 根据您点赞的xxx圈子推荐
- 。。。
- 其他:热门圈子
version 1.2 标签扩展
- 根据userid查询该用户感兴趣的所有圈子
- 查出每一个圈子对应的标签,及其兴趣值value加权和(体现用户对标签的兴趣程度)
- 标签扩展(感兴趣标签的相似标签:相同分类??下的余弦相似度)-->标签分类??
- 查出每一个标签对应的所有圈子(排除该用户创建和参与的所有圈子),作为推荐候选圈子集合
- 计算每一个圈子的兴趣程度,降序排列
- 查询各推荐圈子详情
version 2.0 基于用户的推荐
- 推荐与该用户相似的用户感兴趣的圈子
- 计算两用户的相似度:余弦相似度
- 前K个相关用户
version3.0 基于圈子的推荐
- 推荐该用户感兴趣的圈子相似的圈子
- 计算两圈子的相似度:余弦相似度
- 前K个相圈子
- 三个推荐引擎联合推荐:排序与分页