家人们,怎么算匹配度呢?? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
unii23i
V2EX    问与答

家人们,怎么算匹配度呢??

  •  
  •   unii23i 2022 年 12 月 15 日 1809 次点击
    这是一个创建于 1194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如 1000 人都有使用某种标签,1000 人重复 1 项记为 80%,重复 2 项记为 90%以此类推等等....比如 A 和 B 都是性别男,他们匹配度就是 80%

    但是 1000 人的每一个人都需要和另外 1000 进行比对,这个过程 1 天都计算不完,更别说人更多的时候

    应该怎么计算匹配值呢?

    soul 有匹配度先不管是不是大数据怎么算的,但是同行小软件也有匹配度,说明这是可以实现的一个功能

    大家有什么计算的方法嘛

    6 条回复    2022-12-16 00:03:10 +08:00
    opengps
        1
    opengps  
       2022 年 12 月 15 日
    如果都很慢的话,只能是延时出结果,后台服务单独计算刷新,每次实时用的都是之前的结果
    snowhere
        2
    snowhere  
       2022 年 12 月 15 日
    1. 1000 个人每个人和另外 1000 人比对 n 个标签值,大概需要 n*1000000 次,这个你看起来数量很多,但其实没你想的效率那么低需要 1 天。你可以造一些数据试一下处理时间
    2. 简单来说可以先对标签排序,01 标识有无,每个人生成一个二进制序列,然后位运算就可以快速匹配。
    3. 复杂来说大软件的匹配度会用更高深的数学知识去做,比如矩阵什么的,我也不太懂
    unii23i
        3
    unii23i  
    OP
       2022 年 12 月 15 日
    @snowhere

    昨天有个朋友问了一个挺有意思的问题,“珍爱网的相似度匹配分析是怎么做的?”。不是内部员工,只能简单猜测下他们的实现方法,珍爱网的匹配分析就是比较两个人的“我的心灵视界”中各个维度的相似度,也就是图中两个曲线的相似度,包括但不仅限于性格、追求、独立程度等维度。一个直观的想法是首先把每个人的“我的心灵视界”数据抽象成一个高维的向量,向量的每一维就对应了数据中的一项。为了简化问题,我们假设只有两个维度,性格和追求。每一维最正向的值设为 1 ,最反向的值设为 0 。现在来了一个小赵,他性格是极端外向,追求是极端知足,那么代表他的向量就是[1,0]。又来了一个小钱,她性格是极端内向,追求是极端追求,那么她的向量就是[0,1]。之后我们只需要比较这两个向量的相似度就好了,一个先想到的做法是利用余弦定理来计算,回忆一下,对应向量 a 和 b ,cosθ=a*b/|a||b|,*是向量点击运算,cos 值在[0,π]内是一个 0 到 1 之间的数,正好可以换算成百分数作为相似度。以上面的虚拟人物为例,可以得到 cosθ=0 ,也就是他们相似度为 0%。如果又来了一个小孙,她的向量是[1,0],那么她和小赵的 cosθ=1 ,也就是 100%,符合认知。那么这种做法有问题吗,其实是有的。现在又来了一个小李,她的向量是[0.5,0],表示她中等外向,然后极端知足,这时候利用余弦定理也会得到 100%的相似度,这其实是不太符合直觉的。这是因为余弦定理只是比较两个向量的夹角,并没有考虑两个向量的量级(magnitude),而在珍爱网匹配分析中,其实量级是有比较大的影响的。因此一个更好更简单的做法是直接比较两个向量的 L1 距离,那么对于[0.5,0]和[1,0],L1 距离就是|0.5-1|+|0-0|=0.5 ,然后再除以最大可能的 L1 距离 2 ,可以得到相似度 25%。这样得到的值比较低 ,珍爱网里面肯定会加一个正向偏移量,让值不会太难看。那么什么时候适合用余弦相似度呢,在对向量的量级不是特别敏感的时候可以使用,比如计算两个文档的相似度,比如文档 A 里面“单身狗”,“孤独”,“悲惨”分别出现了 666 ,233 ,88 次,文档 B 中这三词分别出现了 333 ,116 ,44 次,我们其实可以知道这两篇文章都是讲述感情的,只是篇幅长短不同而已,所以相似度应该是 90%以上的,如果用 L1 、L2 距离就会得到一个不恰当的相似度值。


    有一种算法叫 simhash ,基本原理就是傅里叶变换处理声波的形状,向上用 1 表示,向下用 0 表示,然后所有的形状就可以用 64 位的 long 表示,再根据海明距离,算出相似度,这种算法速度很快,几百万的歌曲才用几十毫秒。





    目标数=1000 从集合中直接找和目标数相等的数;有的话直接返回;集合排序,截取小于目标数的部分出来=新集合

    新集合中 找到目标数 /2 的数的插入位置,取此位置前后的两个数



    我找到了这些,和你说的好像差不多,看起来网上没有明确的算法或者公式
    bjzhush
        4
    bjzhush  
       2022 年 12 月 15 日
    这个不是匹配度,是相似度。
    去搜一下推荐算法,相似度算法,你就知道怎么搞了
    shm7
        5
    shm7  
       2022 年 12 月 15 日
    简单的向量内积?不行来个加权?
    LaurelHarmon
        6
    LaurelHarmon  
       2022 年 12 月 16 日 via Android
    先输入特征,然后每个用户都变成高维向量;
    想快速的话,将所有用户的向量按行排列,算个矩阵内积,立马出来所有用户两两之间的相似度。
    想准的话,就有很多方法了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5435 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 01:13 PVG 09:13 LAX 18:13 JFK 21:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86