ja/6_synthetic_datasets/notebooks/preference_dpo_dataset.ipynb (120 lines of code) (raw):

{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 嗜好調整のためのデータセットを生成する\n", "\n", "このノートブックでは、嗜好調整のためのデータセットを生成するプロセスを案内します。`distilabel`パッケージを使用して嗜好調整のためのデータセットを生成します。\n", "\n", "それでは、嗜好調整データセットを見てみましょう。\n", "\n", "<div style='background-color: lightblue; padding: 10px; border-radius: 5px; margin-bottom: 20px; color:black'>\n", " <h2 style='margin: 0;color:blue'>演習: 嗜好調整のためのデータセットを生成する</h2>\n", " <p>嗜好調整のためのデータセットを生成する方法を見たので、実際に嗜好調整のためのデータセットを生成してみましょう。</p>\n", " <p><b>難易度レベル</b></p>\n", " <p>🐢 嗜好調整のためのデータセットを生成する</p>\n", " <p>🐕 応答の進化を使用して嗜好調整のためのデータセットを生成する</p>\n", " <p>🦁 応答の進化とモデルプーリングを使用して嗜好調整のためのデータセットを生成する</p>\n", "</div>" ] }, { "cell_type": "markdown", "metadata": { "vscode": { "languageId": "plaintext" } }, "source": [ "## 依存関係のインストール\n", "\n", "transformersの代わりに、`vllm`や`hf-inference-endpoints`をインストールすることもできます。" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install \"distilabel[hf-transformers,outlines,instructor]\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 合成の開始\n", "\n", "前のノートブックで見たように、嗜好データセット生成のためのdistilabelパイプラインを作成できます。最低限のパイプラインはすでに提供されています。このパイプラインをスケールアップして、嗜好調整のための大規模なデータセットを生成してください。モデル、モデルプロバイダー、生成引数を入れ替えて、データセットの品質にどのように影響するかを確認してください。小規模に実験し、後でスケールアップしましょう。\n", "\n", "[distilabelコンポーネントギャラリー](https://distilabel.argilla.io/latest/components-gallery/)で、処理クラスの情報とその使用方法を確認してください。\n", "\n", "辞書からデータをロードする代わりに、Hubからデータをロードする例を以下に示します。\n", "\n", "```python\n", "from datasets import load_dataset\n", "\n", "with Pipeline(...) as pipeline:\n", " ...\n", "\n", "if __name__ == \"__main__:\n", " dataset = load_dataset(\"my-dataset\", split=\"train\")\n", " distiset = pipeline.run(dataset=dataset)\n", "```\n", "\n", "パイプラインを実行した後、データセットをHubにプッシュするのを忘れないでください!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from distilabel.llms import TransformersLLM\n", "from distilabel.pipeline import Pipeline\n", "from distilabel.steps import GroupColumns, LoadDataFromDicts\n", "from distilabel.steps.tasks import TextGeneration\n", "\n", "with Pipeline() as pipeline:\n", " data = LoadDataFromDicts(data=[{\"instruction\": \"合成データとは何ですか?\"}])\n", " llm_a = TransformersLLM(model=\"HuggingFaceTB/SmolLM2-1.7B-Instruct\")\n", " gen_a = TextGeneration(llm=llm_a)\n", " llm_b = TransformersLLM(model=\"Qwen/Qwen2.5-1.5B-Instruct\")\n", " gen_b = TextGeneration(llm=llm_b)\n", " group = GroupColumns(columns=[\"generation\"])\n", " data >> [gen_a, gen_b] >> group\n", "\n", "if __name__ == \"__main__\":\n", " distiset = pipeline.run()\n", " distiset.push_to_hub(\"huggingface-smol-course-preference-tuning-dataset\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 🌯 まとめ\n", "\n", "嗜好調整のためのデータセットを生成する方法を見てきました。これを使用して次のことができます:\n", "\n", "- 嗜好調整のためのデータセットを生成する。\n", "- 嗜好調整のための評価データセットを作成する。\n", "\n", "次に\n", "\n", "🏋️‍♂️ 合成データセットに基づいて[嗜好調整の章](../../2_preference_alignment/README.md)でモデルを微調整する\n" ] } ], "metadata": { "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 2 }