一个简单的文章推荐系统
Category:
杂七杂八
前言
接上,这次实现的是一个简单的文章推荐系统,采用的仍然还是 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
- 数据量较大的话文章比对处理时间过长
彩蛋
其他的个性化推荐算法