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

我们有很多用户的页面浏览数据,需要做一个推荐系统(猜你喜欢),但用户和页面浏览数据量特别大,一般用什么模型好?

  •  1
     
  •   alexapollo ·
    geekan · 2015-03-30 18:09:45 +08:00 · 5809 次点击
    这是一个创建于 3525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    像小说和视频都是百万量级的,每天新增的url也不多
    而我们这数据量特别大,有啥好方法吗?

    36 条回复    2015-07-30 15:25:29 +08:00
    O14
        1
    O14  
       2015-03-30 18:55:36 +08:00
    给页面加tag,根据用户的页面浏览数据计算用户偏爱的tag, 推荐tag相似的页面.定时做这些统计,将计算出来的页面保存在表中
    erse
        2
    erse  
       2015-03-30 19:16:10 +08:00
    关注这个问题
    Tianpu
        3
    Tianpu  
       2015-03-30 20:38:51 +08:00 via iPhone
    有来路吗?造关系链
    有用户属性吗?区分不同用户

    两个维度交叉下,大致够用了吧
    babyname
        4
    babyname  
       2015-03-30 21:34:42 +08:00 via iPhone
    mahout
    qiayue
        5
    qiayue  
       2015-03-30 22:10:08 +08:00
    最简单的就是向喜欢 A 的人推荐其他也喜欢 A 的人喜欢的内容 B
    sleeperqp
        6
    sleeperqp  
       2015-03-30 22:22:54 +08:00
    user多还是item多
    页面浏览数据量更偏向计算权值吧
    alexapollo
        7
    alexapollo  
    OP
       2015-03-30 22:35:16 +08:00
    @O14 tag系统已经做好了,基于tag推荐是不是等同基于内容推荐?但有个问题,假如用户1亿,url也是1亿,那么这个用户矩阵感觉很大?要算1亿*1亿的数据量?
    还有,除了cosine,相似度算法你觉得应该用啥?
    alexapollo
        8
    alexapollo  
    OP
       2015-03-30 22:35:44 +08:00
    @Tianpu 关系链数据比较难搞,用户属性你指的是哪方面?
    alexapollo
        9
    alexapollo  
    OP
       2015-03-30 22:36:10 +08:00
    @babyname 有关注,但还没有用上,有啥相似的case吗?
    alexapollo
        10
    alexapollo  
    OP
       2015-03-30 22:36:25 +08:00
    @qiayue 基于user的CF?
    alexapollo
        11
    alexapollo  
    OP
       2015-03-30 22:37:06 +08:00
    @sleeperqp 权值指的是?
    @qiayue 还有一点,用户量和url量都很大,CF能跑得动吗
    ligyxy
        12
    ligyxy  
       2015-03-30 22:58:47 +08:00
    @alexapollo 确实是高维稀疏矩阵,肯定要降维
    sleeperqp
        13
    sleeperqp  
       2015-03-30 23:09:54 +08:00
    @alexapollo 额 你的item是网站吗? 还是什么
    权值是后面考虑的问题
    比如说你一个人经常去体育类的网站 那么体育类的权值就高
    alexapollo
        14
    alexapollo  
    OP
       2015-03-30 23:13:41 +08:00
    @ligyxy 有什么好的降维方法吗?我之前咨询过几个同学,有一些learning to rank的想法,不过我对这块也不大熟
    alexapollo
        15
    alexapollo  
    OP
       2015-03-30 23:14:24 +08:00
    @sleeperqp 恩,我现在是根据PV来算的,每个PV都加对应tag的权重,item是url
    sleeperqp
        16
    sleeperqp  
       2015-03-31 08:45:59 +08:00
    @alexapollo 如果item是url的话 我觉得你不要直接用推荐系统的常用算法 一定要用的话还是基于user比较好
    我个人觉得倒是可以借用下信息检索的思想 从搜索引擎的角度来考虑这个问题
    alexapollo
        17
    alexapollo  
    OP
       2015-03-31 10:12:18 +08:00
    @sleeperqp 我打算先去掉点击量小的url,或者一些其他方法filter掉数据来降维,或者从tag的角度出发
    你是做搜索引擎相关吗?指点一下?我觉得这个想法挺靠谱的
    liuhaotian
        18
    liuhaotian  
       2015-03-31 10:23:53 +08:00 via iPhone
    Followed.
    kimmykuang
        19
    kimmykuang  
       2015-03-31 10:26:20 +08:00   ❤️ 1
    首先是不是先降噪,比如不小心点到“宝刀屠龙点击就送”这种item的可以干掉;其次可以尝试对url进行归类,其实归类的过程中就可以得到用户大致浏览过的类目,对于类目可以加tag,weight啊之类的;有了数据的清理之后,再用上相似算法,比如最简单的线性算法:A用户与B用户经常浏览的类目有70%相近,那么是不是可以给B用户推荐A用户喜欢的其余30%,基于这个算法还有很多变种,比如可以基于权重进行调整。
    alexapollo
        20
    alexapollo  
    OP
       2015-03-31 10:31:28 +08:00
    @kimmykuang 嗯,想法就是数据清洗+聚类+usercf?
    看起来靠谱。。。有实践过吗?不知道效果好不好?
    kimmykuang
        21
    kimmykuang  
       2015-03-31 11:00:30 +08:00
    @alexapollo 没有做过推荐系统,不过当初在学数据挖掘时做过降噪和聚类,我还记得当时的样本数据是国外工资与性别、年龄、教育、地域等有关的一大堆带有较多噪音数据的记录,样本数据是10W条左右,比较小纯练手项目。
    kimmykuang
        22
    kimmykuang  
       2015-03-31 11:01:55 +08:00
    @alexapollo 如果有实践的话可以反馈下效果~我觉得坛子里对于这方面感兴趣的人还是挺多的,比较大数据。
    sleeperqp
        23
    sleeperqp  
       2015-03-31 11:38:51 +08:00
    @alexapollo 我的想法是把user过去的浏览记录提取成向量 比如说经常看体育 娱乐其他就基本不看 然后抽象成搜索向量(5,4,0,0,0...)这样
    然后对url内容进行处理然后进行相似度计算这类的 推荐前K相关
    当然这样就不是纯粹的CF了
    其实说到底推荐系统也是一个求相似度的过程
    alexapollo
        24
    alexapollo  
    OP
       2015-03-31 11:47:53 +08:00
    @sleeperqp 嗯。。。。我也是这样想的,不过这样应该是content-based推荐吧,容易一直推用户以前喜欢看的
    并且问个小白问题:用户有特征向量,而文章也有特征向量(很多tag),那么这个相似度要全部都算过去吗?用户*文章?
    SmiteChow
        25
    SmiteChow  
       2015-03-31 12:30:38 +08:00
    协同过滤足够了,user-url
    bluewinger
        26
    bluewinger  
       2015-03-31 12:56:31 +08:00
    《推荐系统实践》
    alexapollo
        27
    alexapollo  
    OP
       2015-03-31 16:58:45 +08:00
    @bluewinger 看过了,不顶用,因为我们这个数据量比较大,它里面的手段没法直接用(可能做一些过滤、初始化也可以)
    alexapollo
        28
    alexapollo  
    OP
       2015-03-31 16:59:29 +08:00
    @SmiteChow 矩阵特别大= = 而且user-url的评分都是0/1啊
    sleeperqp
        29
    sleeperqp  
       2015-03-31 17:02:26 +08:00
    @alexapollo 可以先过滤一些tag不足的 比如说用户喜欢体育 娱乐 你就可以把经济类的url去掉
    就约等于 用户*过滤后的文章
    至于推荐过去用户喜欢看的 你可以把url设置一个时效 过了一定时效就不再录入推荐
    alexapollo
        30
    alexapollo  
    OP
       2015-03-31 20:39:23 +08:00   ❤️ 1
    @sleeperqp 恩,现在就是做短期时间的,我指的是内容没法外延
    过滤的想法就是用户先聚类了,比如先把体育用户拿出来,专门推体育,是可以比较好降维,或者更细粒度的聚类
    有研究过这种聚类吗?
    sleeperqp
        31
    sleeperqp  
       2015-03-31 21:55:12 +08:00
    @alexapollo 我想想了觉得用搜索引擎可能导致推荐的内容过于相似 这个还是有点问题
    如果基于user的话 先根据用户(tag向量)聚类得到用户的类别 然后url根据访问的用户 对url进行评分 比如所有访问的用户tag向量求均值之类的得到url的tag向量 对其进行聚类
    然后在给某个用户进行的推荐的时候用基于user的CF 得到的url 然后进行只推荐像与该用户类别类似的url进行过滤 推荐
    laozhao0
        32
    laozhao0  
       2015-03-31 23:19:38 +08:00
    dpi 数据?
    staticor
        33
    staticor  
       2015-03-31 23:39:23 +08:00
    只说说想法, 可能没什么帮助.

    对内容(页面)作多级Tag, 比如 搞笑- [生活, 动物], 娱乐-[明星, ...]
    根据现有数据量确定分类的层数(不应让最低级的叶子节点容量过小)



    对用户关系是否建立social network, 如果有的话也可以推荐好友(亲密度最高的K个好友)正在喜欢的内容.
    如果没有用户关系直接从内容出发.

    所谓的打标签, 只是一种构造tags空间从而计算不同内容的相似度的方式, 就像两首歌怎么就相似, 也是从歌曲基本属性和歌曲演艺风格计算.

    供参考
    http://www.cnblogs.com/qwj-sysu/p/4368874.html

    最近有空会在学习推荐的东西, 希望以后我再有时间更正粗浅的见解.
    cfan8
        34
    cfan8  
       2015-04-01 10:28:26 +08:00   ❤️ 1
    做过推荐系统,过来给点建议

    首先你要想好是做在线的算法还是离线的算法,是基于内容的推荐还是基于用户相似度的推荐。

    在线算法要达到和离线算法一样的结果,要复杂很多。个人建议是,如果基于内容,在线可以做但是如果是基于用户的话,建议做离线算法。网易云音乐的推荐就是离线跑的。

    第二,算法不要太复杂。算法复杂之后就得上hadoop,而且一般来说,简单的算法已经足够用了。通常情况R树+kNN已经能解决很多问题了。

    第三,与其纠结如何把推荐准确度提升10%,不如考虑好如何在推荐的时候把用户体验给做好,比如过滤掉已经看过的东西,增加屏蔽系统等等。
    padthai
        35
    padthai  
       2015-04-01 17:20:36 +08:00
    外包无觅吧 还能拉些流量来
    chevalier
        36
    chevalier  
       2015-07-30 15:25:29 +08:00
    @cfan8 你好,能不能推荐点入门资料和书籍?刚接触推荐系统,不知道怎么下手
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2765 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:35 · PVG 19:35 · LAX 03:35 · JFK 06:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.