機(jī)器學(xué)習(xí)技術(shù)打卦,為寶寶起個(gè)好名字

科技行者
雖然這里說的是創(chuàng)建起名器,但它在本質(zhì)上就是個(gè)姓名預(yù)測(cè)器。我的基本思路就是找到大量名人的傳記性表述,屏蔽掉他們的真實(shí)名字,然后創(chuàng)建模型來正確預(yù)測(cè)出這些被屏蔽的名字。

小時(shí)候,我特別討厭自己的名字——Dale,大家聽到這個(gè)名字,腦海里首先浮現(xiàn)的是哪些形象?我自己最先想到的,總是《山丘之王》電影中的Dale Gribble以及納斯卡車手Dale Earnhardt Jr.。

這些Dale都跟我所憧憬的自我形象完全不符。我更喜歡Sailor Moon“水冰月”這個(gè)名字。

另外,我最討厭的是Dale所表現(xiàn)出的中性感——男生里叫Dale的特別多,但像我這樣的女性“Dale”就相當(dāng)罕見了。這名字怎么來的?每當(dāng)我問起父母,他們的回答永遠(yuǎn)是:

A. 名字比較中性的女生更有可能獲得成功。

B. 他們認(rèn)識(shí)了一個(gè)特別時(shí)髦的朋友,人家的女兒也叫Dale,太可愛了!

好吧,在成年之后,我確實(shí)發(fā)現(xiàn)這個(gè)中性化的名字讓自己的簡(jiǎn)歷、GitHub乃至郵件簽名里得到了不少好處。

但拋開性別偏見,更值得討論的深層問題是,名字是否會(huì)在潛移默化中引導(dǎo)人們傾向于選擇與之相符的工作或者生活方式?如果答案是肯定的,那么起名這事學(xué)問可就太大了,甚至?xí)绊懞⒆拥囊簧?。我可不想把這么重要的決定交給個(gè)人品味、運(yùn)氣或者當(dāng)時(shí)的潮流。于是乎,我希望機(jī)器學(xué)習(xí)能幫助我解決這個(gè)難題!

在本文中,我們將了解如何使用機(jī)器學(xué)習(xí)技術(shù)開發(fā)一款嬰兒起名器(更準(zhǔn)確地講,其實(shí)是款預(yù)測(cè)器),能夠根據(jù)對(duì)于新生兒的描述返回合適的名字,例如:

我的孩子出生在新澤西州,她未來會(huì)成為谷歌公司的軟件開發(fā)員,喜歡騎自行車和喝咖啡。

以此為基礎(chǔ),模型會(huì)返回一組姓名,并按概率進(jìn)行排序:

Name: linda Score: 0.04895663261413574

Name: kathleen Score: 0.0423438735306263

Name: suzanne Score: 0.03537878766655922

Name: catherine Score: 0.030525485053658485

...

所以從理論上講,我本來應(yīng)該叫Linda,但相比之下,現(xiàn)在我感覺Dale好像更好一點(diǎn)。

好了,別對(duì)結(jié)果太當(dāng)真,這里頭有明顯的偏見成分,更像是那種星座玄學(xué)。雖然如此,第一個(gè)由AI起名的嬰兒,聽起來是不是還蠻酷的?

數(shù)據(jù)集

雖然這里說的是創(chuàng)建起名器,但它在本質(zhì)上就是個(gè)姓名預(yù)測(cè)器。我的基本思路就是找到大量名人的傳記性表述,屏蔽掉他們的真實(shí)名字,然后創(chuàng)建模型來正確預(yù)測(cè)出這些被屏蔽的名字。

好消息是,我在David Grangier的Github repo中找到了wikipedia-biography-dataset數(shù)據(jù)集,其中包含維基百科中728321條名人記錄的摘要段落與大量元數(shù)據(jù)。

相信大家都知道,直接從維基百科上提取的數(shù)據(jù)集有著嚴(yán)重的選擇性偏見——因?yàn)槠渲兄挥?5%的條目為女性,而且非白人條目的比例也更低。再有,在維基百科上有記錄的人們往往年紀(jì)更大,畢竟都是些上歲數(shù)的名人嘛。

為了解決這個(gè)問題,特別是保證生成器能盡量提供符合當(dāng)下審美的名字,我下載了人口普查報(bào)告中最受歡迎的新生兒名字,同時(shí)縮小了維基百科數(shù)據(jù)集的規(guī)模——即流行名字與維基百科內(nèi)名人名字的交集。另外,我只保留了至少有50位名人取過的名字,最終得到了764個(gè)名字,其中大部分是男名。

在數(shù)據(jù)集里,最受歡迎的是“John”,在維基百科上有10092條記錄。其次是William、David、James、George以及一大堆同樣來自圣經(jīng)的男性名字。人氣最低的名字(我也保留了50個(gè)例子)則有Clark、Logan等等。為了解決這種嚴(yán)重偏見,我再次對(duì)數(shù)據(jù)集進(jìn)行下采樣,為每個(gè)名字隨機(jī)選擇了100條對(duì)應(yīng)的名人記錄。

模型訓(xùn)練

在數(shù)據(jù)樣本整理完成之后,我決定訓(xùn)練一套模型,根據(jù)維基百科中的摘要段落讓模型結(jié)合人物描述生成推薦名字。

下面來看維基百科中常見的名人介紹形式:那么,我的這款起名器到底表現(xiàn)如何?

有過建模經(jīng)驗(yàn)的朋友們,肯定知道評(píng)估質(zhì)量的常規(guī)指標(biāo)就是準(zhǔn)確率與召回率。我這套模型的準(zhǔn)確率為65.7%,召回率為2%。

但對(duì)于一款起名器來說,這些指標(biāo)并不能真正說明問題。由于數(shù)據(jù)非常復(fù)雜,因此無法根據(jù)一個(gè)人的生活經(jīng)歷找到“正確答案”。另外,姓名還具有很大的隨機(jī)性,所以任何模型都不可能做出真正準(zhǔn)確的預(yù)測(cè)。

我的目標(biāo)也并不是創(chuàng)建一套能夠100%準(zhǔn)確預(yù)測(cè)人名的模型,而只是想試著創(chuàng)建一種能夠理解人名及其意義的模型。

對(duì)模型學(xué)習(xí)到的知識(shí)進(jìn)行深入探究的一種可行方法,在于查看名為混淆矩陣的表。該表用于指示模型所犯錯(cuò)誤的具體類型。我們可以借此進(jìn)行調(diào)試,或者快速實(shí)現(xiàn)完整性檢查。

在Evaluate選項(xiàng)卡中,AutoML提供現(xiàn)成的混淆矩陣。如下圖所示,僅為其中的一角:

Dale Alvin Gribble,??怂箘?dòng)畫連續(xù)劇《山丘之王》中的虛構(gòu)人物,由Johnny Hardwick配音、Stephen Root飾演,初次試鏡演員為Daniel Stern。Dale Gribble是革命性的“口袋揚(yáng)沙”自衛(wèi)術(shù)的發(fā)明者,賞金獵人,Daletech所有者,喜歡吸煙,癡迷槍支,同時(shí)也是各種陰謀論與都市傳奇的狂熱信徒。

為了防止模型作弊,我把實(shí)例中的名字與姓氏替換成了空白行“__”,所以上述簡(jiǎn)介就變成了:

__ Alvin __ ,福克斯動(dòng)畫連續(xù)劇《山丘之王》中的虛構(gòu)人物…

這就是模型的輸入數(shù)據(jù),而其對(duì)應(yīng)的輸出標(biāo)簽為“Dale”。

在數(shù)據(jù)集準(zhǔn)備就緒之后,我開始著手構(gòu)建深度學(xué)習(xí)語言庫。我可以從多種方法中做出選擇(例如使用TensorFlow),但這里我使用了AutoML Natural Language。這是一種無代碼方法,可構(gòu)建用于文本分析的深度神經(jīng)網(wǎng)絡(luò)。

我將數(shù)據(jù)集上傳至AutoML,由其將數(shù)據(jù)集自動(dòng)拆分為36497個(gè)訓(xùn)練示例,4570個(gè)驗(yàn)證示例,以及4570個(gè)測(cè)試示例:

雖然我只打算刪除名字和姓氏,但也有不少中間名神秘失蹤了。

為了訓(xùn)練模型,我訪問Train選項(xiàng)卡,并點(diǎn)擊Start Training。在四個(gè)小時(shí)之后,訓(xùn)練宣告完成。

那么,我的這款起名器到底表現(xiàn)如何?

有過建模經(jīng)驗(yàn)的朋友們,肯定知道評(píng)估質(zhì)量的常規(guī)指標(biāo)就是準(zhǔn)確率與召回率。我這套模型的準(zhǔn)確率為65.7%,召回率為2%。

但對(duì)于一款起名器來說,這些指標(biāo)并不能真正說明問題。由于數(shù)據(jù)非常復(fù)雜,因此無法根據(jù)一個(gè)人的生活經(jīng)歷找到“正確答案”。另外,姓名還具有很大的隨機(jī)性,所以任何模型都不可能做出真正準(zhǔn)確的預(yù)測(cè)。

我的目標(biāo)也并不是創(chuàng)建一套能夠100%準(zhǔn)確預(yù)測(cè)人名的模型,而只是想試著創(chuàng)建一種能夠理解人名及其意義的模型。

對(duì)模型學(xué)習(xí)到的知識(shí)進(jìn)行深入探究的一種可行方法,在于查看名為混淆矩陣的表。該表用于指示模型所犯錯(cuò)誤的具體類型。我們可以借此進(jìn)行調(diào)試,或者快速實(shí)現(xiàn)完整性檢查。

在Evaluate選項(xiàng)卡中,AutoML提供現(xiàn)成的混淆矩陣。如下圖所示,僅為其中的一角:

在此表中,行標(biāo)題為**True labes**,列標(biāo)題則為**Predicted labels**。這些行表示某人的真實(shí)名字,而列則代表模型為該人預(yù)測(cè)出的名字。

例如,在標(biāo)有“ahmad”的行中,我們看到一個(gè)淡藍(lán)色的框,標(biāo)有“13%”。這意味著我們的數(shù)據(jù)集中,所有名為Ahmad的條目中,有13%的比例被我們的模型正確標(biāo)記為“ahmad”。這時(shí)向右側(cè)框看去,在真名為“ahmad”的所有條目中,有25%被錯(cuò)誤標(biāo)記成了“ahmed”。另外有13%的條目被錯(cuò)誤標(biāo)記為“alec”。

盡管這些標(biāo)簽出現(xiàn)了技術(shù)意義上的錯(cuò)誤,但由此推斷,模型可能確實(shí)掌握了關(guān)于起名的一點(diǎn)小訣竅,因?yàn)?ldquo;ahmad”與“ahmed”已經(jīng)非常相近。Alec也類似,該模型在25%的情況下把Alecs標(biāo)記為“alexander”,在現(xiàn)實(shí)生活中,“alec”與“alexander”確實(shí)沒多大區(qū)別。

運(yùn)行健全性檢查

接下來,我打算看看這套模型能不能理解關(guān)于起名的基本統(tǒng)計(jì)規(guī)則。例如,如果我把某人形容為“她”,那么模型能不能成功給出一個(gè)女性名字?

例如,“她喜歡美食”,那么模型給出的推薦名稱為“Frances”、“Dorothy”以及“Nina”,后面幾個(gè)都是女性專用名,看起來好像不錯(cuò)。

對(duì)于“他喜歡美食”,模型給出的推薦名包括“Gilbert”、“Eugene”以及“Elmer”??磥?,模型似乎確實(shí)有了性別區(qū)分的概念。

下面,我們?cè)賮砜磳?shí)際測(cè)試過的其他幾項(xiàng)測(cè)試輸入與對(duì)應(yīng)結(jié)果。

“他出生在新澤西州。” — Gilbert

“她出生在新澤西州。” — Frances

“他出生在墨西哥。” — Armando

“她出生在墨西哥。” — Irene

“他出生在法國(guó)。” — Gilbert

“她出生在法國(guó)。” — Edith

“他出生在日本。” — Gilbert

“她出生在日本。” — Frances

看來模型已經(jīng)摸清了世界各地的起名傾向,這一點(diǎn)給我留下了深刻印象。但是,模型似乎很難弄清亞洲國(guó)家更喜歡哪些英文名,因此總是返回少量特別安全的名字(Gilbert與Frances)。這說明使用的訓(xùn)練數(shù)據(jù)集不具備充分的全局多樣性。

模型偏見

最后,我們要對(duì)模型偏見進(jìn)行測(cè)試。大家可能知道,我們往往會(huì)在不經(jīng)意間創(chuàng)建出存在嚴(yán)重偏見、種族主義傾向、性別歧視或者野蠻暴力問題的模型,這主要是因?yàn)槠渲惺褂玫挠?xùn)練數(shù)據(jù)集無法正確反映結(jié)果所指向的人群。因?yàn)榫S基百科的數(shù)據(jù)也有同樣的問題,所以我知道數(shù)據(jù)集中的男名要比女名多。

我還意識(shí)到模型應(yīng)該會(huì)反映出訓(xùn)練數(shù)據(jù)中的某些性別偏見問題——例如傾向于認(rèn)為計(jì)算機(jī)程序是男性,而護(hù)士是女性。下面看看我的推理是否正確:

“TA將成為計(jì)算機(jī)程序員。” — Joseph

“TA將成為護(hù)士。” — Frances

“TA將成為醫(yī)生。” — Albert

“TA將成為宇航員。” — Raymond

“TA將成為小說家。” — Robert

“TA將成為家長(zhǎng)。” — Jose

“TA將成為模特。” — Betty

好吧,這套模型似乎確實(shí)掌握了職業(yè)崗位中的傳統(tǒng)性別傾向,更讓我驚訝的是,它為“家長(zhǎng)”指定了一個(gè)男性名字(Jose)。

總結(jié)來看,我的模型似乎確實(shí)在起名這方面學(xué)到了不少,但又跟我的期望不太一樣。所以我的下一代該叫什么名字好呢……要不,干脆叫Dale Jr.?

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論