アノテーション: Labelbox と Databricks を使ってラベリングする

はじめに

アノテーションとは、トレーニングデータとして利用するために、様々な形式のデータにメタデータを付与して解釈可能な意味づけをすることである。 機械学習、特にディープラーニングの普及とともに、アノテーションはますます重要な工程になっている。 そこで今回はパートナーコネクト機能で接続したDatabricksLabelboxを使ったアノテーションワークフローについてまとめる。

使用環境

・RunTime: Databricks RunTime: 9.1 LTS (includes Apache Spark 3.1.2, Scala 2.12)
・クラウドベンダー: AWS

DatabricksとLabelboxを接続するメリット

Labelboxはデータレイク上の様々な非構造化データにアノテーションすることが可能であり、Labelbox Connector for Databricksを使うことでアノテーション結果をデルタレイクに連携することができる。 そのためLabelboxとDatabricksを繋ぐことで、アノテーションからモデル開発、アノテーションフィードバックまでの一連のワークフローをレイクハウス環境下で実現できる。

Labelboxを使ったモデリングワークフロー
※引用元: Partnerships | Labelbox

Labelboxとは

データアノテーションによるトレニングデータの作成、管理をするためのトレーニングデータプラットフォーム。
「アノテーション」「モデルのパフォーマンス診断」「ラベリングの優先順位付け」という3つの機能を中心としてイテレーションを回すことで、アノテーション精度向上のフィードバックループを可能にしている。

Labelboxのライフサイクル

1. Annotate: アノテーション

チーム内で共有できるワークフローとラベリングの自動化により、データに迅速かつ正確にラベルを付けることが可能。

2. Diagnose: モデルのパフォーマンス診断

学習したモデルとそのパフォーマンスを簡単に視覚化できるだけでなく、モデルのパフォーマンスに影響を与える学習データのパターンを認識することができる。トレーニングデータの管理と同じプラットフォーム上にパフォーマンス診断機能が存在することで、プロセスが効率化され、モデルのエラーに対処したり、モデルのパフォーマンスを向上させるための高品質なトレーニングデータセットの構築が可能になった。

3. Prioritize: ラベリングの優先順位付け

モデルのパフォーマンスを向上させたり、クラスの不均衡を修正するために、パフォーマンスの低いクラスを特定する。その後、モデルの精度への影響の大きいデータを見つけ、優先順位をつけてラベリングを行うことが可能。

forbesjapan.com またビジネスニュースとしては、2022年の1月にLabelboxの評価額が10億ドルを突破し、ユニコーン企業の仲間入りを果たしたことも記憶に新しい。

Labelboxでできること

アノテーションはデータタイプ、目的別に様々な種類に分けることができる。Labelboxがサポートしている機能は以下の通り。※2022年2月現在

Labelboxがサポートしている機能一覧

※引用元: https://docs.labelbox.com/docs/editor

Labelboxへの接続手順

パートナーコネクト機能を使えば簡単にDatabricksとLabelboxを接続することができる。

パートナーコネクトを使ったLabelboxとの接続

詳細な接続方法については以下の記事を参照。 qiita.com

Labelboxを使用したアノテーションワークフロー

Labelboxを使ったラベリングワークフロー

1. データの取得

以下の3つの方法のいずれかを使って、データを取得する。

・ストレージからの読込み
データを保管しているクラウドストレージとLabelboxをIAM権限の委譲によって連携することで、Labelboxからデータレイク上のデータにアクセスする。

・署名付きURLからの読込み
データを保管しているクラウドストレージの各ファイルに署名付きURLまたは公開URL経由でLabelboxからデータにアクセスする。

・直接データをアップロード
LabelboxにWeb UI経由で直接データをアップロードしてアクセスする。

2. プロジェクトの作成

以下の2つの方法のいずれかを使ってプロジェクトを作成する。

・LabelboxのWeb UI上から定義
ユースケースに合わせて必要なアノテーションプロジェクトをWeb UIから作成する。

LabelboxのUI上からのプロジェクト定義

・Databricks上で定義
Python SDK(labelbox SDK)を使用して、Databricks上でLabelboxのプロジェクトを定義する。

  • Python SDKによるプロジェクト作成
# Create a new project
project_demo = client.create_project(name="Labelbox and Databricks Example")
project_demo.datasets.connect(demo_dataset)  # add the dataset to the queue

ontology = OntologyBuilder()

tools = [
  
  Tool(tool=Tool.Type.BBOX, name="Plant"),
  Tool(tool=Tool.Type.SEGMENTATION, name="Bird"),
]
for tool in tools: 
  ontology.add_tool(tool)

conditions = ["clear", "overcast", "rain", "other"]

weather_classification = Classification(
    class_type=Classification.Type.RADIO,
    instructions="what is the weather?", 
    options=[Option(value=c) for c in conditions]
)  
ontology.add_classification(weather_classification)


# Setup editor
for editor in client.get_labeling_frontends():
    if editor.name == 'Editor':
        project_demo.setup(editor, ontology.asdict()) 

print("Project Setup is complete.")

3. ラベリング

2.で定義したプロジェクト内容に沿って、LabelboxのWeb UI上からラベリングする。

ラベリング方法

4. ラベリングデータを取得

labelsparkライブラリを使用して、ラベリング結果をDatabricksから読み込む。

  • ラベリング結果の読込み
labels_table = labelspark.get_annotations(client, project_demo.uid, spark, sc)
labels_table.registerTempTable(LABEL_TABLE)
display(labels_table)
  • ラベリング結果
{
  "classifications": [
    {
      "answer": {
        "featureId": "ckzccw9wn00053e67irtyzlqb",
        "schemaId": "ckzccuilw1nuu10eo67580doz",
        "title": "overcast",
        "value": "overcast"
      },
      "featureId": "ckzccw9wn00063e672o0l00es",
      "schemaId": "ckzccuilw1nur10eofb181pjv",
      "title": "what is the weather?",
      "value": "what is the weather?"
    }
  ],
  "objects": [
    {
      "bbox": {
        "height": 2080,
        "left": 2387,
        "top": 478,
        "width": 1792
      },
      "color": "#ff0000",
      "featureId": "ckzccvrjl00013e675gxbg1x6",
      "instanceURI": "<URI>",
      "schemaId": "ckzccuilv1nu910eo9oxm9aky",
      "title": "Frog",
      "value": "frog"
    },
    {
      "bbox": null,
      "color": "#00ffa9",
      "featureId": "ckzccvxe900033e67w0243hij",
      "instanceURI": "<URI>",
      "schemaId": "ckzccuilw1nuh10eohuekaqh0",
      "title": "Bird",
      "value": "bird"
    }
  ],
  "relationships": []
}

まとめ

今回はDatabricksとLabelboxを使ってラベル付けする方法についてまとめた。
Labelboxは10,000件のアノテーションまでは無料なので、ぜひトライアルしてみてください。

labelbox.com

参考

databricks.com

docs.labelbox.com