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

现在搭一个小的推荐系统麻烦吗?

  •  
  •   James369 · 2022-09-25 17:41:33 +08:00 · 3263 次点击
    这是一个创建于 550 天前的主题,其中的信息可能已经有所发展或是发生改变。

    推荐系统现在很常见,比如: 我在电商平台购买了 a,b,c ,它可能就会给你推 a1,b1,c1 。或者我看了视频 x,y,z ,它就会给你推类似的。 就是推的都是你喜欢的,投你所好,非常的了解你。

    碰巧现在做的系统也有推荐模块,想了解下大佬这块应该怎么做,有没有现成的轮子?

    第 1 条附言  ·  2022-09-26 09:34:43 +08:00
    很小的系统,就是做影片推荐,现在库里也就 10 万部电影。
    Maxwe11
        1
    Maxwe11  
       2022-09-25 18:06:20 +08:00
    这种东西很多,但主要还是看架构和流程怎么设计,原来一堆 BI 之类的工具也都内置这种模块,那时候绝大部分都是拿 weka 包装套一下直接上了,反正基本够用;

    小企业是看系统本身的设计,本身是什么框架,还有业务特征以及未来预期的业务量程度,找个好套的;

    不大不小的,很多是系统提前设计好接口,后台有服务团队,如果分析挖掘团队是统计为主的人,基本是根据业务拿 R 跑个合适的模型再根据业务量性能要求等改用其他语言部署一下,接口调用;计算机为主的团队是拿 python 跑一个,流程是一样的;

    再大型的都有自己的框架和管理了;

    各种轮子都有,主要还是看规模看投入看框架看已有人员配置
    statumer
        2
    statumer  
       2022-09-25 21:23:10 +08:00 via iPhone
    构思好流程再想有的没的,小公司用 es 和 redis 就行了。
    EdmondGUO
        3
    EdmondGUO  
       2022-09-25 21:26:46 +08:00
    原理上挺简单的,多路召回,粗排精排重排都不用搞。先整个协同过滤就能用了
    sy20030260
        4
    sy20030260  
       2022-09-25 22:41:51 +08:00
    这个“小”具体是多“小”啊。上推荐系统的话,最后上线得能验证效果,那就得先有简单的 AB Test 吧。要 AB Test 的话,就得有简单的数据平台,简单的埋点 /离线数仓 /取数 /报表不能少吧。而且 AB Test 要能跑起来样本量不能太少吧,说明产品已经比较稳定且具备一定用户规模了。

    到这个程度其实已经过滤掉大部分小公司了,这种公司一般都有一个小型的 BI 或算法团队了。这个时候搞个推荐系统应该比较水到渠成了,毕竟业界都有相对成熟的方案,丢给算法团队搞就是了,应该轮不到 OP 来提这个问题吧。如果确实还有这种问题,可能得检查下算法团队是不是有水分了(逃
    James369
        5
    James369  
    OP
       2022-09-26 09:41:25 +08:00
    @sy20030260 没有那么复杂,现在就是一条 select 语句从用户已查看过的同类型条目中,random 随机返回几条出来做推荐用。虽然有点糊弄的意思,勉强可用,但推荐的精度不高。
    zoyua
        6
    zoyua  
       2022-09-26 10:16:08 +08:00
    在 es 里根据影片标签搜索就能实现个比较简单的推荐
    frank1256
        7
    frank1256  
       2022-09-26 10:17:15 +08:00
    简单的推荐系统就如你说的只是 sql 语句,如果需要精确打击,则需要构建用户画像,举个简单例子:一个男用户,买了个游戏。在画像中会被打上”男“,”游戏爱好者“的标签。然后将标签数据导入 Es ,进行检索出,符合这些标签的商品 id ,再去查商品详情返给用户。

    核心在打标签这个动作上,标签越多画像越丰富,推荐精度越高,这需要大量的用户行为日志不断采集出来的,属于大数据范围内的一个应用。
    James369
        8
    James369  
    OP
       2022-09-26 10:43:51 +08:00
    @frank1256 你说的对我启发很大,基本原理就是用户一套标签,影片对象一套标签,两组标签进行匹配计算相似度距离,距离越近则越匹配。

    那么现在要做的文章就是标签的定义,以及权重之类。那么我将这些标签分为“固定标签”和“动态标签”:
    固定标签:影片的名字、类型、主演、导演、年代等等每个影片都有的固定分类。
    动态便签:不是每个影片都存在的,比如影片中大量出现的场景,比如“帝国大厦”。或者男主角的口头禅。或者女主角喜欢吃的一种巧克力。或者墙上挂的一副画等等。(动态标签没有固定的套路,但可能跟用户喜好有关)

    所以,这个动态标签,应该如何生成、录入、检索、匹配等等?
    yuanchao
        9
    yuanchao  
       2022-09-26 11:13:17 +08:00
    很多年以前做过,其实说白了就是标签那一套,主要是如何精准的给用户打上标签,给商品打上标签,我们之前这部分工作都是人工来干的
    frank1256
        10
    frank1256  
       2022-09-26 11:26:51 +08:00
    @James369 人工,有大公司有个岗位叫数据标注,去找应届大学生,一天给多少钱去给图片或者某些数据,做标注。这就是来源,一般的推荐系统,固定标签就差不多了。
    jeesk
        11
    jeesk  
       2022-09-26 11:30:03 +08:00
    自己写过一个 opendsp , 架构参考百度 opendsp, https://gitee.com/imomoda/open_dsp
    James369
        12
    James369  
    OP
       2022-09-26 11:53:31 +08:00
    @frank1256 可以啊这招不错。标注电影则免费看电影。哈哈。
    不过我想到另外一个办法,就是从电影的详情介绍中,去提取有用的信息,从而形成标签。

    这块有具体实现方法吗?
    frank1256
        13
    frank1256  
       2022-09-26 13:06:32 +08:00   ❤️ 1
    @James369 爬知名网站的电影数据,利用 es 分词就可以了,更高级的是 nlp ,代价太大,用不到,一般用于科研。
    sadfQED2
        14
    sadfQED2  
       2022-09-26 15:47:18 +08:00 via Android
    可以非常简单,比如推荐同一个类型的商品,比如同一类型的电影。

    也可以非常复杂,比如打标,用户画像。为每个用户建立独特的标签,然后给每个商品,电影建立相应的标签,最后取交集即可。前期人工打标,后期 ai 打标
    summerLast
        15
    summerLast  
       2022-09-26 17:27:38 +08:00
    类型,时间,点击量
    AstroNot
        16
    AstroNot  
       2022-09-26 22:20:10 +08:00
    协同过滤
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3579 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:45 · PVG 18:45 · LAX 03:45 · JFK 06:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.