请教一下,推荐系统的实现

2019-05-05 10:03:04 +08:00
 m9rco

本人萌新,请教一下,现在大概明白 曼哈顿,余弦, KNN 最近邻的一些算法,想尝试做一些推荐系统的东西,就拿推荐音乐专辑入手吧,emmm 这些数据都存在数据库里,我咋处理呢

4722 次点击
所在节点    程序员
27 条回复
m9rco
2019-05-05 10:04:41 +08:00
emmm 肯定很菜鸡,但是想实现一个小小的推荐系统,用于学习,各位前辈多多指教
m9rco
2019-05-05 10:07:19 +08:00
但是没有用户评分功能,只能用播放量什么的来做
wangchonglie
2019-05-05 10:16:32 +08:00
用 elasticsearch 就可以实现了。
m9rco
2019-05-05 10:17:40 +08:00
@wangchonglie 用 elasticsearch 怎么做呀,刚好在用这块
dartabe
2019-05-05 10:19:35 +08:00
把音乐贴标签 然后求个 jaccard 相似度?
m9rco
2019-05-05 10:30:41 +08:00
reverse-search ( Percolator )(反向搜索(过滤器))功能以匹配 ??
Allianzcortex
2019-05-05 10:33:11 +08:00
我本科毕设做的就是音乐推荐系统(拿了优秀,算是本科四年里为数不多的不灰暗的记忆,现在来看多少有点逆天改命). 算法因为账户系统太难建立所以用的是 ItemCF,基本思路是 **有更多的人同时喜欢物品 A 和物品 B,那么物品 A 和物品 B 就有比较明显的相似度** . (e.g. 一个人喜欢《红日》和《十年》,那么说明他比较喜欢有年代的粤语歌,推荐《难念的经》就不是一个差的选择). 当时的做法包括但不限于:

1. 用爬虫爬取各大音乐网站专辑,存储在: https://raw.githubusercontent.com/Allianzcortex/MusicRecommendSystem/recommend/recommend/base.txt ,根据评论数量进行 1-5 的打分

2. 每次加载系统时计算相似度,用户点击页面后会提供一些随机歌曲进行打分,然后根据打分(计算 similarity) 来查找近似的歌曲,返回后让用户对这次推荐的满意度和新鲜度打分

3. 杂七杂八说了很多数据可视化 /Web MVC 架构的东西

---

refer :

1. 不知道楼主未来职业目标是做什么。如果是工程的话了解下算法原理就行,不一定要亲自 `get your hands dirty`,真做起来挺费时间的

2. 如果是想要从事推荐算法工程师方向的话可以直接考虑看 G 家的 Wide & Deep,推荐系统里深度学习已经落地不少了
m9rco
2019-05-05 10:38:24 +08:00
@Allianzcortex 哇 谢谢您,我是目前业务中有这样一个东西,想自己做作初期的雏形
jzds001
2019-05-05 10:40:43 +08:00
为啥市面上的音乐推荐比小说推荐好那么多,小说推荐系统难点在哪呀= =
shoumu
2019-05-05 10:42:35 +08:00
github 上有很多相关的 repo 的,可以看看

https://github.com/Microsoft/Recommenders

数据存在哪里都可以的,可以做离线召回,从数据库里面读取数据计算再存回数据库,也可以做实时召回,比如将数据库里面的数据存到 es 中,根据实时的一些反馈做召回,这些都是可行的
Allianzcortex
2019-05-05 10:44:51 +08:00
@m9rco T^T 看业务需求和工期长短吧...主要是能跑的 demo 和实际上线之间差的还是挺远的,可能到时候还要建集群存储已有的结果,要跑 Spark 分布式计算 etc 好多。糙也有糙的做法,听说不少公司上线一开始就是跑 SQL 跑出来的推荐结果,简单直接😄
alexmy
2019-05-05 10:49:06 +08:00
都好高大上,看起来我们做手游开发的程序员就是 ... 一点技术含量都没有。
Allianzcortex
2019-05-05 10:52:15 +08:00
@alexmy 并没有...真心没有,我很认真地说
shoumu
2019-05-05 10:53:54 +08:00
@jzds001 我感觉主要还是在数据上
小说相对于音乐内容更长、更加复杂、对于小说内容的刻画很多时候做得还不够,比如给定小说的分类、标签等,有时候可能一两个章节就吸引人了,有时候可能要看很久才行
另一方面就是用户对于推荐内容的反馈,就我个人的使用感受来看,反馈的耗时其实挺长的,很多时候也不一定准确,比如用户看了 20 章之后,决定弃书了,因为没有明确的反馈用户弃书,那用户到底是喜欢这本书还是不喜欢呢?
Allianzcortex
2019-05-05 10:55:13 +08:00
感觉搜 `elasticsearch as recommendation engine` 有很多不错的文章,比如官方这篇 https://www.elastic.co/blog/looking-at-content-recommendation-through-a-search-lens,以及 https://opensourceconnections.com/blog/2016/09/09/better-recsys-elasticsearch/ , **We argue recommendations and search are two sides of the same coin** 推荐和搜索就是一体两面的东西 LOL。要不要先试着直接用现成的 API 搭一个小的推荐系统跑跑看,之后再优化算法选择什么的
m9rco
2019-05-05 11:08:43 +08:00
@Allianzcortex 我就是想跑 SQL 试试,但是一想数据集好大啊,那么异步配合 redis 其实也可以做,目前用户在 2000w 左右
Allianzcortex
2019-05-05 11:13:23 +08:00
@m9rco 这里的 sql 是广义的 sql,包括 hql(hive 跑 mapreduce ) 和 sparksql,如果隔天晚上或半天跑出结果存储起来供调用,感觉不会有太大压力
m9rco
2019-05-05 11:23:51 +08:00
@Allianzcortex 哇 谢谢您
TimePPT
2019-05-05 11:24:25 +08:00
先试试新闻吧,音乐推荐全靠标签,短文本的新闻更方便做内容相似判断
Allianzcortex
2019-05-05 11:28:09 +08:00
@m9rco 不不...不要说"您",太折煞我了😂 刚好做过一点而已。楼里其他几位的建议都很好,可以都试试,嘿嘿

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/560996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX