请教一下,推荐系统的实现 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
m9rco
V2EX    程序员

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

  •  
      m9rco 2019 年 5 月 5 日 5323 次点击
    这是一个创建于 2535 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    27 条回复    2019-05-05 16:48:39 +08:00
    m9rco
        1
    m9rco  
    OP
       2019 年 5 月 5 日
    emmm 肯定很菜鸡,但是想实现一个小小的推荐系统,用于学习,各位前辈多多指教
    m9rco
        2
    m9rco  
    OP
       2019 年 5 月 5 日
    但是没有用户评分功能,只能用播放量什么的来做
    wangchonglie
        3
    wangchonglie  
       2019 年 5 月 5 日
    用 elasticsearch 就可以实现了。
    m9rco
        4
    m9rco  
    OP
       2019 年 5 月 5 日
    @wangchonglie 用 elasticsearch 怎么做呀,刚好在用这块
    dartabe
        5
    dartabe  
       2019 年 5 月 5 日
    把音乐贴标签 然后求个 jaccard 相似度?
    m9rco
        6
    m9rco  
    OP
       2019 年 5 月 5 日
    reverse-search ( Percolator )(反向搜索(过滤器))功能以匹配 ??
    Allianzcortex
        7
    Allianzcortex  
       2019 年 5 月 5 日
    我本科毕设做的就是音乐推荐系统(拿了优秀,算是本科四年里为数不多的不灰暗的记忆,现在来看多少有点逆天改命). 算法因为账户系统太难建立所以用的是 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
        8
    m9rco  
    OP
       2019 年 5 月 5 日
    @Allianzcortex 哇 谢谢您,我是目前业务中有这样一个东西,想自己做作初期的雏形
    jzds001
        9
    jzds001  
       2019 年 5 月 5 日
    为啥市面上的音乐推荐比小说推荐好那么多,小说推荐系统难点在哪呀= =
    shoumu
        10
    shoumu  
       2019 年 5 月 5 日   1
    github 上有很多相关的 repo 的,可以看看

    https://github.com/Microsoft/Recommenders

    数据存在哪里都可以的,可以做离线召回,从数据库里面读取数据计算再存回数据库,也可以做实时召回,比如将数据库里面的数据存到 es 中,根据实时的一些反馈做召回,这些都是可行的
    Allianzcortex
        11
    Allianzcortex  
       2019 年 5 月 5 日
    @m9rco T^T 看业务需求和工期长短吧...主要是能跑的 demo 和实际上线之间差的还是挺远的,可能到时候还要建集群存储已有的结果,要跑 Spark 分布式计算 etc 好多。糙也有糙的做法,听说不少公司上线一开始就是跑 SQL 跑出来的推荐结果,简单直接
    alexmy
        12
    alexmy  
       2019 年 5 月 5 日
    都好高大上,看起来我们做手游开发的程序员就是 ... 一点技术含量都没有。
    Allianzcortex
        13
    Allianzcortex  
       2019 年 5 月 5 日
    @alexmy 并没有...真心没有,我很认真地说
    shoumu
        14
    shoumu  
       2019 年 5 月 5 日
    @jzds001 我感觉主要还是在数据上
    小说相对于音乐内容更长、更加复杂、对于小说内容的刻画很多时候做得还不够,比如给定小说的分类、标签等,有时候可能一两个章节就吸引人了,有时候可能要看很久才行
    另一方面就是用户对于推荐内容的反馈,就我个人的使用感受来看,反馈的耗时其实挺长的,很多时候也不一定准确,比如用户看了 20 章之后,决定弃书了,因为没有明确的反馈用户弃书,那用户到底是喜欢这本书还是不喜欢呢?
    Allianzcortex
        15
    Allianzcortex  
       2019 年 5 月 5 日
    感觉搜 `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
        16
    m9rco  
    OP
       2019 年 5 月 5 日
    @Allianzcortex 我就是想跑 SQL 试试,但是一想数据集好大啊,那么异步配合 redis 其实也可以做,目前用户在 2000w 左右
    Allianzcortex
        17
    Allianzcortex  
       2019 年 5 月 5 日 via iPhone
    @m9rco 这里的 sql 是广义的 sql,包括 hql(hive 跑 mapreduce ) 和 sparksql,如果隔天晚上或半天跑出结果存储起来供调用,感觉不会有太大压力
    m9rco
        18
    m9rco  
    OP
       2019 年 5 月 5 日
    @Allianzcortex 哇 谢谢您
    TimePPT
        19
    TimePPT  
    PRO
       2019 年 5 月 5 日 via iPhone
    先试试新闻吧,音乐推荐全靠标签,短文本的新闻更方便做内容相似判断
    Allianzcortex
        20
    Allianzcortex  
       2019 年 5 月 5 日 via iPhone
    @m9rco 不不...不要说"您",太折煞我了 刚好做过一点而已。楼里其他几位的建议都很好,可以都试试,嘿嘿
    img src="https://cdn.v2ex.com/avatar/ba72/3d07/182027_normal.png?m=1713778624" class="avatar" border="0" align="default" alt="shm7" data-uid="182027" />
        21
    shm7  
       2019 年 5 月 5 日 via iPhone
    很多方案的,我记得这里有个专门做这个的。粗浅的方法矩阵分解?
    cyspy
        22
    cyspy  
       2019 年 5 月 5 日
    当初有个大作业是用 Spark 做的,有现成的 userCF 模型,直接调函数就行。基本的实现思路可以看项亮的推荐系统实践。2000W 肯定不能单机算,MySQL 本身也快到极限了,工业上离线模型应该是从日志和 binlog 落到 Hive/Hbase 之类的再算的,在线模型就不了解了。
    m9rco
        23
    m9rco  
    OP
       2019 年 5 月 5 日
    @cyspy 哦哦 学习了,我再多摸索摸索
    m9rco
        24
    m9rco  
    OP
       2019 年 5 月 5 日
    @Allianzcortex 哈哈哈
    jabari
        25
    jabari  
       2019 年 5 月 5 日
    音乐推荐可以分两个方向: 基于音乐内容的和基于 ItemCF 类似的
    fintan
        26
    fintan  
       2019 年 5 月 5 日 via iPhone
    m9rco
        27
    m9rco  
    OP
       2019 年 5 月 5 日
    @jabari UserCF 还看的懂一点点 ItemCF 有点懵
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     6104 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 03:02 PVG 11:02 LAX 20:02 JFK 23:02
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86