用姓名識別性別對超級飛俠中的人物性別進行統計

有一天傍晚,在陪孩子看完一集又一集的動畫片《超級飛俠》的時候,我發現每集的主人公性別不是有規律的,然後就無聊的想統計一下男性和女性的性別,就是想知道《超級飛俠》有沒有間接暗示小孩子時候那個性別更愛訂包裹(我是有多無聊)。那說幹就幹吧。

五季的《超級飛俠》一共有104集,我不可能單純的每集去看一遍統計一下,就算在播放每集的時候滑動進度條就浪費時間,而且沒會員的話還有廣告時間。

不過還好,我知道有些網站有文字劇情介紹,那不如收集文字信息呢。然後從文字信息中得知每集訂購包裹主角的性別啦。信息怎麼獲取,爬蟲???如果你用爬蟲那我想說沒什麼必要了,因爲這種文字劇情一般都是幾集幾集連在一起的,只需要“ctrl+C”和“ctrl+V”的騷操作就能在幾十秒的時間收集完成。雖然在百度百科上收集到了我想要的文字劇情,可惜只有前三季的(其他網站也未提供)。估計幾年後可能會有人百度百科網頁上添加文字劇情信息吧,以後再說吧。

得到前三季文字信息之後,我不想讓自己去一個一個的看然後有筆去統計,我用來“百度雲”提供的中文分詞功能來提取人物名稱,然後自己再去訓練一個由名稱識別性別的分類器來幫我識別性別(有這時間不如自己拿筆去統計呢)。

我的菜鳥思路

先收集文字劇情信息,然後用百度雲api提取文字中人物姓名,然後用姓名性別識別器來得到每集人物性別,最後統計男女比列。

即使是百度雲也不能想我們人腦一樣可以從文字信息中獲得人物名稱,第一季的文字信息就有兩集沒有識別到,而且還統計到了《超級飛俠》中飛機們的姓名,因此我們需要除去飛機的姓名。

加一行代碼,凡是得到的人名中有上面那些名字都不要(估計漏了個別飛機名字)。再優化一下代碼去除相同名稱的。

優化結果如下:

 發現結果每集中存在多個名字,再看一下數據集分析發現。文字劇情中出現的第一個姓名是我們所要的姓名,所以我們只存取第一個姓名。然後再做一下姓名性別分類器,拿一下第一季第一集的“阿佳斯”做測試,得到結果是男性。然後查看一下文字劇情確認一下,看樣子是個男生呀!

最後初略得到了三季78集中的59個人物姓名,然後分類得到34個男性和25個女性。分類器正確率是80%左右,我大概得到:在小時候,男孩子比女孩子更愛購物(剁--手)。

 

小結一下

真實的結果真的是這樣嗎??我想說不一定,因爲這裏面存在不少對數據集錯誤的清洗操作。例如:

  1. 如果你曾經認真陪過孩子看《超級飛俠》,你應該知道有的時候訂購的包裹不一定是孩子訂購的,而是孩子的父母。所以對於這些噪點數據,我們不能一個一個處理,不然那樣就失去了數據挖掘的意義了。

  2. 儘管很少但還是有個別劇情是連集的,這種情況我們有可能多統計重複一個人名。

所以我們在做數據挖掘過程中,絕大部分時間都不是花在挑選合適算法和訓練分類器(調參大法),而是用在了數據清洗上,數據清洗的效果也是能夠一定程度上影響分類器的正確率的。

最後再說一個問題,在調用百度的NLP的接口時,我發現返回的結果中有將地方名稱當作人名反饋給我。因爲在西方歷史文化中有些人物姓名是部分地區的地方名,例如美國第一任總統喬治·華盛頓 是美國首部的名稱。所以現在的NLP技術真的很難達到我們人腦識別的正確率,但它高效率及低錯誤率我們還是願意接受的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章