TP5 实现基于标签简单的推荐算法

1、算法思想

1.1、理解算法过程
  • 我们在写算法的时候要先理解我们的对象和之间的关系,我这里举例供求信息用户设置标签,两者关系是,系统会根据用户设置的标签来匹配与其相似度较高的,同时用户发布的供求信息的标签也会影响系统推荐的供求信息,这里还需要涉及到权重问题

(1)我们应该采用什么计算方式来计算,我这里采用简单 交集 / 并集 计算相似度的计算方法。

(2)还需要考虑以下三大方面的影响因素 :

  • 个人标签设置(A:时间衰减度,B:相似度计算)
  • 发布供求标签(C:时间衰减度,D:相似度计算,E:商机类型占比)
  • 其他因素(F:供求发布时间衰减度,G:移除自己发布的供求,H:企业认证/个人认证/VIP特权/权重等)

(3)以下是相关计算:

  • A/C/F:时间衰减度 = 更新时间戳 / 当前时间 * β(β为一个设置的稳定参数,根据数据分析去设置)
  • B/D:相似度计算如下:另外还有其他的 相似度计算方法

假设 A = 某条供求与用户标签的相似度
假设 B = 某条供求与用户发布供求的标签相似度
假设 C = 某条供求标签与用户标签交集总数
假设 D = 某条供求标签与用户标签并集总数
假设 X = 某条供求标签与用户发布供求的标签交集总数
假设 Y = 某条供求标签与用户发布供求的标签并集总数

公式1:某条供求的相似度 = A * 占比 + B * 占比
公式2:A = C / D * 出现概率(默认是1,因为用户无重复标签)
公式3:B = X / Y * 出现概率

  • E:用户发布商机类型占比是根据自己业务需求去加的,不是必须项。

假设A = 用户发布的出售类型商机数量
假设B = 用户发布的求购类型商机数量

用户发布出售类型商机占比 C = A / ( A + B )
用户发布求购类型商机占比 D = B / ( A + B )
那么用户需求则正好相反,推荐的出售商机占比为 D,推荐的求购商机占比为 C
另外如果用户未发不过商机和求购则按照 1:1
如果用户发布的全是求购则推给他的 出售:求购 = 9 : 1(这里的9:1自行设置)

  • G:将个人发布的供求 排除 在推荐列表中,供求数据采用 缓存存储
  • H:这里的其他参数也是需要平衡后才能加入进行相似度计算的。

(4)采用 自定义分页 筛选后再进行 数据库查询

1.2、实操分步解析

1、将数据库供求列表存储到 Redis 中,可以用 hash 存储,如下图:

  • 保存的时候注意这里的域key是 对应供求的ID ,值则是 供求的数据 ,里面的field最好是用到的才存进去,不然数据量大的话取出来的速度也会降低,影响首页内容输出速率。

image.png

我们要注意的是每次 发布一条供求 或者 审核通过 时候将该条 保存到redis 中,这样就不用全部导入了

2、需要分 游客用户 两种登录情况的推荐。正常情况下,游客就按照数据库的排序就行了。

3、需要将 自己发布的供求 移除 推荐列表

4、封装统一的 计算相似度的方法,这样便于用,同时要考虑 用户未设置标签或未发布一条供求的情况

5、封装对应的 分页方法,我在下面也会提供我封装的方法。

2、代码实现

2.1、获取推荐列表的方法(我是封装成服务类方法)
/**
 * 推荐算法返回商机
 * @p
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值