DeepSeek データエンジニアリングチュートリアル
データ収集から品質評価まで、大規模言語モデルのデータエンジニアリングパイプラインを完全に習得。SFTデータセット構築、RLHF選好データ準備、データクリーニングと重複排除、データ拡張、大規模データ処理などの中核的な要素を網羅し、Python実践コード付き。
学習を始めるデータはLLMの魂
大規模モデルのトレーニングにおいて、データ品質はモデルの能力の上限を直接決定します。高品質なデータセットは小さなモデルが大きなモデルを凌駕することを可能にし、低品質なデータは数兆パラメータのモデルでも平凡な性能に留めます。データエンジニアリングは、生データの収集から最終的なトレーニングデータの提供までの全チェーンをカバーします。
データエンジニアリング概要
LLMトレーニングにおけるデータの中心的な役割を理解し、データ品質とデータ量のトレードオフを把握し、データエンジニアリングパイプラインの全体像を構築します。
LLMトレーニングにおけるデータの中心的な役割
LLMトレーニングの3要素(アルゴリズム、計算リソース、データ)の中で、データはしばしば過小評価されますが、その重要性は他の2つをはるかに上回ります。広く信じられている見解は、モデルアーキテクチャの限界収益は減少する一方、データ品質の限界収益は増加するというものです。以下に、相互に関連する3つの核となる事実を示します。
- データ品質がモデル能力の上限を決定する:最も先進的なモデルアーキテクチャ(例:MoE)を使用しても、トレーニングデータの品質が低ければ、モデルは高品質な応答を生成できません。DeepSeek-V3とR1の強力な能力は、慎重に構築されたトレーニングデータに大きく起因しています。
- データの多様性が汎化能力を決定する:単一ドメインのデータは過学習を引き起こす可能性がありますが、多様なデータにより、モデルは未見のタスクでも良好に機能します。DeepSeekのデータ混合戦略は、数学、コード、推論、対話、クリエイティブライティングなど、複数のドメインをカバーしています。
- データ規模が知識の境界を決定する:モデルの知識範囲は、トレーニングデータのカバー範囲を超えることはありません。モデルに医学を理解させるには、高品質な医学データが必要です。プログラミングを可能にするには、十分なコードデータが必要です。
データ品質 vs データ量
限られた計算リソースの下では、データ品質はデータ量よりも重要です。以下に、両者のトレードオフ分析を示します。
| 次元 | 量を追求 | 質を追求 |
|---|---|---|
| トレーニング効率 | トレーニング時間が長く、収束が遅い | トレーニングが速く、収束が安定 |
| モデル性能 | ノイズが多く、出力が不安定 | 出力が正確で、幻覚が少ない |
| コスト | GPUコストが高く、期間が長い | データクリーニングコストは高いが、総コストは低い |
| 典型的な戦略 | ウェブデータをクロールし、粗いフィルタリング | データソースを厳選し、多重フィルタリング、人手によるアノテーション |
DeepSeekチームは実践で、高品質データの1/10でトレーニングしたモデルが、指示追従と推論能力において、全量の粗いデータでトレーニングしたモデルをしばしば上回ることを発見しました。これは、データエンジニアリングがLLM開発において最も重要な部分である理由も説明しています。
データエンジニアリングパイプラインの全体像
完全なデータエンジニアリングパイプラインには、以下の段階が含まれます。
- データ収集:公開データセット、ウェブクロール、API呼び出し、合成生成などのチャネルから生データを取得
- データクリーニング:重複の除去、低品質のフィルタリング、欠損値の処理、機密情報のフィルタリング
- データアノテーション:SFT、RLHF、DPOなど、異なるトレーニング段階に合わせて異なる形式のデータを構築
- データ拡張:Self-Instruct、Evol-Instruct、逆翻訳などの技術を使用してデータを拡張
- 品質評価:多様性、難易度、指示の複雑さなどの次元からデータ品質を評価
- データ混合:異なるドメインのデータを比率で混合し、最終的なトレーニングデータセットを形成
- バージョン管理:DVCなどのツールを使用してデータバージョンを管理し、再現性を確保
データ収集とソース
LLMトレーニングデータの主要なソース(公開データセット、ウェブクロール、合成データ生成、データコンプライアンスの考慮事項)について学びます。
一般的な公開データセット
| データセット名 | 規模 | タイプ | 適用シナリオ |
|---|---|---|---|
| Alpaca | 52K | SFT指示データ | 指示微調整の入門 |
| ShareGPT | 90K | マルチターン対話 | 対話能力のトレーニング |
| UltraChat | 1.5M | マルチターン対話 | 大規模対話トレーニング |
| OpenOrca | 4M | SFT指示データ | 大規模指示微調整 |
| CodeAlpaca | 20K | コード生成 | コード能力のトレーニング |
| MathInstruct | 260K | 数学的推論 | 数学能力のトレーニング |
Hugging Faceから公開データセットを読み込む
Webスクレイピングとデータ収集
特定分野のデータには、Webスクレイピングが重要な補完手段です。以下はドキュメントやチュートリアル向けのクローラーの例です:
合成データ生成
公開データが特定のドメインを十分にカバーできない場合、合成データ生成(Synthetic Data Generation)技術を使用できます。DeepSeek などの強力なモデルを使用して高品質なトレーニングデータを生成します:
データコンプライアンス注意事項
公開データセットやWebスクレイピングデータを使用する際は、必ずデータライセンス契約を確認してください。一部のデータセット(ShareGPTなど)には特定の使用制限があります。Webスクレイピングはrobots.txtプロトコルを遵守し、スクレイピング頻度を制御して、対象サイトに負担をかけないようにしてください。個人のプライバシー情報を含むデータは、匿名化処理が必要です。
データクリーニングと重複排除
データクリーニングは、データエンジニアリングにおいて最も時間がかかるが最も重要なステップです。高品質なデータクリーニングは、モデルトレーニングの結果を大幅に向上させることができ、品質フィルタリング、重複排除、機密情報のフィルタリングなどが含まれます。
品質フィルタリングパイプライン
完全な品質フィルタリングパイプラインには、複数の次元でのフィルタリングが含まれます:
MinHash LSH 重複排除
MinHash + LSH(Locality-Sensitive Hashing)は、業界標準の大規模重複排除手法であり、近似重複文書を効率的に検出できます:
意味的重複排除
MinHashは文字レベルの重複排除に適していますが、意味的に類似しているが表現が異なるデータには、埋め込みベクトルを使用した意味的重複排除が必要です:
機密情報のフィルタリング
トレーニングデータでは、個人のプライバシー情報や機密コンテンツをフィルタリングする必要があります:
データ形式とアノテーション
トレーニング段階によって必要なデータ形式は異なります。SFTはInstruction-Input-Output形式を使用し、ChatMLは対話シナリオに使用され、RLHF/DPOでは選好比較データが必要です。これらの形式を理解することは、高品質なデータセットを構築するための基礎です。
SFTデータ形式(Instruction-Input-Output)
SFT(Supervised Fine-Tuning)データは最も基本的なトレーニングデータ形式です。各データには命令、オプションの入力、期待される出力が含まれます:
ChatML対話形式
ChatML(Chat Markup Language)はOpenAIが定義した対話形式で、SFTトレーニングでも広く使用されています。複数ターンの対話を標準形式に構造化します:
RLHF選好データ形式
RLHF(Reinforcement Learning from Human Feedback)とDPO(Direct Preference Optimization)では、同じプロンプトに対してどの応答が良いかをアノテーションする選好比較データが必要です:
データ形式の選択に関する推奨事項
基本的なSFTトレーニングにはInstruction-Input-Output形式で十分です。複数ターンの対話シナリオではChatML形式を推奨します。RLHFまたはDPOトレーニングが必要な場合は、選好比較データを準備する必要があります。DeepSeekシリーズのモデルはAlpaca形式とChatML形式の両方をサポートしています。
データ拡張技術
既存データが不十分な場合、データ拡張技術を利用することで、少数のシードデータから大量の高品質なトレーニングデータを生成できます。Self-Instruct と Evol-Instruct は最も主流な2つの手法です。
Self-Instruct 自己生成手法
Self-Instruct の核となる考え方は、強力なモデルを使ってシードタスクから新しい指示-出力ペアを自動生成することです:
Evol-Instruct 進化生成
Evol-Instruct は、指示の複雑さを段階的に増やすことで、より挑戦的なデータを生成します。DeepSeek チームはトレーニングで同様の進化戦略を多用しました:
バックトランスレーションによるデータ拡張
バックトランスレーション(Back Translation)は、多言語データ拡張の古典的な手法であり、翻訳と逆翻訳を通じて意味的に等価で表現の異なるデータを生成します:
DeepSeek 特定データ準備
DeepSeek-R1 の推論データには特別な形式要件があり、thinking タグと CoT(Chain of Thought)推論チェーンが含まれます。この章では、DeepSeek モデル用のデータ準備方法を詳しく説明します。
DeepSeek-R1 推論データ形式
DeepSeek-R1 の重要な革新は、トレーニングデータに明示的な思考プロセス(thinking/reasoning)が含まれていることです。以下は標準的な R1 推論データ形式です:
CoT データ構築
Chain of Thought データを構築する鍵は、モデルに「まず考えてから答える」ことを学習させることです。以下のコードは、数学問題に対して CoT 推論チェーンを自動生成します:
コードデータ準備
コードデータは DeepSeek トレーニングデータの重要な構成要素です。高品質なコードデータには、問題の説明、コード実装、コメントが含まれるべきです:
数学データ準備
数学推論データには、数式、導出ステップ、最終回答を含める必要があります。LaTeX形式は数学表現の標準です:
データ品質評価
データ品質評価はデータエンジニアリングの最後の防衛線です。多様性、難易度、指示の複雑さ、自動スコアリングなど複数の次元からデータセットの品質を評価し、トレーニングデータが期待される基準を満たしていることを確認します。
多様性評価
多様性評価により、データセットが十分に広い領域とタスクタイプをカバーしていることを確認します:
難易度評価
データセット内の各指示の難易度を評価し、データの難易度分布が合理的であることを確認します:
指示の複雑さスコアリング
指示の複雑さスコアリングは、複数の側面から指示の品質を評価します:
| 評価側面 | 説明 | 評価方法 |
|---|---|---|
| 明確性 | 指示が明確で曖昧さがないか | LLMスコア 1-5 |
| 完全性 | 指示が十分な文脈を含んでいるか | 情報密度の計算 |
| 実行可能性 | 指示が完了可能かどうか | LLMによる実行可能性の判断 |
| 創造性 | 指示が創造的思考を促すかどうか | LLMスコア 1-5 |
自動品質スコアリング
LLMを判定者として使用し、データ品質を自動的にスコアリングします:
データ混合戦略
異なる分野のデータを特定の比率で混合することで、バランスの取れた総合的なモデルを訓練できます。データ混合戦略はモデルの汎用能力と専門能力に直接影響します。
典型的なデータ混合比率
以下はDeepSeek系モデルの訓練で一般的に使用されるデータ混合比率の参考です:
| データカテゴリ | 推奨比率 | 説明 |
|---|---|---|
| 一般的な対話 | 30-40% | 日常会話、Q&A、雑談。基本的な対話能力を保証 |
| コード生成 | 15-20% | Python/JS/Java/C++などの主要言語のコード |
| 数学的推論 | 10-15% | 代数、幾何、微積分、確率統計 |
| 論理的推論 | 10-15% | 論理パズル、推論チェーン、多段階推論 |
| クリエイティブライティング | 5-10% | 詩、物語、コピーライティング、脚本 |
| 専門分野 | 5-10% | 医療、法律、金融などの垂直分野 |
| 安全性アライメント | 3-5% | 有害なリクエストの拒否、価値観の整合 |
データ混合のコード実装
データアニーリング戦略
データアニーリングは、トレーニング中にデータ混合比率を動的に調整するトレーニング戦略です。初期段階では多様なデータで基礎能力を訓練し、後期には高品質・高難度データの割合を徐々に増やします:
- ウォームアップ段階(最初の20%のトレーニングステップ):一般的な会話データが50%を占め、主に簡単な指示で、モデルの基礎的な対話能力を構築します。
- メインのトレーニング段階(20%-80%のトレーニングステップ):コードと推論データの割合を徐々に増やし、中程度の難易度のタスクを導入します。
- アニーリング段階(最後の20%のトレーニングステップ):高品質・高難度データを大幅に増やし、一般的な会話データを減らし、複雑なタスクでのモデルのパフォーマンスを向上させます。
DeepSeekチームはトレーニングで同様のアニーリング戦略を使用しており、これはDeepSeek-R1が推論能力で優れている重要な理由の一つです。
大規模データ処理
データ量が数百万から数億に達すると、単一マシンでの処理は不可能になります。この章では、SparkやRayなどの分散フレームワークを使用した大規模データ処理と、データバージョン管理について紹介します。
Rayを使用した並列処理
Rayは軽量な分散コンピューティングフレームワークで、特にPythonエコシステムのデータ処理タスクに適しています:
PySparkを使用した分散処理
PySparkはTB級の大規模データを処理する標準ツールであり、DataFrame APIとSQL操作をサポートしています:
大ファイルのストリーム処理
超大なJSONLファイルの場合、メモリオーバーフローを避けるためにストリーム処理を使用します:
データバージョン管理(DVC)
DVC(Data Version Control)はデータサイエンスのGitであり、データセットのバージョン管理に使用されます:
本番グレードのデータパイプライン
これまでのすべてのステップを統合し、継続的なデータ収集、自動品質監視、データドリフト検出、完全なパイプラインコードを含む本番グレードのデータパイプラインを構築します。
完全なデータパイプラインアーキテクチャ
- データ収集層:公開データセットの更新を定期的に取得、新しいコンテンツのクロール、合成データAPIの呼び出し
- データクリーニング層:品質フィルタリング、重複排除、機密情報のフィルタリング、形式の標準化
- データ拡張層:Self-Instruct生成、Evol-Instruct進化、逆翻訳
- 品質評価層:多様性スコアリング、難易度評価、自動品質スコアリング
- データ混合層:比率に基づく混合、データアニーリング戦略、バージョン管理
- 監視・アラート層:データドリフト検出、品質トレンド監視、異常アラート
完全なパイプラインコード
データドリフト検出
データドリフト(Data Drift)とは、データ分布が時間とともに変化することを指します。本番環境では、データ品質が期待から逸脱していないかを継続的に監視する必要があります:
自動品質監視
定期的なタスクを使用して、データ品質メトリクスを継続的に監視します:
パイプラインの実行
本番環境の推奨事項
- Apache Airflow または Prefect を使用してパイプラインタスクをオーケストレーション
- 品質メトリクスを Prometheus + Grafana にプッシュして可視化監視
- アラートルールを設定: データ品質合格率がしきい値を下回る、データ量の異常な変動など
- DVC または LakeFS を使用してデータバージョン管理を行い、再現性を確保
- 定期的にデータ品質を手動でサンプリングし、自動スコアリングと相互検証
DeepSeek データエンジニアリングよくある質問
DeepSeek関連チュートリアル
DeepSeekモデルの使用方法、デプロイ、エコシステムツールを深く学びます。
DeepSeekモデルの使い方
4つの使用方法、ゼロからの入門チュートリアル。
DeepSeek微調整チュートリアル
LoRA/QLoRA微調整、SFT、RLHFの全プロセス。
DeepSeek RAG知識ベース
ベクトルデータベース、検索拡張生成、ドキュメントQ&A。
DeepSeekデプロイチュートリアル
Ollama、Docker、vLLM、K8sデプロイソリューション。
DeepSeekモデルアーキテクチャ
技術アーキテクチャ、ベンチマーク、モデル選定比較。
DeepSeekエコシステムツール
WebUI、IDEプラグイン、Agentフレームワーク、RAGプラットフォーム。