- はじめに
- DatabricksとLabelboxを接続するメリット
- Labelboxとは
- Labelboxでできること
- Labelboxへの接続手順
- Labelboxを使用したアノテーションワークフロー
- まとめ
- 参考
はじめに
アノテーションとは、トレーニングデータとして利用するために、様々な形式のデータにメタデータを付与して解釈可能な意味づけをすることである。 機械学習、特にディープラーニングの普及とともに、アノテーションはますます重要な工程になっている。 そこで今回はパートナーコネクト機能で接続したDatabricksとLabelboxを使ったアノテーションワークフローについてまとめる。
使用環境
・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を繋ぐことで、アノテーションからモデル開発、アノテーションフィードバックまでの一連のワークフローをレイクハウス環境下で実現できる。 ※引用元: Partnerships | Labelbox
Labelboxとは
データアノテーションによるトレニングデータの作成、管理をするためのトレーニングデータプラットフォーム。
「アノテーション」「モデルのパフォーマンス診断」「ラベリングの優先順位付け」という3つの機能を中心としてイテレーションを回すことで、アノテーション精度向上のフィードバックループを可能にしている。
1. Annotate: アノテーション
チーム内で共有できるワークフローとラベリングの自動化により、データに迅速かつ正確にラベルを付けることが可能。
2. Diagnose: モデルのパフォーマンス診断
学習したモデルとそのパフォーマンスを簡単に視覚化できるだけでなく、モデルのパフォーマンスに影響を与える学習データのパターンを認識することができる。トレーニングデータの管理と同じプラットフォーム上にパフォーマンス診断機能が存在することで、プロセスが効率化され、モデルのエラーに対処したり、モデルのパフォーマンスを向上させるための高品質なトレーニングデータセットの構築が可能になった。
3. Prioritize: ラベリングの優先順位付け
モデルのパフォーマンスを向上させたり、クラスの不均衡を修正するために、パフォーマンスの低いクラスを特定する。その後、モデルの精度への影響の大きいデータを見つけ、優先順位をつけてラベリングを行うことが可能。
forbesjapan.com またビジネスニュースとしては、2022年の1月にLabelboxの評価額が10億ドルを突破し、ユニコーン企業の仲間入りを果たしたことも記憶に新しい。
Labelboxでできること
アノテーションはデータタイプ、目的別に様々な種類に分けることができる。Labelboxがサポートしている機能は以下の通り。※2022年2月現在
※引用元: https://docs.labelbox.com/docs/editor
Labelboxへの接続手順
パートナーコネクト機能を使えば簡単にDatabricksとLabelboxを接続することができる。
詳細な接続方法については以下の記事を参照。 qiita.com
Labelboxを使用したアノテーションワークフロー
1. データの取得
以下の3つの方法のいずれかを使って、データを取得する。
・ストレージからの読込み
データを保管しているクラウドストレージとLabelboxをIAM権限の委譲によって連携することで、Labelboxからデータレイク上のデータにアクセスする。
・署名付きURLからの読込み
データを保管しているクラウドストレージの各ファイルに署名付きURLまたは公開URL経由でLabelboxからデータにアクセスする。
・直接データをアップロード
LabelboxにWeb UI経由で直接データをアップロードしてアクセスする。
2. プロジェクトの作成
以下の2つの方法のいずれかを使ってプロジェクトを作成する。
・LabelboxのWeb UI上から定義
ユースケースに合わせて必要なアノテーションプロジェクトをWeb 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件のアノテーションまでは無料なので、ぜひトライアルしてみてください。