V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
m9rco
V2EX  ›  程序员

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

  •  
  •   m9rco · 2019-05-05 10:03:04 +08:00 · 4851 次点击
    这是一个创建于 2018 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    27 条回复    2019-05-05 16:48:39 +08:00
    m9rco
        1
    m9rco  
    OP
       2019-05-05 10:04:41 +08:00
    emmm 肯定很菜鸡,但是想实现一个小小的推荐系统,用于学习,各位前辈多多指教
    m9rco
        2
    m9rco  
    OP
       2019-05-05 10:07:19 +08:00
    但是没有用户评分功能,只能用播放量什么的来做
    wangchonglie
        3
    wangchonglie  
       2019-05-05 10:16:32 +08:00
    用 elasticsearch 就可以实现了。
    m9rco
        4
    m9rco  
    OP
       2019-05-05 10:17:40 +08:00
    @wangchonglie 用 elasticsearch 怎么做呀,刚好在用这块
    dartabe
        5
    dartabe  
       2019-05-05 10:19:35 +08:00
    把音乐贴标签 然后求个 jaccard 相似度?
    m9rco
        6
    m9rco  
    OP
       2019-05-05 10:30:41 +08:00
    reverse-search ( Percolator )(反向搜索(过滤器))功能以匹配 ??
    Allianzcortex
        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,推荐系统里深度学习已经落地不少了
    m9rco
        8
    m9rco  
    OP
       2019-05-05 10:38:24 +08:00
    @Allianzcortex 哇 谢谢您,我是目前业务中有这样一个东西,想自己做作初期的雏形
    jzds001
        9
    jzds001  
       2019-05-05 10:40:43 +08:00
    为啥市面上的音乐推荐比小说推荐好那么多,小说推荐系统难点在哪呀= =
    shoumu
        10
    shoumu  
       2019-05-05 10:42:35 +08:00   ❤️ 1
    github 上有很多相关的 repo 的,可以看看

    https://github.com/Microsoft/Recommenders

    数据存在哪里都可以的,可以做离线召回,从数据库里面读取数据计算再存回数据库,也可以做实时召回,比如将数据库里面的数据存到 es 中,根据实时的一些反馈做召回,这些都是可行的
    Allianzcortex
        11
    Allianzcortex  
       2019-05-05 10:44:51 +08:00
    @m9rco T^T 看业务需求和工期长短吧...主要是能跑的 demo 和实际上线之间差的还是挺远的,可能到时候还要建集群存储已有的结果,要跑 Spark 分布式计算 etc 好多。糙也有糙的做法,听说不少公司上线一开始就是跑 SQL 跑出来的推荐结果,简单直接😄
    alexmy
        12
    alexmy  
       2019-05-05 10:49:06 +08:00
    都好高大上,看起来我们做手游开发的程序员就是 ... 一点技术含量都没有。
    Allianzcortex
        13
    Allianzcortex  
       2019-05-05 10:52:15 +08:00
    @alexmy 并没有...真心没有,我很认真地说
    shoumu
        14
    shoumu  
       2019-05-05 10:53:54 +08:00
    @jzds001 我感觉主要还是在数据上
    小说相对于音乐内容更长、更加复杂、对于小说内容的刻画很多时候做得还不够,比如给定小说的分类、标签等,有时候可能一两个章节就吸引人了,有时候可能要看很久才行
    另一方面就是用户对于推荐内容的反馈,就我个人的使用感受来看,反馈的耗时其实挺长的,很多时候也不一定准确,比如用户看了 20 章之后,决定弃书了,因为没有明确的反馈用户弃书,那用户到底是喜欢这本书还是不喜欢呢?
    Allianzcortex
        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 搭一个小的推荐系统跑跑看,之后再优化算法选择什么的
    m9rco
        16
    m9rco  
    OP
       2019-05-05 11:08:43 +08:00
    @Allianzcortex 我就是想跑 SQL 试试,但是一想数据集好大啊,那么异步配合 redis 其实也可以做,目前用户在 2000w 左右
    Allianzcortex
        17
    Allianzcortex  
       2019-05-05 11:13:23 +08:00 via iPhone
    @m9rco 这里的 sql 是广义的 sql,包括 hql(hive 跑 mapreduce ) 和 sparksql,如果隔天晚上或半天跑出结果存储起来供调用,感觉不会有太大压力
    m9rco
        18
    m9rco  
    OP
       2019-05-05 11:23:51 +08:00
    @Allianzcortex 哇 谢谢您
    TimePPT
        19
    TimePPT  
       2019-05-05 11:24:25 +08:00 via iPhone
    先试试新闻吧,音乐推荐全靠标签,短文本的新闻更方便做内容相似判断
    Allianzcortex
        20
    Allianzcortex  
       2019-05-05 11:28:09 +08:00 via iPhone
    @m9rco 不不...不要说"您",太折煞我了😂 刚好做过一点而已。楼里其他几位的建议都很好,可以都试试,嘿嘿
    shm7
        21
    shm7  
       2019-05-05 12:40:18 +08:00 via iPhone
    很多方案的,我记得这里有个专门做这个的。粗浅的方法—矩阵分解?
    cyspy
        22
    cyspy  
       2019-05-05 12:57:04 +08:00
    当初有个大作业是用 Spark 做的,有现成的 userCF 模型,直接调函数就行。基本的实现思路可以看项亮的推荐系统实践。2000W 肯定不能单机算,MySQL 本身也快到极限了,工业上离线模型应该是从日志和 binlog 落到 Hive/Hbase 之类的再算的,在线模型就不了解了。
    m9rco
        23
    m9rco  
    OP
       2019-05-05 14:08:51 +08:00
    @cyspy 哦哦 学习了,我再多摸索摸索
    m9rco
        24
    m9rco  
    OP
       2019-05-05 14:09:18 +08:00
    @Allianzcortex 哈哈哈
    jabari
        25
    jabari  
       2019-05-05 14:32:44 +08:00
    音乐推荐可以分两个方向: 基于音乐内容的和基于 ItemCF 类似的
    fintan
        26
    fintan  
       2019-05-05 14:47:47 +08:00 via iPhone
    m9rco
        27
    m9rco  
    OP
       2019-05-05 16:48:39 +08:00
    @jabari UserCF 还看的懂一点点 ItemCF 有点懵
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 22:47 · PVG 06:47 · LAX 14:47 · JFK 17:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.