第三段階:データと特徴量エンジニアリング
データ中心のNLPモデル構築手法に焦点を当てた、オープンソースの自然言語データ管理およびアノテーションプラットフォーム
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ライブラリを統合しており、以下を提供します。
- 既製の自動アノテーション機能
- テキストメタデータ抽出(言語検出、文の複雑さなど)
- 事前構築済みのアノテーション関数テンプレート
適用シナリオ
理想的なユーザー層
- 個人NLPプロジェクト開発者: 十分なアノテーションデータが不足している研究者
- チームコラボレーションプロジェクト: トレーニングデータの品質管理と評価が必要なチーム
- リソースが限られたプロジェクト: アノテーションリソース(人材、予算、時間)の最適化が必要なプロジェクト
主なユースケース
- 感情分析
- 固有表現認識
- テキスト分類
- 情報抽出
- 多言語テキスト処理
ビジネスモデル
- オープンソース版: シングルユーザー版、完全に無料
- 商用版: マルチユーザー環境、チームコラボレーション機能を提供
- エンタープライズソリューション: オンプレミスデプロイメントとカスタマイズサービス
コミュニティとサポート
- Discordコミュニティ: 技術的な議論とサポート
- GitHub Issues: 問題報告と機能リクエスト
- ドキュメントセンター: 詳細な使用ガイドとチュートリアル
- YouTubeチャンネル: ビデオチュートリアルとデモンストレーション
プロジェクトの利点
- データ中心のアプローチ: データ量を増やすだけでなく、トレーニングデータの品質向上に注力
- 半自動アノテーション: 手動アノテーション作業を大幅に削減
- スケーラブルなアーキテクチャ: マイクロサービスアーキテクチャにより柔軟なデプロイメントをサポート
- オープンソースの透明性: 完全なオープンソースであり、コミュニティ主導で開発
- エンタープライズグレードの機能: 大規模デプロイメントとチームコラボレーションをサポート
学習リソース
Refineryは、現代のNLPデータ管理におけるベストプラクティスを体現しており、データサイエンティストが高品質なトレーニングデータセットを構築するための強力かつ柔軟なツールを提供します。