本人萌新,请教一下,现在大概明白 曼哈顿,余弦, KNN 最近邻的一些算法,想尝试做一些推荐系统的东西,就拿推荐音乐专辑入手吧,emmm 这些数据都存在数据库里,我咋处理呢
1
m9rco OP emmm 肯定很菜鸡,但是想实现一个小小的推荐系统,用于学习,各位前辈多多指教
|
2
m9rco OP 但是没有用户评分功能,只能用播放量什么的来做
|
3
wangchonglie 2019-05-05 10:16:32 +08:00
用 elasticsearch 就可以实现了。
|
4
m9rco OP @wangchonglie 用 elasticsearch 怎么做呀,刚好在用这块
|
5
dartabe 2019-05-05 10:19:35 +08:00
把音乐贴标签 然后求个 jaccard 相似度?
|
6
m9rco OP reverse-search ( Percolator )(反向搜索(过滤器))功能以匹配 ??
|
7
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,推荐系统里深度学习已经落地不少了 |
8
m9rco OP @Allianzcortex 哇 谢谢您,我是目前业务中有这样一个东西,想自己做作初期的雏形
|
9
jzds001 2019-05-05 10:40:43 +08:00
为啥市面上的音乐推荐比小说推荐好那么多,小说推荐系统难点在哪呀= =
|
10
shoumu 2019-05-05 10:42:35 +08:00 1
github 上有很多相关的 repo 的,可以看看
https://github.com/Microsoft/Recommenders 数据存在哪里都可以的,可以做离线召回,从数据库里面读取数据计算再存回数据库,也可以做实时召回,比如将数据库里面的数据存到 es 中,根据实时的一些反馈做召回,这些都是可行的 |
11
Allianzcortex 2019-05-05 10:44:51 +08:00
@m9rco T^T 看业务需求和工期长短吧...主要是能跑的 demo 和实际上线之间差的还是挺远的,可能到时候还要建集群存储已有的结果,要跑 Spark 分布式计算 etc 好多。糙也有糙的做法,听说不少公司上线一开始就是跑 SQL 跑出来的推荐结果,简单直接😄
|
12
alexmy 2019-05-05 10:49:06 +08:00
都好高大上,看起来我们做手游开发的程序员就是 ... 一点技术含量都没有。
|
13
Allianzcortex 2019-05-05 10:52:15 +08:00
@alexmy 并没有...真心没有,我很认真地说
|
14
shoumu 2019-05-05 10:53:54 +08:00
@jzds001 我感觉主要还是在数据上
小说相对于音乐内容更长、更加复杂、对于小说内容的刻画很多时候做得还不够,比如给定小说的分类、标签等,有时候可能一两个章节就吸引人了,有时候可能要看很久才行 另一方面就是用户对于推荐内容的反馈,就我个人的使用感受来看,反馈的耗时其实挺长的,很多时候也不一定准确,比如用户看了 20 章之后,决定弃书了,因为没有明确的反馈用户弃书,那用户到底是喜欢这本书还是不喜欢呢? |
15
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 搭一个小的推荐系统跑跑看,之后再优化算法选择什么的
|
16
m9rco OP @Allianzcortex 我就是想跑 SQL 试试,但是一想数据集好大啊,那么异步配合 redis 其实也可以做,目前用户在 2000w 左右
|
17
Allianzcortex 2019-05-05 11:13:23 +08:00 via iPhone
@m9rco 这里的 sql 是广义的 sql,包括 hql(hive 跑 mapreduce ) 和 sparksql,如果隔天晚上或半天跑出结果存储起来供调用,感觉不会有太大压力
|
18
m9rco OP @Allianzcortex 哇 谢谢您
|
19
TimePPT 2019-05-05 11:24:25 +08:00 via iPhone
先试试新闻吧,音乐推荐全靠标签,短文本的新闻更方便做内容相似判断
|
20
Allianzcortex 2019-05-05 11:28:09 +08:00 via iPhone
@m9rco 不不...不要说"您",太折煞我了😂 刚好做过一点而已。楼里其他几位的建议都很好,可以都试试,嘿嘿
|
21
shm7 2019-05-05 12:40:18 +08:00 via iPhone
很多方案的,我记得这里有个专门做这个的。粗浅的方法—矩阵分解?
|
22
cyspy 2019-05-05 12:57:04 +08:00
当初有个大作业是用 Spark 做的,有现成的 userCF 模型,直接调函数就行。基本的实现思路可以看项亮的推荐系统实践。2000W 肯定不能单机算,MySQL 本身也快到极限了,工业上离线模型应该是从日志和 binlog 落到 Hive/Hbase 之类的再算的,在线模型就不了解了。
|
24
m9rco OP @Allianzcortex 哈哈哈
|
25
jabari 2019-05-05 14:32:44 +08:00
音乐推荐可以分两个方向: 基于音乐内容的和基于 ItemCF 类似的
|
26
fintan 2019-05-05 14:47:47 +08:00 via iPhone
|