天天看點

如何通過建構平台搞定資料标注難題?

資料标注行業流淌這麼一句話:“有多少智能,就有多少人工”。大量的訓練資料是進行深度學習的前提,資料的品質決定了模型的上限,而訓練資料産生離不開資料标注,資料标注作為機器學習工程中重要的一環,是建構 AI 金字塔的基礎。以曠世科技 AI 獨角獸為例,它的标注員工多達 405 人,占公司員工比例的 17.2 %

在許多學術界和工業界人士努力下,先後在多個領域誕生了開放資料集,從入門的 MNIST,再到大名鼎鼎的 Image Net,涵蓋了通用場景。但在實際的業務通常碰到某些細分領域沒有開放資料集,比如服裝的類型和風格,這就要求自己建構訓練資料集,或自力更生,或臨時雇用外包人員(自己提供工具),甚至全權委托給專業标注公司(無需提供标注工具,成本高)。蘑菇街有大量資料标注的需求,綜合成本、效率等因素考慮,我們建設了統一的标注平台,支撐衆多的标注業務,部分樣圖請見如下。

如何通過建構平台搞定資料标注難題?

常見的标注場景

從領域角度,蘑菇街的機器學習業務可分為 CTR(點選通過率)、計算視覺和 NLP 三類,其中 CTR 為排序推薦相關業務,這類業務通過埋點收集資料。對于大部分計算視覺和 NLP 的訓練任務,需要标注建構資料集。

不僅于蘑菇街,放眼業界,常見的标注場景可以分為如下兩大類(音頻的場景相對較少,不在讨論範圍内):

  • 計算視覺
  • 分類:對圖檔和視訊進行分類,例如服裝顔色、類型分類等。
  • 分割:對圖檔進行分割,比如從交通圖像分割出道路,從服裝圖像分割出褲子、上衣等。
  • 目标檢測:通常采用矩形框圈出目标物體,并貼上标簽,比如圈出服裝圖像中的鞋子,交通圖像中的汽車。
  • NLP
  • 分類:對文本進行分類,比如情感分類。
  • 實體識别:從文本提取出具有特定意義的實體,比如從商品描述中标注商品名稱,描述商品的形容詞等。
  • 翻譯:不同語言之間的轉換,如英譯中。

開源的标注工具

Github 誕生了許多開源的标注工具,涵蓋了計算視覺、NLP 等諸多領域,特别在計算視覺方面,許多優秀的開源項目如雨後春筍一般,其中不乏有如 OpenCV 社群和 Microsoft 等商業公司的支援。筆者梳理了部分計算視覺、NLP 等領域部分人氣較好的标注項目,如下表所示。

項目 适合場景 說明 桌面/Web stars
labelImg 目标檢測(圖像) 采用矩形框标注目标,結果儲存至本地 xml 檔案 桌面軟體 8.8K
cvat 目标檢測、分割、分類任務(圖像和視訊) 功能強大,支援圖像和視訊的多種标準場景,支援導出多種格式結果檔案 Django Web 服務 2.6K
labelme 目标檢測、分割、分類任務(圖像) 功能較為強大 桌面軟體 3.5K
vatic 目标檢測、目标跟蹤(視訊) 面向視訊的目标檢測和目标跟蹤,結果儲存至 DB 中 Web 服務 0.4K
doccano NLP 命名實體識别、文本分類、翻譯任務 功能強大,支援多種語言,支援使用者管理,結果儲存至 SQL DB 中 Django Web 服務 1.9K
Chinese-Annotator NLP 命名實體識别、文本分類、關系提取 面向中文的智能文本标注,結果儲存至 Mongo DB 中 Django Web 服務 0.9 K
audio-annotator 音頻分類标注 面向音頻片段的分類标注 Web 服務 0.2K

這些優秀的開源項目專注于細分的領域,适合通用場景下的标注,使用者經安裝和配置即可開展标注工作,有些還甚至支援生成訓練樣本,這對于規模較小,算法業務較為單一的團隊很适合。但是對于算法業務複雜,資料量大,場景特殊的公司而言,直接基于上述工具可能會帶來巨大的維護和管理成本。

  1. 服務管理:在多人(特别是異地外包)标注下,采用桌面工具會帶來大量部署和維護的問題,同時涉及大量資料分發和配置設定問題,繁雜且容易引入錯誤。是以标注服務最好應該提供統一的 Web 入口,标注人員無論身處何處,采用何種作業系統,僅需登入 web 界面即可開展工作;對研發人員而言,維護一個統一的前後端服務的工作量遠遠低于維護多個标注工具。
  2. 資料管理:有些工具将資料儲存到本地 xml,有些儲存到 MySQL 或者 NoSQL,不同項目的資料格式也存在很大差異,帶來較高的管理成本和隐患。是以資料應該采用統一的高可靠存儲,不僅可以精簡維護成本,而且利于銜接樣本構模組化塊。
  3. 使用者管理:使用者和權限管理是多人标注下的一個重要需求,也是大部分标注工具缺失的功能。它在保證安全的同時,還記錄了資料的标注者和稽核者,便于追溯和結算。

由此可知對于标注業務繁多的團隊,很有必要建構統一的标注平台,進而規範流程和風格,對外提供簡單易用的服務,支援多人标注,降低維護成本;同時把資料存儲集中化,資料結構标準化,為下遊的樣本生成子產品奠定良好的基礎。

标注平台的設計

本節重點談談标注平台的設計,我們的目标就是建構一個統一、擴充性強、易用的 Web 标注平台,支援員工、外包等的标注和稽核工作。

設計要點

面向流程 vs 面向業務

我們起初試圖圍繞業務進行抽象,期望為前後端提供一個統一的架構,深度調研發現不同的标注場景,其前端技術棧和實作,資料結構存在巨大的差異,抽象難度高,可行性低。但是從流程的角度出發,所有标注任務的流程非常相似,可梳理成如下:

如何通過建構平台搞定資料标注難題?

我們所有标注業務都遵循上述流程,其中部分流程完全一樣,共用一套代碼邏輯即可,差異部分的流程由每個标注業務自己實作,且互相獨立,例如導入待資料過程中對資料的解析,标注和稽核頁面的實作等等。故每接入一個新标注業務,隻需實作資料解析、标注和稽核頁面相關邏輯即可。特别對于前端頁面,由于标注業務之間互相獨立,可各自按需選擇前端架構,同時友善從開源的項目中移植相關代碼,具備良好的可擴充性。

資料管理

标注資料可分為圖檔、視訊、NLP 文本、中繼資料(包括标注結果)等等,其中圖檔和視訊占據較大的存儲空間,上千萬張圖檔占達着數 TB 的存儲空間,相比本地存儲,采用雲服務的對象存儲是更好的選擇。對于 NLP 文本、标注結果及中繼資料等,具有占用空間少、結構化強的特點,适合存儲在資料庫中。

具體實作

架構選型

絕大部分開源的 Web 标注工具均基于 Django 實作,采用 Python Django 利于開源項目的移植;此外算法同學對 Python 的掌握好于其它語言,如此便于算法同學參與部分邏輯開發,比如資料的解析等等。

每當接入一個新的标注項目,采用如下指令即可建立一個 Django 應用,在對應目錄下實作差異化的流程即可。

python manage.py startapp {mark_app}           

複制

複制代碼

以蘑菇街的标注平台為例,這些差異化的流程展現在如下方面:

  • 解析導入的待标注資料檔案:不同标注任務其原始資料差異較大,比如圖像通常圖檔在 CDN 上的 URL,NLP 則為文本文字,故需要實作特定的解析邏輯。
  • 标注結果序列化和反序列化:不同标注任務其标注結果存在較大差異,寫入和讀取 DB 時需要實作序列化和反序列化。
  • 标注和稽核 Web 頁面:不同标注任務的頁面差異較大,可選取合适的前端架構進行實作。

資料管理

我們把圖像和視訊全部存儲于雲服務中的對象存儲,由對象存儲保證高可靠性,每個圖檔和視訊都有全局唯一的 URL,故導入待标注資料時隻需導入 URL。在标注和稽核過程中,前端根據 URL 從 CDN 下載下傳資料并展示,便捷而高效。

中繼資料存儲于 MySQL 中,主要有兩張表,一張為使用者相關的表,用于使用者和權限的管理。另外一張為标注相關的表,記錄了某條資料的基本資訊,包括原始資料(data)、标注結果(label)、标注者、稽核者、狀态和所屬項目等資訊,幾個重點的 column 如下:

`id`         INT(11)  `data`       MEDIUMTEXT   # 圖像視訊的 URL,NLP 文本,或者圖檔和文本的混合  `label`      MEDIUMTEXT   # 标注結果,一般為 json 格式,便于序列化和反序列化  `project`    VARCHAR(60)  # 對應的标注項目   `importuser` VARCHAR(60)  # 待标注資料導入者  `markuser`   VARCHAR(60)  # 标注者  `checkuser`  VARCHAR(60)  # 稽核者  ...                       # 其它如時間、狀态等資訊           

複制

不同标注業務的 data 字段和 label 字段内容差異很大,data 一般為圖像視訊的 URL,NLP 的文本文字,或者圖像和文本的結合體;label 字段的差異就更大,分類項目的資料結構往往很簡單,而分割類項目的資料結構則複雜許多。是以我們把 data 和 label 兩個字段設定為 text,資料結構的定義和資料的序列化、反序列化在各自的項目中實作,大大的提升了可擴充性。由于所有的标注資料均共用這張表,避免為每個項目都維護一張資料表,降低了接入和維護成本。

部署架構

标注平台的架構比較簡單,資料存儲在 MySQL 和對象存儲中,服務部署在 K8S 的 statefulset 中,由 statefulset 保證高可靠。使用者通路 K8S 的 Service,再由 Service 将負載均衡轉發至 Pod。

順帶提下樣本構模組化塊,它從 MySQL 擷取基本資料,并從 CDN 中下載下傳對應的圖檔或視訊,最終生成如 TFRecords 等格式的訓練樣本。

如何通過建構平台搞定資料标注難題?

進階特性和展望

為了保證資料品質,算法同學通常會承擔一定的稽核工作。但是由于标注的資料量實在太大,即使采用 10% 的抽查率,每個項目往往需要稽核數萬條資料。對于部分标注項目,我們的平台支援采用早批次的資料訓練出模型,初步審查後續的标注結果,對于異常值,再由人工進行第二輪稽核,提升稽核效率。

在圖像分割和 NLP 領域,部分開源的标注工具包含了智能算法,輔助人員進行标注,以提升标注效率,本人認為這是未來标注項目的一個趨勢,特别對于标注成本較高,資料量比較大的項目,可以考慮采用智能輔助标注降低成本,提升效率。