Google發(fā)布了關(guān)于機(jī)器學(xué)習(xí)(ML)工程的最佳實(shí)踐文檔,旨在幫助已掌握ML基礎(chǔ)知識(shí)的人員從谷歌機(jī)器學(xué)習(xí)的最佳實(shí)踐中受益。它介紹了一種ML樣式,類似于 Google C++ 樣式指南和其他常用的實(shí)用編程指南。
本文檔旨在幫助已掌握ML基礎(chǔ)知識(shí)的人員從谷歌機(jī)器學(xué)習(xí)的最佳實(shí)踐中受益。它介紹了一種ML樣式,類似于 Google C++ 樣式指南和其他常用的實(shí)用編程指南。如果您學(xué)習(xí)過(guò)ML方面的課程,或者擁有ML模型的構(gòu)建或開發(fā)經(jīng)驗(yàn),則具備閱讀本文檔所必需的背景知識(shí)。
術(shù)語(yǔ)
在我們討論有效的ML的過(guò)程中,會(huì)反復(fù)提到下列術(shù)語(yǔ):
實(shí)例:要對(duì)其進(jìn)行預(yù)測(cè)的事物。例如,實(shí)例可以是一個(gè)網(wǎng)頁(yè),您希望將其分類為 "與貓相關(guān)" 或 "與貓無(wú)關(guān)"。
標(biāo)簽:預(yù)測(cè)任務(wù)的答案,它可以是由ML系統(tǒng)生成的答案,也可以是訓(xùn)練數(shù)據(jù)中提供的正確答案。例如,某個(gè)網(wǎng)頁(yè)的標(biāo)簽可能是 "與貓相關(guān)"。
特征:預(yù)測(cè)任務(wù)中使用的實(shí)例的屬性。例如,某個(gè)網(wǎng)頁(yè)可能具有 "包含字詞'貓'" 這一特征。
特征列:一組相關(guān)特征,例如用戶可能居住的所有國(guó)家/地區(qū)的集合。樣本的特征列中可能包含一個(gè)或多個(gè)特征。"特征列" 是 Google 專用的術(shù)語(yǔ)。特征列在 Yahoo/Microsoft 使用的 VM 系統(tǒng)中被稱為 "命名空間" 或場(chǎng)。
樣本:一個(gè)實(shí)例(及其特征)和一個(gè)標(biāo)簽。
模型:預(yù)測(cè)任務(wù)的統(tǒng)計(jì)表示法。您使用樣本訓(xùn)練一個(gè)模型,然后使用該模型進(jìn)行預(yù)測(cè)。
指標(biāo):您關(guān)心的一個(gè)數(shù)值。也許(但不一定)可以直接得到優(yōu)化。
目標(biāo):算法嘗試優(yōu)化的一種指標(biāo)。
管道:ML算法的基礎(chǔ)架構(gòu)。管道包括從前端收集數(shù)據(jù)、將數(shù)據(jù)放入訓(xùn)練數(shù)據(jù)文件、訓(xùn)練一個(gè)或多個(gè)模型以及將模型運(yùn)用到生產(chǎn)環(huán)境。
點(diǎn)擊率:點(diǎn)擊廣告中的鏈接的網(wǎng)頁(yè)訪問者所占的百分比。
概覽
要打造優(yōu)質(zhì)的產(chǎn)品:
請(qǐng)把自己看成是一位出色的工程師,而不是一位ML專家。
實(shí)際上,您將面臨的大部分問題都是工程問題。即使在使用出色的ML專家掌握的所有資源的情況下,大多數(shù)收獲也是由合適的特征(而非精確的機(jī)器學(xué)習(xí)算法)帶來(lái)的。所以,進(jìn)行ML的基本方法是:
確保管道從頭到尾都穩(wěn)固可靠。
從制定合理的目標(biāo)開始。
以簡(jiǎn)單的方式添加常識(shí)性特征。
確保管道始終穩(wěn)固可靠。
上述方法將在長(zhǎng)時(shí)間內(nèi)取得很好的效果。只要您仍然可以通過(guò)某種簡(jiǎn)單的技巧取得進(jìn)展,就不應(yīng)該偏離上述方法。增加復(fù)雜性會(huì)減緩未來(lái)版本的發(fā)布。
當(dāng)您充分利用了所有的簡(jiǎn)單技巧,或許就到了探索ML最前沿技術(shù)的時(shí)候了。請(qǐng)參閱第三階段的 "ML項(xiàng)目" 部分。
本文檔結(jié)構(gòu)如下:
第一部分可幫助您了解構(gòu)建ML系統(tǒng)的時(shí)機(jī)是否已經(jīng)成熟。
第二部分介紹了如何部署第一個(gè)管道。
第三部分介紹了在向管道添加新特征時(shí)如何進(jìn)行發(fā)布和迭代、如何評(píng)估模型,以及如何應(yīng)對(duì)訓(xùn)練 - 應(yīng)用偏差。
最后一部分介紹了當(dāng)您達(dá)到穩(wěn)定階段時(shí)該怎么做。
之后是相關(guān)資源列表和附錄,附錄針對(duì)多次作為示例在本文檔中提及的系統(tǒng),提供了一些背景信息。
在進(jìn)行ML之前
第 1 條規(guī)則:不要害怕發(fā)布未采用ML技術(shù)的產(chǎn)品。
ML技術(shù)很酷,但它需要數(shù)據(jù)。從理論上講,您可以采用來(lái)自其他問題的數(shù)據(jù),然后針對(duì)新產(chǎn)品調(diào)整模型,但其效果很可能不如基本的啟發(fā)式算法。如果您認(rèn)為ML技術(shù)能為您帶來(lái) 100% 的提升,那么啟發(fā)式算法可為您帶來(lái) 50% 的提升。
例如,如果您要對(duì)應(yīng)用市場(chǎng)中的應(yīng)用進(jìn)行排名,則可以將安裝率或安裝次數(shù)作為啟發(fā)式算法指標(biāo)。如果您要檢測(cè)垃圾郵件,則可以濾除以前發(fā)送過(guò)垃圾郵件的發(fā)布商。此外,也不要害怕手動(dòng)修改。如果您需要對(duì)聯(lián)系人進(jìn)行排名,可以按使用聯(lián)系人的時(shí)間順序由近及遠(yuǎn)對(duì)其排序(或按字母順序排序)。如果您的產(chǎn)品并非必須使用ML技術(shù),則在獲得足夠的數(shù)據(jù)之前,請(qǐng)勿使用該技術(shù)。
第 2 條規(guī)則:首先設(shè)計(jì)并實(shí)現(xiàn)指標(biāo)。
在正式確定ML系統(tǒng)的功能之前,盡可能在當(dāng)前系統(tǒng)中跟蹤指標(biāo)的值。這樣做的原因如下:
提前行動(dòng)有助于更輕松地從系統(tǒng)的用戶獲得授權(quán)。
如果您認(rèn)為將來(lái)可能需要考慮某個(gè)方面,最好立即開始收集相關(guān)歷史數(shù)據(jù)。
如果您在設(shè)計(jì)系統(tǒng)時(shí)考慮到指標(biāo)測(cè)量,將來(lái)會(huì)省下很多力氣。具體而言,您不希望自己以后在日志中苦苦查找字符串以測(cè)量指標(biāo)!
您將發(fā)現(xiàn)哪些內(nèi)容發(fā)生了變化以及哪些內(nèi)容始終未變。例如,假設(shè)您希望直接優(yōu)化單日活躍用戶數(shù)。但是,在早期操縱系統(tǒng)的過(guò)程中,您可能會(huì)發(fā)現(xiàn)用戶體驗(yàn)的顯著改變并沒有使該指標(biāo)發(fā)生明顯變化。
Google+ 團(tuán)隊(duì)會(huì)衡量每次閱讀的展開、轉(zhuǎn)發(fā)次數(shù)、+1次數(shù)、評(píng)論次數(shù),以及每位用戶的評(píng)論轉(zhuǎn)發(fā)次數(shù)等,然后在應(yīng)用模型時(shí)利用這些數(shù)據(jù)來(lái)衡量帖子的質(zhì)量。另請(qǐng)注意,實(shí)驗(yàn)框架非常重要,您必須在實(shí)驗(yàn)框架中將用戶分組為多個(gè)分桶,并按實(shí)驗(yàn)匯總統(tǒng)計(jì)信息。請(qǐng)參閱第 12 條規(guī)則。
通過(guò)以更加自由的方式收集指標(biāo),您可以更加全面地了解您的系統(tǒng)。發(fā)現(xiàn)問題了?添加指標(biāo)對(duì)其進(jìn)行跟蹤!對(duì)上個(gè)版本中發(fā)生的一些量變激動(dòng)不已?添加指標(biāo)對(duì)其進(jìn)行跟蹤!
第 3 條規(guī)則:選擇ML技術(shù)而非復(fù)雜的啟發(fā)式算法。
簡(jiǎn)單的啟發(fā)式算法有利于推出產(chǎn)品。但復(fù)雜的啟發(fā)式算法難以維護(hù)。當(dāng)您獲得足夠的數(shù)據(jù)并基本確定自己要嘗試實(shí)現(xiàn)的目標(biāo)后,請(qǐng)考慮使用ML技術(shù)。與大多數(shù)軟件工程任務(wù)一樣,您需要不斷更新方法(無(wú)論是啟發(fā)式算法還是ML模型),而且您會(huì)發(fā)現(xiàn)ML模型更易于更新和維護(hù)(請(qǐng)參閱第 16 條規(guī)則)。
ML第一階段:您的第一個(gè)管道
重點(diǎn)關(guān)注第一個(gè)管道的系統(tǒng)基礎(chǔ)架構(gòu)。雖然展望您將要進(jìn)行的創(chuàng)新性ML的方方面面是一件很有趣的事,但如果您不先確認(rèn)管道的可靠性,則很難弄清楚所發(fā)生的情況。
第 4 條規(guī)則:確保第一個(gè)模型簡(jiǎn)單易用,并正確實(shí)施基礎(chǔ)架構(gòu)。
第一個(gè)模型可以最有效地提升您的產(chǎn)品質(zhì)量,因此不需要花哨,簡(jiǎn)單易用即可。但是,您會(huì)遇到很多預(yù)料之外的基礎(chǔ)架構(gòu)問題。在公開推出您精心構(gòu)建的新ML系統(tǒng)之前,您必須確定以下幾點(diǎn):
如何為您的學(xué)習(xí)算法獲取樣本。
初步確定對(duì)于您的系統(tǒng)來(lái)說(shuō),"好" 和 "壞" 的定義是什么。
如何將模型整合到應(yīng)用中。您可以在線應(yīng)用模型,也可以離線使用樣本對(duì)模型進(jìn)行預(yù)計(jì)算,并將結(jié)果存儲(chǔ)在表格中。例如,您可能需要對(duì)網(wǎng)頁(yè)進(jìn)行預(yù)分類并將結(jié)果存儲(chǔ)在表格中,但也可能需要在線對(duì)聊天消息進(jìn)行分類。
選擇簡(jiǎn)單的特征可以更輕松地確保:
將這些特征正確應(yīng)用于您的學(xué)習(xí)算法。
模型學(xué)習(xí)出合理的權(quán)重。
將這些特征正確應(yīng)用于服務(wù)器端。
當(dāng)您有了能可靠做到上述三點(diǎn)的系統(tǒng)時(shí),則表示您已完成大部分工作。簡(jiǎn)單的模型可為您提供基準(zhǔn)指標(biāo)和基準(zhǔn)行為,您可以利用這些指標(biāo)和行為測(cè)試更復(fù)雜的模型。某些團(tuán)隊(duì)以 "中性" 作為首次發(fā)布的目標(biāo) - 在首次發(fā)布時(shí)明確淡化機(jī)器學(xué)習(xí)成果,以避免分心。
第 5 條規(guī)則:撇開機(jī)器學(xué)習(xí),單獨(dú)測(cè)試基礎(chǔ)架構(gòu)。
確保基礎(chǔ)架構(gòu)可測(cè)試,且對(duì)系統(tǒng)的學(xué)習(xí)部分進(jìn)行封裝,以便測(cè)試這些部分之外的方方面面。具體而言:
測(cè)試數(shù)據(jù)導(dǎo)入算法的效果。檢查應(yīng)填充的特征列是否已填充。在隱私權(quán)許可的情況下,手動(dòng)檢查輸入到訓(xùn)練算法的數(shù)據(jù)。如果可能的話,查看管道中的統(tǒng)計(jì)信息,并與在其他地方處理的相同數(shù)據(jù)的統(tǒng)計(jì)信息進(jìn)行比較。
測(cè)試從訓(xùn)練算法得出模型的效果。確保訓(xùn)練環(huán)境中的模型與應(yīng)用環(huán)境中的模型給出的分?jǐn)?shù)相同(請(qǐng)參閱第 37 條規(guī)則)。
ML具有不可預(yù)測(cè)性,因此要有用于訓(xùn)練環(huán)境和應(yīng)用環(huán)境中創(chuàng)建樣本的代碼的測(cè)試;并確保您可以在應(yīng)用期間加載和使用固定模型。此外,了解您的數(shù)據(jù)至關(guān)重要:請(qǐng)參閱分析大型復(fù)雜數(shù)據(jù)集的實(shí)用建議。
第 6 條規(guī)則:復(fù)制管道時(shí)注意丟棄的數(shù)據(jù)。
通常,我們通過(guò)復(fù)制現(xiàn)有管道來(lái)創(chuàng)建新管道(即貨物崇拜編程),且舊管道會(huì)丟棄一些新管道需要的數(shù)據(jù)。例如,Google+ 熱門信息的管道會(huì)丟棄時(shí)間較早的帖子(因?yàn)樗鼤?huì)不斷嘗試對(duì)最新的帖子進(jìn)行排名)。此管道被復(fù)制用于 Google+ 信息流,在信息流中,時(shí)間較早的帖子仍然有意義,但舊管道仍會(huì)丟棄它們。另一種常見模式是僅記錄用戶看到的數(shù)據(jù)。因此,如果我們想要對(duì)用戶看不到特定帖子的原因進(jìn)行建模,此類數(shù)據(jù)就毫無(wú)用處,因?yàn)楣艿酪褋G棄所有負(fù)分類樣本。Play 中也曾出現(xiàn)過(guò)類似的問題。在處理 Play 應(yīng)用首頁(yè)時(shí),創(chuàng)建了一個(gè)新管道,其中還包含來(lái)自 Play 游戲著陸頁(yè)的樣本,但無(wú)任何特征可區(qū)分各個(gè)樣本的來(lái)源。
第 7 條規(guī)則:將啟發(fā)式算法轉(zhuǎn)變?yōu)樘卣骰蛟谕獠刻幚硭鼈儭?/p>
通常,ML嘗試解決的問題并不是全新的問題。有一個(gè)現(xiàn)有的系統(tǒng),它可用于排名、分類,或解決您正嘗試解決的任何問題。這意味著有多種規(guī)則和啟發(fā)式算法。使用ML進(jìn)行調(diào)整后,此類啟發(fā)式算法可為您提供便利。您應(yīng)該挖掘自己的啟發(fā)式算法,了解它們所包含的任何信息,原因有以下兩點(diǎn)。首先,向ML系統(tǒng)的過(guò)渡會(huì)更平穩(wěn)。其次,這些規(guī)則通常包含大量您不愿意丟棄的關(guān)于系統(tǒng)的直覺信息。
您可以通過(guò)以下四種方法使用現(xiàn)有啟發(fā)式算法:
使用啟發(fā)式算法進(jìn)行預(yù)處理。如果特征非常好,則可以選擇執(zhí)行此操作。例如,在垃圾郵件過(guò)濾器中,如果發(fā)件人已被列入黑名單,則不要試圖重新學(xué)習(xí) "已列入黑名單" 的含義。屏蔽該郵件即可。這種方法最適合在二元分類任務(wù)中使用。
創(chuàng)建特征。直接通過(guò)啟發(fā)式算法創(chuàng)建特征是一種很好的做法。例如,如果您使用啟發(fā)式算法來(lái)計(jì)算查詢結(jié)果的相關(guān)性分?jǐn)?shù),則可以將此分?jǐn)?shù)納為一個(gè)特征的值。您日后可能想要使用ML技術(shù)調(diào)整該值(例如,將該值轉(zhuǎn)換為一個(gè)有限離散值組中的一個(gè),或與其他特征相組合),但是首先請(qǐng)使用啟發(fā)式算法生成的原始值。
挖掘啟發(fā)式算法的原始輸入。如果某個(gè)應(yīng)用啟發(fā)式算法結(jié)合了安裝次數(shù)、文本中的字符數(shù)以及星期值,考慮將這些內(nèi)容拆分開來(lái),并作為輸入單獨(dú)提供給學(xué)習(xí)算法。部分適用于集成學(xué)習(xí)的技巧也適用于此(請(qǐng)參閱第 40 條規(guī)則)。
修改標(biāo)簽。當(dāng)您感覺啟發(fā)式算法會(huì)獲取當(dāng)前標(biāo)簽中未包含的信息時(shí),可以選擇進(jìn)行此操作。例如,如果您正在嘗試最大程度地增加下載次數(shù),但同時(shí)也想要優(yōu)質(zhì)的內(nèi)容,則可能的解決方案是用標(biāo)簽乘以應(yīng)用獲得的平均星數(shù)。您可以非常靈活地修改標(biāo)簽。請(qǐng)參閱 "您的第一個(gè)目標(biāo)"。
在ML系統(tǒng)中使用啟發(fā)式算法時(shí),請(qǐng)務(wù)必留意是否會(huì)帶來(lái)額外的復(fù)雜性。在新的ML算法中使用舊啟發(fā)式算法有助于實(shí)現(xiàn)平穩(wěn)過(guò)渡,但思考下是否有可以達(dá)到相同效果的更簡(jiǎn)單的方法。
監(jiān)控
在一般情況下,請(qǐng)實(shí)行良好的警報(bào)安全機(jī)制,例如設(shè)計(jì)解決警報(bào)的步驟以及提供 "信息中心" 頁(yè)面。
第 8 條規(guī)則:了解您的系統(tǒng)對(duì)新鮮程度的要求。
如果您使用一天前的模型,效果會(huì)降低多少?一周前的模型呢?一個(gè)季度前的模型呢?此類消息有助于您了解需要優(yōu)先監(jiān)控哪些方面。如果一天不更新模型會(huì)對(duì)您的產(chǎn)品質(zhì)量產(chǎn)生嚴(yán)重影響,則最好讓工程師持續(xù)觀察相關(guān)情況。大多數(shù)廣告投放系統(tǒng)每天都有新廣告要處理,并且必須每天更新。例如,如果不更新 Google Play 搜索的ML模型,則不到一個(gè)月便會(huì)產(chǎn)生負(fù)面影響。Google+ 熱門信息的某些模型中沒有帖子標(biāo)識(shí)符,因此無(wú)需經(jīng)常導(dǎo)出這些模型。其他具有帖子標(biāo)識(shí)符的模型的更新頻率要高得多。另請(qǐng)注意,新鮮程度會(huì)隨著時(shí)間而改變,尤其是在向模型中添加特征列或從中移除特征列時(shí)。
第 9 條規(guī)則:先檢測(cè)問題,然后再導(dǎo)出模型。
很多ML系統(tǒng)都會(huì)經(jīng)歷導(dǎo)出模型以應(yīng)用模型的階段。如果導(dǎo)出的模型存在問題,則是面向用戶的問題。
在導(dǎo)出模型之前,請(qǐng)進(jìn)行健全性檢查。具體而言,確保模型在處理預(yù)留數(shù)據(jù)方面表現(xiàn)合理。或者說(shuō),如果您一直認(rèn)為數(shù)據(jù)存在問題,請(qǐng)不要導(dǎo)出模型。很多經(jīng)常部署模型的團(tuán)隊(duì)在導(dǎo)出模型之前,會(huì)先檢查 ROC 曲線下面積(簡(jiǎn)稱 AUC)。尚未導(dǎo)出的模型存在問題時(shí),需要發(fā)送電子郵件提醒;但面向用戶的模型出現(xiàn)問題時(shí),可能需要通過(guò)一個(gè)頁(yè)面進(jìn)行宣布。因此,最好先等待檢查完畢并確保萬(wàn)無(wú)一失后再導(dǎo)出模型,以免對(duì)用戶造成影響。
第 10 條規(guī)則:注意隱藏的問題。
相比其他類型的系統(tǒng),這種問題更常見于ML系統(tǒng)。假設(shè)關(guān)聯(lián)的特定表格不再更新,那么,ML系統(tǒng)會(huì)進(jìn)行相應(yīng)調(diào)整,其行為仍然會(huì)相當(dāng)好,但會(huì)逐漸變?cè)恪S袝r(shí),您會(huì)發(fā)現(xiàn)有些表格已有幾個(gè)月未更新,只需刷新一下,就可以獲得比相應(yīng)季度做出的所有其他改進(jìn)都更有效的效果提升!特征的覆蓋率可能會(huì)因?qū)崿F(xiàn)變化而發(fā)生改變:例如,某個(gè)特征列可能在 90% 的樣本中得到填充,但該比率突然下降到 60%。Google Play 曾有一個(gè)過(guò)時(shí) 6 個(gè)月的表格,但僅刷新了一下該表格,安裝率就提升了 2%。如果您對(duì)數(shù)據(jù)的統(tǒng)計(jì)信息進(jìn)行跟蹤,并不時(shí)地手動(dòng)檢查數(shù)據(jù),就可以減少此類失敗。
第 11 條規(guī)則:提供特征列的所有者及相關(guān)文檔。
如果系統(tǒng)很大,且有很多特征列,則需要知道每個(gè)特征列的創(chuàng)建者或維護(hù)者。如果您發(fā)現(xiàn)了解某個(gè)特征列的人要離職,請(qǐng)確保有人知道相關(guān)信息。盡管很多特征列都有說(shuō)明性名稱,但針對(duì)特征的含義、來(lái)源以及預(yù)計(jì)提供幫助的方式提供更詳細(xì)的說(shuō)明,是一種不錯(cuò)的做法。
您的第一個(gè)目標(biāo)
您會(huì)關(guān)注很多有關(guān)系統(tǒng)的指標(biāo)或測(cè)量結(jié)果,但通常只能為您的ML算法指定一個(gè)目標(biāo),即您的算法 "嘗試" 優(yōu)化的數(shù)值。 在這里,我介紹一下目標(biāo)和指標(biāo)有何區(qū)別:指標(biāo)是指您的系統(tǒng)報(bào)告的任意數(shù)字,可能重要,也可能不重要。另請(qǐng)參閱第 2 條規(guī)則。
第 12 條規(guī)則:選擇直接優(yōu)化哪個(gè)目標(biāo)時(shí),不要想太多。
您想賺錢,想讓用戶滿意,想讓世界變得更美好。您關(guān)注的指標(biāo)有很多,而且您應(yīng)該對(duì)所有這些指標(biāo)進(jìn)行測(cè)量(請(qǐng)參閱第 2 條規(guī)則)。不過(guò),在早期的ML過(guò)程中,您會(huì)發(fā)現(xiàn)這些指標(biāo)都呈上升趨勢(shì),甚至那些您沒有選擇直接優(yōu)化的指標(biāo)也是如此。例如,假設(shè)您關(guān)注點(diǎn)擊次數(shù)和用戶在網(wǎng)站上停留的時(shí)間。如果您優(yōu)化點(diǎn)擊次數(shù),則用戶在網(wǎng)站上停留的時(shí)間很可能也會(huì)增加。
所以,當(dāng)您仍然可以輕松增加所有指標(biāo)時(shí),保持簡(jiǎn)單,不要過(guò)多考慮如何在不同的指標(biāo)間實(shí)現(xiàn)平衡。但不要過(guò)度使用此規(guī)則:不要將您的目標(biāo)與系統(tǒng)最終的運(yùn)行狀況相混淆(請(qǐng)參閱第 39 條規(guī)則)。此外,如果您發(fā)現(xiàn)自己增大了直接優(yōu)化的指標(biāo),但決定不發(fā)布系統(tǒng),則可能需要修改某些目標(biāo)。
第 13 條規(guī)則:為您的第一個(gè)目標(biāo)選擇一個(gè)可觀察且可歸因的簡(jiǎn)單指標(biāo)。
您往往并不知道真正的目標(biāo)是什么。您以為自己知道,但當(dāng)您盯著數(shù)據(jù),對(duì)舊系統(tǒng)和新的ML系統(tǒng)進(jìn)行對(duì)比分析時(shí),您發(fā)現(xiàn)自己想調(diào)整目標(biāo)。此外,團(tuán)隊(duì)的不同成員通常無(wú)法就什么是真正的目標(biāo)達(dá)成一致意見。ML目標(biāo)應(yīng)是滿足以下條件的某種目標(biāo):易于測(cè)量且是 "真正的" 目標(biāo)的代理。實(shí)際上,通常沒有 "真正的" 目標(biāo)(請(qǐng)參閱第 39 條規(guī)則)。因此,請(qǐng)對(duì)簡(jiǎn)單的ML目標(biāo)進(jìn)行訓(xùn)練,并考慮在頂部添加一個(gè) "策略層",以便您能夠添加其他邏輯(最好是非常簡(jiǎn)單的邏輯)來(lái)進(jìn)行最終排名。
要進(jìn)行建模,最簡(jiǎn)單的指標(biāo)是可直接觀察到且可歸因到系統(tǒng)操作的用戶行為:
用戶是否點(diǎn)擊了此已排名鏈接?
用戶是否下載了此已排名對(duì)象?
用戶是否轉(zhuǎn)發(fā)/回復(fù)/使用電子郵件發(fā)送了此已排名對(duì)象?
用戶是否評(píng)價(jià)了此已排名對(duì)象?
用戶是否將此顯示的對(duì)象標(biāo)記為了垃圾郵件/色情內(nèi)容/攻擊性內(nèi)容?
避免一開始對(duì)間接影響進(jìn)行建模:
用戶第二天訪問網(wǎng)站了嗎?
用戶在網(wǎng)站上停留了多長(zhǎng)時(shí)間?
每日活躍用戶數(shù)有多少?
其實(shí),間接影響可成為出色的指標(biāo),可以在 A/B 測(cè)試和發(fā)布決策期間使用。
最后,不要試圖讓ML系統(tǒng)弄清楚以下問題:
用戶在使用產(chǎn)品時(shí)是否感到滿意?
用戶是否對(duì)使用體驗(yàn)感到滿意?
產(chǎn)品是否提升了用戶的整體滿意度?
這會(huì)對(duì)公司的整體運(yùn)行狀況產(chǎn)生什么樣的影響?
所有這些都很重要,但也極難衡量。請(qǐng)改為使用代理指標(biāo):如果用戶感到滿意,他們會(huì)在網(wǎng)站上停留更長(zhǎng)時(shí)間。如果用戶感到滿意,他們明天會(huì)再次訪問網(wǎng)站。就滿意度和公司運(yùn)行狀況而言,需要進(jìn)行人為判斷,以便將任意ML目標(biāo)與您銷售的產(chǎn)品的性質(zhì)和業(yè)務(wù)計(jì)劃關(guān)聯(lián)起來(lái)。
第 14 條規(guī)則:從可解釋的模型著手可更輕松地進(jìn)行調(diào)試。
線性回歸、邏輯回歸和泊松回歸均由概率模型直接推動(dòng)。每個(gè)預(yù)測(cè)都可看作是一個(gè)概率或預(yù)期值。這樣一來(lái),相較于使用目標(biāo)(0-1 損失、各種合頁(yè)損失函數(shù)等)以嘗試直接優(yōu)化分類準(zhǔn)確度或?qū)πЧM(jìn)行排名的模型,這種模型更易于進(jìn)行調(diào)試。例如,如果在訓(xùn)練中得出的概率與采用并排分析方式或通過(guò)檢查生產(chǎn)系統(tǒng)的方式預(yù)測(cè)的概率之間存在偏差,則表明存在問題。
例如,在線性回歸、邏輯回歸或泊松回歸中,有一部分平均預(yù)測(cè)期望值等于平均標(biāo)簽值(一階矩校準(zhǔn),或只是校準(zhǔn))的數(shù)據(jù)。假設(shè)您沒有正則化且算法已收斂,那么理論上即是如此,實(shí)際上也是差不多這種情形。如果您有一個(gè)特征,對(duì)于每個(gè)樣本來(lái)說(shuō),其值要么是0,要么是1,則會(huì)校準(zhǔn)3個(gè)特征值為 1 的樣本集。此外,如果您有一個(gè)特征,對(duì)于每個(gè)樣本來(lái)說(shuō),其值均為 1,則會(huì)校準(zhǔn)所有樣本集。
借助簡(jiǎn)單的模型,您可以更輕松地處理反饋環(huán)(請(qǐng)參閱第 36 條規(guī)則)。通常情況下,我們會(huì)根據(jù)這些概率預(yù)測(cè)來(lái)做出決策;例如,以期望值(點(diǎn)擊概率/下載概率等)為標(biāo)準(zhǔn),按降序?qū)μ舆M(jìn)行排名。但是,請(qǐng)注意,當(dāng)選擇要使用的模型時(shí),您的決定比模型給出的數(shù)據(jù)概率更為重要(請(qǐng)參閱第 27 條規(guī)則)。
第 15 條規(guī)則:在策略層中區(qū)分垃圾內(nèi)容過(guò)濾和質(zhì)量排名。
質(zhì)量排名是一門藝術(shù),但垃圾內(nèi)容過(guò)濾就像一場(chǎng)戰(zhàn)爭(zhēng)。對(duì)于使用您系統(tǒng)的用戶來(lái)說(shuō),您使用哪些信號(hào)來(lái)確定高質(zhì)量帖子將變得顯而易見,而且這些用戶會(huì)調(diào)整自己的帖子,使其具有高質(zhì)量帖子的屬性。因此,您的質(zhì)量排名應(yīng)側(cè)重于對(duì)誠(chéng)實(shí)發(fā)布的內(nèi)容進(jìn)行排名。您不應(yīng)該因?yàn)橘|(zhì)量排名學(xué)習(xí)器將垃圾內(nèi)容排在前列而對(duì)其應(yīng)用折扣。同樣,"少兒不宜" 的內(nèi)容也不應(yīng)該在質(zhì)量排名中進(jìn)行處理。垃圾內(nèi)容過(guò)濾則另當(dāng)別論。您必須明白,需要生成的特征會(huì)不斷變化。通常情況下,您會(huì)在系統(tǒng)中設(shè)置一些明顯的規(guī)則(如果一個(gè)帖子收到三次以上的垃圾內(nèi)容舉報(bào),請(qǐng)勿檢索該帖子等等)。所有學(xué)習(xí)模型都必須至少每天更新。內(nèi)容創(chuàng)作者的聲譽(yù)會(huì)發(fā)揮很大作用。
在某個(gè)層級(jí),必須將這兩個(gè)系統(tǒng)的輸出整合在一起。請(qǐng)注意,與過(guò)濾電子郵件中的垃圾郵件相比,在過(guò)濾搜索結(jié)果中的垃圾內(nèi)容時(shí),可能應(yīng)該更加主動(dòng)。這種說(shuō)法的前提是您沒有正則化且算法已收斂。一般來(lái)說(shuō)大致是這樣。此外,從質(zhì)量分類器的訓(xùn)練數(shù)據(jù)中移除垃圾內(nèi)容是一種標(biāo)準(zhǔn)做法。
ML第二階段:特征工程
在ML系統(tǒng)生命周期的第一階段,重要的問題涉及以下三個(gè)方面:將訓(xùn)練數(shù)據(jù)導(dǎo)入學(xué)習(xí)系統(tǒng)、對(duì)任何感興趣的指標(biāo)進(jìn)行測(cè)量,以及構(gòu)建應(yīng)用基礎(chǔ)架構(gòu)。當(dāng)您構(gòu)建了一個(gè)端到端的可穩(wěn)定運(yùn)行的系統(tǒng),并且制定了系統(tǒng)測(cè)試和單元測(cè)試后,就可以進(jìn)入第二階段了。
第二階段的很多目標(biāo)很容易實(shí)現(xiàn),且有很多明顯的特征可導(dǎo)入系統(tǒng)。因此,ML的第二階段涉及導(dǎo)入盡可能多的特征,并以直觀的方式將它們組合起來(lái)。在這一階段,所有的指標(biāo)應(yīng)該仍然呈上升趨勢(shì),您將會(huì)多次發(fā)布系統(tǒng),并且非常適合安排多名工程師,以便整合創(chuàng)建真正出色的學(xué)習(xí)系統(tǒng)所需的所有數(shù)據(jù)。
第 16 條規(guī)則:制定發(fā)布和迭代模型計(jì)劃。
不要指望您現(xiàn)在正在構(gòu)建的模型會(huì)是您將要發(fā)布的最后一個(gè)模型,也不要指望您會(huì)停止發(fā)布模型。因此,請(qǐng)考慮此次發(fā)布中增加的復(fù)雜性是否會(huì)減緩未來(lái)版本的發(fā)布。很多團(tuán)隊(duì)多年來(lái)每季度都會(huì)發(fā)布一個(gè)或多個(gè)模型。發(fā)布新模型的三個(gè)基本原因如下所示:
您將要添加新特征。
您將要調(diào)整正則化并以新方式組合舊特征。
您將要調(diào)整目標(biāo)。
無(wú)論如何,構(gòu)建模型時(shí)多考慮考慮并沒有什么壞處:查看提供到樣本中的數(shù)據(jù)有助于發(fā)現(xiàn)新信號(hào)、舊信號(hào)以及損壞的信號(hào)。因此,在構(gòu)建模型時(shí),請(qǐng)考慮添加、移除或重新組合特征的難易程度。考慮創(chuàng)建管道的全新副本以及驗(yàn)證其正確性的難易程度。考慮是否可以同時(shí)運(yùn)行兩個(gè)或三個(gè)副本。最后,不必?fù)?dān)心此版本的管道有沒有納入第 16 個(gè)特征(共 35 個(gè)),下個(gè)季度會(huì)將其納入。
第 17 條規(guī)則:從可直接觀察和報(bào)告的特征(而不是經(jīng)過(guò)學(xué)習(xí)的特征)著手。
這一點(diǎn)可能存在爭(zhēng)議,但可以避免許多問題。首先,我們來(lái)介紹一下什么是學(xué)習(xí)的特征。學(xué)習(xí)的特征是由外部系統(tǒng)(例如非監(jiān)督式集群系統(tǒng))或?qū)W習(xí)器本身(例如通過(guò)因子模型或深度學(xué)習(xí))生成的特征。這兩種方式生成的特征都非常有用,但會(huì)導(dǎo)致很多問題,因此不應(yīng)在第一個(gè)模型中使用。
如果您使用外部系統(tǒng)創(chuàng)建特征,請(qǐng)注意,外部系統(tǒng)有其自己的目標(biāo)。外部系統(tǒng)的目標(biāo)與您當(dāng)前的目標(biāo)之間可能僅存在一點(diǎn)點(diǎn)關(guān)聯(lián)。如果您獲取外部系統(tǒng)的某個(gè)瞬間狀態(tài),它可能就會(huì)過(guò)期。如果您從外部系統(tǒng)更新特征,則特征的含義可能會(huì)發(fā)生變化。如果您使用外部系統(tǒng)提供特征,請(qǐng)注意,采用這種方法需要非常小心。
因子模型和深度模型的主要問題是,它們是非凸模型。因此,無(wú)法保證能夠模擬或找到最優(yōu)解決方案,且每次迭代時(shí)找到的局部最小值可能不同。這種變化導(dǎo)致難以判斷系統(tǒng)發(fā)生的某次變化的影響是有意義的還是隨機(jī)的。通過(guò)創(chuàng)建沒有深度特征的模型,您可以獲得出色的基準(zhǔn)效果。達(dá)到此基準(zhǔn)后,您可以嘗試更深?yuàn)W的方法。
第 18 條規(guī)則:探索可跨情境泛化的內(nèi)容的特征。
ML系統(tǒng)通常只是更大系統(tǒng)中的一小部分。例如,想象熱門信息中可能會(huì)使用的帖子,在其顯示到熱門信息之前,很多用戶已經(jīng)對(duì)其進(jìn)行 +1、轉(zhuǎn)發(fā)或評(píng)論了。如果您將這些統(tǒng)計(jì)信息提供給學(xué)習(xí)器,它就會(huì)對(duì)在正在優(yōu)化的情景中沒有數(shù)據(jù)的新帖子進(jìn)行推廣。 YouTube 的 "接下來(lái)觀看" 可以使用來(lái)自 YouTube 搜索的觀看次數(shù)或連看次數(shù)(觀看完一個(gè)視頻后觀看另一個(gè)視頻的次數(shù))或明確的用戶評(píng)分來(lái)推薦內(nèi)容。最后,如果您將一個(gè)用戶操作用作標(biāo)簽,在其他情境中看到用戶對(duì)文檔執(zhí)行該操作可以是很好的特征。借助所有這些特征,您可以向該情境中引入新內(nèi)容。請(qǐng)注意,這與個(gè)性化無(wú)關(guān):先弄清楚是否有人喜歡此情境中的內(nèi)容,然后再弄清楚喜歡程度。
第 19 條規(guī)則:盡可能使用非常具體的特征。
對(duì)于海量數(shù)據(jù),學(xué)習(xí)數(shù)百萬(wàn)個(gè)簡(jiǎn)單的特征比學(xué)習(xí)幾個(gè)復(fù)雜的特征更簡(jiǎn)單。正在被檢索的文檔的標(biāo)識(shí)符以及規(guī)范化的查詢不會(huì)提供很多泛化作用,但可以讓您的排名與頻率靠前的查詢的標(biāo)簽保持一致。因此,請(qǐng)不要害怕具有以下特點(diǎn)的特征組:每個(gè)特征適用于您的一小部分?jǐn)?shù)據(jù)但總體覆蓋率在 90% 以上。您可以使用正則化來(lái)消除適用樣本過(guò)少的特征。
第 20 條規(guī)則:組合和修改現(xiàn)有特征,以便以簡(jiǎn)單易懂的方式創(chuàng)建新特征。
有多種方式可以組合和修改特征。借助 TensorFlow 等ML系統(tǒng),您可以通過(guò)轉(zhuǎn)換對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。最標(biāo)準(zhǔn)的兩種方法是 "離散化" 和 "組合"。
"離散化" 是指提取一個(gè)連續(xù)特征,并從中創(chuàng)建許多離散特征。以年齡這一連續(xù)特征為例。您可以創(chuàng)建一個(gè)年齡不滿 18 周歲時(shí)其值為 1 的特征,并創(chuàng)建年齡在 18-35 周歲之間時(shí)其值為 1 的另一個(gè)特征,等等。不要過(guò)多考慮這些直方圖的邊界:基本分位數(shù)給您帶來(lái)的影響最大。
"組合" 方法是指組合兩個(gè)或更多特征列。在 TensorFlow 中,特征列指的是同類特征集(例如,{男性, 女性}、{美國(guó), 加拿大, 墨西哥} 等等)。組合指的是其中包含特征的新特征列,例如,{男性, 女性} × {美國(guó), 加拿大, 墨西哥}。此新特征列將包含特征(男性, 加拿大)。如果您使用的是 TensorFlow,并讓 TensorFlow 為您創(chuàng)建此組合,則此(男性, 加拿大)特征將存在于表示加拿大男性的樣本中。請(qǐng)注意,您需要擁有大量數(shù)據(jù),才能使用具有三個(gè)、四個(gè)或更多基準(zhǔn)特征列的組合學(xué)習(xí)模型。
生成非常大的特征列的組合可能會(huì)過(guò)擬合。例如,假設(shè)您正在執(zhí)行某種搜索,您的某個(gè)特征列包含查詢中的字詞,另一個(gè)特征列包含文檔中的字詞。這時(shí),您可以使用 "組合" 方法將這些特征列組合起來(lái),但最終會(huì)得到很多特征(請(qǐng)參閱第二十一條規(guī)則)。
處理文本時(shí),有兩種備用方法。最嚴(yán)苛的方法是點(diǎn)積。點(diǎn)積方法采用最簡(jiǎn)單的形式時(shí),僅會(huì)計(jì)算查詢和文檔間共有字詞的數(shù)量。然后將此特征離散化。另一種方法是交集:如果使用交集方法,當(dāng)且僅當(dāng)文檔和查詢中都包含 "pony" 一詞時(shí),才會(huì)出現(xiàn)一個(gè)特征;當(dāng)且僅當(dāng)文檔和查詢中都包含 "the" 一詞時(shí),才會(huì)出現(xiàn)另一個(gè)特征。
第二十一條規(guī)則:您可以在線性模型中學(xué)習(xí)的特征權(quán)重?cái)?shù)目與您擁有的數(shù)據(jù)量大致成正比。
關(guān)于模型的合適復(fù)雜度方面,有各種出色的統(tǒng)計(jì)學(xué)習(xí)理論成果,但您基本上只需要了解這條規(guī)則。在某次談話中,曾有人表達(dá)過(guò)這樣的疑慮:從一千個(gè)樣本中是否能夠?qū)W到任何東西,或者是否需要超過(guò)一百萬(wàn)個(gè)樣本,他們之所以有這樣的疑慮,是因?yàn)榫窒拊诹艘环N特定學(xué)習(xí)方式中。關(guān)鍵在于根據(jù)數(shù)據(jù)規(guī)模調(diào)整您的學(xué)習(xí)模型:
如果您正在構(gòu)建搜索排名系統(tǒng),文檔和查詢中有數(shù)百萬(wàn)個(gè)不同的字詞,且您有 1000 個(gè)有標(biāo)簽樣本,那么您應(yīng)該在文檔和查詢特征、TF-IDF 和多個(gè)其他高度手動(dòng)工程化的特征之間得出點(diǎn)積。您會(huì)有 1000 個(gè)樣本,十多個(gè)特征。
如果您有一百萬(wàn)個(gè)樣本,則使用正則化和特征選擇(可能)使文檔特征列和查詢特征列相交。這樣一來(lái),您將獲得數(shù)百萬(wàn)個(gè)特征;但如果使用正則化,則您獲得的特征會(huì)有所減少。您會(huì)有千萬(wàn)個(gè)樣本,可能會(huì)產(chǎn)生十萬(wàn)個(gè)特征。
如果您有數(shù)十億或數(shù)千億個(gè)樣本,您可以使用特征選擇和正則化,通過(guò)文檔和查詢標(biāo)記組合特征列。您會(huì)有十億個(gè)樣本,一千萬(wàn)個(gè)特征。統(tǒng)計(jì)學(xué)習(xí)理論很少設(shè)定嚴(yán)格的限制,但能夠提供很好的起點(diǎn)引導(dǎo)。
最后,請(qǐng)根據(jù)第 28 條規(guī)則決定要使用哪些特征。
第 22 條規(guī)則:清理不再使用的特征。
未使用的特征會(huì)產(chǎn)生技術(shù)負(fù)債。如果您發(fā)現(xiàn)自己沒有使用某個(gè)特征,而且將其與其他特征組合在一起不起作用,則將其從您的基礎(chǔ)架構(gòu)中刪除。您需要讓自己的基礎(chǔ)架構(gòu)保持簡(jiǎn)潔,以便盡可能快地嘗試最有可能帶來(lái)良好效果的特征。如有必要,他人可以隨時(shí)將您的特征添加回來(lái)。
在決定要添加或保留哪些特征時(shí),要考慮到覆蓋率。即相應(yīng)特征覆蓋了多少個(gè)樣本?例如,如果您有一些個(gè)性化特征,但只有 8% 的用戶有個(gè)性化特征,那效果就不會(huì)很好。
同時(shí),有些特征可能會(huì)超出其權(quán)重。例如,如果您的某個(gè)特征只覆蓋 1% 的數(shù)據(jù),但 90% 具有該特征的樣本都是正分類樣本,那么這是一個(gè)可以添加的好特征。
對(duì)系統(tǒng)的人工分析
在繼續(xù)探討ML的第三階段之前,請(qǐng)務(wù)必重點(diǎn)了解一下在任何ML課程中都無(wú)法學(xué)到的內(nèi)容:如何檢查現(xiàn)有模型并加以改善。這更像是一門藝術(shù)而非科學(xué),但是有幾個(gè)有必要避免的反模式。
第 23 條規(guī)則:您不是典型的最終用戶。
這也許是讓團(tuán)隊(duì)陷入困境的最簡(jiǎn)單的方法。雖然 fishfood(在團(tuán)隊(duì)內(nèi)部使用原型)和 dogfood(在公司內(nèi)部使用原型)有許多優(yōu)點(diǎn),但員工應(yīng)該看看是否符合性能要求。雖然應(yīng)避免應(yīng)用明顯比較糟糕的更改,但在臨近生產(chǎn)時(shí),應(yīng)對(duì)任何看起來(lái)比較合理的更改進(jìn)行進(jìn)一步測(cè)試,具體方法有兩種:請(qǐng)非專業(yè)人員在眾包平臺(tái)上回答有償問題,或?qū)φ鎸?shí)用戶進(jìn)行在線實(shí)驗(yàn)。
這樣做的原因有如下兩點(diǎn)。首先,您與代碼的關(guān)系太密切了。您關(guān)注的可能是帖子的某個(gè)特定方面,或者您只是投入了太多感情(例如確認(rèn)偏差)。其次,您的時(shí)間很寶貴。考慮一下九名工程師開一個(gè)小時(shí)會(huì)議所花的費(fèi)用可以在眾包平臺(tái)上購(gòu)買多少簽約的人工標(biāo)簽。
如果您確實(shí)想獲得用戶反饋,請(qǐng)使用用戶體驗(yàn)方法。在流程的早期階段創(chuàng)建用戶角色(請(qǐng)參閱比爾 - 布克斯頓的 Sketching User Experiences 一書中的描述),然后進(jìn)行可用性測(cè)試(請(qǐng)參閱史蒂夫 - 克魯格的 Don't Make Me Think 一書中的描述)。用戶角色是指創(chuàng)建假想用戶。例如,如果您的團(tuán)隊(duì)成員都是男性,則有必要設(shè)計(jì)一個(gè) 35 歲的女性用戶角色(使用用戶特征完成),并查看其生成的結(jié)果,而不是只查看 10 位 25-40 歲男性的結(jié)果。在可用性測(cè)試中請(qǐng)真實(shí)用戶體驗(yàn)?zāi)木W(wǎng)站(通過(guò)本地或遠(yuǎn)程方式)并觀察他們的反應(yīng)也可以讓您以全新的視角看待問題。
第 24 條規(guī)則:衡量模型間的差異。
在向任何用戶展示您的新模型之前,您可以進(jìn)行的最簡(jiǎn)單(有時(shí)也是最有用)的一項(xiàng)衡量是,評(píng)估新模型的結(jié)果與生產(chǎn)有多大差別。例如,如果您有一項(xiàng)排名任務(wù),則在整個(gè)系統(tǒng)中針對(duì)一批示例查詢運(yùn)行這兩個(gè)模型,并查看結(jié)果的對(duì)稱差分有多大(按排名位置加權(quán))。如果差分非常小,那么您無(wú)需運(yùn)行實(shí)驗(yàn),就可以判斷不會(huì)出現(xiàn)很大變化。如果差分很大,那么您需要確保這種更改可以帶來(lái)好的結(jié)果。查看對(duì)稱差分較大的查詢有助于您了解更改的性質(zhì)。不過(guò),請(qǐng)確保您的系統(tǒng)是穩(wěn)定的。確保模型與自身之間的對(duì)稱差分較低(理想情況下為零)。
第 25 條規(guī)則:選擇模型時(shí),實(shí)用效果比預(yù)測(cè)能力更重要。
您的模型可能會(huì)嘗試預(yù)測(cè)點(diǎn)擊率。但歸根到底,關(guān)鍵問題在于您用這種預(yù)測(cè)做什么。如果您使用該預(yù)測(cè)對(duì)文檔進(jìn)行排名,那么最終排名的質(zhì)量比預(yù)測(cè)本身更重要。如果您要預(yù)測(cè)一個(gè)文檔是垃圾內(nèi)容的概率,然后選擇一個(gè)取舍點(diǎn)來(lái)確定要阻斷的內(nèi)容,那么允許的內(nèi)容的精確率更為重要。大多數(shù)情況下,這兩項(xiàng)應(yīng)該是一致的:當(dāng)它們不一致時(shí),帶來(lái)的優(yōu)勢(shì)可能會(huì)非常小。因此,如果某種更改可以改善對(duì)數(shù)損失,但會(huì)降低系統(tǒng)的性能,則查找其他特征。當(dāng)這種情況開始頻繁發(fā)生時(shí),說(shuō)明您該重新審視模型的目標(biāo)了。
第 26 條規(guī)則:在衡量的錯(cuò)誤中尋找規(guī)律,并創(chuàng)建新特征。
假設(shè)您看到模型 "弄錯(cuò)" 了一個(gè)訓(xùn)練樣本。在分類任務(wù)中,這種錯(cuò)誤可能是假正例,也可能是假負(fù)例。在排名任務(wù)中,這種錯(cuò)誤可能是假正例和假負(fù)例,其中正例的排名比負(fù)例的排名低。最重要的是,ML系統(tǒng)知道自己弄錯(cuò)了該樣本,如果有機(jī)會(huì),它會(huì)修復(fù)該錯(cuò)誤。如果您向該模型提供一個(gè)允許其修正錯(cuò)誤的特征,該模型會(huì)嘗試使用它。
另一方面,如果您嘗試根據(jù)系統(tǒng)不會(huì)視為錯(cuò)誤的樣本創(chuàng)建一個(gè)特征,該特征將會(huì)被系統(tǒng)忽略。例如,假設(shè)用戶在 Play 應(yīng)用搜索中搜索 "免費(fèi)游戲"。假設(shè)排名靠前的搜索結(jié)果中有一個(gè)是相關(guān)性較低的搞笑應(yīng)用。因此,您為 "搞笑應(yīng)用" 創(chuàng)建了一個(gè)特征。但是,如果您要最大限度地增加安裝次數(shù),并且用戶在搜索免費(fèi)游戲時(shí)安裝了搞笑應(yīng)用,那么 "搞笑應(yīng)用" 特征不會(huì)達(dá)到您想要的效果。
如果模型弄錯(cuò)了您的某些樣本,請(qǐng)?jiān)诋?dāng)前特征集之外尋找規(guī)律。例如,如果系統(tǒng)似乎在降低內(nèi)容較長(zhǎng)的帖子的排名,那么添加帖子長(zhǎng)度。不要添加過(guò)于具體的特征。如果您要添加帖子長(zhǎng)度,請(qǐng)不要試圖猜測(cè)長(zhǎng)度的具體含義,只需添加十多個(gè)特征,然后讓模型自行處理(請(qǐng)參閱第二十一條規(guī)則)。這是實(shí)現(xiàn)目標(biāo)最簡(jiǎn)單的方式。
第 27 條規(guī)則:嘗試量化觀察到的異常行為。
當(dāng)現(xiàn)有的損失函數(shù)沒有捕獲您團(tuán)隊(duì)中的部分成員不喜歡的某些系統(tǒng)屬性時(shí),他們會(huì)開始有挫敗感。此時(shí),他們應(yīng)該竭盡所能將抱怨轉(zhuǎn)換成具體的數(shù)字。例如,如果他們認(rèn)為 Play 搜索中顯示的 "搞笑應(yīng)用" 過(guò)多,則可以通過(guò)人工評(píng)分識(shí)別搞笑應(yīng)用。(在這種情況下,您可以使用人工標(biāo)記的數(shù)據(jù),因?yàn)橄鄬?duì)較少的一部分查詢占了很大一部分流量。)如果您的問題是可衡量的,那么您可以開始將它們用作特征、目標(biāo)或指標(biāo)。一般規(guī)則是 "先量化,再優(yōu)化"。
第 28 條規(guī)則:請(qǐng)注意,短期行為相同并不意味著長(zhǎng)期行為也相同。
假設(shè)您的新系統(tǒng)會(huì)查看每個(gè) doc_id 和 exact_query,然后計(jì)算每個(gè)查詢的每個(gè)文檔的點(diǎn)擊概率。您發(fā)現(xiàn)在并排分析和 A/B 測(cè)試中,其行為與您當(dāng)前系統(tǒng)的行為幾乎完全相同,考慮到它的簡(jiǎn)單性,您發(fā)布了它。不過(guò),您發(fā)現(xiàn)它沒有顯示任何新應(yīng)用。為什么?那是因?yàn)槟南到y(tǒng)僅根據(jù)自己的查詢歷史記錄顯示文檔,所以不知道應(yīng)該顯示新文檔。
了解這種系統(tǒng)長(zhǎng)期行為的唯一方法是,僅使用模型在線時(shí)獲得的數(shù)據(jù)對(duì)其進(jìn)行訓(xùn)練。這一點(diǎn)非常難。
訓(xùn)練 - 應(yīng)用偏差
訓(xùn)練 - 應(yīng)用偏差是指訓(xùn)練效果與應(yīng)用效果之間的差異。出現(xiàn)這種偏差的原因可能是:
訓(xùn)練管道和應(yīng)用管道中數(shù)據(jù)的處理方式有差異。
訓(xùn)練時(shí)和應(yīng)用時(shí)所用數(shù)據(jù)有變化。
模型和算法之間有反饋環(huán)。
我們注意到 Google 的生產(chǎn)ML系統(tǒng)也存在訓(xùn)練 - 應(yīng)用偏差,這種偏差對(duì)性能產(chǎn)生了負(fù)面影響。最好的解決方案是明確進(jìn)行監(jiān)控,以避免在系統(tǒng)和數(shù)據(jù)改變時(shí)引入容易被忽視的偏差。
第 29 條規(guī)則:確保訓(xùn)練效果和應(yīng)用效果一樣的最佳方法是,保存在應(yīng)用時(shí)使用的特征集,然后將這些特征通過(guò)管道傳輸?shù)饺罩荆员阍谟?xùn)練時(shí)使用。
即使您不能對(duì)每個(gè)樣本都這樣做,也對(duì)一小部分樣本這樣做,以便驗(yàn)證應(yīng)用和訓(xùn)練之間的一致性(請(qǐng)參閱第 37 條規(guī)則)。采取了這項(xiàng)措施的 Google 團(tuán)隊(duì)有時(shí)會(huì)對(duì)結(jié)果感到驚訝。 YouTube 首頁(yè)改用這種在應(yīng)用時(shí)記錄特征的做法后,不僅大大提高了質(zhì)量,而且減少了代碼復(fù)雜度。目前有許多團(tuán)隊(duì)都已經(jīng)在其基礎(chǔ)設(shè)施上采用了這種方法。
第 30 條規(guī)則:按重要性對(duì)采樣數(shù)據(jù)加權(quán),不要隨意丟棄它們!
數(shù)據(jù)過(guò)多時(shí),總會(huì)忍不住采用前面的文件而忽略后面的文件。這是錯(cuò)誤的做法。盡管可以丟棄從未向用戶展示過(guò)的數(shù)據(jù),但對(duì)于其他數(shù)據(jù)來(lái)說(shuō),按重要性加權(quán)是最佳選擇。按重要性加權(quán)意味著,如果您決定以 30% 的概率對(duì)樣本 X 進(jìn)行抽樣,那么向其賦予 10/3 的權(quán)重。按重要性加權(quán)時(shí),您仍然可以使用第 14 條規(guī)則中討論的所有校準(zhǔn)屬性。
第 31 條規(guī)則:如果您在訓(xùn)練和應(yīng)用期間關(guān)聯(lián)表格中的數(shù)據(jù),請(qǐng)注意,表格中的數(shù)據(jù)可能會(huì)變化。
假設(shè)您將文檔 ID 與包含這些文檔的特征(例如評(píng)論次數(shù)或點(diǎn)擊次數(shù))的表格相關(guān)聯(lián)。表格中的特征在訓(xùn)練時(shí)和應(yīng)用時(shí)可能有所不同。那么,您的模型在訓(xùn)練時(shí)和應(yīng)用時(shí)對(duì)同一文檔的預(yù)測(cè)就可能會(huì)不同。要避免這類問題,最簡(jiǎn)單的方法是在應(yīng)用時(shí)記錄特征(請(qǐng)參閱第 32 條規(guī)則)。如果表格只是緩慢發(fā)生變化,那么您還可以每小時(shí)或每天創(chuàng)建表格快照,以獲得非常接近的數(shù)據(jù)。請(qǐng)注意,這仍不能完全解決問題。
第 32 條規(guī)則:盡可能在訓(xùn)練管道和應(yīng)用管道間重復(fù)使用代碼。
批處理不同于在線處理。進(jìn)行在線處理時(shí),您必須在每個(gè)請(qǐng)求到達(dá)時(shí)對(duì)其進(jìn)行處理(例如,您必須為每個(gè)查詢單獨(dú)進(jìn)行查找),而進(jìn)行批處理時(shí),您可以組合任務(wù)(例如進(jìn)行關(guān)聯(lián))。應(yīng)用時(shí),您進(jìn)行的是在線處理,而訓(xùn)練時(shí),您進(jìn)行的是批處理。不過(guò),您可以通過(guò)一些方法來(lái)重復(fù)使用代碼。例如,您可以專門為自己的系統(tǒng)創(chuàng)建一個(gè)對(duì)象,其中所有查詢結(jié)果和關(guān)聯(lián)都能以非常易于人類讀取的方式進(jìn)行存儲(chǔ),且錯(cuò)誤也可以輕松進(jìn)行測(cè)試。然后,收集了所有信息后,您可以在應(yīng)用和訓(xùn)練期間使用一種共同的方法,在人類可讀對(duì)象(特定于您的系統(tǒng))和ML需要的任何格式之間架起一座橋梁。這樣可以消除訓(xùn)練 - 應(yīng)用偏差的一個(gè)根源。由此推知,在訓(xùn)練和應(yīng)用時(shí),盡量不要使用兩種不同的編程語(yǔ)言。如果這樣做,就幾乎不可能共享代碼了。
第 33 條規(guī)則:如果您根據(jù) 1 月 5 日之前的數(shù)據(jù)生成模型,則根據(jù) 1 月 6 日及之后的數(shù)據(jù)測(cè)試模型。
一般來(lái)說(shuō),要衡量模型的效果,應(yīng)使用在訓(xùn)練模型所有數(shù)據(jù)對(duì)應(yīng)的日期之后的日期收集的數(shù)據(jù),因?yàn)檫@樣能更好地反映系統(tǒng)應(yīng)用到生產(chǎn)時(shí)的行為。如果您根據(jù) 1 月 5 日之前的數(shù)據(jù)生成模型,則根據(jù) 1 月 6 日及之后的數(shù)據(jù)測(cè)試模型。您一般會(huì)發(fā)現(xiàn),使用新數(shù)據(jù)時(shí)模型的效果不如原來(lái)好,但應(yīng)該不會(huì)太糟。由于可能存在的一些日常影響,您可能沒有預(yù)測(cè)到平均點(diǎn)擊率或轉(zhuǎn)化率,但曲線下面積(表示正分類樣本的分?jǐn)?shù)高于負(fù)分類樣本的概率)應(yīng)該非常接近。
第 34 條規(guī)則:在有關(guān)過(guò)濾的二元分類(例如,垃圾郵件檢測(cè)或確定有趣的電子郵件)中,在短期內(nèi)小小犧牲一下效果,以獲得非常純凈的數(shù)據(jù)。
在過(guò)濾任務(wù)中,標(biāo)記為負(fù)分類的樣本不會(huì)向用戶顯示。假設(shè)您的過(guò)濾器在應(yīng)用時(shí)可屏蔽 75% 的負(fù)分類樣本。您可能會(huì)希望從向用戶顯示的實(shí)例中提取額外的訓(xùn)練數(shù)據(jù)。例如,如果用戶將您的過(guò)濾器未屏蔽的電子郵件標(biāo)記為垃圾郵件,那么您可能想要從中學(xué)習(xí)規(guī)律。
但這種方法會(huì)引入采樣偏差。如果您改為在應(yīng)用期間將所有流量的 1% 標(biāo)記為 "預(yù)留",并向用戶發(fā)送所有預(yù)留樣本,則您可以收集更純凈的數(shù)據(jù)。現(xiàn)在,過(guò)濾器屏蔽了至少 74% 的負(fù)分類樣本。這些預(yù)留樣本可以成為訓(xùn)練數(shù)據(jù)。
請(qǐng)注意,如果過(guò)濾器屏蔽了 95% 或以上的負(fù)分類樣本,則此方法的可行性會(huì)降低。即便如此,如果您希望衡量應(yīng)用效果,可以進(jìn)行更低比例的采樣(比如 0.1% 或 0.001%)。一萬(wàn)個(gè)樣本足以非常準(zhǔn)確地評(píng)估效果。
第 35 條規(guī)則:注意排名問題中存在的固有偏差。
當(dāng)您徹底改變排名算法,導(dǎo)致出現(xiàn)不同的排名結(jié)果時(shí),實(shí)際上改變了您的算法以后會(huì)處理的數(shù)據(jù)。這時(shí),就會(huì)出現(xiàn)固有偏差,您應(yīng)該圍繞這種偏差來(lái)設(shè)計(jì)模型。具體方法有多種。以下是讓您的模型青睞已見過(guò)的數(shù)據(jù)的方法。
對(duì)覆蓋更多查詢的特征(而不是僅覆蓋一個(gè)查詢的特征)進(jìn)行更高的正則化。通過(guò)這種方式,模型將青睞專門針對(duì)一個(gè)或幾個(gè)查詢的特征,而不是泛化到所有查詢的特征。這種方法有助于防止十分熱門的查詢結(jié)果顯示到不相關(guān)的查詢中。請(qǐng)注意,這與以下更為傳統(tǒng)的建議相左:對(duì)具有更多唯一值的特征列進(jìn)行更高的正則化。
僅允許特征具有正權(quán)重。這樣一來(lái),就可確保任何好特征都比 "未知" 特征合適。
不選擇只處理文檔數(shù)據(jù)的特征。這是第一條規(guī)則的極端版本。例如,即使指定應(yīng)用是熱門下載應(yīng)用(無(wú)論查詢是什么),您也不想在所有地方都展示它。如果不選擇只處理文檔數(shù)據(jù)的特征,這一點(diǎn)很容易做到。您之所以不想在所有地方展示某個(gè)特定的熱門應(yīng)用,是因?yàn)樽層脩艨梢哉业剿兴钁?yīng)用至關(guān)重要。例如,如果一位用戶搜索 "賞鳥應(yīng)用",他/她可能會(huì)下載 "憤怒的小鳥",但那絕對(duì)不是他/她想要的應(yīng)用。展示此類應(yīng)用可能會(huì)提高下載率,但最終卻未能滿足用戶的需求。
第 36 條規(guī)則:通過(guò)位置特征避免出現(xiàn)反饋環(huán)。
內(nèi)容的位置會(huì)極大地影響用戶與其互動(dòng)的可能性。如果您將應(yīng)用放在首位,則應(yīng)用獲得的點(diǎn)擊率更高,導(dǎo)致您認(rèn)為用戶更有可能點(diǎn)擊該應(yīng)用。處理此類問題的一種方法是添加位置特征,即關(guān)于內(nèi)容在網(wǎng)頁(yè)中的位置的特征。您可以使用位置特征訓(xùn)練模型,使模型學(xué)習(xí)(例如)對(duì)特征 "1st-position" 賦予較高的權(quán)重。因此,對(duì)于具有 "1st-position=true" 特征的樣本的其他因素,模型會(huì)賦予較低的權(quán)重。然后,在應(yīng)用時(shí),您不向任何實(shí)例提供位置特征,或?yàn)樗袑?shí)例提供相同的默認(rèn)特征,因?yàn)樵跊Q定以怎樣的順序顯示候選實(shí)例之前,您就對(duì)其進(jìn)行了打分。
請(qǐng)注意,因?yàn)橛?xùn)練和測(cè)試之間的這種不對(duì)稱性,請(qǐng)務(wù)必在位置特征與模型的其余特征之間保持一定的分離性。讓模型成為位置特征函數(shù)和其余特征函數(shù)之和是理想的狀態(tài)。例如,不要將位置特征與任何文檔特征組合在一起。
第 37 條規(guī)則:測(cè)量訓(xùn)練 / 應(yīng)用偏差。
一般來(lái)說(shuō),很多情況都會(huì)引起偏差。此外,您可以將其分為以下幾個(gè)部分:
訓(xùn)練數(shù)據(jù)和預(yù)留數(shù)據(jù)的效果之間的差異。一般來(lái)說(shuō),這種情況始終存在,而且并非總是壞事。
預(yù)留數(shù)據(jù)和 "次日" 數(shù)據(jù)的效果之間的差異。同樣,這種情況始終存在。您應(yīng)該調(diào)整正則化,以最大程度地提升次日數(shù)據(jù)的效果。不過(guò),如果與預(yù)留數(shù)據(jù)相比,次日數(shù)據(jù)效果下降明顯,則可能表明某些特征具有時(shí)效性,而且可能會(huì)降低模型的效果。
"次日" 數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)的效果之間的差異。如果您將模型應(yīng)用于訓(xùn)練數(shù)據(jù)中的某個(gè)樣本,并在應(yīng)用時(shí)使用同一樣本,那么您得到的結(jié)果應(yīng)該完全相同(請(qǐng)參閱第 5 條規(guī)則)。因此,此處的差異很可能表示出現(xiàn)了工程錯(cuò)誤。
ML第三階段:緩慢增長(zhǎng)、優(yōu)化細(xì)化和復(fù)雜模型
第二階段即將結(jié)束時(shí)會(huì)出現(xiàn)一些信號(hào)。首先,月增長(zhǎng)開始減弱。您將開始在指標(biāo)之間做出取舍:在部分試驗(yàn)中,您會(huì)看到一些指標(biāo)上升了,而另一些指標(biāo)下降了。情況變得有趣起來(lái)。由于越來(lái)越難實(shí)現(xiàn)增長(zhǎng),因此ML系統(tǒng)必須變得更加復(fù)雜。注意:相比之前兩個(gè)部分,本部分中會(huì)有較多的純理論性規(guī)則。我們見過(guò)許多團(tuán)隊(duì)在ML的第一階段和第二階段非常滿意。但到了第三階段后,他們必須找到自己的道路。
第 38 條規(guī)則:如果目標(biāo)不協(xié)調(diào),并成為問題,就不要在新特征上浪費(fèi)時(shí)間。
當(dāng)您的衡量結(jié)果穩(wěn)定時(shí),您的團(tuán)隊(duì)會(huì)開始關(guān)注當(dāng)前ML系統(tǒng)的目標(biāo)范圍之外的問題。如前所述,如果現(xiàn)有算法目標(biāo)未涵蓋產(chǎn)品目標(biāo),則您需要修改算法目標(biāo)或產(chǎn)品目標(biāo)。例如,您可以優(yōu)化點(diǎn)擊次數(shù)、+1次數(shù)或下載次數(shù),但讓發(fā)布決策部分依賴于人工評(píng)分者。
第 39 條規(guī)則:發(fā)布決策代表的是長(zhǎng)期產(chǎn)品目標(biāo)。
Alice 有一個(gè)關(guān)于減少預(yù)測(cè)安裝次數(shù)的邏輯損失的想法。她添加了一個(gè)特征。邏輯損失降低了。當(dāng)她運(yùn)行在線實(shí)驗(yàn)時(shí),看到安裝率增加了。但是,在發(fā)布評(píng)審會(huì)上,有人指出,每日活躍用戶數(shù)減少了 5%。于是,團(tuán)隊(duì)決定不發(fā)布該模型。Alice 很失望,但現(xiàn)在她意識(shí)到發(fā)布決策取決于多個(gè)條件,只有一部分條件可以通過(guò)ML直接得到優(yōu)化。
事實(shí)上,現(xiàn)實(shí)世界并不是網(wǎng)游世界:沒有 "生命值" 來(lái)確定產(chǎn)品的運(yùn)行狀況。團(tuán)隊(duì)必須使用自己收集的統(tǒng)計(jì)信息來(lái)嘗試有效地預(yù)測(cè)系統(tǒng)未來(lái)的表現(xiàn)會(huì)如何。他們需要關(guān)注互動(dòng)度、日活躍用戶數(shù) (DAU)、30 日 DAU、收入以及廣告主的投資回報(bào)率。這些可在 A/B 測(cè)試中衡量的指標(biāo)本身僅代表了以下更長(zhǎng)期目標(biāo):讓用戶滿意、增加用戶數(shù)量、讓合作伙伴滿意以及實(shí)現(xiàn)盈利,進(jìn)一步,您還可以認(rèn)為它們代表了發(fā)布優(yōu)質(zhì)且實(shí)用的產(chǎn)品,以及五年后公司繁榮發(fā)展。
唯一可以輕松做出發(fā)布決策的情況是,所有指標(biāo)都在變好(或至少?zèng)]有變差)。如果團(tuán)隊(duì)能夠在復(fù)雜的ML算法和簡(jiǎn)單的啟發(fā)式算法之間做出選擇,而對(duì)所有這些指標(biāo)來(lái)說(shuō),簡(jiǎn)單的啟發(fā)式算法可以提供更好的效果,那么應(yīng)該選擇啟發(fā)式算法。此外,并未對(duì)所有可能的指標(biāo)值進(jìn)行明確排名。具體而言,請(qǐng)考慮以下兩種情形:
實(shí)驗(yàn) | 每日活躍用戶數(shù) | 收入 / 日 |
---|---|---|
A | 100 萬(wàn) | 400 萬(wàn)美元 |
B | 200 萬(wàn) | 200 萬(wàn)美元 |
如果當(dāng)前系統(tǒng)是 A,那么團(tuán)隊(duì)不太可能會(huì)改用 B。如果當(dāng)前系統(tǒng)是 B,那么團(tuán)隊(duì)不太可能會(huì)改用 A。這似乎與理性行為背道而馳;但是,對(duì)更改指標(biāo)的預(yù)測(cè)可能會(huì)成功也可能不會(huì),因此這兩種改變都蘊(yùn)含著巨大的風(fēng)險(xiǎn)。每個(gè)指標(biāo)都涵蓋了團(tuán)隊(duì)所擔(dān)心的一些風(fēng)險(xiǎn)。
此外,沒有一個(gè)指標(biāo)涵蓋團(tuán)隊(duì)最關(guān)心的問題,即 "五年后我的產(chǎn)品將何去何從"?
另一方面,個(gè)人更傾向于選擇可以直接優(yōu)化的目標(biāo)。大多數(shù)ML工具也都青睞這樣的環(huán)境。在這樣的環(huán)境下,快速創(chuàng)建新特征的工程師能穩(wěn)定地進(jìn)行一系列發(fā)布。一種稱為 "多目標(biāo)學(xué)習(xí)" 的ML已開始解決此問題。例如,您可以提出約束滿足問題,對(duì)每個(gè)指標(biāo)設(shè)定下限,并優(yōu)化指標(biāo)的一些線性組合。不過(guò),即使如此,也并不是所有指標(biāo)都可以輕松框定為ML目標(biāo):如果用戶點(diǎn)擊了文檔或安裝了應(yīng)用,那是因?yàn)橄鄳?yīng)內(nèi)容展示出來(lái)了。但要弄清楚用戶為什么訪問您的網(wǎng)站就難得多。如何預(yù)測(cè)整個(gè)網(wǎng)站未來(lái)的成功狀況屬于AI完備問題:與計(jì)算機(jī)視覺或自然語(yǔ)言處理一樣難。
第 40 條規(guī)則:保證集成學(xué)習(xí)簡(jiǎn)單化。
采用原始特征并直接對(duì)內(nèi)容進(jìn)行排名的統(tǒng)一模型是最易于進(jìn)行調(diào)試和理解的模型。但是,集成學(xué)習(xí)模型(將其他模型的分?jǐn)?shù)結(jié)合到一起的模型)可以實(shí)現(xiàn)更好的效果。為了簡(jiǎn)單起見,每個(gè)模型應(yīng)該要么是僅接受其他模型的輸入的集成學(xué)習(xí)模型,要么是接受多個(gè)特征的基本模型,但不能兩者皆是。如果在單獨(dú)訓(xùn)練的模型之上還有其他模型,則組合它們會(huì)導(dǎo)致不良行為。
使用簡(jiǎn)單的模型進(jìn)行集成學(xué)習(xí)(僅將 "基本" 模型的輸出作為輸入)。此外,您還需要將屬性強(qiáng)加到這些集成學(xué)習(xí)模型上。例如,基本模型生成的分?jǐn)?shù)的升高不應(yīng)使集成學(xué)習(xí)模型的分?jǐn)?shù)有所降低。另外,如果傳入的模型在語(yǔ)義上可解釋(例如,經(jīng)過(guò)校準(zhǔn)),則最理想,因?yàn)檫@樣一來(lái),即使基本模型發(fā)生改變,也不會(huì)擾亂集成學(xué)習(xí)模型。另外,強(qiáng)制要求:如果基本分類器的預(yù)測(cè)概率增大,不會(huì)使集成學(xué)習(xí)模型的預(yù)測(cè)概率降低。
第 41 條規(guī)則:效果達(dá)到平穩(wěn)后,尋找與現(xiàn)有信號(hào)有質(zhì)的差別的新信息源并添加進(jìn)來(lái),而不是優(yōu)化現(xiàn)有信號(hào)。
您添加了一些有關(guān)用戶的受眾特征信息,也添加了一些有關(guān)文檔中字詞的信息。您探索了模板,并調(diào)整了正則化。但在幾個(gè)季度的發(fā)布中,關(guān)鍵指標(biāo)的提升幅度從來(lái)沒有超過(guò) 1%。現(xiàn)在該怎么辦?
是時(shí)候開始為截然不同的特征(例如,用戶在過(guò)去一天內(nèi)、一周內(nèi)或一年內(nèi)訪問的文檔的歷史記錄,或者其他屬性的數(shù)據(jù))構(gòu)建基礎(chǔ)架構(gòu)了。您可以使用維基數(shù)據(jù)條目或公司內(nèi)部信息(例如,Google 的知識(shí)圖譜)。利用深度學(xué)習(xí)。開始調(diào)整您對(duì)投資回報(bào)的預(yù)期,并付出相應(yīng)的努力。與在任何工程項(xiàng)目中一樣,您必須對(duì)添加新特征的好處與增加復(fù)雜性的成本進(jìn)行一番權(quán)衡。
第 42 條規(guī)則:不要期望多樣性、個(gè)性化或相關(guān)性與熱門程度之間的聯(lián)系有您認(rèn)為的那樣密切。
一組內(nèi)容中的多樣性可以有多種含義,其中內(nèi)容來(lái)源的多樣性是最常見的一種。個(gè)性化意味著每個(gè)用戶獲得貼合其個(gè)人需求的結(jié)果。相關(guān)性意味著某個(gè)特定查詢的結(jié)果更適合該查詢,而非其他任何查詢。因此,這三個(gè)屬性均具有不同于常態(tài)的定義。
但常態(tài)往往很難被打敗。
請(qǐng)注意,如果您的系統(tǒng)在測(cè)量點(diǎn)擊次數(shù)、訪問時(shí)間、觀看次數(shù)、+1 次數(shù)、轉(zhuǎn)發(fā)次數(shù)等數(shù)據(jù),那么您測(cè)量的是內(nèi)容的熱門程度。團(tuán)隊(duì)有時(shí)會(huì)嘗試學(xué)習(xí)具備多樣性的個(gè)性化模型。為實(shí)現(xiàn)個(gè)性化,他們會(huì)添加支持系統(tǒng)進(jìn)行個(gè)性化(代表用戶興趣的部分特征)或多樣化(表明相應(yīng)文檔是否與其他返回的文檔有任何相同特征的特征,例如作者或內(nèi)容)的特征,然后發(fā)現(xiàn)這些特征的權(quán)重比預(yù)期低(或者有時(shí)是不同的信號(hào))。
這并不意味著多樣性、個(gè)性化或相關(guān)性不重要。正如上一條規(guī)則中所指出的那樣,您可以進(jìn)行后期處理來(lái)增加多樣性或相關(guān)性。如果您看到更長(zhǎng)期的目標(biāo)有所增長(zhǎng),您可以聲明除了熱門程度外,多樣性/相關(guān)性也很有價(jià)值。然后,您可以繼續(xù)采用后期處理方法,也可以根據(jù)多樣性或相關(guān)性直接修改目標(biāo)。
第 43 條規(guī)則:在不同的產(chǎn)品中,您的好友基本保持不變,但您的興趣并非如此。
Google 的團(tuán)隊(duì)通過(guò)以下做法取得了大量進(jìn)展:采用一個(gè)預(yù)測(cè)產(chǎn)品中某種聯(lián)系的緊密程度的模型,并使用該模型對(duì)其他產(chǎn)品進(jìn)行準(zhǔn)確預(yù)測(cè)。您的好友保持不變。另一方面,我曾見過(guò)幾個(gè)團(tuán)隊(duì)在應(yīng)對(duì)多個(gè)產(chǎn)品間的個(gè)性化特征時(shí)捉襟見肘。是的,當(dāng)時(shí)看起來(lái)應(yīng)該可以奏效的。但現(xiàn)在看來(lái)并沒有。有時(shí)可以奏效的方法是,使用一個(gè)屬性的原始數(shù)據(jù)來(lái)預(yù)測(cè)另一個(gè)屬性的行為。此外,請(qǐng)注意,僅僅是知道用戶有其他屬性的歷史記錄也會(huì)有幫助。例如,兩個(gè)產(chǎn)品上出現(xiàn)了用戶活動(dòng)或許本身就可以說(shuō)明該問題。
-
ML
+關(guān)注
關(guān)注
0文章
149瀏覽量
34714 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8438瀏覽量
133084
原文標(biāo)題:機(jī)器學(xué)習(xí)43條軍規(guī):解密谷歌機(jī)器學(xué)習(xí)工程最佳實(shí)踐
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論