モデル / データセット
datajuicer/data-juicer avatar
datajuicer/data-juicer

Data-Juicer を採用すべきか: 200以上のオペレータと YAML レシピで組むデータ処理基盤

Data processing for and with foundation models! 🍎 🍋 🌽 ➡️ ➡️🍸 🍹 🍷

スター 7,047フォーク 425PythonApache-2.0

ひと目でわかる

これは何?
Data-Juicer は前処理・合成・分析をオペレータの組み合わせとして扱う Python 製のデータ処理基盤である。YAML レシピと Python API の二つの入口、Ray による分散実行、Apache-2.0 という条件を、導入判断に必要な範囲で整理する。
誰に向いている?
大規模コーパスの前処理やマルチモーダルデータの選別を、再現可能な YAML として残したいチームには向く。逆に、フィルタ一つを数行で済ませたい小規模な案件や、処理内容を自前で完全に管理したい場合は、依存と設定ファイルの分だけ重くなる。
商用利用できる?
できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。最後のコミットは 1 日前です。
何の言語で書かれている?
主に Python です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

Data-Juicer が埋めようとしている穴

学習データの整備は、スクリプトが増えるほど見通しが悪くなる。重複除去、長さフィルタ、空白正規化、画像の選別。それぞれは数十行で書けるが、書き手が変わると条件も変わり、どのコーパスにどの処理を当てたのかを後から再現できない。Data-Juicer はこの状態を、処理を名前付きの部品に分解し、適用順序を設定ファイルに固定する形で解こうとしている。README はこれを「composable infrastructure」という言い方で説明し、前処理用コーパスの重複除去、エージェントの対話トレースの整形、RAG 用インデックスの準備といった用途を挙げている。対象読者は、単発のクリーニングではなく、同じ手順を複数のデータセットに繰り返し適用する立場の人だ。研究者が論文用に一度だけ流すのか、チームが四半期ごとにコーパスを更新するのかで、この道具の価値は変わる。

オペレータとレシピという二層構造

中心にあるのはオペレータと呼ばれる処理単位で、README はテキスト、画像、音声、動画、マルチモーダルにまたがる 200 以上をうたっている。オペレータは filter と mapper に大別され、テキスト長で足切りする TextLengthFilter、空白を畳む WhitespaceNormalizationMapper などが Python から直接呼べる。複数を組み合わせる場合は YAML のレシピとして保存し、バージョン管理や共有の対象にする。実行の入口は二つある。dj-process にレシピを渡す CLI と、NestedDataset にオペレータのリストを渡す Python API だ。Python 側の例では、辞書から作ったデータセットに対して process を呼び、フィルタとマッパーを順に適用している。レシピは処理内容の記録として機能するが、Python API 側の処理は呼び出し側のコードに埋まる。どちらを正とするかを決めておかないと、同じコーパスに対して二つの手順が並立する。

Ray に載る実行モデルと v1.6.0 の分割制御

分散実行の基盤は Ray で、README は 50 ノード 6400 コアで 70B サンプルを 2 時間、1280 コアで 5TB の重複除去を 2.8 時間という数字を掲げている。これはプロジェクト側の主張であり、手元のデータで同じ比率が出る保証はない。v1.6.0 では分割の扱いが変わった。クラスタの空きリソースを見てパーティション数を自動決定する仕組みが入り、手動で partition.size を指定した場合は行境界でデータを切る。入力ブロック数がパーティション数より少ない場合も対象になる。同じ版で Config Validation が追加され、処理を始める前に不正なオペレータ設定や executor とスキーマの不一致を検出するようになった。レシピの誤りで数時間のジョブを無駄にしないという意味は大きいが、検出できるのは設定の整合性であって、データの中身が期待どおりかは別問題である。

導入までの手順と設定の勘所

インストールは uv pip install py-data-juicer の一行で、同梱のデモを動かすなら dj-process --config demos/process_simple/process.yaml を実行する。Docker イメージも公開されている。API 経由のモデルを併用する場合、v1.6.0 で LiteLLM バックエンドが選べるようになり、prepare_api_model に api_backend="litellm" を指定するとチャット、埋め込み、Responses の各リクエストをプロバイダ別のルーティングで送れる。既定は従来の OpenAI 互換バックエンドのままだ。出力側ではローカル、S3、HDFS のエクスポートが共通のファイルシステム処理に統合され、JSONL 出力は Python の date と datetime を ISO 形式で直列化する。v1.5.5 では外部 OP プラグインと HDFS I/O、Ray Data の最適化、v1.5.4 ではバッチ単位のステージ融合が入っており、更新の間隔は短い。設定キーの意味はバージョンごとに動く可能性があるため、レシピを固定してから上げるほうが安全だ。

向かない場面と、確認できない部分

オペレータが用意されていない処理を挟みたい場合、外部 OP プラグインの仕組みはあるが、パイプラインの一部だけを差し替えるより、前段か後段に自前のスクリプトを置くほうが素直なことも多い。また README には JupyterLab Playground や DJ Copilot へのリンクがあるが、これらがどうホストされ、どの程度の規模のデータまで扱えるのかは記載からは分からない。処理速度や重複除去の精度についても、公開されている数字はプロジェクト側の環境でのもので、データの性質によって結果は変わる。導入を決める前に、自分の代表的なデータを数百件ほど通し、どのオペレータがどれだけ落とすのかを目で確認したほうがよい。フィルタの閾値はレシピに書かれた数値であり、それが自分のコーパスに妥当かは誰も教えてくれない。

代替手段との違いは何か

同じ領域の道具として HuggingFace Datasets がある。こちらはデータセットの読み込み、変換、ストリーミングを担うライブラリで、map に関数を渡して処理を書く。処理の内容は Python の関数そのもので、再利用するには自分でパッケージ化する必要がある。Data-Juicer は逆で、処理の単位があらかじめ名前付きのオペレータとして用意され、組み合わせを YAML に書く。差分が出るのは、同じ前処理を別のデータセットに適用するときと、誰がその手順を引き継ぐかという場面だ。Datasets は汎用のデータ操作に向き、Data-Juicer はテキストやマルチモーダルの整備に特化した部品を並べることに向く。どちらが上という話ではなく、処理を関数として持つか、設定として持つかの違いである。

ライセンスと更新コストの見積もり

ライセンスは Apache-2.0 で、商用利用を含む利用と改変が許される寛容な条件だが、再配布時の表示義務や特許条項の扱いなど細部は自組織の法務が確認すべき事項で、ここで法的判断はできない。更新の頻度は高く、v1.5.4 から v1.6.0 まで約二か月で三版が出ている。設定検証の追加や出力形式の変更のように、既存のレシピの挙動に触れる変更が混ざるため、依存を固定して検証してから上げる運用が現実的だ。オペレータの数が増え続けるということは、逆に言えば同じ目的のオペレータが複数存在しうるということで、レシピを書くたびにどれを使うかを選ぶ手間は残る。

編集部の結論

大規模コーパスの前処理やマルチモーダルデータの選別を、再現可能な YAML として残したいチームには向く。逆に、フィルタ一つを数行で済ませたい小規模な案件や、処理内容を自前で完全に管理したい場合は、依存と設定ファイルの分だけ重くなる。導入前に確認すべきは、自分のデータ形式を扱うオペレータが実際に存在するか、そして v1.6.0 の Config Validation が自分のレシピを通すかどうかである。

公式情報源

  1. datajuicer/data-juicer on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
コミュニティノート

コミュニティノート