- 趣味數(shù)學(xué)和Python編程
- 趙乘驥編著
- 3714字
- 2022-07-29 14:34:55
1 Python和一個(gè)數(shù)學(xué)天才黑了約會(huì)網(wǎng)站的故事
Python從一誕生就吸引了人們的注意,多年來(lái),它的地位一直在穩(wěn)步上升。2014年,一名黑客改行的新聞工作者凱文(Kevin Lee Poulsen)報(bào)道了一名數(shù)學(xué)家兼黑客克里斯·麥金萊(Chris McKinlay)用黑科技收獲愛(ài)情的真實(shí)故事,并火遍了互聯(lián)網(wǎng),讓人們進(jìn)一步認(rèn)識(shí)到原來(lái)Python可以這么強(qiáng)大。故事源于2012年6月初的一天凌晨,35歲的加州大學(xué)洛杉磯分校(UCLA)數(shù)學(xué)系博士生克里斯一邊用計(jì)算機(jī)做博士論文研究,一邊打開(kāi)一個(gè)新窗口查看他在約會(huì)網(wǎng)站OKCupid的收件箱。自從9個(gè)月前和女友分手后,他一直試圖通過(guò)OKCupid尋找一份新的愛(ài)情。這個(gè)網(wǎng)站以通過(guò)算法自動(dòng)匹配約會(huì)對(duì)象而出名,但他給那些被OKCupid算法吹噓為很般配的女孩發(fā)了許多短信,大多石沉大海,在9個(gè)月的時(shí)間里他一共才和6個(gè)女孩見(jiàn)了面,都是一次之后就沒(méi)了下文。這天,當(dāng)他盯著那份孤獨(dú)的個(gè)人檔案,突然間意識(shí)到哪里出了問(wèn)題。
OKCupid會(huì)員們需要回答從政治、宗教、家庭到愛(ài)情等各種各樣的一系列問(wèn)題。平均而言,會(huì)員需要從數(shù)千個(gè)問(wèn)題中選出350個(gè)問(wèn)題,對(duì)每一個(gè)問(wèn)題,都寫(xiě)出一個(gè)自己的標(biāo)準(zhǔn)答案,同時(shí)以5分制打分的方式對(duì)其他回答進(jìn)行評(píng)價(jià)。系統(tǒng)會(huì)根據(jù)用戶對(duì)問(wèn)題的回答,自動(dòng)計(jì)算潛在約會(huì)對(duì)象間的匹配度并優(yōu)先推薦匹配度高的人。
但從數(shù)學(xué)上講,克里斯與洛杉磯女性的匹配度是非常低的。OKCupid的算法只使用兩個(gè)潛在約會(huì)者都決定回答的問(wèn)題來(lái)進(jìn)行匹配,而克里斯選擇的問(wèn)題被證明是不受女性待見(jiàn)的。當(dāng)他滾動(dòng)搜索匹配對(duì)象時(shí),只有不到100名女性出現(xiàn)在90%的匹配指數(shù)之上。而洛杉磯大約有200萬(wàn)女性,其中約8萬(wàn)人是OKCupid用戶,在一個(gè)匹配度等于可見(jiàn)性的網(wǎng)站上,他基本上就是一個(gè)幽靈,這就是問(wèn)題所在。
首先,他必須提高匹配人數(shù)。如果通過(guò)統(tǒng)計(jì)抽樣,可以確定哪些問(wèn)題對(duì)他喜歡的女性有重要意義,他就可以建立一個(gè)全新的個(gè)人檔案,誠(chéng)實(shí)地回答這些問(wèn)題,而忽略其他問(wèn)題。這樣,他就可以匹配到洛杉磯每一個(gè)可能適合他的女性,同時(shí)自動(dòng)過(guò)濾掉那些不適合的。要達(dá)到這個(gè)效果,首先他需要數(shù)據(jù)。為此他建立了12個(gè)OKCupid機(jī)器人賬戶,并編寫(xiě)了一個(gè)Python腳本來(lái)管理它們。Python腳本搜索年紀(jì)和他相仿的女性,訪問(wèn)她們的頁(yè)面,并從她們的個(gè)人資料中搜尋種族、身高、吸煙與否、星座等內(nèi)容。此外,為了找到調(diào)查問(wèn)題的合適的回答,他不得不采取一些非常的手段。OKCupid可以讓一個(gè)用戶看到其他人對(duì)某個(gè)問(wèn)題的回復(fù),但前提是該用戶也回答過(guò)這些問(wèn)題。于是,克里斯設(shè)置了他的機(jī)器人隨機(jī)地、簡(jiǎn)單地回答每一個(gè)問(wèn)題,因?yàn)樗](méi)有使用這些虛擬的機(jī)器人資料來(lái)吸引任何一個(gè)女性,所以機(jī)器人的回答本身無(wú)關(guān)緊要,重要的是要把這些女性的回答收集到一個(gè)數(shù)據(jù)庫(kù)中。
然而,在收集了大約1000份個(gè)人資料后,他遇到了第一個(gè)問(wèn)題。OKCupid已經(jīng)有一個(gè)系統(tǒng)來(lái)防止這種數(shù)據(jù)收集機(jī)器人,它可以很容易地發(fā)現(xiàn)這些數(shù)據(jù)收割機(jī)。一個(gè)接一個(gè)地,他的機(jī)器人被禁止了。他意識(shí)到應(yīng)該訓(xùn)練機(jī)器人模仿人的行為,這樣才能防止被禁。
克里斯想起了他的朋友薩姆·托里西,一位神經(jīng)科學(xué)家,托里西當(dāng)時(shí)在教克里斯音樂(lè)理論,作為交換,克里斯教托里西高級(jí)數(shù)學(xué)課程。托里西也在OKCupid上有賬戶,他同意在自己的計(jì)算機(jī)上安裝監(jiān)視軟件來(lái)收集他在該網(wǎng)站的使用習(xí)慣。有了托里西和自己的這些行為數(shù)據(jù),克里斯編程他的機(jī)器人,模擬人的點(diǎn)擊率和打字速度。他從家里帶來(lái)了第二臺(tái)計(jì)算機(jī),把它插到數(shù)學(xué)系的寬帶交換機(jī)上,這樣它就可以24小時(shí)不間斷地讓這些機(jī)器人干活。三周后,他從20 000名女性那里收集了600萬(wàn)個(gè)問(wèn)題和回答。這時(shí)候克里斯已經(jīng)顧不上他的論文了,他大多數(shù)晚上都睡在自己的小隔間里,要睡覺(jué)的時(shí)候就在桌子上放一張薄床墊。
拿到數(shù)據(jù)還只是第一步,他必須在調(diào)查數(shù)據(jù)中找到一種模式,即根據(jù)女性的相似性對(duì)她們進(jìn)行大致分組。他嘗試了幾種不同的方法,在嘗試了貝爾實(shí)驗(yàn)室發(fā)明的一種稱(chēng)為K-mode聚類(lèi)的算法后終于獲得了想要的突破。根據(jù)自己的問(wèn)題和回答,20 000名女性被聚類(lèi)成7個(gè)統(tǒng)計(jì)上不同的群體。
他重新給他的機(jī)器人分配了任務(wù),這次訓(xùn)練的樣本略有差異,機(jī)器人收集了5000名在過(guò)去一個(gè)月登錄了OKCupid的洛杉磯和舊金山的女性。然后又用K-mode算法聚類(lèi),證實(shí)了它們?nèi)匀灰灶?lèi)似的方式聚類(lèi)。統(tǒng)計(jì)抽樣的方法看來(lái)是有效的。
現(xiàn)在,所有女性被他分成了7個(gè)群體,他只需要決定哪個(gè)群體最適合他就行。他查看了每個(gè)群體的統(tǒng)計(jì)特性。一組太年輕,兩組太老,另一組太偏基督教。一組25歲左右的女性群體讓他流連忘返,她們是經(jīng)濟(jì)獨(dú)立的音樂(lè)家或藝術(shù)家,這看起來(lái)是個(gè)理想的群體。他決定在這里進(jìn)行淘金。但是,鄰近的一個(gè)群體的女性看起來(lái)也相當(dāng)酷,她們略微成熟一點(diǎn),專(zhuān)業(yè)從事創(chuàng)造性工作,比如編輯和設(shè)計(jì)師。最后他決定兩個(gè)組都試試,為此他把兩組分別命名為A、B組,針對(duì)這兩組,又各優(yōu)化了一份個(gè)人檔案。
之后,他又通過(guò)文本挖掘這兩個(gè)類(lèi)別來(lái)了解她們感興趣的內(nèi)容,發(fā)現(xiàn)教育是一個(gè)共同的熱門(mén)話題,因此他寫(xiě)了一篇突出自己作為數(shù)學(xué)教授的簡(jiǎn)介。不過(guò),重要的部分是調(diào)查問(wèn)題。他挑出了在這兩組人中最受歡迎的500個(gè)問(wèn)題并誠(chéng)實(shí)地回答了這些問(wèn)題,他不想未來(lái)的情侶關(guān)系建立在計(jì)算機(jī)自動(dòng)編造的謊言之上。但是他也機(jī)靈地讓他的計(jì)算機(jī)計(jì)算出每個(gè)問(wèn)題的重要性,使用一種稱(chēng)為自適應(yīng)增強(qiáng)的機(jī)器學(xué)習(xí)算法得出最佳權(quán)重,簡(jiǎn)而言之,哪個(gè)問(wèn)題重要就回答哪個(gè)。
最后,兩份個(gè)人檔案新鮮出爐了,一個(gè)封面上他正在攀巖,而另一個(gè)封面上,他正在演唱會(huì)上彈吉他。對(duì)于問(wèn)題的重要性,他完全遵循計(jì)算機(jī)的指示。一切設(shè)置好以后,他在OKCupid上搜索洛杉磯的女性,并按匹配百分比排序。喔呼!在頂部,滿頁(yè)匹配率為99%的女性,一頁(yè)又一頁(yè),在翻閱了一萬(wàn)名來(lái)自洛杉磯各地的女性之后,他的匹配度仍然維持在90%以上。
匹配的女性完全找出來(lái)了,他還需要一步——引起她們的注意。在OKCupid上,當(dāng)有人瀏覽某會(huì)員的網(wǎng)頁(yè)時(shí),該會(huì)員會(huì)收到通知,所以他又用Python寫(xiě)了一個(gè)新的程序來(lái)訪問(wèn)最匹配他的女孩的網(wǎng)頁(yè),并按年齡自動(dòng)循環(huán):
周一是1000名41歲的女性,周二是1000名40歲的女性;兩周后,當(dāng)訪問(wèn)完27歲這個(gè)群體的女性后,又循環(huán)再來(lái)。很快,女孩們回訪了他的個(gè)人資料,每天約400人,消息隨之滾滾而來(lái)。一位女士寫(xiě)道:“到目前為止,我還沒(méi)有遇到任何人擁有這樣的匹配度,我覺(jué)得你的個(gè)人資料很有趣。”
“我想我們有很多共同點(diǎn),也許不是數(shù)學(xué),但肯定還有很多其他有趣的東西!”,另一個(gè)人寫(xiě)道。
克里斯的匹配搜索的數(shù)學(xué)部分已經(jīng)完成了。現(xiàn)在,他得離開(kāi)辦公室去約會(huì)。
6月30日,克里斯在加州大學(xué)洛杉磯分校的體育館淋浴后,開(kāi)著他那輛破舊的日產(chǎn)汽車(chē)穿過(guò)城鎮(zhèn),開(kāi)始了他的第一次數(shù)據(jù)挖掘出來(lái)的約會(huì)。希拉是一位年輕的網(wǎng)頁(yè)設(shè)計(jì)師。他們?cè)贓cho公園的一家咖啡館共進(jìn)午餐。但在約會(huì)結(jié)束時(shí),雙方都清楚地意識(shí)到,他們之間并無(wú)火花。第二天,他約會(huì)一個(gè)來(lái)自B組的迷人的博客編輯。他原計(jì)劃在Echo公園湖邊浪漫散步,但發(fā)現(xiàn)湖水正在疏浚,她最近一直在讀普魯斯特的書(shū),對(duì)自己的生活感到沮喪。他覺(jué)得氣氛有點(diǎn)壓抑。
第三次約會(huì)也是B組的。他在韓國(guó)城的一家酒吧里和艾莉森見(jiàn)面了,她是一個(gè)正在學(xué)習(xí)編劇的學(xué)生,肩上文著一個(gè)斐波那契螺旋線。他們喝了韓國(guó)啤酒,聊得似乎很嗨,第二天在自己的小隔間里醒來(lái),克里斯的頭仍然很痛,他在OKCupid里給艾莉森發(fā)了一條信息,但她再也沒(méi)有回信。被拒絕讓他覺(jué)得很不好受,好在他仍然受到很多女性的關(guān)注,每天收到20多條主動(dòng)示好的信息。信息太多,他只對(duì)那些表現(xiàn)出幽默感或在簡(jiǎn)介中顯示出有趣特性的人做出回應(yīng),其他就只好忽略了。相比以前需要來(lái)回交換四五條信息才能成功安排一次約會(huì),現(xiàn)在他只需要一個(gè)回復(fù):“你看起來(lái)真的很酷,想見(jiàn)面嗎?”
剛開(kāi)始的一些約會(huì)他還頗費(fèi)心思去安排。但是,約會(huì)隊(duì)列中的女孩太多,他不得不提高效率,經(jīng)常需要一天安排兩次約會(huì)。他為此制定了一套規(guī)則來(lái)完成他的馬拉松式愛(ài)情搜索。比如,不再喝酒,如果不合適就當(dāng)機(jī)立斷,不聽(tīng)音樂(lè)會(huì),不看電影,保持注意力在彼此,不進(jìn)行任何會(huì)讓注意力轉(zhuǎn)移的其他活動(dòng),等等。
經(jīng)過(guò)一個(gè)月和這兩個(gè)群體的人不停地約會(huì),他發(fā)現(xiàn)自己為了約會(huì)東區(qū)的女孩群體而花費(fèi)太多的時(shí)間在高速公路上。他刪除了他在A組的個(gè)人資料。相應(yīng)地,效率提高了,但結(jié)果還是一樣。當(dāng)夏天接近尾聲時(shí),他已經(jīng)進(jìn)行了55次約會(huì),每次都仔細(xì)地記錄在實(shí)驗(yàn)室的筆記本上。但只有三次約會(huì)后續(xù)又進(jìn)行了第二次約會(huì);只有一次導(dǎo)向了第三次約會(huì)。克里斯開(kāi)始懷疑他的算法,也許網(wǎng)撒得有點(diǎn)大?
就在這時(shí),28歲的藝術(shù)家、正在UCLA攻讀美術(shù)碩士學(xué)位的克里斯蒂娜·王甜(Christine Tien Wang)發(fā)過(guò)來(lái)了一條消息。她在UCLA附近尋找6英尺(1英尺≈0.3048米)高、藍(lán)眼睛男孩時(shí)突然看到了克里斯的資料,他們是91%的匹配。他在校園的雕塑花園約見(jiàn)了她,從那里他們走到一家壽司店。他立刻感覺(jué)到了彼此間的電流,他們談?wù)摃?shū)籍、藝術(shù)、音樂(lè)。當(dāng)她坦白承認(rèn)在給他發(fā)短信之前,她對(duì)自己的個(gè)人資料做了一些調(diào)整時(shí),他把自己的愛(ài)情黑客行為都告訴了她。“太黑了,太壞了”,她雀躍地說(shuō),“不過(guò)我喜歡。”
這是第88號(hào)候選人的第一次約會(huì),接著是第二次,然后是第三次,兩周后,他們都暫時(shí)關(guān)閉了他們的OKCupid賬戶。一年后,克里斯向王甜求婚,她愉快地答應(yīng)了。
對(duì)王甜來(lái)說(shuō),克里斯的黑客行為是一個(gè)有趣的故事,但所有的數(shù)學(xué)和編碼只是他們故事的序幕,一段感情中真正的“入侵”(hacking)發(fā)生在相遇之后。克里斯說(shuō):“我認(rèn)為,我所做的只是對(duì)網(wǎng)站上所有人所做的事情進(jìn)行了一個(gè)算法化、數(shù)據(jù)驅(qū)動(dòng)和基于機(jī)器學(xué)習(xí)的改進(jìn),每個(gè)人都試圖創(chuàng)建一個(gè)最佳的形象,我只是用Python結(jié)合大數(shù)據(jù)設(shè)計(jì)了一個(gè)。”
- 論語(yǔ)通譯
- 寫(xiě)給青少年的史記5:大漢風(fēng)云(彩圖版)
- 教你學(xué)摔跤(學(xué)生室內(nèi)外運(yùn)動(dòng)學(xué)習(xí)手冊(cè))
- 新時(shí)期雷鋒精神讀本·高中年級(jí)
- 季羨林給孩子的寫(xiě)作課·議論卷
- 小學(xué)生數(shù)獨(dú)訓(xùn)練營(yíng)(進(jìn)階班)
- 安全健康教育綜合讀本4
- 聽(tīng)力深度訓(xùn)練·中考
- 地理常識(shí)悅讀
- 葉紫精品集
- 新課標(biāo)最佳閱讀:湯姆·索亞歷險(xiǎn)記
- 看圖狀物作文教與學(xué)
- 排除計(jì)算法訓(xùn)練(青少年提高邏輯思維能力訓(xùn)練集)
- 英語(yǔ)閱讀理解就這么簡(jiǎn)單:必考主題+高分技巧(高三+高考)
- 林海雪原