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

倒排索引生成共现矩阵有什么快速算法吗?

  •  
  •   LeeReamond · 2022-03-29 01:55:57 +08:00 · 668 次点击
    这是一个创建于 757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求:

    简易的根据用户行为分析商品关联性的系统。

    实现方式:

    原始数据记录了每个用户访问过哪些项目,记录为如下形式:

    {
      A 用户:['项目 1', '项目 2', '项目 3', '项目 4', '项目 5'],
      B 用户:['项目 2', '项目 3', '项目 4', '项目 5', '项目 6'],
      C 用户:['项目 1', '项目 3', '项目 5', '项目 7'] 
    }
    

    然后生成倒排索引,再生成共现矩阵,再取皮尔逊相关数,使用时取矩阵第 m 列×[1]得与第 m 项目关联的所有其他项目的关联性。

    疑问:

    倒排索引生成共现矩阵的实现过程中产生了质疑,目前的做法是遍历所有的,第 m 项目与第 n 项目的索引队列相似成分有哪些(进行交集运算),假设共有 n 个项目,则最少总共需要进行(n^2)/2 次交集运算,感觉复杂度有点略高,本身交集运算就是成本比较大的操作,又加上 on2 复杂度,随着项目数量增加运算成本有些爆炸,比如如果有十万个项目那么每次生成共现矩阵需要算好久好久。

    想问一下有没有比硬写更快的算法,毕竟理论上像视频网站或淘宝这类需求,总项目数可能在亿级数量级甚至更多,如果构建一个如此基础的关联性分析都要这么大的运算量的话,这些推荐系统该如何自处呢?谢谢

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3099 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:09 · PVG 23:09 · LAX 08:09 · JFK 11:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.