一个简单的文章推荐系统

前言

接上,这次实现的是一个简单的文章推荐系统,采用的仍然还是 TF-IDF 算法(因为这种最好写),对我们这个项目够用了吧应该(doge

原理

基于内容的推荐

  • 将文章向量化
  • 记录用户的浏览记录
  • 将浏览记录中的文章进行向量求和求平均计算出用户的用户向量,算是简要构建出用户的模型
  • 将用户向量和文章库中的文章进行比对,计算相似度
  • 推荐相似度最高的文章给用户

文章推荐系统

参考文章:

个性化阅读中的推荐系统(一)

项目地址:

本项目已在 Github 上开源:Github 地址

数据库表

article_dictionary

数据量尽量大,不然有些文章生成向量为空(找不到分词的话会变成零向量)

  • id int 非空 键
  • dictionary longtext 可空

user

存放用户数据的表

  • id int 非空 键
  • user_history longtext 可空
  • user_dictionary longtext 可空
  • updated varchar 30 非空,只有两个值:true false
  • recommend longtext 可空

article

代码中是 article_category_data,用了测试时的数据)

存放文章基本信息的表

  • id int 非空 键
  • weight longtext 可空

Tips

  • sql = “select id, weight from article_category_data where id not in {} limit 5000”.format(tuple(user_dictionary[1].split(’,’))) 的 limit 5000 是用来限制文章数量的,可以修改成通过时间进行限制
  • dictionary 的数据量一定要够大,如果一篇文章的关键字都在 dictionary 中找不到的话则会变成零向量,可以和分类系统中通过构建得到词库的 dictionary 是同一张表
  • article 中的 weight 最好在爬取文章的时候就算出来

效果

就推荐的结果而言还是比较符合模型的,但仍然存在两个缺点:

  • 需要的词库数据量很大,不然会出现零向量的 bug
  • 数据量较大的话文章比对处理时间过长

彩蛋

其他的个性化推荐算法

一些其他的推荐算法