1 00:00:17,602 --> 00:00:19,239 大家好,我叫 Christian Rudder, 2 00:00:19,239 --> 00:00:21,875 我是 OKCupid 网站的创办人之一。 3 00:00:21,875 --> 00:00:24,502 这个网站现在已经是 全美最大的交友网站。 4 00:00:24,502 --> 00:00:25,749 就象这网站上大多数其他人一样, 5 00:00:25,749 --> 00:00:27,296 我是学数学的, 正如你所期待的那样, 6 00:00:27,296 --> 00:00:28,644 我们擅于分析。 7 00:00:28,644 --> 00:00:29,887 我们把这方法也应用在爱情上。 8 00:00:29,887 --> 00:00:31,717 我们把它叫做“配对算法”。 9 00:00:31,717 --> 00:00:33,428 基本上 OK Cupid 的配对算法 10 00:00:33,428 --> 00:00:36,481 帮助我们决定 两个人是否应该约会。 11 00:00:36,481 --> 00:00:38,765 我们的整个业务都是基于这一点。 12 00:00:38,765 --> 00:00:40,572 “算法”这个词说起来专业而高级, 13 00:00:40,572 --> 00:00:43,047 大家喜欢把它想成很大的一件事, 14 00:00:43,047 --> 00:00:45,148 但其实,算法只不过是一个系统的, 15 00:00:45,148 --> 00:00:47,817 一步一步的解决问题的方法。 16 00:00:47,817 --> 00:00:49,949 根本没有那么复杂。 17 00:00:49,949 --> 00:00:51,802 现在,我将为大家解释 18 00:00:51,802 --> 00:00:53,657 我们怎样得出这一个特殊的算法。 19 00:00:53,657 --> 00:00:55,660 你会在这看到它是怎样成形的。 20 00:00:55,660 --> 00:00:57,576 为什么算法如此重要? 21 00:00:57,576 --> 00:00:59,045 为什么我们要有这堂课? 22 00:00:59,045 --> 00:01:02,457 请注意我刚才提到的一个很重要的词: 23 00:01:02,457 --> 00:01:05,029 它们是一种"逐步"解决问题的方法, 24 00:01:05,029 --> 00:01:05,841 你或许也知道, 25 00:01:05,841 --> 00:01:08,470 电脑擅长于一步一步的运算过程。 26 00:01:08,470 --> 00:01:09,588 没有算法的电脑, 27 00:01:09,588 --> 00:01:12,933 基本上只是一个昂贵的镇纸。 28 00:01:12,933 --> 00:01:15,430 既然电脑已经普及到我们的日常生活, 29 00:01:15,430 --> 00:01:17,223 算法是无处不在。 30 00:01:18,515 --> 00:01:20,267 OK Cupid 配对算法背后的数学逻辑 31 00:01:20,267 --> 00:01:21,811 是非常简单的。 32 00:01:21,811 --> 00:01:22,629 就是一些加法, 33 00:01:22,629 --> 00:01:23,687 乘法, 34 00:01:23,687 --> 00:01:25,340 再来一点平方根。 35 00:01:25,340 --> 00:01:27,611 不过,设计这套算法的关键部分, 36 00:01:27,611 --> 00:01:30,235 在于要找出那些神秘的 37 00:01:30,235 --> 00:01:31,212 人与人之间的相互吸引力, 38 00:01:31,212 --> 00:01:33,810 并把它解构成电脑可以工作的部分, 39 00:01:33,810 --> 00:01:36,360 我们要做的第一件事 就把人和数据关联起来, 40 00:01:36,360 --> 00:01:38,382 这样算法才能生效。 41 00:01:38,382 --> 00:01:40,412 要最快的从人们那里得到数据, 42 00:01:40,412 --> 00:01:41,747 最好就是直接询问他们。 43 00:01:41,747 --> 00:01:44,166 我们决定 OK Cupid 应该向用户问问题, 44 00:01:44,166 --> 00:01:46,834 比如说:“你会想要小孩吗?”, 45 00:01:46,834 --> 00:01:48,754 “你多久刷一次牙?“, 46 00:01:48,754 --> 00:01:50,227 ”你喜欢看恐怖电影么?”。 47 00:01:50,227 --> 00:01:53,514 也有严肃些的问题, 比如:“你相信上帝么?”。 48 00:01:53,514 --> 00:01:55,308 目前有很多问题 49 00:01:55,308 --> 00:01:56,381 在进行同类型配对上都很合适, 50 00:01:56,381 --> 00:01:59,052 就是当双方的答案相同时。 51 00:01:59,052 --> 00:02:01,471 比如,两个人都喜欢看恐怖电影 52 00:02:01,471 --> 00:02:02,684 可能配对得更成功。 53 00:02:02,684 --> 00:02:03,843 而一个人喜欢, 54 00:02:03,843 --> 00:02:05,115 另外一个人不喜欢的情况下, 适配度就差点。 55 00:02:05,115 --> 00:02:06,480 但如果碰到下面的问题 : 56 00:02:06,480 --> 00:02:08,189 “你喜欢成为关注的中心么?” 57 00:02:08,189 --> 00:02:10,729 如果交往中的双方都回答是, 58 00:02:10,729 --> 00:02:13,068 那他们可有大问题了。 59 00:02:13,068 --> 00:02:14,447 我们很早就意识到了这一点, 60 00:02:14,447 --> 00:02:15,614 所以我们觉得需要 61 00:02:15,614 --> 00:02:17,581 在每个问题再收集多一些数据。 62 00:02:17,581 --> 00:02:20,332 我们不仅要人们回答自己的看法, 63 00:02:20,332 --> 00:02:23,038 也要他们回答 他们期待对方如何回答。 64 00:02:23,038 --> 00:02:24,207 这方法很有效, 65 00:02:24,207 --> 00:02:26,291 不过我们还要再多加一个维度。 66 00:02:26,291 --> 00:02:28,835 有些问题能表达人们的与众不同之处。 67 00:02:28,835 --> 00:02:31,795 比如,关于政治的问题, 68 00:02:31,795 --> 00:02:34,589 “ 焚烧书籍或者国旗, 哪个更糟糕 ?” 69 00:02:34,589 --> 00:02:37,207 这能展露人们电影口味之外的东西 70 00:02:37,207 --> 00:02:39,387 同时,并不是所有问题都同等重要的, 71 00:02:39,387 --> 00:02:41,605 所以我们最后增加了一个数据点。 72 00:02:41,605 --> 00:02:43,440 任何 OK Cupid 的问题, 73 00:02:43,440 --> 00:02:44,642 你都可以告诉我们 74 00:02:44,642 --> 00:02:46,223 这问题对你的重要性, 75 00:02:46,223 --> 00:02:49,089 它的程度从“无关”到“必要”。 76 00:02:49,089 --> 00:02:50,564 现在,每一个问题, 77 00:02:50,564 --> 00:02:52,692 我们有三个资讯提供给算法: 78 00:02:52,692 --> 00:02:54,068 第一,你的答案; 79 00:02:54,068 --> 00:02:56,362 第二,你希望别人怎么回答; 80 00:02:56,362 --> 00:02:57,196 也就是你潜在的对象, 81 00:02:57,196 --> 00:02:58,781 的答案; 82 00:02:58,781 --> 00:03:02,327 第三,这个问题对你有多重要? 83 00:03:02,327 --> 00:03:03,702 有了这些信息, 84 00:03:03,702 --> 00:03:07,128 OK Cupid 可以知道 两个人相处和谐程度如何。 85 00:03:07,128 --> 00:03:09,458 算法吃进数字,吐出答案。 86 00:03:09,458 --> 00:03:11,262 实际举例来说吧, 87 00:03:11,262 --> 00:03:13,712 看我们怎样把你和另外一个人进行配对, 88 00:03:13,712 --> 00:03:15,581 暂且称他为 “B”。 89 00:03:15,581 --> 00:03:17,479 你和 B 的适配度是基于 90 00:03:17,479 --> 00:03:19,424 你们双方都进行过回答的问题。 91 00:03:19,424 --> 00:03:21,978 姑且把这些共同问题称之为 “s”。 92 00:03:21,978 --> 00:03:24,932 简单举例,我们用小样本的 “s”, 93 00:03:24,932 --> 00:03:26,434 只需两个共同回答过的问题 94 00:03:26,434 --> 00:03:28,310 电脑会根据它算出适配度。 95 00:03:28,310 --> 00:03:30,144 这里是我们的两道简单问题: 96 00:03:30,144 --> 00:03:32,349 第一个是,“你有多杂乱无章?” 97 00:03:32,349 --> 00:03:34,669 可供选择的答案选项有 98 00:03:34,669 --> 00:03:35,618 非常杂乱无章, 99 00:03:35,618 --> 00:03:36,398 一般, 100 00:03:36,398 --> 00:03:38,172 和非常有条理。 101 00:03:38,172 --> 00:03:39,755 我们假设你回答的是“非常有条理”, 102 00:03:39,755 --> 00:03:42,581 你期待别人的回答是“非常有条理”, 103 00:03:42,581 --> 00:03:45,202 并且对你来说,这个问题非常重要。 104 00:03:45,202 --> 00:03:46,498 基本上你就是个井井有条的怪胎。 105 00:03:46,498 --> 00:03:47,212 你是整洁有条理的人, 106 00:03:47,212 --> 00:03:48,296 你也希望对方同样如此, 107 00:03:48,296 --> 00:03:49,248 就这样。 108 00:03:49,248 --> 00:03:51,015 我们假设 B 有些不同。 109 00:03:51,015 --> 00:03:53,539 他的回答是自己非常有条理, 110 00:03:53,539 --> 00:03:55,171 但是他也接受“一般”, 111 00:03:55,171 --> 00:03:56,740 如果别人是这样回答的话, 112 00:03:56,740 --> 00:03:58,748 这个问题于他而言不太重要。 113 00:03:58,748 --> 00:04:00,308 我们看第二个问题, 114 00:04:00,308 --> 00:04:01,896 就是我们最开始举例的: 115 00:04:01,896 --> 00:04:03,653 “你喜欢成为关注的中心么?” 116 00:04:03,653 --> 00:04:05,231 答题项只有“是”或者“否”。 117 00:04:05,231 --> 00:04:06,407 现在你的回答是“否”, 118 00:04:06,407 --> 00:04:08,235 你希望别人怎样回答这栏答的是“否” 119 00:04:08,235 --> 00:04:10,862 这个问题对于你不太重要。 120 00:04:10,862 --> 00:04:12,419 而B呢,他自己的回答是“是”, 121 00:04:12,419 --> 00:04:14,087 他希望别人回答“否”, 122 00:04:14,087 --> 00:04:16,332 因为他希望所有焦点都在他身上, 123 00:04:16,332 --> 00:04:19,335 而这个问题对他还算重要。 124 00:04:19,335 --> 00:04:21,716 现在,我们让电脑来处理一切。 125 00:04:21,716 --> 00:04:22,855 我们的第一步是, 126 00:04:22,855 --> 00:04:24,376 既然我们要用电脑来处理它, 127 00:04:24,376 --> 00:04:26,162 我们就需要给一些数值 128 00:04:26,162 --> 00:04:29,041 来定义比如“还算重要”和“非常重要”, 129 00:04:29,041 --> 00:04:31,335 因为电脑需要把所有资料都转化成数字。 130 00:04:31,335 --> 00:04:33,523 在 OK Cupid 上我们按如下级别: 131 00:04:33,523 --> 00:04:35,858 “无关”是 0, 132 00:04:35,858 --> 00:04:38,307 “不太重要”的值是1, 133 00:04:38,307 --> 00:04:40,302 “还算重要”的值是 10, 134 00:04:40,302 --> 00:04:42,426 “非常重要”的值是 50, 135 00:04:42,426 --> 00:04:46,353 “绝对必要”的值是 250. 136 00:04:46,353 --> 00:04:48,852 接下来,算法要做两个简单的计算。 137 00:04:48,852 --> 00:04:51,941 第一个是你对B的回答给多少分, 138 00:04:51,941 --> 00:04:55,568 另外一个是,你给对方答题的满分是多少? 139 00:04:55,568 --> 00:04:58,138 你可以指定 B 的答案 140 00:04:58,138 --> 00:04:59,947 在第一个有关条理性的问题上, 141 00:04:59,947 --> 00:05:01,448 对你是非常重要。 142 00:05:01,448 --> 00:05:04,041 它值50分,B 答对了。 143 00:05:04,041 --> 00:05:05,947 第二个问题只有1分, 144 00:05:05,947 --> 00:05:07,558 因为你说这问题对你不太重要, 145 00:05:07,558 --> 00:05:09,036 B 答错了。 146 00:05:09,036 --> 00:05:12,392 所以B的回答在51分满分里拿到了50分。 147 00:05:12,392 --> 00:05:14,023 适配满意度是 98%。 148 00:05:14,023 --> 00:05:15,220 非常好。 149 00:05:15,220 --> 00:05:16,832 算法的第二个问题是看 150 00:05:16,832 --> 00:05:18,918 B 对你的满意程度。 151 00:05:18,918 --> 00:05:20,768 B给对于你有关条理性的回答 152 00:05:20,768 --> 00:05:22,353 给1分, 153 00:05:22,353 --> 00:05:24,745 对于第二个问题的答案给10分。 154 00:05:24,745 --> 00:05:27,156 满分11分,就是1+10. 155 00:05:27,156 --> 00:05:28,324 你得到了10分, 156 00:05:28,324 --> 00:05:30,617 在第二个问题上,你俩彼此都满意。 157 00:05:30,617 --> 00:05:32,611 你的回答在B的满意度分数是10/11, 158 00:05:32,611 --> 00:05:35,240 百分比是91%。 159 00:05:35,240 --> 00:05:36,117 还不错。 160 00:05:36,117 --> 00:05:38,286 最后一步是把两个适配度百分比放在一起, 161 00:05:38,286 --> 00:05:40,454 为你们两打一个分数。 162 00:05:40,454 --> 00:05:42,747 为得到这点, 算法把你们两人的得分相乘, 163 00:05:42,747 --> 00:05:44,500 然后开n次方根, 164 00:05:44,500 --> 00:05:46,792 n 就是问题的数目。 165 00:05:46,792 --> 00:05:49,401 因为“s”-- 也就是问题的数目, 166 00:05:49,401 --> 00:05:51,507 在这个例子里,只是“2”, 167 00:05:51,507 --> 00:05:54,093 我们得到的适配度百分比等于 168 00:05:54,093 --> 00:05:58,154 98% 乘以 91% 再开平方根。 169 00:05:58,154 --> 00:06:00,304 结果等于94%。 170 00:06:00,304 --> 00:06:03,194 94%就是你和 B 之间的适配度百分比。 171 00:06:03,194 --> 00:06:04,561 这是通过数学方法来表达-- 172 00:06:04,561 --> 00:06:06,405 你们彼此之间相处的愉快程度是怎样。 173 00:06:06,405 --> 00:06:07,749 基于我们所知道的信息。 174 00:06:07,749 --> 00:06:10,131 为什么算法要相乘,而不是除? 175 00:06:10,131 --> 00:06:12,284 比如,把两个分数求平均值以后 176 00:06:12,284 --> 00:06:14,530 再开平方根? 177 00:06:14,530 --> 00:06:16,479 总的来说,这个公式叫几何平均数, 178 00:06:16,479 --> 00:06:17,881 它很适合处理 179 00:06:17,881 --> 00:06:19,076 差异很大的数据, 180 00:06:19,076 --> 00:06:20,861 以及代表不同属性的数据。 181 00:06:20,861 --> 00:06:23,164 换句话说,它能完美的 计算出浪漫爱情适配度。 182 00:06:23,164 --> 00:06:24,248 你有大范围的, 183 00:06:24,248 --> 00:06:26,206 数不清的数据值, 184 00:06:26,206 --> 00:06:27,156 就像刚说过的,有关电影的, 185 00:06:27,156 --> 00:06:28,006 有关政治的, 186 00:06:28,006 --> 00:06:29,201 有关宗教的, 187 00:06:29,201 --> 00:06:30,395 有关所有的一切。 188 00:06:30,395 --> 00:06:32,256 凭直觉讲,以下情况很有道理。 189 00:06:32,256 --> 00:06:34,918 两个人彼此的满意度是50%, 190 00:06:34,918 --> 00:06:36,052 会好过 191 00:06:36,052 --> 00:06:39,180 那些两个人彼此满意度是0或者100的。 192 00:06:39,180 --> 00:06:40,847 因为爱慕应该是互相的。 193 00:06:40,847 --> 00:06:43,147 在增加了对误差幅度的小修改后 -- 194 00:06:43,147 --> 00:06:45,770 这种情况在问题量很小的时候会出现, 195 00:06:45,770 --> 00:06:47,234 就像我们刚举的运算实例一样-- 196 00:06:47,234 --> 00:06:48,811 这套算法就可以运作了。 197 00:06:48,811 --> 00:06:50,191 任何时候当 OK Cupid 将两个人配对时, 198 00:06:50,191 --> 00:06:52,234 它按照我们刚介绍的步骤来運作, 199 00:06:52,234 --> 00:06:54,484 首先它收集你的答题的数据, 200 00:06:54,484 --> 00:06:56,619 然后它比较你的选项和 你期待的对方选项, 201 00:06:56,619 --> 00:06:59,740 以简单的,数学的方法来进行。 202 00:06:59,740 --> 00:07:02,453 这种能将现实世界的现象, 203 00:07:02,453 --> 00:07:05,172 转化为电脑芯片能读取的数据的能力, 204 00:07:05,172 --> 00:07:06,015 我认为, 205 00:07:06,015 --> 00:07:08,569 是现代最重要的一种技术。 206 00:07:08,569 --> 00:07:10,921 就像你用话语来给一个人讲故事, 207 00:07:10,921 --> 00:07:13,672 你是用算法来跟电脑讲故事。 208 00:07:13,672 --> 00:07:14,919 如果你学会了这种语言, 209 00:07:14,919 --> 00:07:16,377 你就可以去讲故事了。 210 00:07:16,377 --> 00:07:20,256 我希望我刚才的介绍能帮助你做到这点。