オープンデータセットはAI開発において非常に有用なリソースですが、利用には以下のようなリスクがあります。
- 利用条件の見落とし
- アノテーション品質のバラつき
- データの偏り
- プライバシー・セキュリティの懸念
こうした課題のうち、「利用条件の精査」と「品質のばらつきへの対応」について、FastLabelの機械学習エンジニアがどのような工夫を行ったのかを紹介します。
実施方法
利用条件に関する情報の精査とコード品質のばらつきの問題に対応するため、大きく3つのステップで絞り込みを行うことにしました。
1.スクリプトによるフィルタリング
メタデータとソースコードに直接埋め込まれている利用条件(ライセンス)条項やキーワードを対象としてスクリプトを作成し、機械的にフィルタリングを行う。
2.LLMによる仕分け
LLM(大規模言語モデル)を用いて、コードの利用条件情報を分類する。抽出したデータセットを用いてプロンプトチューニングを行い、LLMによる分類精度を高める。仕分け結果は随時ロットで確認し、サンプリングして所与の精度が維持されていることをチェックする。
3.コード品質評価
ごく小規模なサブセットを対象としてパフォーマンス面やメモリの扱いに問題がないか人手でラベルをつけ、LLMを用いて検出を試みる。
その結果
結果は以下の通りでした。
利用条件に潜在的な問題があるコードの検出
かなりの割合のサンプルが、権利関係または品質の面で問題があると判定されました。結局利用に耐えると判定されたのは前提の1/4以下でした。
コード品質
人目で検出された問題はほぼ検出され、逆に人目で見逃されていた問題が見つかりました。細かい精査は必要なものの有効なスクリーニングとなりえることがわかりました。
最終判断
上記の処理結果をキーとして付与し、利用者側で最終的な判断ができるようにしました。
データの絞り込みで難しかった点と工夫した点
データセットは小規模とは言えないほど大きく、精度追及に時間を使っていると、バッチ処理のための残り時間が減っていくのが厳しいところでした。そのため、今回の取り組みでは下記の点を工夫しました。
データ量と処理時間
クラウドのLLMサービスで全件処理するにはあまりに大規模で応答時間も厳しいものでした。そこでローカルLLMを載せた複数の仮想マシンを並列で動作させて、実際の処理はクラウド上のキューサービスを用いて分散処理しました。
分類精度
分類結果を混同行列を書いて評価を行っていたのですが、なかなか精度が出せずに苦労しました。プロンプト(LLMに与える指示)を、分類タスクの概要、より詳細な基準、判別したいデータ、出力形式の順番でマークダウン形式で与えて分類結果を得るのですが、基準や文言が曖昧だということを聞かなくなります。特に判別したいデータを何も考えずに全て与えると悪影響が極めて大きくなるため、データの中身に踏み込み絞り込んで与えました。さらにローカルで動作させるため量子化の影響を抑える実行環境整備も有効でした。
柔軟な処理パイプラインの構築
サンプルデータをハイライト付きで表示したり分類結果を併せて閲覧できる業務システムを短期間で構築することで、状況を柔軟に確認でき効率的に作業を進めることができました。
この取り組みの詳細は下記の記事で紹介しています。
https://fastlabel.ai/blog/risk-of-opendatasets