機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

大資料文摘發表於2019-04-15

千呼萬喚,權利的遊戲最終季終於開!播!了!

和大部分權遊粉一樣,文摘菌一整個上午的朋友圈都刷的戰戰兢兢,生怕被劇透。但是沒有想到,還是“被“看到了大結局!而且,給我劇透的還是個演算法。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

這波最強劇透來自慕尼黑工業大學。早在最終季開播前,這所大學的電腦科學的同學就接到了一個特殊的作業:用機器學習,預測這一季誰最有可能坐穩鐵王座。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

這個聽起來很有趣的專案用到了一種頗為殘酷的演算法——生存機會演算法。具體的生存率預測,是通過壽命資料分析得到的結果。這種科學研究技術在醫療上已經有廣泛的應用,例如用來檢驗治療方法和併發症對癌症患者的影響。

其實, 生存機會演算法是慕尼黑工業大學每學期Javascript研討會的一部分,這個課題激起一屆又一屆學生的研究興趣。 他們開發了一個應用程式, 並創造了一套人工智慧的演算法來計算每個人物的死亡率。早在2016年, 第六季播出前, 該專業的學生就準確預測了Snow的復活。

廢話不多說,先來看看這個厲害的演算法預測的最終季大結局。

根據演算法,龍媽Daenerys Targaryen(丹妮莉斯·塔格利安)生存的機率最高,達到了99%,小惡魔Tyrion Lannister(提利昂·蘭尼斯特)也有97%的存活率。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後存活率排名一覽

除了死亡率可能性最高的波隆和魔山,這個被七大王國最聰明的男人(Tyrion Lannister)預言最長命的 “三傻”(Sansa Stark),她的死期也被預測的明明白白,死亡率高達73%。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

最強劇透如何操作?

演算法具體怎麼做的呢?簡單來說,就是通過從原著和已播的劇集中提取人物角色、身份、性別、親屬數量、年齡、忠誠度、死亡概率等等來進行資料分析預測。

我們先拿Sansa的例子來簡單解釋一下。

首先, 在維斯特洛大陸, 一般來說貴族是要比平民要活得久一點,而女性的角色也會比男性的要活的久一點。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

按主角來分,從北境之王的掌上明珠淪為最屈辱的貴族小姐再到臨冬城女爵,主角光環下,死亡率一下降低16%。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後一般結過婚的女性也比較長命。雖然幾段不幸的婚姻給Sansa帶來慘痛的教訓,但也完美的印證了“一切殺不死我的都將令我變強。”

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

出生在一個牛掰的家族也會延長壽命哦!史塔克家族的孩子雖然歷經磨難, 但除了“少狼主”外都還闖到了決賽圈。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後

忍辱負重的Sansa有命撐到第8季也是實屬不易, 但預測高達73%的死亡率如何在劇中實現, 我們可以拭目以待。

完整的人物清單及其生存機會等資料統計可以在以下網站線上獲取。☟

https://got.show

“演算法”與“資料”之歌

據這門課程的授課教師Burkhard Rost介紹,雖然對權力的遊戲裡面人物角色生存率的預測只是來“幻想”資料,但是這種研究問題的方法早已被用於現實世界,並且對我們的日常生活產生了強大影響。類似的演算法也能夠在金融和醫療領域發揮作用。

機器學習“劇透”權遊大結局:三傻最先領盒飯,龍媽、小惡魔笑到最後“權力的遊戲”世界互動地圖的截圖

資料提取

考慮實際情況,資料的最好來源是關於《權力遊戲》的一系列維基百科介紹。在維基百科上基本囊括了5本書以及8季電視劇的內容,總計大約2000位角色的資訊。除了提取角色的生存狀態,即是否死亡,還需要其他的角色特徵資訊。

有了描述每一個角色特徵的資料集,下一步是尋找能夠判斷角色是否死亡的特徵集。

貝葉斯生存分析

模型的首要目標是使用貝葉斯推斷相關方法來判斷角色不同特徵與存活率關係。模型假設,每一個都有一定的死亡概率。對於所有角色來說,“基本危險”到來的死亡概率都是相同的。演員之所以領盒飯,肯定他演的角色有“作死”特性。

例如,男人死亡概率為60%,而呆在蘭尼斯特家裡可能會降低50%。綜合考慮這兩個因素之後,就可以建立一個生存函式。

這個生存函式具體描述的是:在某個時間點,角色存活率。例如它可能告訴我們,喬恩·雪諾(Jon Snow)活到60歲的概率是45%,或者傑米·蘭尼斯特( Jamie Lannister)被認為有60%的機率能活到第八季。

使用帶有pymc3封裝的MCMC模擬來訓練這個模型。選擇下列幾個特徵進行分析:

  • 家庭(House)

  • 愛人(Lovers)

  • 婚姻(Marriage)

  • 地位(Titles)

  • 主角/配角(Major/Minor character)

  • 男性(Male)

  • 神經網路(Neural Network)

Keras建立模型

慕尼黑的同學使用了Python的Keras來建立模型。基本上是最簡單的神經網路架構之一——前饋技術。這意味著,輸入值是具有任意數量的實值維度的向量,然後通過“隱藏層”進行處理,最終輸出也是數字向量。此外,這類神經網路由許多引數組成,引數會在訓練過程中自動更改,因此網路輸出也能儘可能接近給定的輸入 - 輸出關係。

必須考慮如何將與角色相關的複雜資訊轉換為向量。某些資訊是標量資訊,例如維基百科中角色的排名或其關係數。

其他資訊可能是一組預定義的值,例如角色出現的劇集。因此,需要建立一個與劇集維度相同的向量,如果角色出現在相應的劇集中則將維度設定為1.0,否則為0.0。這樣,可以將不同種類的資訊轉換為向量,並且這些向量僅相互影響。最後,有1561個書籍資料的輸入維度和411個顯示資料。以下是使用的資料型別☟

  • 原著:性別、頁數多少、親屬數量、年齡、文化、房子、房屋區域、忠誠度、角色所屬的著作、地點、標題

  • 劇集:性別、內容多少、親屬數量、年齡、忠誠度、角色出現的劇集、標題

一般來說,“年齡大小”依然是導致角色死亡最重要的因素; 畢竟,年紀越大,之前所遭受的危險就越大! 這就是為什麼角色的當前年齡(如前所述的單熱向量)也是神經網路輸入的一部分。 因為神經網路輸出只是將“存活百分比”確定為0和1之間的數字,所以可以為單個角色建立大約90個不同的輸入向量,例如可能的年齡就會有一個。 如果該角色在該年齡仍然存活,則神經網路將為該輸入向量預測1.0,否則為0.0。

總結一下,讓我們看一下有關預測和神經網路的統計資料。 首先,權遊原著維基百科共包含484個可用的角色,其中188個用於訓練(即已經死亡),剩下的296個還活著的角色建立了預測。 最後,訓練準確率達到了88.75%,而最終驗證準確率為89.92%。 類似地,可以從劇集維基百科提取146個可用角色,82個用於訓練,64個用於預測。 這裡的最終訓練準確率為79.64%,最終驗證準確率為85.69%。

相關文章