15|基于Flask的推荐服务:如何把召回集推荐出去?
黄鸿波
你好,我是黄鸿波。
在前面的课程中,我们搭建了一个简单的 Flask 服务,并且已经可以通过 Postman 来进行调用,这节课我们将在此基础上,把基于规则的召回集成进来并推荐给用户。这节课你会学到下面的内容。
写一个基于时间的召回,并存储到 Redis 数据库中。
编写一个翻页查询服务,能够进行翻页查询。
编写 Service 服务,将基于时间的召回推荐给用户。
编写基于时间的召回
推荐系统如果想要将内容推荐给用户,首先要做的就是要找到合适的内容,然后将这些内容通过一定的整理和排序,按照一定的规则推荐给用户。这些规则可能是时间、热度、相似度以及一些用于特征的评分,也可以是这些中一个或者多个算法的结合。在这节课里,我们就先用简单的基于时间的召回算法来做。
首先,我们来回顾一下我们之前的内容画像,下图是内容画像其中的一条数据。
我们可以看到,我们的用户画像实际上是由 10 个字段组成,在这 10 个字段中,第一个字段 _id 是 MongoDB 数据库为我们生成的一个唯一的 id 值,我们可以用其作为索引,来标记其唯一性。
与时间相关的字段有 2 个,一个是 news_date,另一个是 create_time。在这两个字段中,news_date 表示的是新闻发布的时间,create_time 指的是这个新闻的入库时间(也就是爬虫爬取的时间),这两个时间作为特征数据在不同的算法中有不同的用处。我们目前是想要基于时间来进行召回,这个时间最好使用新闻的发布时间,因为新闻发布时间属于新闻本身的一个特征,可以防止“时间穿越”事件的发生。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文详细介绍了如何将基于时间的召回集成到Flask服务中,并推荐给用户。首先讲解了基于时间的召回算法的实现,包括从MongoDB数据库中取出数据,按时间倒序排序后存入Redis数据库,以提高数据存取效率。接着介绍了如何编写一个翻页查询服务和Service服务,将基于时间的召回推荐给用户。文章还提到了避免“时间穿越”问题的重要性,以及使用Redis数据库进行存取的优势。最后,文章给出了实际操作步骤,包括重新爬取数据并更新内容画像,以及将数据按时间顺序存入Redis数据库。整体来说,本文以实际案例为基础,详细介绍了基于时间的召回算法的实现步骤和注意事项,对于想要在推荐系统中应用此类算法的读者具有一定的参考价值。文章还提到了基于时间召回可以和用户画像相结合进行召回,需要特别注意“时间穿越”的问题,以及如何将MongoDB里的数据按时间顺序插入到Redis等技术要点。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你搭建推荐系统》,新⼈⾸单¥59
《手把手带你搭建推荐系统》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- Weitzenböck这个代码到底在哪里啊?学了那么久了都没有看到
作者回复: https://github.com/ipeaking/recommendation https://github.com/ipeaking/scrapy_sina
2023-09-12归属地:江苏 - peterQ1:源码链接已经提供了吗? Q2:百度首页会提供推荐列表,估计是什么算法? Q3:本文开始的“分数”,是根据什么确定的?某一个值可能选一个特殊值,比如特别大的数值,那其他的分数呢?
作者回复: A1:同学您好,不好意思,最近事情有点多,源码将在下周左右提供; A2:一般来讲,都是用一个基本的推荐算法作为基础,然后配合深度学习的推荐来去做的,比如说YouTubeDNN或者双塔模型,但是具体用的是什么,这个我们无法判断; A3:我们这里面的分数实际上是写死的一个序列,在用其他算法,比如说YouTubeDNN或者协同过滤的时候,会有具体的分数,那些是计算出来的。
2023-05-20归属地:北京 - Geek_ccc0fd从mongodb获取排序数据报错:pymongo.errors.OperationFailure: FieldPath field names may not start with '$'. 发现不需要带$,我的pymongo版本4.3.3,正确代码: data = self.collection_test.find().sort([{"$news_date", -1}])
作者回复: 这个可能是因为版本的不同会导致细微的差异,大家遇到这种问题可以自行百度下,有好的实践经验,也可以一起分享下。
2023-05-19归属地:广东 - 叶圣枫StrictRedis 构造的时候要指定本地的db id,不一定是db=10. 我的本地是0。2024-01-25归属地:上海
- 悟尘文稿中的代码示例和github里的代码不一样呀,有点出入,应该以哪个为准?2023-12-13归属地:北京1
收起评论