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

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

  •  
  •   m9rco · 170 天前 · 2864 次点击
    这是一个创建于 170 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    https://github.com/Microsoft/Recommenders

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