第三段階:データと特徴量エンジニアリング

データ中心のNLPモデル構築手法に焦点を当てた、オープンソースの自然言語データ管理およびアノテーションプラットフォーム

DataLabelingNLPWeakSupervisionGitHubTextFreeEnglish

Refinery - データサイエンティストのためのオープンソース自然言語データ管理ツール

プロジェクト概要

Refineryは、Kern AIが開発したオープンソースのデータアノテーションおよびトレーニングデータ管理プラットフォームで、特に自然言語処理(NLP)タスクに特化しています。このプロジェクトは、データサイエンティストが「データ中心のアプローチを採用してより良いNLPモデルを構築し」、「トレーニングデータをソフトウェア成果物として扱う」ことを支援することを目的としています。

主要機能

1. データアノテーション機能

  • 手動およびプログラムによるアノテーション: 分類およびスパンアノテーションタスクをサポート
  • 半自動アノテーション: ヒューリスティックな手法により、アノテーション作業の一部を自動化
  • マルチタスク対応: 単一のプロジェクトで複数のアノテーションタスクを処理可能

2. データ管理機能

  • スマートデータブラウザ: 信頼度、ヒューリスティックな重複、ユーザー、アノテーションなどの次元でデータをフィルタリング、ソート、検索可能
  • データ品質監視: トレーニングデータ内の低品質なサブセットを特定
  • プロジェクトメトリクス概要: 信頼度分布、ラベル分布、混同行列を提供

3. 機械学習連携

  • 🤗 Hugging Face連携: ドキュメントレベルおよびトークンレベルの埋め込みを自動生成
  • spaCy連携: 事前学習済み言語モデルを活用
  • ニューラル検索: Qdrantに基づいた類似レコード検索と異常検知

4. ヒューリスティクスと弱教師あり学習

  • アノテーション関数: ルールベースの自動アノテーションロジックを作成・管理
  • 弱教師あり学習: 複数のノイズが多く不完全なヒューリスティックな手法を統合
  • ナレッジベース管理: アノテーションプロセスをサポートするルックアップリストを作成・管理

5. コラボレーション機能

  • チームワークスペース: マルチユーザー環境(商用版)
  • ロールベースのアクセス制御: ユーザー権限を管理
  • クラウドソーシングアノテーション連携: 外部アノテーションワークフローをサポート

技術アーキテクチャ

コアサービス

- embedder: 埋め込み生成サービス
- weak-supervisor: 弱教師あり学習サービス
- tokenizer: トークン化サービス
- neural-search: ニューラル検索サービス
- ui: ユーザーインターフェース
- gateway: APIゲートウェイ

サードパーティ連携

- PostgreSQL: データストレージ
- Minio: オブジェクトストレージ
- MailHog: メールサービス
- Ory Kratos: 認証管理
- Ory Oathkeeper: アクセス制御

機械学習ライブラリ

- scikit-learn: 従来の機械学習
- spaCy: 自然言語処理
- Hugging Face Transformers: 事前学習済みモデル
- Qdrant: ベクトルデータベース

インストールと使用方法

クイックインストール

# pipでインストール
pip install kern-refinery

# サービスを起動
cd your-project-directory
refinery start

# アプリケーションにアクセス
# ブラウザで http://localhost:4455 を開く

手動インストール

# リポジトリをクローン
git clone https://github.com/code-kern-ai/refinery.git
cd refinery

# サービスを起動 (Mac/Linux)
./start

# サービスを起動 (Windows)
start.bat

# サービスを停止
./stop  # または stop.bat (Windows)

データ形式のサポート

入力形式

  • JSONファイル
  • CSVファイル
  • スプレッドシート
  • テキストファイル
  • 汎用JSON形式

出力形式

[
  {
    "running_id": "0",
    "headline": "T. Rowe Price (TROW) Dips More Than Broader Markets",
    "date": "Jun-30-22 06:00PM  ",
    "headline__sentiment__MANUAL": null,
    "headline__sentiment__WEAK_SUPERVISION": "NEGATIVE",
    "headline__sentiment__WEAK_SUPERVISION__confidence": 0.62,
    "headline__entities__MANUAL": null,
    "headline__entities__WEAK_SUPERVISION": [
      "STOCK", "STOCK", "STOCK", "STOCK", "STOCK", "STOCK", "O", "O", "O", "O", "O"
    ],
    "headline__entities__WEAK_SUPERVISION__confidence": [
      0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.00, 0.00, 0.00, 0.00, 0.00
    ]
  }
]

Python SDK

プロジェクトは、以下の機能をサポートする完全なPython SDKを提供しています。

  • データアップロードとダウンロード
  • プロジェクト管理
  • アノテーションデータのエクスポート
  • Rasaなどのフレームワークとのアダプター
# データをプル
rsdk pull

# データをプッシュ
rsdk push <file_name>

オープンソースbricksライブラリ

Refineryは、オープンソースのbricksライブラリを統合しており、以下を提供します。

  • 既製の自動アノテーション機能
  • テキストメタデータ抽出(言語検出、文の複雑さなど)
  • 事前構築済みのアノテーション関数テンプレート

適用シナリオ

理想的なユーザー層

  1. 個人NLPプロジェクト開発者: 十分なアノテーションデータが不足している研究者
  2. チームコラボレーションプロジェクト: トレーニングデータの品質管理と評価が必要なチーム
  3. リソースが限られたプロジェクト: アノテーションリソース(人材、予算、時間)の最適化が必要なプロジェクト

主なユースケース

  • 感情分析
  • 固有表現認識
  • テキスト分類
  • 情報抽出
  • 多言語テキスト処理

ビジネスモデル

  • オープンソース版: シングルユーザー版、完全に無料
  • 商用版: マルチユーザー環境、チームコラボレーション機能を提供
  • エンタープライズソリューション: オンプレミスデプロイメントとカスタマイズサービス

コミュニティとサポート

  • Discordコミュニティ: 技術的な議論とサポート
  • GitHub Issues: 問題報告と機能リクエスト
  • ドキュメントセンター: 詳細な使用ガイドとチュートリアル
  • YouTubeチャンネル: ビデオチュートリアルとデモンストレーション

プロジェクトの利点

  1. データ中心のアプローチ: データ量を増やすだけでなく、トレーニングデータの品質向上に注力
  2. 半自動アノテーション: 手動アノテーション作業を大幅に削減
  3. スケーラブルなアーキテクチャ: マイクロサービスアーキテクチャにより柔軟なデプロイメントをサポート
  4. オープンソースの透明性: 完全なオープンソースであり、コミュニティ主導で開発
  5. エンタープライズグレードの機能: 大規模デプロイメントとチームコラボレーションをサポート

学習リソース

Refineryは、現代のNLPデータ管理におけるベストプラクティスを体現しており、データサイエンティストが高品質なトレーニングデータセットを構築するための強力かつ柔軟なツールを提供します。