猿でもわかるAIプログラミングシリーズ 🐵💻 AIで料理レシピを生成して作ってみた結果

 

## AIで料理レシピを生成して作ってみた結果（＋実装＆反省点付き）

---

## 🍳 1. はじめに：AIでレシピを作る時代？

最近、ChatGPTやGeminiなどの生成AIが話題になっていますが、
実は**料理のレシピまでAIで作れる時代**になってきました。

本記事では、**Pythonと簡単な機械学習の知識**を使って、
「冷蔵庫の余り物からレシピを提案するAI」を作成してみた実験と、
実際にそのレシピで料理してみた（！）結果をお届けします。

---

## 📚 2. 技術概要：レシピ生成AIの仕組みとは？

本記事で使う技術スタックは以下の通りです：

| 項目  | 技術                                           |
| --- | -------------------------------------------- |
| 言語  | Python 3.10                                  |
| モデル | GPT-2ベースのテキスト生成モデル（HuggingFace Transformers） |
| データ | RecipeNLG データセット（料理名・材料・手順付き）                |
| 前処理 | トークナイザ + 材料ベクトル化                             |
| 学習  | 転移学習（Fine-tuning）                            |

### なぜGPT-2を選んだのか？

* 軽量でローカルでも動作可能（AWS/GCP不要）
* HuggingFaceに豊富なサンプルコードあり
* 入出力をテキストで完結でき、レシピとの親和性が高い

---

## 🧪 3. 実装と例：冷蔵庫の中身からレシピを作ってみた！

### 3.1 データの準備（RecipeNLGを使う）

```python
from datasets import load_dataset

# 英語のレシピデータセット（約20万件）
dataset = load_dataset("recipe_nlg", split="train[:5000]")  # 軽量テスト用
```

### 3.2 モデルのファインチューニング（GPT-2）

```python
from transformers import GPT2LMHeadModel, GPT2Tokenizer, Trainer, TrainingArguments

tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = GPT2LMHeadModel.from_pretrained("gpt2")

# 前処理：材料と手順を結合したテキストを生成
def preprocess(example):
    input_text = f"材料: {example['ingredients']} 手順: {example['instructions']}"
    tokens = tokenizer(input_text, truncation=True, padding="max_length", max_length=512)
    tokens["labels"] = tokens["input_ids"].copy()
    return tokens

tokenized_data = dataset.map(preprocess, batched=True)

# トレーニング設定
training_args = TrainingArguments(
    output_dir="./recipe-model",
    per_device_train_batch_size=2,
    num_train_epochs=1,
    save_steps=500,
    logging_steps=100,
    evaluation_strategy="no"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_data
)

trainer.train()
```

### 3.3 レシピ生成（プロンプトから出力）

```python
prompt = "材料: 卵, トマト, チーズ"
inputs = tokenizer(prompt, return_tensors="pt")
output = model.generate(**inputs, max_length=150, do_sample=True)
print(tokenizer.decode(output[0], skip_special_tokens=True))
```

出力例（英語）:

```
材料: 卵, トマト, チーズ 手順: 1. トマトをスライスし、フライパンに入れる。2. 卵を割り入れて炒める。3. チーズを加えてとろけるまで加熱する。
```

---

## 💡 4. 実践Tipsとハマりどころ

### ✅ 成功したポイント

* GPT-2は**少量データでも意外と賢く学習**してくれる
* Prompt設計（材料一覧だけ）で**それっぽいレシピが生成**できる

### ❌ よくあるつまずき

| 問題               | 対処法                                     |
| ---------------- | --------------------------------------- |
| 材料と手順のフォーマットが崩れる | トークナイズ時にテンプレート構造を厳密に統一する                |
| 文法が崩壊する or 意味不明  | `temperature` を下げて `top_k` を設定するなど、出力調整 |
| 日本語対応が弱い         | mBARTやBERT-Japaneseなどの日本語モデルで再挑戦する価値あり  |

---

## 🚀 5. 応用アイデアと拡張

* **日本語レシピデータで再学習**（クックパッドのスクレイピングは要注意⚠️）
* **栄養素の制約付きレシピ提案**（例：カロリー制限、アレルゲン対応）
* **音声インターフェースとの連携**（例：音声で材料を読み上げ → レシピ生成）

---

## 🧾 6. まとめ：AIで料理はどこまで可能？

| 観点       | 内容                               |
| -------- | -------------------------------- |
| 👍 メリット  | 自分の冷蔵庫に合わせた柔軟なレシピ提案が可能／簡単な実装で効果大 |
| 👎 デメリット | 味の保証はない／言語生成モデルにありがちな「嘘」レシピも稀にある |
| 🔮 今後の展望 | フル日本語対応＋画像生成＋栄養計算など、多方向に展開可能     |

---

## 📌 おわりに

AIと料理という一見ミスマッチなテーマでも、ちょっとした工夫と実装で面白い体験が生まれます。

「ちょっと試してみたいかも…」と思った方、ぜひこの記事を参考に
**自分だけのレシピAI**を作ってみてください！

GitHubコード、改善版モデルなどは別記事で公開予定です🙌
（コメントやLGTMもお待ちしてます！）

---

## 🔗 参考リンク

* [RecipeNLG Dataset on HuggingFace](https://huggingface.co/datasets/recipe_nlg)
* [HuggingFace Transformers](https://github.com/huggingface/transformers)
* [GPT-2のテキスト生成チュートリアル](https://huggingface.co/blog/how-to-generate)