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
}