Reddit爆款討論:那些做機器學習的,平時除了數據清洗還幹些啥?

譯者 | 核子可樂

編輯 | Vincent

AI前線出品| ID:ai-front

編者按:

近日,知名社交平台 Reddit 上有人問了一個問題:那些做機器學習的,平時都在做什麼事情?問題一出,頓時引爆了整個平台,無數機器學習工程師和數據科學家前來回答。我們精選了一些比較有意義,或者有意思的內容,希望能夠給各位讀者一些啟發。

樓主問題

那些做機器學習的,平時都在做什麼事情?一般來講,他們又會如何在各項工作身上分配自己的時間(平均而言)?

機器學習工作很大程度在做數據清洗

回復 1 : 由於我在投身於建模工作之前,負責的是現場工作,因此我更傾向於直接同客戶——而非同事——進行對接與協作。我的其他同事在這類事務中投入的時間可能比我高 10% 到 20%,但我們的大部分時間仍然被投入到數據清洗 / 電子設計自動化(簡稱 EDA)身上

40% 時間進行數據清洗 /20% 時間利用客戶輸入信息進行 EDA 設計實驗,10% 時間用於機器學習(我參與的大多數項目都涉及部分機器學習因素,但我很少將時間真正投入到這方面工作當中。我很清楚我們這一領域的實際情況,而且只要擁有清潔數據,即可輕鬆運行這些模型。)30% 時間用於解釋實驗結果 / 探索如何更有效地利用並解讀我們的模型。

這樣的時間分配方式對我而言非常理想——我有時候也會希望自己能夠投入更多時間開發新的機器學習技術,但我們更傾向於在業務淡季期間提升開發時長比例。

回復 2 : 數據清洗?

所謂數據清洗,就是確保所有必要數據皆已準備就緒,同時收集數據以保證其狀態良好(準確)。另外,如果當前數據的格式與您的使用方式不符,則需要轉換其格式以實現可用性,同時了解其內容。我發現這項工作通常需要耗費大量時間。

回復樓上:我正參與自己人生中的第一個大項目,我當然希望一切都能按部就班順利進行 ; 我拿出了大量時間籌備數據集,但通過觀察,我發現其在很大程度上正是典型的現實世界數據集。

回復 3 : 說個我聽過的笑話:80% 的時間用於數據清洗,20% 時間用於抱怨數據清洗。

回復樓上不應該是「80% 的時間用於數據清洗,30% 時間用於抱怨數據清洗」嗎?

RUNTIME ERROR : 輸入空間必須恰好為 100 個單位。

」見鬼。」修正、修正。「80% 的時間用於數據清洗,18% 時間用於抱怨數據清洗。」

RUNTIME ERROR : 輸入空間必須恰好為 100 個單位。

「見鬼。SELECT FROM EFFORT WHERE TYPE IS DATA CLEANING OR COMPLAINING。」修正、修正。

RUNTIME ERROR : 域不連續。輸入空間不可存在不連續性。

回復:幸運的是,我並不是那麼重要的角色,因此不會參加各類與數據事務相關的招聘及會議(這些工作往往少則持續一、兩小時,多則持續數天)。70% 的時間用於數據工程、實現良好的輸入表達以及可視化模型輸出。20% 的時間進行調試以及文檔閱讀。我遇到的 bug 一般比較簡單,但相關文檔卻晦澀難懂,而且其中的代碼也不易測試(僅指我遇到的一例)。9% 時間有於模型評估(翻譯:超參數調整)。1% 時間用於尋找靈感和編寫新代碼

回復:我管理著一支數據科學家團隊:我們把 60% 的時間用於相互交流:包括我們正在解決什麼問題,目前已經掌握哪些數據等,旨在確保整個團隊遵循標準並給予必要幫助 ; 向企業管理者提供狀態更新與事務動態,從而說服其為項目提供支持 ; 決定還應為團隊引入哪些新成員(同外部顧問合作或者聘請全職人員等)。40% 的時間用於籌備交流內容。0% 的時間用於實際機器學習研究(不高興)

回復:50% 的時間用於數據清洗,30% 時間用於評估,20% 時間用於實現演算法。

回復樓上:50% 到 66% 的時間用於數據清洗——其中包括編寫各類數據轉換機制、整合不同第三方模型(及其數據 / 知識格式)、審查潛在的外部知識來源(可能還需要編寫部分代碼以實現導入 / 提取 / 轉換等)、為手動標記數據建立自動清洗與檢查流程、為數據標記及相關數據管理管道創建工具、處理說明指南以及邊緣案例當中最符合實際需求的具體策略等概念性工作、處理與各類自動化與人工工具中的數據格式相關的概念性工作,外加特徵工程與輸入表達等等。

大概投入 10% 的時間編寫實際機器學習代碼

5% 到 20% 時間進行結果分析並發現改進空間,具體包括文獻審查、模式調整等。大部分改進空間源自更多 / 更好 / 不同的數據集。

5% 到 20% 時間用於處理各類文書工作、成果交付、TPS 報告、財務與時間周期報告等。

在進行大型模型訓練時也會存在一些單純的等待時間,但由於此類等待並不會影響到大部分其它任務,因此團隊成員仍然能夠正常推進其它工作。

回復:行業研究科學家:

? 每天拿出一小時在會議室 / 走廊上與團隊成員進行交流。

? 一小時用於查閱並回復郵件。

? 一小時用於發現必要的數據在哪裡 / 由誰持有。

? 四小時用於通過 pytorch 編寫神經網路。

? 一小時用於閱讀文獻。

? 一小時用於逛 stackoverflow。

研究科學家們非常幸運,因為他們擁有專職數據與基礎設施工程師幫助其處理各類非機器學習事務。不過我個人尤為幸運,因為有一名全職工程師外加一位科學家共同為我提供支持。

回復:按照我第一感覺得出的答案,依次需要進行建模、數據提取、概念驗證方案創建與評估、產品討論、商業討論、工程討論、撰寫設計規範、創建單元測試與數據質量檢查機制、與副總裁及其他高管交流、開會設計實驗、運行實驗、評估實驗、記錄與客戶間的交流內容。

以下為時間細分方式:

? 10% 時間用於創建模型並選擇概念驗證中使用的數據。

? 5% 時間用於運行概念驗證方案。

? 20% 時間用於建立基礎設施,其負責在概念驗證成功後為模型運行提供生產環境。

? 20% 時間用於開會。

? 15% 時間用於設計並運行實驗。

? 10% 時間用於提取並整理數據,以供評估及點滴分析。

? 5% 時間進行文檔記錄。

? 5% 時間用於抱怨休息室里的橙子味蘇打水氣泡太少

? 5% 時間用於確保數字總和為 100。

? 5% 時間用於逛 reddit。

現在我運行有一支數據科學研究團隊,因此會議數量乘 2,管理時長平均增加 15%,其它項目的時間分配則依此比例遞減。

回復:50% 的時間用於管理環境及伺服器,20% 時間進行數據清洗 / 管理,20% 時間用於研究最佳實現方式,10% 時間用於忽略我自己的一些想法——因為企業高管並不關心「用正確的方法做事」這類原則。

回復:作為背景介紹,我已經決定暫時中止自己的博士學業,轉而加入一家計算機視覺初創企業擔任開發人員。

35% 的時間用於 AI/txxy 代碼開發,20% 時間用於處理其它緊急工作,15% 時間進行文檔記錄,10% 時間與其他同事開會 / 交換意見,5% 時間在 ArXiv 上查詢相關資料,5% 的時間則坐等模型訓練完成(我現在會越來越多地利用夜晚時段進行模型訓練,但白天訓練的情況仍然偶有發生)。

回復:實際情況?(免責聲明:這位機器學習效力於一家大型技術企業,其主要任務並非撰寫論文或者提供研究成果,而積極追蹤流行思路,並考察其是否 / 如何能夠被引入生產環境)

這裡假定每天有 8 個小時在辦公室內 / 周邊度過。

1 到 1.5 個小時用於吃午飯 / 和同事們喝咖啡,其間會通過交流理清對於某些議題的思路。

1 個小時用於通過 reddit 認真上的論文標題瀏覽 / 細讀新聞。

1 到 2 個小時用於開會 / 面試。

剩下的 3.5 到 5 個小時進行實際工作,具體包括以下內容:

數據清洗 / 轉換(佔比 60% 到 70%)。

評估實驗結果(佔比 20% 到 30%),其中包括編寫文檔。我不會將這部分工作計入真正的機器學習範疇,因為其主要內容只是編寫腳本並查看數據內容,從而嘗試獲取洞察結論。

機器學習建模工作(佔比 0% 到 20%)。具體包括編寫機器學習代碼、提高代碼執行效率以及嘗試新方法等等。

到這裡,只剩下 0 到 60 分鐘用於大家普遍認知當中的機器學習工作。一方面,工作量絕對不可能以均勻方式分布,因此在以 1 個月為周期的時段之內,我們往往會與各種數據清洗難題作鬥爭。而接下來的 2 周則比較輕閑,使我們能夠作為機器學習技術人員充分驗證自己的思路——而不再像數據水暖工般到處修修補補。

加班會定期發生,但頻率並不高,而且如果必要員工可以隨時離開。

回復:我負責產品側的機器學習工作。我的時間分配方式為:

10% 時間用於開會及敏捷討論 ;

20% 時間用於模擬標籤選項(我們的多數產品並不具備可資利用的明確監督標籤,而且找到』正確『標籤本身就是一項創造性挑戰);

30% 時間用於數據清洗 ;

10% 時間用於建模(其中不包括用於等待模型訓練的時間,因為訓練工作會安排在夜間進行);

20% 時間用於打理及維護基礎設施,因為我們並不會設專職的數據工程師 ;

10% 時間用於向他人介紹目前的工作進展以及自我研究。

數據清洗應該外包嗎?

回復:(數據清洗的工作)這類任務聽起來像是適合外包的樣子嗎?

雖然外包聽起來像是個不錯的主意,但數據清洗工作則完全不同——如果對方不熟悉我們所處的行業或者不了解我們使用的模型,那麼數據清洗效果不可能令人滿意。通常情況下,「良好的模型」與「卓越的模型」之間的差異,恰恰源自數據清洗所帶來的成效——而非僅僅在於投入時間以尋求新的創造性模型構建方式。

回復:以外包方式處理「數據清洗」工作存在大量弊端:

1) 難以指定規範。這裡所指的並不是簡單的輸入錯誤,而是確切描述需要規範的情景與客觀的理解方式。

2) 雖然數據是分析結論的金礦,但如果我們在模型當中採取的假設存在前提性錯誤,那麼其必然帶來令人頭痛的問題。一切表象可能皆圍繞真相而來,但卻又不可盡信,因此我們必須重製整體模型以調整假設前提。如果採取包外方式,那麼上述目標將永遠無從談起。

3) 如果您的模型發生了巨大變化,則很有可能需要重新構建。也許大家意識到自己並不應該使用 PCA 變數,或者發現模型本身無法處理某些異常狀況,或者是認識到自己需要對分類變數進行重新調整甚至將重量列中的數字單位由千克調整為磅。

在開始進行之前,大家可以進行各類盡職調查,但不可否認的是,機器學習模型的構建工作始終是一個持續的迭代流程。

回復:不應該外包。大家必須熟悉自己的數據,而將這項管理工作外包出去通常無法節約時間或者金錢。

回復:是否存在一種新的演算法設置方式能夠提升數據適應能力?或者說將數據添加至現有演算法當中以改善準確度?

回復:在數據清洗過程當中,你所作出的一切決定都會對下游的一切產生重大影響。數據清洗涉及到數據格式化、缺失值處理以及變數保留判斷等多項工作。更重要的是,我們必須了解如何完成清洗以及為何能夠斷言清洗已經完成,並在必要時重新清洗以滿足特定要求。總而言之,對於原始數據的熟悉程度越高,清洗效果也就越好。

回復:雖然外包並不是完全不可能,但這要求我們提供大量來自數據的知識、價值、意義以及複雜性描述。而這些結論往往源自我們對於企業運作方式的理解,或者特定項目的深層目標,因此很難以外包形式——或者說由不了解您數據結構的外部人員——進行妥善處理。

由於相當一部分數據來自組織效果低下的日誌記錄,因此我們需要直接與開發人員溝通,詢問其中的生成的方式或者應在哪裡找到必要的內容,在哪裡尋找特定內容,或者在無法獲取正確數據類型時要求建立新的記錄機制或詢問可以通過哪些其它方式加以獲取。總體來講,整個過程需要全面參與……當然,也許有一天,我們能夠迎來一套標準化的日誌記錄結構。但即使是這樣,每家企業的數據需求仍然有所不同,因此我很難想像會出現一套「全能式」的解決方案。

回復:數據清洗工作必須依託於模型本身以及其它各項條件來協同完成。數據清洗不存在「默認」方式,這是因為每一套數據集與模型都有著非常具體的實際要求,因此需要一位數據科學家專職負責打理。

回復:如果不經常使用,數據本身也會出現「藏污納垢」的現象。最佳作法在於保持數據潤滑度,並將其「存放在陰涼乾燥的地方」。由於大多數行業數據收集自並不十分合理的來源,因此數據科學家的大部分工作是在實際使用時將數據清洗為符合要求的嚴格形式。

回復:怒頂樓上。數據集中的雜亂與無序令人一眼難忘。各項整數還好,而很多邊緣細節也很難被及時注意到,最可怕的是那些可能包含重要意義但卻易被忽略的小數——只有解決這一切,才能實現理想的機器學習準確度。真的很討厭!

回復:一句話來總結,我認為數據調查工作並不能通過高壓方式輕鬆解決。我們對於數據的了解程度永遠有所缺失。大家應該始終秉持從小著眼的入手方式。如果您對這類工作感到無聊,那麼數據科學恐怕並不適合您。另外,這類工作無法外包出去。大家還需要規劃數據當中的真實信息,而這幾乎永遠是一項漫長而艱巨的任務,包括清洗、清洗、再清洗。在構建模型時,大概 30% 到 40% 的時間會被花在數據清洗身上——無聊,但卻無法避免

除了數據清洗,你平時都在忙些什麼?歡迎在留言區討論。

原文鏈接:

reddit.com/r/MachineLea


-全文完-

關注人工智慧的落地實踐,與企業一起探尋 AI 的邊界,AICon 全球人工智慧技術大會火熱售票中,6 折倒計時一周搶票,詳情點擊:

aicon.geekbang.org/appl

《深入淺出TensorFlow》迷你書現已發布,關注公眾號「AI前線」,ID:ai-front,回復關鍵字:TF,獲取下載鏈接!


推薦閱讀:

實用指南:如何為你的深度學習任務挑選最合適的 GPU?
數學 · 決策樹(二)· 信息增益
機器學習基礎概念3:監督學習
如何評價牛津的Prof. Andrew Zisserman?
關於LDA的gibbs採樣,為什麼可以獲得正確的樣本?

TAG:机器学习 | 数据清洗 |