工程方向的程序员看到算法相关的技术内心都会有或多或少的胆怯,但如果认真研究之后,其实会发现并没有那么难的。下面来介绍下市面上出现的各类推荐算法的实现原理:
协同过滤
什么是协同过滤?
维基百科:协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息。
简要步骤
- 找到用户A收藏的电影。
- 找到喜欢用户A收藏电影的用户人群集合。
- 找到该群体喜欢的电影集合
- 将这些电影集合排序,从重合度高到低推荐给用户A。
具体步骤
- 查询到A用户喜欢{movie_1, movie_2, movie_3}电影。
- 再根据电影集合查询到喜欢该电影的人物集合movie_1{user_1, user_3, user_5}, movie_2{user_1, user_11, user_12}, movie_3{user_1, user_3, user_7};得到人物重合比较高的集合{user_1, user_3}。
- 找出该群体集合喜欢的电影user_1{movie_1, movie_2, movie_3, movie_7, movie_9}, user_3{movie_1, movie_3, movie_8, movie_18}
- 将电影合并并去除A喜欢的电影生成集合{movie_7, movie_9, movie_8, movie_18}推荐给用户A。
内容推荐
什么是内容推荐?
通过用户历史感兴趣的信息,抽象信息内容共性,根据内容共性推荐其他信息。
简要步骤
- 找到用户A收藏的职位。
- 分解各个职位的内容。
- 抽象化内容的共性内容。
- 由这些共性内容找到其他职位推荐给用户A。
具体步骤
1. 得到求职者A访问过的三个职位,假设为{positions1, positions2, position3}
2. 根据职位集合得到职位内容:
position1 -> {程序员, 杭州, 薪资7000, 3年经验}
position1 -> {程序员, 杭州, 薪资8000, 4年经验}
position1 -> {程序员, 杭州, 薪资7000, 3年经验}
数据可以从数据库得到。
3. 得到的共性信息: {程序员, 杭州, 薪资7000, 3年经验}
4. 由这些共性内容查找其他职位并实施推荐
以{程序员, 杭州, 薪资7000,3年经验}为查询条件,查询职位数据库,并按照一些规则进行排序(例如,最新发布的职位先推荐,点击过的职位不推荐等),完成推荐。
注意:如果查询的结果集过小,可以缩小条件召回,例如可以将查询条件缩小为{程序员, 杭州, 薪资7000},这是为了理解举的最简单的例子。下面会统一介绍给各个维度增加权重的算法。
相似性推荐
以上介绍的两个推荐算法都是