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

2022-12-15 10:47:39 +08:00
 unii23i

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

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

应该怎么计算匹配值呢?

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

大家有什么计算的方法嘛

1229 次点击
所在节点    问与答
6 条回复
opengps
2022-12-15 11:00:55 +08:00
如果都很慢的话,只能是延时出结果,后台服务单独计算刷新,每次实时用的都是之前的结果
snowhere
2022-12-15 12:04:30 +08:00
1. 1000 个人每个人和另外 1000 人比对 n 个标签值,大概需要 n*1000000 次,这个你看起来数量很多,但其实没你想的效率那么低需要 1 天。你可以造一些数据试一下处理时间
2. 简单来说可以先对标签排序,01 标识有无,每个人生成一个二进制序列,然后位运算就可以快速匹配。
3. 复杂来说大软件的匹配度会用更高深的数学知识去做,比如矩阵什么的,我也不太懂
unii23i
2022-12-15 16:59:27 +08:00
@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
2022-12-15 17:05:36 +08:00
这个不是匹配度,是相似度。
去搜一下推荐算法,相似度算法,你就知道怎么搞了
shm7
2022-12-15 21:01:53 +08:00
简单的向量内积?不行来个加权?
LaurelHarmon
2022-12-16 00:03:10 +08:00
先输入特征,然后每个用户都变成高维向量;
想快速的话,将所有用户的向量按行排列,算个矩阵内积,立马出来所有用户两两之间的相似度。
想准的话,就有很多方法了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/902648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX