自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

人工智能 機(jī)器學(xué)習(xí) 自然語(yǔ)言處理
許多自然語(yǔ)言處理都涉及機(jī)器學(xué)習(xí),所以理解機(jī)器學(xué)習(xí)的一些基本工具和技術(shù)是有益處的。有些工具已經(jīng)在前幾章中討論過(guò),有些還沒(méi)有,但這里我們會(huì)討論所有這些工具。

 許多自然語(yǔ)言處理都涉及機(jī)器學(xué)習(xí),所以理解機(jī)器學(xué)習(xí)的一些基本工具和技術(shù)是有益處的。有些工具已經(jīng)在前幾章中討論過(guò),有些還沒(méi)有,但這里我們會(huì)討論所有這些工具。

D.1 數(shù)據(jù)選擇和避免偏見(jiàn)

數(shù)據(jù)選擇和特征工程會(huì)帶來(lái)偏見(jiàn)的風(fēng)險(xiǎn)(用人類(lèi)的話來(lái)說(shuō))。一旦我們把自己的偏見(jiàn)融入算法中,通過(guò)選擇一組特定的特征,模型就會(huì)適應(yīng)這些偏見(jiàn)并產(chǎn)生帶有偏差的結(jié)果。如果我們足夠幸運(yùn)能在投入生產(chǎn)之前發(fā)現(xiàn)這種偏見(jiàn),那么也需要投入大量的工作來(lái)消除這種偏見(jiàn)。例如,必須重新構(gòu)建和重新訓(xùn)練整個(gè)流水線,以便能夠充分利用分詞器的新詞匯表。我們必須重新開(kāi)始。

一個(gè)例子是著名的Word2vec模型的數(shù)據(jù)和特征選擇。Word2vec是針對(duì)大量的新聞報(bào)道進(jìn)行訓(xùn)練的,從這個(gè)語(yǔ)料庫(kù)中選擇了大約100萬(wàn)個(gè)n-gram作為這個(gè)模型的詞匯表(特征)。它產(chǎn)生了一個(gè)使數(shù)據(jù)科學(xué)家和語(yǔ)言學(xué)家興奮的模型,后者能夠?qū)υ~向量(如“king − man + woman = queen”)進(jìn)行數(shù)學(xué)運(yùn)算。但隨著研究的深入,在模型中也出現(xiàn)了更多有問(wèn)題的關(guān)系。

例如,對(duì)于“醫(yī)生 − 父親 + 母親 = 護(hù)士”這個(gè)表達(dá)式,“護(hù)士”的答案并不是人們希望的無(wú)偏見(jiàn)和合乎邏輯的結(jié)果。性別偏見(jiàn)在不經(jīng)意間被訓(xùn)練到模型中。類(lèi)似的種族、宗教甚至地理區(qū)域偏見(jiàn)在原始的Word2vec模型中普遍存在。谷歌公司的研究人員無(wú)意制造這些偏見(jiàn),偏見(jiàn)存在于數(shù)據(jù)中,即他們訓(xùn)練Word2vec使用的谷歌新聞?wù)Z料庫(kù)中詞使用統(tǒng)計(jì)的數(shù)據(jù)。

許多新聞報(bào)道只是帶有文化偏見(jiàn),因?yàn)樗鼈兪怯捎浾咦珜?xiě)的,目的是讓讀者開(kāi)心。這些記者描寫(xiě)的是一個(gè)存在制度偏見(jiàn)和現(xiàn)實(shí)生活中人們對(duì)待事件的偏見(jiàn)的世界。谷歌新聞中的詞使用統(tǒng)計(jì)數(shù)據(jù)僅僅反映的是,在母親當(dāng)中當(dāng)護(hù)士的數(shù)目要比當(dāng)醫(yī)生的多得多,同時(shí)在父親當(dāng)中當(dāng)醫(yī)生的數(shù)目比當(dāng)護(hù)士的多得多。Word2vec模型只是為我們提供了一個(gè)窗口,讓我們了解我們創(chuàng)建的世界。

幸運(yùn)的是,像Word2vec這樣的模型不需要標(biāo)記訓(xùn)練數(shù)據(jù)。因此,我們可以自由選擇任何喜歡的文本來(lái)訓(xùn)練模型。我們可以選擇一個(gè)更平衡的、更能代表大家希望模型做出的信念和推理的數(shù)據(jù)集。當(dāng)其他人躲在算法背后說(shuō)他們只是按照模型做事時(shí),我們可以與他們分享自己的數(shù)據(jù)集,這些數(shù)據(jù)集更公平地代表了一個(gè)社會(huì),在這個(gè)社會(huì)里,我們渴望為每個(gè)人提供平等的機(jī)會(huì)。

當(dāng)訓(xùn)練和測(cè)試模型時(shí),大家可以依靠自己天生的公正感來(lái)幫助決定一個(gè)模型何時(shí)可以做出影響用戶生活的預(yù)測(cè)。如果得到的模型以我們希望的方式對(duì)待所有用戶,那么我們可以在晚上睡個(gè)好覺(jué)。它還可以幫助密切關(guān)注那些與大家不同的用戶的需求,特別是那些通常處于社會(huì)不利地位的用戶。如果需要更正式的理由來(lái)證明自己的行為,大家還可以學(xué)習(xí)更多關(guān)于統(tǒng)計(jì)學(xué)、哲學(xué)、倫理學(xué)、心理學(xué)、行為經(jīng)濟(jì)學(xué)和人類(lèi)學(xué)的知識(shí),來(lái)增強(qiáng)大家在本書(shū)中學(xué)到的計(jì)算機(jī)科學(xué)技能。

作為一名自然語(yǔ)言處理實(shí)踐者和機(jī)器學(xué)習(xí)工程師,大家有機(jī)會(huì)訓(xùn)練出比人類(lèi)做得更好的機(jī)器。老板和同事不會(huì)告訴大家應(yīng)該在訓(xùn)練集中添加或刪除哪些文本,大家自己有能力影響塑造整體社區(qū)和社會(huì)的機(jī)器的行為。

我們已經(jīng)為大家提供了一些關(guān)于如何組裝一個(gè)帶有更少偏見(jiàn)和更公平的數(shù)據(jù)集的想法?,F(xiàn)在,我們將展示如何使得到的模型與無(wú)偏見(jiàn)數(shù)據(jù)相擬合,以便它們?cè)诂F(xiàn)實(shí)世界中精確和有用。

D.2 模型擬合程度

對(duì)于所有機(jī)器學(xué)習(xí)模型,一個(gè)主要的挑戰(zhàn)是克服模型過(guò)度優(yōu)異的表現(xiàn)。什么是“過(guò)度優(yōu)異”呢?在處理所有模型中的樣本數(shù)據(jù)時(shí),給定的算法都可以很好地在給定數(shù)據(jù)集中找到模式。但是考慮到我們已經(jīng)知道訓(xùn)練集中所有給定樣本的標(biāo)簽(如果不知道其標(biāo)簽表明它不在訓(xùn)練集中),因此算法在訓(xùn)練樣本的上述預(yù)測(cè)結(jié)果不會(huì)特別有用。我們真正的目的是利用這些訓(xùn)練樣本來(lái)構(gòu)建一個(gè)有泛化能力的模型,能夠?yàn)橐粋€(gè)新樣本打上正確標(biāo)簽。盡管該樣本與訓(xùn)練集的樣本類(lèi)似,但是它是訓(xùn)練集以外的樣本。在訓(xùn)練集之外新樣本上的預(yù)測(cè)性能就是我們想優(yōu)化的目標(biāo)。

我們稱(chēng)能夠完美描述(并預(yù)測(cè))訓(xùn)練樣本的模型“過(guò)擬合”(overfit)(如圖D-1所示)。這樣的模型將很難或沒(méi)有能力描述新數(shù)據(jù)。它不是一個(gè)通用的模型,當(dāng)給出一個(gè)不在訓(xùn)練集中的樣本時(shí),很難相信它會(huì)做得很好。

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

圖D-1 訓(xùn)練樣本上的過(guò)擬合現(xiàn)象

相反,如果我們的模型在訓(xùn)練樣本上做出了許多錯(cuò)誤的預(yù)測(cè),并且在新樣本上也做得很差,則稱(chēng)它“欠擬合”(underfit)(如圖D-2所示)。在現(xiàn)實(shí)世界中,這兩種模型都對(duì)預(yù)測(cè)作用不大。因此,下面看看哪些技術(shù)能夠檢測(cè)出上述兩種擬合問(wèn)題,更重要的是,我們還會(huì)給出一些避免上述問(wèn)題的方法。

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

圖D-2 訓(xùn)練樣本上的欠擬合現(xiàn)象

D.3 數(shù)據(jù)集劃分

在機(jī)器學(xué)習(xí)實(shí)踐中,如果數(shù)據(jù)是黃金,那么標(biāo)注數(shù)據(jù)就是raritanium(某游戲里的一種珍貴資源)。我們的第一直覺(jué)可能是獲取帶標(biāo)注數(shù)據(jù)并把它們?nèi)總鬟f給模型。更多的訓(xùn)練數(shù)據(jù)會(huì)產(chǎn)生更有彈性的模型,對(duì)吧?但這使我們沒(méi)有辦法測(cè)試這個(gè)模型,只能心中希望它在現(xiàn)實(shí)世界中能產(chǎn)生好的結(jié)果。這顯然是不切實(shí)際的。解決方案是將帶標(biāo)注的數(shù)據(jù)拆分為兩個(gè)數(shù)據(jù)集,有時(shí)是3個(gè)數(shù)據(jù)集:一個(gè)訓(xùn)練集、一個(gè)驗(yàn)證集,在某些情況下還有一個(gè)測(cè)試集。

訓(xùn)練集是顯而易見(jiàn)的。在一輪訓(xùn)練中,驗(yàn)證集是我們保留的對(duì)模型隱藏的一小部分帶標(biāo)注數(shù)據(jù)。在驗(yàn)證集上獲得良好性能是驗(yàn)證經(jīng)過(guò)訓(xùn)練的模型在訓(xùn)練集之外的新數(shù)據(jù)上表現(xiàn)良好的第一步。大家經(jīng)常會(huì)看到將一個(gè)給定的標(biāo)注數(shù)據(jù)集按照訓(xùn)練與驗(yàn)證比80%/20%或70%/30%進(jìn)行劃分。測(cè)試集類(lèi)似于驗(yàn)證集,也是帶標(biāo)注訓(xùn)練數(shù)據(jù)的子集,用于測(cè)試模型并度量性能。但是這個(gè)測(cè)試集與驗(yàn)證集有什么不同呢?在組成上,它們其實(shí)沒(méi)有任何不同,區(qū)別在于使用它們的方法。

在訓(xùn)練集上對(duì)模型進(jìn)行訓(xùn)練時(shí),會(huì)有若干次迭代,迭代過(guò)程中會(huì)有不同的超參數(shù)。我們選擇的最終模型將是在驗(yàn)證集上執(zhí)行得最好的模型。但是這里有一個(gè)問(wèn)題,我們?nèi)绾沃雷约簺](méi)有優(yōu)化一個(gè)僅僅是高度擬合驗(yàn)證集的模型?我們沒(méi)有辦法驗(yàn)證該模型在其他數(shù)據(jù)上的性能是否良好。這就是我們的老板或論文的讀者最感興趣的地方——該模型在他們的數(shù)據(jù)上的效果到底如何?

因此,如果有足夠的數(shù)據(jù),需要將標(biāo)注數(shù)據(jù)集的第三部分作為測(cè)試集。這將使我們的讀者(或老板)更有信心,確信模型在訓(xùn)練和調(diào)優(yōu)過(guò)程中在從未看到的數(shù)據(jù)上也可以獲得很好的效果。一旦根據(jù)驗(yàn)證集性能選擇了經(jīng)過(guò)訓(xùn)練的模型,并且不再訓(xùn)練或調(diào)整模型,那么就可以對(duì)測(cè)試集中的每個(gè)樣本進(jìn)行預(yù)測(cè)(推理)。假如模型在第三部分?jǐn)?shù)據(jù)上表現(xiàn)良好,那么它就有不錯(cuò)的泛化性。為了得到這種具有高可信度的模型驗(yàn)證,大家經(jīng)常會(huì)看到數(shù)據(jù)集按照60%/20%/20%的訓(xùn)練/驗(yàn)證/測(cè)試比進(jìn)行劃分的情形。

提示 在對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練集、驗(yàn)證集和測(cè)試集的劃分之前,對(duì)數(shù)據(jù)集進(jìn)行重新排序是非常重要的。我們希望每個(gè)數(shù)據(jù)子集都是能代表“真實(shí)世界”的樣本,并且它們需要與期望看到的每個(gè)標(biāo)簽的比大致相同。如果訓(xùn)練集有25%的正向樣本和75%的負(fù)向樣本,那么同樣也希望測(cè)試集和驗(yàn)證集也有25%的正向樣本和75%的負(fù)向樣本。如果原始數(shù)據(jù)集的前面都是負(fù)向樣本,并且在將數(shù)據(jù)集劃分為50%/50%比的訓(xùn)練集/測(cè)試集前沒(méi)有打亂數(shù)據(jù),那么在訓(xùn)練集中將得到100%的負(fù)向樣本,而在測(cè)試集中將得到50%的負(fù)向樣本。這種情況下,模型永遠(yuǎn)不能從數(shù)據(jù)集中的正向樣本中學(xué)習(xí)。

D.4 交叉擬合訓(xùn)練

另一個(gè)劃分訓(xùn)練集/測(cè)試集的方法是交叉驗(yàn)證或者k折交叉驗(yàn)證(如圖D-3所示)。交叉驗(yàn)證背后的概念和我們剛討論過(guò)的數(shù)據(jù)劃分非常相似,但是它允許使用所有的帶標(biāo)記數(shù)據(jù)集進(jìn)行訓(xùn)練。這個(gè)過(guò)程將訓(xùn)練集劃分為k等分,或者說(shuō)k折。然后通過(guò)將− 1份數(shù)據(jù)作為訓(xùn)練集訓(xùn)練模型并在第k份數(shù)據(jù)上進(jìn)行驗(yàn)證。之后將第一次嘗試中用作訓(xùn)練的− 1份數(shù)據(jù)中的一份數(shù)據(jù)作為驗(yàn)證集,剩下的− 1份數(shù)據(jù)成為新訓(xùn)練集,進(jìn)行重新訓(xùn)練。

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

圖D-3 k折交叉驗(yàn)證

該技術(shù)對(duì)于分析模型的結(jié)構(gòu)和尋找對(duì)各個(gè)驗(yàn)證數(shù)據(jù)性能表現(xiàn)良好的超參數(shù)具有重要價(jià)值。一旦選擇了超參數(shù),還需要選擇表現(xiàn)最好的經(jīng)過(guò)訓(xùn)練的模型,因此很容易受到上一節(jié)所表述的偏見(jiàn)的影響,因此,在此過(guò)程中仍然建議保留一份測(cè)試集。

這種方法還提供了關(guān)于模型可靠性的一些新信息。我們可以計(jì)算一個(gè)P值,表示模型發(fā)現(xiàn)的輸入特征和輸出預(yù)測(cè)之間的關(guān)系的可能性在統(tǒng)計(jì)上是顯著的,而不是隨機(jī)選擇的結(jié)果。如果訓(xùn)練集確實(shí)是真實(shí)世界的代表性樣本,那么這將是一個(gè)非常重要的新信息。

這種對(duì)模型有額外信心的代價(jià)是,需要k倍的訓(xùn)練時(shí)間來(lái)進(jìn)行k折的交叉驗(yàn)證。所以,如果想要得到關(guān)于問(wèn)題的90%的答案,通??梢院?jiǎn)單地做1折交叉驗(yàn)證。這個(gè)驗(yàn)證方法與我們之前做的訓(xùn)練集/驗(yàn)證集劃分方法完全相同。我們不會(huì)對(duì)模型這個(gè)對(duì)真實(shí)世界的動(dòng)態(tài)描述的可靠性有100%的信心,但是如果它在測(cè)試集中表現(xiàn)良好,也可以非常自信地認(rèn)為它是預(yù)測(cè)目標(biāo)變量的有用模型。所以通過(guò)這種實(shí)用方法得到的機(jī)器學(xué)習(xí)模型對(duì)大多數(shù)商業(yè)應(yīng)用來(lái)說(shuō)都是有意義的。

D.5 抑制模型

在model.fit()中,梯度下降過(guò)分熱衷于追求降低模型中可能出現(xiàn)的誤差。這可能導(dǎo)致過(guò)擬合,即學(xué)到的模型在訓(xùn)練集上效果很好,但是在新的未見(jiàn)樣本集(測(cè)試集)上卻效果很差。因此,我們可能希望“保留”對(duì)模型的控制。以下是3種方法:

  • 正則化;
  • 隨機(jī)dropout;
  • 批歸一化。

D.5.1 正則化

在所有機(jī)器學(xué)習(xí)模型中,最終都會(huì)出現(xiàn)過(guò)擬合。幸運(yùn)的是,有幾種工具可以解決這個(gè)問(wèn)題。第一個(gè)是正則化,它是對(duì)每個(gè)訓(xùn)練步驟的學(xué)習(xí)參數(shù)的懲罰。它通常但不總是參數(shù)本身的一個(gè)因子。其中,L1范數(shù)和L2范數(shù)是最常見(jiàn)的做法。

L1正則化:

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

L1是所有參數(shù)(權(quán)重)的絕對(duì)值與某個(gè)λ(超參數(shù))乘積的和,通常是0到1之間的一個(gè)小浮點(diǎn)數(shù)。這個(gè)和應(yīng)用于權(quán)重的更新——其思想是,較大的權(quán)重會(huì)產(chǎn)生較大的懲罰,因此鼓勵(lì)模型使用更多的、均勻的權(quán)重……

L2正則化:

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

類(lèi)似地,L2是一種權(quán)重懲罰,但定義略有不同。這種情況下,它是權(quán)重的平方與某個(gè)λ乘積的和,這個(gè)λ值是一個(gè)要在訓(xùn)練前選擇的單獨(dú)超參數(shù)。

D.5.2 dropout

在神經(jīng)網(wǎng)絡(luò)中,dropout是另一個(gè)解決過(guò)擬合的辦法——乍一看似乎很神奇。dropout的概念是,在神經(jīng)網(wǎng)絡(luò)的任何一層,我們都會(huì)在訓(xùn)練的時(shí)候,按一定比例關(guān)閉通過(guò)這一層的信號(hào)。注意,這只發(fā)生在訓(xùn)練期間,而不是推理期間。在所有訓(xùn)練過(guò)程中,網(wǎng)絡(luò)層中一部分神經(jīng)元子集都會(huì)被“忽略”,這些輸出值被顯式地設(shè)置為零。因?yàn)樗鼈儗?duì)預(yù)測(cè)結(jié)果沒(méi)有輸入,所以在反向傳播步驟中不會(huì)進(jìn)行權(quán)重更新。在下一個(gè)訓(xùn)練步驟中,將選擇層中不同權(quán)重的子集,并將其他權(quán)重歸零。

一個(gè)在任何時(shí)間都有20%處于關(guān)閉狀態(tài)的大腦的網(wǎng)絡(luò)該如何學(xué)習(xí)呢?其思想是,沒(méi)有一個(gè)特定的權(quán)重路徑可以完全定義數(shù)據(jù)的特定屬性。該模型必須泛化其內(nèi)部結(jié)構(gòu),以便該模型通過(guò)神經(jīng)元的多條路徑都能夠處理數(shù)據(jù)。

被關(guān)閉的信號(hào)的百分比被定義為超參數(shù),因?yàn)樗且粋€(gè)介于0和1之間的浮點(diǎn)數(shù)。在實(shí)踐中,從0.1到0.5的dropout通常是最優(yōu)的,當(dāng)然,這是依賴(lài)模型的。在推理過(guò)程中,dropout會(huì)被忽略,從而充分利用訓(xùn)練后的權(quán)值對(duì)新數(shù)據(jù)進(jìn)行處理。

Keras提供了一種非常簡(jiǎn)單的實(shí)現(xiàn)方法,可以在本書(shū)的示例和代碼清單D-1中看到。

代碼清單D-1 Keras中的dropout層會(huì)減少過(guò)擬合

  1. >>> from keras.models import Sequential 
  2. >>> from keras.layers import Dropout, LSTM, Flatten, Dense  
  3. >>> num_neurons = 20  
  4. >>> maxlen = 100 
  5. >>> embedding_dims = 300 
  6. >>> model = Sequential() >>> model.add(LSTM(num_neurons, return_sequences=True, 
  7. ...                input_shape=(maxlen, embedding_dims)))>>> model.add(Dropout(.2))    
  8. >>> model.add(Flatten()) 
  9. >>> model.add(Dense(1, activation='sigmoid')) 

D.5.3 批歸一化

神經(jīng)網(wǎng)絡(luò)中一個(gè)稱(chēng)為批歸一化的新概念可以幫助對(duì)模型進(jìn)行標(biāo)準(zhǔn)化和泛化。批歸一化的思想是,與輸入數(shù)據(jù)非常相似,每個(gè)網(wǎng)絡(luò)層的輸出應(yīng)該歸一化為0到1之間的值。關(guān)于如何、為什么、什么時(shí)候這樣做是有益的,以及在什么條件下應(yīng)該使用它,仍然存在一些爭(zhēng)議。我們希望大家自己去對(duì)這個(gè)研究方向進(jìn)行探索。

但是Keras的BatchNormalization層提供了一個(gè)簡(jiǎn)單的實(shí)現(xiàn)方法,如代碼清單D-2所示。

代碼清單D-2 歸一化BatchNormalization

  1. >>> from keras.models import Sequential 
  2. >>> from keras.layers import Activation, Dropout, LSTM, Flatten, Dense 
  3. >>> from keras.layers.normalization import BatchNormalization 
  4. >>> model = Sequential()>>> model.add(Dense(64, input_dim=14)) 
  5. >>> model.add(BatchNormalization()) 
  6. >>> model.add(Activation('sigmoid')) 
  7. >>> model.add(Dense(64, input_dim=14)) 
  8. >>> model.add(BatchNormalization()) 
  9. >>> model.add(Activation('sigmoid')) 
  10. >>> model.add(Dense(1, activation='sigmoid')) 

D.6 非均衡訓(xùn)練集

機(jī)器學(xué)習(xí)模型的好壞取決于提供給它們的數(shù)據(jù)。只有當(dāng)樣本中涵蓋了希望在預(yù)測(cè)階段的所有情況時(shí),擁有大量的數(shù)據(jù)才有幫助,并且數(shù)據(jù)集涵蓋每種情況僅僅一次是不夠的。想象一下我們正試圖預(yù)測(cè)一副圖像到底是一只狗還是一只貓。這時(shí)我們手里有一個(gè)訓(xùn)練集,里面包含20 000張貓的照片,但是狗的照片只有200張。如果要在這個(gè)數(shù)據(jù)集中訓(xùn)練一個(gè)模型,那么這個(gè)模型很可能只是簡(jiǎn)單地學(xué)會(huì)將任何給定的圖像都預(yù)測(cè)為一只貓,而不管輸入是什么。從模型的角度來(lái)說(shuō),這個(gè)結(jié)果還可以接受,對(duì)不對(duì)?我的意思是,對(duì)99%的訓(xùn)練樣本的預(yù)測(cè)結(jié)果都是正確的。當(dāng)然,這個(gè)觀點(diǎn)實(shí)際完全站不住腳,這個(gè)模型毫無(wú)價(jià)值。但是,完全超出了特定模型的范圍之外,造成這種失敗的最可能原因是非均衡訓(xùn)練集。

模型可能會(huì)非常關(guān)注訓(xùn)練集,其原因很簡(jiǎn)單,來(lái)自標(biāo)記數(shù)據(jù)中過(guò)采樣類(lèi)的信號(hào)會(huì)壓倒來(lái)自欠采樣類(lèi)的信號(hào)。權(quán)重將更經(jīng)常地由主類(lèi)信號(hào)的誤差進(jìn)行更新,而來(lái)自小類(lèi)的信號(hào)將被忽視。獲得每個(gè)類(lèi)的絕對(duì)均勻表示并不重要,因?yàn)槟P妥约耗軌蚩朔恍┰肼?。這里的目標(biāo)只是讓類(lèi)的比例達(dá)到均衡水平。

與任何機(jī)器學(xué)習(xí)任務(wù)一樣,第一步是長(zhǎng)時(shí)間、仔細(xì)地查看數(shù)據(jù),了解一些細(xì)節(jié),并對(duì)數(shù)據(jù)實(shí)際表示的內(nèi)容進(jìn)行一些粗略的統(tǒng)計(jì)。不僅要知道有多少數(shù)據(jù),還要知道有多少種類(lèi)的數(shù)據(jù)。

那么,如果事情從一開(kāi)始就沒(méi)有特別之處,大家會(huì)怎么做呢?如果目標(biāo)是使類(lèi)的表示均勻(確實(shí)如此),則有3個(gè)主要方法可供選擇:過(guò)采樣、欠采樣和數(shù)據(jù)增強(qiáng)。

D.6.1 過(guò)采樣

過(guò)采樣是一種重復(fù)采樣來(lái)自一個(gè)或多個(gè)欠表示類(lèi)的樣本的技術(shù)。我們以先前的狗/貓分類(lèi)示例為例(只有200只狗,有20 000只貓)。我們可以簡(jiǎn)單地重復(fù)100次已有的200張狗的圖像,最終得到40 000個(gè)樣本,其中一半是狗,一半是貓。

這是一個(gè)極端的例子,因此會(huì)導(dǎo)致自身固有的問(wèn)題。這個(gè)網(wǎng)絡(luò)很可能會(huì)很好地識(shí)別出這200只特定的狗,而不能很好地推廣到其他不在訓(xùn)練集中的狗。但是,在不那么極端不平衡的情況下,過(guò)采樣技術(shù)肯定有助于平衡訓(xùn)練集。

D.6.2 欠采樣

欠采樣是同一枚硬幣的反面。在這里,就是從過(guò)度表示的類(lèi)中刪除部分樣本。在上面的貓/狗示例中,我們將隨機(jī)刪除19 800張貓的圖片,這樣就會(huì)剩下400個(gè)樣本,其中一半是狗,一半是貓。當(dāng)然,這樣做本身也有一個(gè)突出的問(wèn)題,就是我們拋棄了絕大多數(shù)的數(shù)據(jù),而只在一個(gè)不那么寬泛的數(shù)據(jù)基礎(chǔ)上進(jìn)行研究。上述例子中這樣的極端做法并不理想,但是如果欠表示類(lèi)本身包含大量的樣本,那么上述極端做法可能是一個(gè)很好的解決方案。當(dāng)然,擁有這么多數(shù)據(jù)絕對(duì)是太奢侈了。

D.6.3 數(shù)據(jù)增強(qiáng)

數(shù)據(jù)增強(qiáng)有點(diǎn)兒棘手,但在適當(dāng)?shù)那闆r下它可以給我們帶來(lái)幫助。增強(qiáng)的意思是生成新的數(shù)據(jù),或者從現(xiàn)有數(shù)據(jù)的擾動(dòng)中生成,或者重新生成。AffNIST就是這樣一個(gè)例子。著名的MNIST數(shù)據(jù)集由一組手寫(xiě)的0~9數(shù)字組成(如圖D-4所示)。AffNIST在保留原始標(biāo)簽的同時(shí),以各種方式對(duì)每個(gè)數(shù)字進(jìn)行傾斜、旋轉(zhuǎn)和縮放。

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

圖D-4 最左側(cè)列中的條目是原始MNIST中的樣本,其他列都是經(jīng)仿射
轉(zhuǎn)換后包含在affNIST中的數(shù)據(jù)(圖片經(jīng)“affNIST”授權(quán))

這種特別的做法的目的并不是平衡訓(xùn)練集,而是使像卷積神經(jīng)網(wǎng)絡(luò)一樣的網(wǎng)絡(luò)對(duì)以其他方式編寫(xiě)的新數(shù)據(jù)更具彈性,但這里數(shù)據(jù)增強(qiáng)的概念仍然適用。

不過(guò),大家必須小心,添加不能真正代表待建模型數(shù)據(jù)的數(shù)據(jù)有可能弊大于利。假設(shè)數(shù)據(jù)集是之前的200只狗和20 000只貓組成的圖片集。我們進(jìn)一步假設(shè)這些圖像都是在理想條件下拍攝的高分辨率彩色圖像。現(xiàn)在,給19 000名幼兒園教師一盒蠟筆并不一定能得到想要的增強(qiáng)數(shù)據(jù)。因此,考慮一下增強(qiáng)的數(shù)據(jù)會(huì)對(duì)模型產(chǎn)生什么樣的影響。答案并不是在任何時(shí)候都清晰無(wú)比,所以如果一定要沿著這條路徑走下去的話,在驗(yàn)證模型時(shí)請(qǐng)記住模型的影響這一點(diǎn),并努力圍繞其邊緣進(jìn)行測(cè)試,以確保沒(méi)有無(wú)意中引入意外的行為。

最后,再說(shuō)一件可能價(jià)值最小的事情,但這的確是事實(shí):如果數(shù)據(jù)集“不完整”,那么首先應(yīng)該考慮回到原來(lái)的數(shù)據(jù)源中尋找額外的數(shù)據(jù)。這種做法并不總是可行,但至少應(yīng)該把它當(dāng)作一種選擇。

D.7 性能指標(biāo)

任何機(jī)器學(xué)習(xí)流水線中最重要的部分都是性能指標(biāo)。如果不知道學(xué)到的機(jī)器學(xué)習(xí)模型運(yùn)行得有多好,就無(wú)法讓它變得更好。當(dāng)啟動(dòng)機(jī)器學(xué)習(xí)流水線時(shí),要做的第一件事是在任何sklearn機(jī)器學(xué)習(xí)模型上設(shè)置一個(gè)性能度量方法,例如“.score()”。然后我們構(gòu)建一個(gè)完全隨機(jī)的分類(lèi)/回歸流水線,并在最后計(jì)算性能分?jǐn)?shù)。這使我們能夠?qū)α魉€進(jìn)行增量式改進(jìn),從而逐步提高分?jǐn)?shù),以便更接近最終的目標(biāo)。這也是讓老板和同事確信大家走在正確的軌道上的好方法。

D.7.1 分類(lèi)的衡量指標(biāo)

對(duì)分類(lèi)器而言,我們希望它做對(duì)兩件事:一是用類(lèi)標(biāo)簽標(biāo)記真正屬于該類(lèi)的對(duì)象,二是不用這個(gè)標(biāo)簽去標(biāo)記不屬于此類(lèi)的對(duì)象。這兩件事對(duì)應(yīng)得到的正確計(jì)數(shù)值分別稱(chēng)為真陽(yáng)(true positive)和真陰(true negative)。如果有一個(gè)numpy數(shù)組包含模型分類(lèi)或預(yù)測(cè)的所有結(jié)果,那么就可以計(jì)算出正確的預(yù)測(cè)結(jié)果,如代碼清單D-3所示。

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

代碼清單D-4 計(jì)算模型得到的錯(cuò)誤結(jié)果

自然語(yǔ)言處理實(shí)戰(zhàn):機(jī)器學(xué)習(xí)常見(jiàn)工具與技術(shù)

有時(shí),這4個(gè)數(shù)合并成一個(gè)4 × 4矩陣,稱(chēng)為誤差矩陣或混淆矩陣。代碼清單D-5給出了混淆矩陣中預(yù)測(cè)值和真實(shí)值的樣子。

代碼清單D-5 混淆矩陣

  1. >>> confusion = [[true_positives, false_positives], 
  2. ...              [false_negatives, true_negatives]]>>> confusion[[43], [12]] 
  3. >>> import pandas as pd 
  4. >>> confusion = pd.DataFrame(confusion, columns=[10], index=[10]) 
  5. >>> confusion.index.name = r'pred \ truth' 
  6. >>> confusion              1   0 
  7. pred \ truth 1             4   1  
  8. 0             3   2 

在混淆矩陣中,我們希望對(duì)角線(左上角和右下角)上的數(shù)字較大,希望對(duì)角線外的數(shù)字(左上角和左下角)較小。然而,正向類(lèi)和負(fù)向類(lèi)的順序是任意的,所以有時(shí)可能會(huì)看到這個(gè)表的數(shù)字被調(diào)換了位置。請(qǐng)始終標(biāo)記好混淆矩陣的列和下標(biāo)。有時(shí)可能會(huì)聽(tīng)到統(tǒng)計(jì)學(xué)家把這個(gè)矩陣稱(chēng)為分類(lèi)器列聯(lián)表,但如果堅(jiān)持使用“混淆矩陣”這個(gè)名字的話,就可以避免混淆。

對(duì)于機(jī)器學(xué)習(xí)分類(lèi)問(wèn)題,有兩種有用的方法可以將這4種計(jì)數(shù)值中的一些指標(biāo)組合成一個(gè)性能指標(biāo):正確率(precision)和召回率(recall)。信息檢索(搜索引擎)和語(yǔ)義搜索就是此分類(lèi)問(wèn)題的例子,因?yàn)槟抢锏哪繕?biāo)是將文檔分為(和輸入查詢(xún))匹配或不匹配兩類(lèi)。第2章中,我們學(xué)習(xí)過(guò)詞干還原和詞形歸并如何能夠提高召回率,但同時(shí)降低了正確率。

正確率度量的是模型在檢測(cè)所感興趣類(lèi)的所有對(duì)象(稱(chēng)為正向類(lèi))的能力,因此它也被稱(chēng)為正向預(yù)測(cè)值(positive predictive value)。由于真陽(yáng)是預(yù)測(cè)正確的正向類(lèi)樣本數(shù)目,而假陽(yáng)是錯(cuò)誤地標(biāo)記為正向類(lèi)的負(fù)向類(lèi)樣本數(shù)目,因此可以按照代碼清單D-6所示來(lái)計(jì)算正確率。

代碼清單D-6 正確率

  1. >>> precision = true_positives / (true_positives + false_positives) 
  2. >>> precision0.571... 

上述例子中的混淆矩陣給出了約57%的正確率,因?yàn)樵谒蓄A(yù)測(cè)為正向類(lèi)的樣本中有約57%是正確的。

召回率和正確率類(lèi)似,它也被稱(chēng)為靈敏度、真陽(yáng)率或查全率。因?yàn)閿?shù)據(jù)集中的樣本總數(shù)是真陽(yáng)(true positive)和假陰(false negative)的和,所以可以計(jì)算召回率,即檢測(cè)到的預(yù)測(cè)正確的正向類(lèi)樣本占所有樣本的百分比,代碼如代碼清單D-7所示。

代碼清單D-7 召回率

  1. >>> recall = true_positives / (true_positives + false_negatives) 
  2. >>> recall0.8 

這就是說(shuō)上面例子中得到的模型檢測(cè)到了數(shù)據(jù)集中80%的正向類(lèi)樣本。

D.7.2 回歸的衡量指標(biāo)

用于機(jī)器學(xué)習(xí)回歸問(wèn)題的兩個(gè)最常見(jiàn)的性能評(píng)價(jià)指標(biāo)是均方根誤差(RMSE)和皮爾遜相關(guān)系數(shù)(R2)。事實(shí)證明,分類(lèi)問(wèn)題背后實(shí)際上是回歸問(wèn)題。因此,如果類(lèi)標(biāo)簽已經(jīng)轉(zhuǎn)換為數(shù)字(就像我們?cè)谏弦还?jié)中所做的那樣),就可以在其上使用回歸度量方法。下面的代碼示例將復(fù)用上一節(jié)的那些預(yù)測(cè)值和真實(shí)值。RMSE對(duì)于大多數(shù)問(wèn)題是最有用的,因?yàn)樗o出的是預(yù)測(cè)值與真實(shí)值可能的相差程度。RMSE給出的是誤差的標(biāo)準(zhǔn)偏差,如代碼清單D-8所示。

代碼清單D-8 均方根誤差(RMSE)

  1. >>> y_true = np.array([0001111111]) 
  2. >>> y_pred = np.array([0011111000]) 
  3. >>> rmse = np.sqrt((y_true - y_pred) ** 2) / len(y_true)) 
  4. >>> rmse 
  5. 0.632... 

皮爾遜相關(guān)系數(shù)是回歸函數(shù)的另一個(gè)常見(jiàn)性能指標(biāo)。sklearn模塊默認(rèn)將其作為.score()函數(shù)附加到大多數(shù)模型上。如果大家不清楚這些指標(biāo)如何計(jì)算的話,那么應(yīng)該手動(dòng)計(jì)算一下找找感覺(jué)。相關(guān)系數(shù)的計(jì)算參見(jiàn)代碼清單D-9。

代碼清單D-9 相關(guān)系數(shù)

  1. >>> corr = pd.DataFrame([y_true, y_pred]).T.corr() 
  2. >>> corr[0][1
  3. 0.218...>>> np.mean((y_pred - np.mean(y_pred)) * (y_true - np.mean(y_true))) / 
  4. ...     np.std(y_pred) / np.std(y_true) 
  5. 0.218... 

由此可見(jiàn)我們的樣本預(yù)測(cè)值與真實(shí)值的相關(guān)度只有28%。

D.8 專(zhuān)業(yè)技巧

一旦掌握了基本知識(shí),那么下面這些簡(jiǎn)單的技巧將有助于更快地建立良好的模型:

  • 使用數(shù)據(jù)集中的一個(gè)小的隨機(jī)樣本子集來(lái)發(fā)現(xiàn)流水線的可能缺陷;.
  • 當(dāng)準(zhǔn)備將模型部署到生產(chǎn)環(huán)境中時(shí),請(qǐng)使用所有的數(shù)據(jù)來(lái)訓(xùn)練模型;
  • 首先應(yīng)該嘗試自己最了解的方法,這個(gè)技巧也適用于特征提取和模型本身;
  • 在低維特征和目標(biāo)上使用散點(diǎn)圖和散點(diǎn)矩陣,以確保沒(méi)有遺漏一些明顯的模式;
  • 繪制高維數(shù)據(jù)作為原始圖像,以發(fā)現(xiàn)特征的轉(zhuǎn)移**;
  • 當(dāng)希望最大化向量對(duì)之間的差異時(shí),可以嘗試對(duì)高維數(shù)據(jù)使用PCA(對(duì)NLP數(shù)據(jù)使用LSA);
  • 當(dāng)希望在低維空間中進(jìn)行回歸或者尋找匹配的向量對(duì)時(shí),可以使用非線性降維,如t-SNE;
  • 構(gòu)建一個(gè)sklearn.Pipeline對(duì)象,以提高模型和特性提取器的可維護(hù)性和可復(fù)用性;
  • 使超參數(shù)的調(diào)優(yōu)實(shí)現(xiàn)自動(dòng)化,這樣模型就可以了解數(shù)據(jù),大家就可以花時(shí)間學(xué)習(xí)機(jī)器學(xué)習(xí)。

超參數(shù)調(diào)優(yōu) 超參數(shù)是所有那些確定流水線性能的值,包括模型類(lèi)型及其配置方式等。超參數(shù)還可以是神經(jīng)網(wǎng)絡(luò)中包含的神經(jīng)元數(shù)和層數(shù),或者是sklearn.linear_model.Ridge嶺回歸模型中的alpha值。超參數(shù)還包括控制所有預(yù)處理步驟的值,例如分詞類(lèi)型、所有忽略的詞列表、TF-IDF詞匯表的最小和最大文檔頻率、是否使用詞形歸并、TF-IDF歸一化方法等。

超參數(shù)調(diào)優(yōu)可能是一個(gè)十分緩慢的過(guò)程,因?yàn)槊總€(gè)實(shí)驗(yàn)都需要訓(xùn)練和驗(yàn)證一個(gè)新模型。因此,在搜索范圍廣泛的超參數(shù)時(shí),我們需要將數(shù)據(jù)集減小到具有代表性的最小樣本集。當(dāng)搜索接近滿足需求的最終模型時(shí),可以增加數(shù)據(jù)集的大小,以使用盡可能多的所需數(shù)據(jù)。

優(yōu)化流水線的超參數(shù)是提高模型性能的方法。實(shí)現(xiàn)超參數(shù)調(diào)優(yōu)自動(dòng)化可以節(jié)省更多的時(shí)間來(lái)閱讀本書(shū)這樣的書(shū)籍,或者可視化和分析最后的結(jié)果。當(dāng)然大家仍然可以通過(guò)直覺(jué)設(shè)置要嘗試的超參數(shù)范圍來(lái)指導(dǎo)調(diào)優(yōu)。

提示 超參數(shù)調(diào)優(yōu)最有效的算法是(從最好到最差):

(1)貝葉斯搜索;

(2)遺傳算法;

(3)隨機(jī)搜索;

(4)多分辨率網(wǎng)格搜索;

(5)網(wǎng)格搜索。

但是無(wú)論如何,在大家進(jìn)入夢(mèng)鄉(xiāng)時(shí)工作的所有計(jì)算機(jī)搜索算法,都比手動(dòng)猜測(cè)一個(gè)個(gè)新參數(shù)好。

本文摘自《自然語(yǔ)言處理實(shí)戰(zhàn) 利用Python理解、分析和生成文》

 

責(zé)任編輯:張燕妮 來(lái)源: 今日頭條
相關(guān)推薦

2023-08-03 09:56:47

自然語(yǔ)言AI

2017-10-19 17:05:58

深度學(xué)習(xí)自然語(yǔ)言

2020-02-25 12:00:53

自然語(yǔ)言開(kāi)源工具

2020-02-25 23:28:50

工具代碼開(kāi)發(fā)

2021-06-28 10:10:42

人工智能AI自然語(yǔ)言

2021-05-13 07:17:13

Snownlp自然語(yǔ)言處理庫(kù)

2017-05-05 15:34:49

自然語(yǔ)言處理

2022-03-29 09:58:15

自然語(yǔ)言處理人工智能技術(shù)

2021-08-17 15:47:12

機(jī)器學(xué)習(xí)自然語(yǔ)言神經(jīng)網(wǎng)絡(luò)

2017-04-10 16:15:55

人工智能深度學(xué)習(xí)應(yīng)用

2020-04-24 10:53:08

自然語(yǔ)言處理NLP是人工智能

2024-02-05 14:18:07

自然語(yǔ)言處理

2021-05-17 09:00:00

自然語(yǔ)言人工智能技術(shù)

2019-03-25 22:03:40

開(kāi)源自然語(yǔ)言NLP

2021-05-18 07:15:37

Python

2024-04-24 11:38:46

語(yǔ)言模型NLP人工智能

2017-06-29 13:02:54

大數(shù)據(jù)自然語(yǔ)言NLP

2021-08-30 18:32:05

人工智能AI自然語(yǔ)言處理

2018-04-04 12:00:00

2021-09-03 12:01:07

模型自然語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)