WEBVTT 00:00:17.602 --> 00:00:19.239 大家好,我叫 Christian Rudder, 00:00:19.239 --> 00:00:21.875 我是 OKCupid 网站的创办人之一。 00:00:21.875 --> 00:00:24.502 这个网站现在已经是 全美最大的交友网站。 00:00:24.502 --> 00:00:25.749 就象这网站上大多数其他人一样, 00:00:25.749 --> 00:00:27.296 我是学数学的, 正如你所期待的那样, 00:00:27.296 --> 00:00:28.644 我们擅于分析。 00:00:28.644 --> 00:00:29.887 我们把这方法也应用在爱情上。 00:00:29.887 --> 00:00:31.717 我们把它叫做“配对算法”。 00:00:31.717 --> 00:00:33.428 基本上 OK Cupid 的配对算法 00:00:33.428 --> 00:00:36.481 帮助我们决定 两个人是否应该约会。 00:00:36.481 --> 00:00:38.765 我们的整个业务都是基于这一点。 00:00:38.765 --> 00:00:40.572 “算法”这个词说起来专业而高级, 00:00:40.572 --> 00:00:43.047 大家喜欢把它想成很大的一件事, 00:00:43.047 --> 00:00:45.148 但其实,算法只不过是一个系统的, 00:00:45.148 --> 00:00:47.817 一步一步的解决问题的方法。 00:00:47.817 --> 00:00:49.949 根本没有那么复杂。 00:00:49.949 --> 00:00:51.802 现在,我将为大家解释 00:00:51.802 --> 00:00:53.657 我们怎样得出这一个特殊的算法。 00:00:53.657 --> 00:00:55.660 你会在这看到它是怎样成形的。 00:00:55.660 --> 00:00:57.576 为什么算法如此重要? 00:00:57.576 --> 00:00:59.045 为什么我们要有这堂课? 00:00:59.045 --> 00:01:02.457 请注意我刚才提到的一个很重要的词: 00:01:02.457 --> 00:01:05.029 它们是一种"逐步"解决问题的方法, 00:01:05.029 --> 00:01:05.841 你或许也知道, 00:01:05.841 --> 00:01:08.470 电脑擅长于一步一步的运算过程。 00:01:08.470 --> 00:01:09.588 没有算法的电脑, 00:01:09.588 --> 00:01:12.933 基本上只是一个昂贵的镇纸。 00:01:12.933 --> 00:01:15.430 既然电脑已经普及到我们的日常生活, 00:01:15.430 --> 00:01:17.223 算法是无处不在。 00:01:18.515 --> 00:01:20.267 OK Cupid 配对算法背后的数学逻辑 00:01:20.267 --> 00:01:21.811 是非常简单的。 00:01:21.811 --> 00:01:22.629 就是一些加法, 00:01:22.629 --> 00:01:23.687 乘法, 00:01:23.687 --> 00:01:25.340 再来一点平方根。 00:01:25.340 --> 00:01:27.611 不过,设计这套算法的关键部分, 00:01:27.611 --> 00:01:30.235 在于要找出那些神秘的 00:01:30.235 --> 00:01:31.212 人与人之间的相互吸引力, 00:01:31.212 --> 00:01:33.810 并把它解构成电脑可以工作的部分, 00:01:33.810 --> 00:01:36.360 我们要做的第一件事 就把人和数据关联起来, 00:01:36.360 --> 00:01:38.382 这样算法才能生效。 00:01:38.382 --> 00:01:40.412 要最快的从人们那里得到数据, 00:01:40.412 --> 00:01:41.747 最好就是直接询问他们。 00:01:41.747 --> 00:01:44.166 我们决定 OK Cupid 应该向用户问问题, 00:01:44.166 --> 00:01:46.834 比如说:“你会想要小孩吗?”, 00:01:46.834 --> 00:01:48.754 “你多久刷一次牙?“, 00:01:48.754 --> 00:01:50.227 ”你喜欢看恐怖电影么?”。 00:01:50.227 --> 00:01:53.514 也有严肃些的问题, 比如:“你相信上帝么?”。 00:01:53.514 --> 00:01:55.308 目前有很多问题 00:01:55.308 --> 00:01:56.381 在进行同类型配对上都很合适, 00:01:56.381 --> 00:01:59.052 就是当双方的答案相同时。 00:01:59.052 --> 00:02:01.471 比如,两个人都喜欢看恐怖电影 00:02:01.471 --> 00:02:02.684 可能配对得更成功。 00:02:02.684 --> 00:02:03.843 而一个人喜欢, 00:02:03.843 --> 00:02:05.115 另外一个人不喜欢的情况下, 适配度就差点。 00:02:05.115 --> 00:02:06.480 但如果碰到下面的问题 : 00:02:06.480 --> 00:02:08.189 “你喜欢成为关注的中心么?” 00:02:08.189 --> 00:02:10.729 如果交往中的双方都回答是, 00:02:10.729 --> 00:02:13.068 那他们可有大问题了。 00:02:13.068 --> 00:02:14.447 我们很早就意识到了这一点, 00:02:14.447 --> 00:02:15.614 所以我们觉得需要 00:02:15.614 --> 00:02:17.581 在每个问题再收集多一些数据。 00:02:17.581 --> 00:02:20.332 我们不仅要人们回答自己的看法, 00:02:20.332 --> 00:02:23.038 也要他们回答 他们期待对方如何回答。 00:02:23.038 --> 00:02:24.207 这方法很有效, 00:02:24.207 --> 00:02:26.291 不过我们还要再多加一个维度。 00:02:26.291 --> 00:02:28.835 有些问题能表达人们的与众不同之处。 00:02:28.835 --> 00:02:31.795 比如,关于政治的问题, 00:02:31.795 --> 00:02:34.589 “ 焚烧书籍或者国旗, 哪个更糟糕 ?” 00:02:34.589 --> 00:02:37.207 这能展露人们电影口味之外的东西 00:02:37.207 --> 00:02:39.387 同时,并不是所有问题都同等重要的, 00:02:39.387 --> 00:02:41.605 所以我们最后增加了一个数据点。 00:02:41.605 --> 00:02:43.440 任何 OK Cupid 的问题, 00:02:43.440 --> 00:02:44.642 你都可以告诉我们 00:02:44.642 --> 00:02:46.223 这问题对你的重要性, 00:02:46.223 --> 00:02:49.089 它的程度从“无关”到“必要”。 00:02:49.089 --> 00:02:50.564 现在,每一个问题, 00:02:50.564 --> 00:02:52.692 我们有三个资讯提供给算法: 00:02:52.692 --> 00:02:54.068 第一,你的答案; 00:02:54.068 --> 00:02:56.362 第二,你希望别人怎么回答; 00:02:56.362 --> 00:02:57.196 也就是你潜在的对象, 00:02:57.196 --> 00:02:58.781 的答案; 00:02:58.781 --> 00:03:02.327 第三,这个问题对你有多重要? 00:03:02.327 --> 00:03:03.702 有了这些信息, 00:03:03.702 --> 00:03:07.128 OK Cupid 可以知道 两个人相处和谐程度如何。 00:03:07.128 --> 00:03:09.458 算法吃进数字,吐出答案。 00:03:09.458 --> 00:03:11.262 实际举例来说吧, 00:03:11.262 --> 00:03:13.712 看我们怎样把你和另外一个人进行配对, 00:03:13.712 --> 00:03:15.581 暂且称他为 “B”。 00:03:15.581 --> 00:03:17.479 你和 B 的适配度是基于 00:03:17.479 --> 00:03:19.424 你们双方都进行过回答的问题。 00:03:19.424 --> 00:03:21.978 姑且把这些共同问题称之为 “s”。 00:03:21.978 --> 00:03:24.932 简单举例,我们用小样本的 “s”, 00:03:24.932 --> 00:03:26.434 只需两个共同回答过的问题 00:03:26.434 --> 00:03:28.310 电脑会根据它算出适配度。 00:03:28.310 --> 00:03:30.144 这里是我们的两道简单问题: 00:03:30.144 --> 00:03:32.349 第一个是,“你有多杂乱无章?” 00:03:32.349 --> 00:03:34.669 可供选择的答案选项有 00:03:34.669 --> 00:03:35.618 非常杂乱无章, 00:03:35.618 --> 00:03:36.398 一般, 00:03:36.398 --> 00:03:38.172 和非常有条理。 00:03:38.172 --> 00:03:39.755 我们假设你回答的是“非常有条理”, 00:03:39.755 --> 00:03:42.581 你期待别人的回答是“非常有条理”, 00:03:42.581 --> 00:03:45.202 并且对你来说,这个问题非常重要。 00:03:45.202 --> 00:03:46.498 基本上你就是个井井有条的怪胎。 00:03:46.498 --> 00:03:47.212 你是整洁有条理的人, 00:03:47.212 --> 00:03:48.296 你也希望对方同样如此, 00:03:48.296 --> 00:03:49.248 就这样。 00:03:49.248 --> 00:03:51.015 我们假设 B 有些不同。 00:03:51.015 --> 00:03:53.539 他的回答是自己非常有条理, 00:03:53.539 --> 00:03:55.171 但是他也接受“一般”, 00:03:55.171 --> 00:03:56.740 如果别人是这样回答的话, 00:03:56.740 --> 00:03:58.748 这个问题于他而言不太重要。 00:03:58.748 --> 00:04:00.308 我们看第二个问题, 00:04:00.308 --> 00:04:01.896 就是我们最开始举例的: 00:04:01.896 --> 00:04:03.653 “你喜欢成为关注的中心么?” 00:04:03.653 --> 00:04:05.231 答题项只有“是”或者“否”。 00:04:05.231 --> 00:04:06.407 现在你的回答是“否”, 00:04:06.407 --> 00:04:08.235 你希望别人怎样回答这栏答的是“否” 00:04:08.235 --> 00:04:10.862 这个问题对于你不太重要。 00:04:10.862 --> 00:04:12.419 而B呢,他自己的回答是“是”, 00:04:12.419 --> 00:04:14.087 他希望别人回答“否”, 00:04:14.087 --> 00:04:16.332 因为他希望所有焦点都在他身上, 00:04:16.332 --> 00:04:19.335 而这个问题对他还算重要。 00:04:19.335 --> 00:04:21.716 现在,我们让电脑来处理一切。 00:04:21.716 --> 00:04:22.855 我们的第一步是, 00:04:22.855 --> 00:04:24.376 既然我们要用电脑来处理它, 00:04:24.376 --> 00:04:26.162 我们就需要给一些数值 00:04:26.162 --> 00:04:29.041 来定义比如“还算重要”和“非常重要”, 00:04:29.041 --> 00:04:31.335 因为电脑需要把所有资料都转化成数字。 00:04:31.335 --> 00:04:33.523 在 OK Cupid 上我们按如下级别: 00:04:33.523 --> 00:04:35.858 “无关”是 0, 00:04:35.858 --> 00:04:38.307 “不太重要”的值是1, 00:04:38.307 --> 00:04:40.302 “还算重要”的值是 10, 00:04:40.302 --> 00:04:42.426 “非常重要”的值是 50, 00:04:42.426 --> 00:04:46.353 “绝对必要”的值是 250. 00:04:46.353 --> 00:04:48.852 接下来,算法要做两个简单的计算。 00:04:48.852 --> 00:04:51.941 第一个是你对B的回答给多少分, 00:04:51.941 --> 00:04:55.568 另外一个是,你给对方答题的满分是多少? 00:04:55.568 --> 00:04:58.138 你可以指定 B 的答案 00:04:58.138 --> 00:04:59.947 在第一个有关条理性的问题上, 00:04:59.947 --> 00:05:01.448 对你是非常重要。 00:05:01.448 --> 00:05:04.041 它值50分,B 答对了。 00:05:04.041 --> 00:05:05.947 第二个问题只有1分, 00:05:05.947 --> 00:05:07.558 因为你说这问题对你不太重要, 00:05:07.558 --> 00:05:09.036 B 答错了。 00:05:09.036 --> 00:05:12.392 所以B的回答在51分满分里拿到了50分。 00:05:12.392 --> 00:05:14.023 适配满意度是 98%。 00:05:14.023 --> 00:05:15.220 非常好。 00:05:15.220 --> 00:05:16.832 算法的第二个问题是看 00:05:16.832 --> 00:05:18.918 B 对你的满意程度。 00:05:18.918 --> 00:05:20.768 B给对于你有关条理性的回答 00:05:20.768 --> 00:05:22.353 给1分, 00:05:22.353 --> 00:05:24.745 对于第二个问题的答案给10分。 00:05:24.745 --> 00:05:27.156 满分11分,就是1+10. 00:05:27.156 --> 00:05:28.324 你得到了10分, 00:05:28.324 --> 00:05:30.617 在第二个问题上,你俩彼此都满意。 00:05:30.617 --> 00:05:32.611 你的回答在B的满意度分数是10/11, 00:05:32.611 --> 00:05:35.240 百分比是91%。 00:05:35.240 --> 00:05:36.117 还不错。 00:05:36.117 --> 00:05:38.286 最后一步是把两个适配度百分比放在一起, 00:05:38.286 --> 00:05:40.454 为你们两打一个分数。 00:05:40.454 --> 00:05:42.747 为得到这点, 算法把你们两人的得分相乘, 00:05:42.747 --> 00:05:44.500 然后开n次方根, 00:05:44.500 --> 00:05:46.792 n 就是问题的数目。 00:05:46.792 --> 00:05:49.401 因为“s”-- 也就是问题的数目, 00:05:49.401 --> 00:05:51.507 在这个例子里,只是“2”, 00:05:51.507 --> 00:05:54.093 我们得到的适配度百分比等于 00:05:54.093 --> 00:05:58.154 98% 乘以 91% 再开平方根。 00:05:58.154 --> 00:06:00.304 结果等于94%。 00:06:00.304 --> 00:06:03.194 94%就是你和 B 之间的适配度百分比。 00:06:03.194 --> 00:06:04.561 这是通过数学方法来表达-- 00:06:04.561 --> 00:06:06.405 你们彼此之间相处的愉快程度是怎样。 00:06:06.405 --> 00:06:07.749 基于我们所知道的信息。 00:06:07.749 --> 00:06:10.131 为什么算法要相乘,而不是除? 00:06:10.131 --> 00:06:12.284 比如,把两个分数求平均值以后 00:06:12.284 --> 00:06:14.530 再开平方根? 00:06:14.530 --> 00:06:16.479 总的来说,这个公式叫几何平均数, 00:06:16.479 --> 00:06:17.881 它很适合处理 00:06:17.881 --> 00:06:19.076 差异很大的数据, 00:06:19.076 --> 00:06:20.861 以及代表不同属性的数据。 00:06:20.861 --> 00:06:23.164 换句话说,它能完美的 计算出浪漫爱情适配度。 00:06:23.164 --> 00:06:24.248 你有大范围的, 00:06:24.248 --> 00:06:26.206 数不清的数据值, 00:06:26.206 --> 00:06:27.156 就像刚说过的,有关电影的, 00:06:27.156 --> 00:06:28.006 有关政治的, 00:06:28.006 --> 00:06:29.201 有关宗教的, 00:06:29.201 --> 00:06:30.395 有关所有的一切。 00:06:30.395 --> 00:06:32.256 凭直觉讲,以下情况很有道理。 00:06:32.256 --> 00:06:34.918 两个人彼此的满意度是50%, 00:06:34.918 --> 00:06:36.052 会好过 00:06:36.052 --> 00:06:39.180 那些两个人彼此满意度是0或者100的。 00:06:39.180 --> 00:06:40.847 因为爱慕应该是互相的。 00:06:40.847 --> 00:06:43.147 在增加了对误差幅度的小修改后 -- 00:06:43.147 --> 00:06:45.770 这种情况在问题量很小的时候会出现, 00:06:45.770 --> 00:06:47.234 就像我们刚举的运算实例一样-- 00:06:47.234 --> 00:06:48.811 这套算法就可以运作了。 00:06:48.811 --> 00:06:50.191 任何时候当 OK Cupid 将两个人配对时, 00:06:50.191 --> 00:06:52.234 它按照我们刚介绍的步骤来運作, 00:06:52.234 --> 00:06:54.484 首先它收集你的答题的数据, 00:06:54.484 --> 00:06:56.619 然后它比较你的选项和 你期待的对方选项, 00:06:56.619 --> 00:06:59.740 以简单的,数学的方法来进行。 00:06:59.740 --> 00:07:02.453 这种能将现实世界的现象, 00:07:02.453 --> 00:07:05.172 转化为电脑芯片能读取的数据的能力, 00:07:05.172 --> 00:07:06.015 我认为, 00:07:06.015 --> 00:07:08.569 是现代最重要的一种技术。 00:07:08.569 --> 00:07:10.921 就像你用话语来给一个人讲故事, 00:07:10.921 --> 00:07:13.672 你是用算法来跟电脑讲故事。 00:07:13.672 --> 00:07:14.919 如果你学会了这种语言, 00:07:14.919 --> 00:07:16.377 你就可以去讲故事了。 00:07:16.377 --> 00:07:20.256 我希望我刚才的介绍能帮助你做到这点。