专业书籍精读 · ML System Design Interview · 第 11 章

你可能认识的人:难的不是猜得准,是先把十亿人砍到一万个

Machine Learning System Design Interview · Ch 11 · Ali Aminian & Alex Xu · 2023

EN →

这一章讲什么?

你注册一个社交软件,资料只填了个名字。第三天它推给你一串「你可能认识的人」,里面居然真有你大学室友、上一份工作的同事。这一章讲的就是:它凭什么猜得出来。

先说个怪事

你会以为它是在拿你的资料去比对——同一所学校、同一家公司、同一个城市。这些当然有用,但都不是主力。

真正的主力只有一条线索:你们有几个共同的朋友。光靠这一条,就能把大部分该推的人推出来。它甚至不需要知道你是谁、在哪、做什么。

旧世界为什么难

难的地方不在「猜」,在「要猜多少次」。

平台上有十亿人。要判断「你和谁可能认识」,字面意思是把十亿人两两配一遍——那是个天文数字,全世界的机器一起算也算不完。所以第一件事根本不是造一个聪明的模型,而是:怎么在不看绝大多数人的情况下,就知道他们不值得看。

核心机制直觉

第一步,只看「朋友的朋友」。新认识的人,绝大多数是通过已有的人认识的。所以只把你朋友的朋友当候选——一下就从十亿缩到几万,少了十万倍。

第二步,共同朋友要打折。朴素做法是数共同朋友的个数,谁多推谁。但这里有个坑:如果那个中间人是个手握五千好友的交际花,那他跟谁都「共同」,等于什么都没说明。反过来,一个只有三十个朋友的人同时认识你俩,说明你俩八成真在同一个圈子里。所以:中间人自己朋友越多,他那一票越不值钱。

第三步,给每个人在「社交地图」上安一个位置。让每个人先看看自己周围都是些什么人,再看看这些人周围又是些什么人,据此给自己定个坐标。坐标挨得近的两个人,就该被互相推荐——这一步能捕捉到「你俩没有共同好友,但你俩的朋友圈整体长得很像」这种更隐蔽的信号。

该怎么看它

这套东西厉害在:它只看「谁跟谁连着」,就能还原出现实里的人际圈子。

代价也正在这里:它知道你们有关系,却不知道你为什么不想被这个人找到——所以它会把前同事、前任、或者你根本不想被认出来的场合里遇到的人,一并推到你眼前。

一句话记住

好友推荐的胜负不在模型,在先用「朋友的朋友」把候选人从十亿砍到一万;然后数共同好友,并且按中间人自己的朋友数打折——交际花的一票,远不如小圈子里那个人的一票值钱。

想进到具体机制、记号和示意图? → 切到精读版