清單管理?面向機器學習中的數據集
毋庸置疑的是,數據在機器學習中起著至關重要的作用。每個機器學習模型實例都是使用靜態數據集的形式進行訓練和評估,這些數據集的特性從根本上影響了模型的行為: 如果一個模型的部署環境與它的訓練或評估數據集不匹配,或者這些數據集存在不必要的誤差和偏見,那么它就不可能有良好的表現。當機器學習模型應用于高風險領域時,如招聘和金融等領域時,這種不匹配會產生特別嚴重的后果。即使在其他領域,不匹配也可能導致收益的損失。
雖然數據的可信來源已經在數據庫領域得到了廣泛的研究,但是在機器學習領域卻不是這樣的,記錄數據集的創建和使用并沒有得到足夠的重視,目前還沒有標準化的機器學習數據集記錄流程。
有什么好的方法么?不妨嘗試一下清單管理。
1. 關于清單管理
在電子工業中,每個部件,無論多么簡單或復雜,都伴隨著一份描述其操作特性、測試結果、推薦使用和其他信息的數據表。同樣的,我們可以嘗試使用清單管理,每個數據集都伴隨著一個清單列表,記錄其動機、組成、采集、用途等等。數據集的清單列表會增加機器學習的透明度和問責制,減少機器學習模型中不必要的誤差和偏見。
用于數據集的清單需要滿足兩個關鍵群體的需求: 數據集創建者和數據集消費者。對于數據集的創建者來說,清單可以對創建、分發和維護數據集的過程進行反思,包括任何潛在的假設、風險或危害,以及使用的影響。對于數據集消費者來說,清單可以確保他們擁有所需的信息,以便在使用數據集時做出明智的決策。數據集創建者的透明度對于數據集消費者來說是必要的,這樣可以充分了解選擇適當的數據集,并避免無意中的誤用。
同時,數據集的清單管理促進機器學習結果有更大的重用性,無法訪問數據集的開發者可以利用清單中的信息創建具有類似特征的替代數據集。
2. 面向數據集生命周期的清單
數據集生命周期包括: 動機、組成、采集、預處理/清理/標記、使用、分發和維護。面向數據集的生命周期,可以嘗試簡歷清單列表。需要注意的是,清單中的內容并非適用于所有數據集,那些不適用的選項可以跳過。
2.1 數據集的創建動機
創建數據集的理由是創建的動機,自檢清單可能包括:
- 創建數據集的目的是什么?
- 預期面向什么問題?
- 有沒有什么具體的任務?
- 誰創建了數據集,代表哪個實體(實例例如,公司、機構、組織) ?
2.2 數據集的組成
數據集的創建者在數據采集之前明確的清單列表,要了解對數據集的消費者提供所需要的信息,以便在是否使用數據集時做出明智的決定。需要注意的是,如果涉及個人信息,要關注《個人信息保護法》,以及其他的法律法規的限定。
- 組成數據集的實例代表什么(例如,文檔、照片、人物、國家等) ?
- 是否存在多種類型的實例(例如,電影、用戶和評級之間的交互,可能是節點和邊) ?
- 總共有多少個實例 ?
- 數據集是否包含所有可能的實例,還是來自更大集合的實例樣本(不一定是隨機的) ?如果數據集是一個樣本,那么較大的集合是什么?樣本能否代表較大的集合嗎?如果是,要描述如何驗證這個代表性。如果不能,要描述原因。
- 每個實例由哪些數據組成?原始數據(例如,未處理的文本或圖像)還是特征數據呢?
- 是否有與每個實例相關聯的標簽或對象?
- 單個實例中是否缺少信息?如果是,描述這個信息是缺失的(例如,因為它是不可用的)。
- 個別實例之間的關系是否明確(例如,社交網絡鏈接等) ?
- 是否有推薦的數據拆分(例如,訓練、開發/驗證、測試) ?如果是,描述這些拆分背后的理由。
- 數據集中是否有任何錯誤、噪音源或冗余? 如果有,描述是哪些。
- 數據集是自包含的,還是鏈接到外部資源(例如,網站或其他數據集) ?如果鏈接到或依賴于外部資源,a)是否保證這些資源在一段時間內將繼續存在并保持不變; b)是否存在完整數據集的官方版本(即,包括數據集創建時存在的外部資源) ; c)是否存在外部數據集資源的使用限制(例如,許可或費用) ?說明所有外部資源和與之相關的任何限制,以及鏈接。
- 數據集是否包含可能被視為機密的數據(例如,受醫患保密性保護的數據等) ?
如果數據集與人有關,還可能包括:
- 數據集是否識別人群(例如,按年齡、性別) ?如果是,描述如何識別的,并在數據集中提供它們各自分布的描述。
- 是否有可能從數據集中直接或間接地(即與其他數據結合)識別個人(即一個或多個自然人) ?
- 數據集是否包含任何可能被視為敏感的數據(例如,政治觀點或身份或地點的數據; 金融或健康數據; 生物特征或基因數據; 政府身份識別形式,如身份證等) ?
2.3 采集
數據獲取過程,可以人們創建具有類似特征的替代數據集,可能包括:
- 如何獲得與每個實例相關聯的數據?這些數據是否可以直接觀察到(例如,原始文本、電影評級) ,或者從其他數據(例如,詞性標簽、年齡或語言)中間接推斷/導出?如有關數據是間接從其他數據推斷/得出,有關數據是否經過驗證/核實?
- 采用了哪些機制或程序來收集數據(例如,硬件設備或傳感器、人工管理、軟件程序、軟件 api) ?如何驗證這些機制或程序?
- 如果數據集是一個較大集合中的樣本,那么采樣策略是什么(例如,確定性的、具有特定采樣概率的概率) ?
- 數據收集的時間跨度是多少?這個時間段是否與與實例(例如,最近抓取的舊文章)相關聯數據的創建時間段相匹配?
- 是否進行過任何道德審查程序 ?
如果數據集與人員有關,還可能包括:
- 是直接從有關個人那里收集數據,還是通過第三方或其他來源(例如網站)獲取數據?
- 是否向有關個人通報了數據收集的情況?如果是,通知是如何提供的,并提供一個鏈接或其他訪問點,或以其他方式通知的本身。
- 有關個人是否同意收集和使用他們的數據?如果是,提供一個鏈接或其他訪問點,或以其他方式復制個人的同意確認。
- 如果獲得同意,是否向同意的個人提供了今后撤銷其同意或用于某些用途的機制?如果是,提供一個鏈接或其他接入點。
- 是否對數據集的潛在影響及其對數據主體的使用進行了分析?如果是,分析包括結果、鏈接或任何支持文檔的其他訪問點。
2.4 預處理/清洗/標記
數據集的消費者需要了解處理過程,以確定”原始”數據是否可以與其所選任務兼容的方式進行了處理。清單包括:
- 是否對數據進行了預處理/清理/標記(例如,離散化、標記化、詞性標記、特征提取、實例刪除、缺失值處理) ?
- 除了預處理/清理/標記的數據之外,還保存了“原始”數據嗎?如果是,提供一個鏈接或其他接入點的“原始”數據。
- 用于預處理/清理/標記數據的軟件是否可用?如果可以,提供一個鏈接或其他接入點。
2.5 用途
數據集的應用邊界是什么?通過明確這些任務,數據集的創建者可以幫助數據集消費者做出明智的決定,從而避免潛在的風險或危害。
- 數據集是否已用于某些任務? 如果是,簡述一下這些任務。
- 是否有一個存儲鏈接到所有使用數據集的論文或系統?如果有,提供一個鏈接或其他接入點。
- 數據集可以用于什么(其他)任務?
- 數據集的組成或者數據集的收集和預處理/清理/標記的方式是否會影響未來的使用?
- 是否有不應該使用數據集的任務? 如果有,說明一下。
2.6 分發
數據集的分發要么在數據集所代表的組織內部分發,要么在外部分發給第三方,清單可能包括:
- 數據集是否會分發給數據集所代表的組織之外的第三方(例如,公司、機構、組織) ?
- 數據集將如何發布(例如,網站上的下載鏈接、 API、 GitHub等) ?數據集是否有一個 DOI 數據集?
- 數據集什么時候分發?
- 數據集是否會根據版權或其他知識產權許可使用條款分發?如果是,描述許可證和/或使用條款,并提供鏈接或其他接入點。
- 是否有任何第三方對與實例相關的數據施加基于 ip 的或其他限制?
- 是否對數據集的分發管制或限制?
2.7 維護
不要有人生,沒人養。關于數據集的維護計劃,清單可能包括:
- 誰將支持/托管/維護數據集?
- 如何聯系數據集的所有者或管理者(例如,電子郵件地址) ?
- 是否有勘誤表? 如果有,提供鏈接。
- 是否會更新數據集(例如,更正標記錯誤、添加新實例、刪除實例) ?如果,多久更新一次,由誰更新,以及如何通知數據集的消費者 ?
- 如果數據集與人有關,是否對保留與實例有關的數據有適用的限制?如果有,這些限制如何執行?
- 數據集的舊版本是否會繼續得到支持/托管/維護?
- 如果其他人希望擴展/增強/構建/貢獻數據集,是否有一種機制讓他們這樣做?這些貢獻是否得到驗證/核實?
3.數據集清單管理的作用與影響
數據集的清單管理不能提供一個完整的解決方案來減輕不必要的偏見或潛在的風險。創建者可能無法預測數據集的每一種可能的用途,當創建與人相關數據集的時候,可能需要與多領域的專家合作,才能較好地收集數據。
為數據集進行清單管理必然會增加數據集創建者的成本。盡管清單有較多一次性問題的選項,但創建清單的過程總是需要時間,組織的基礎設施和工作流程需要修改,同樣是開發成本。清單列表和工作流可能會對動態數據集造成問題,頻繁更新數據集的清單可能會有較大的成本。
盡管如此,數據集的清單管理促進了數據集創建者和數據集消費者之間更好的溝通,還使數據集創建者能夠區分透明度和可靠性??偟膩碚f,對數據集進行清單管理應該是利大于弊的。