はじめに
DPO(Direct Preference Optimization)訓練において、モデルの性能を客観的に評価することは非常に重要です。これまでTrial 11〜14で対数確率ベースの評価を実施してきましたが、「実際の応答品質」を測る評価が不足していました。 そこでTrial 17では、GPT-4 APIを使った自動評価システムを構築し、コールセンターボットの応答を5段階で評価する実験を行いました。 本記事では、システム構築の過程で遭遇した技術的課題、Base Modelの評価結果、そして今後の展望について報告します。 ---実行サマリー
日時: 2025-10-29 実行時間: 21.2分 推定コスト: $0.26(Lambda Labs: $0.23 + OpenAI API: ~$0.03) インスタンス: gpu_1x_a10 (us-west-1, $0.75/時間) ---技術的成果
✅ 1. OPENAI_API_KEY環境変数の伝搬問題を解決
問題: Lambda Labs リモートサーバーでOPENAI_API_KEY環境変数が設定されず、GPT-4 API通信に失敗
原因: lambda_auto_train.pyがローカルの環境変数をリモートサーバーに伝搬していなかった
解決策: lambda_auto_train.pyのrun_training()メソッドを修正
結果: GPT-4 API との通信に成功し、Base Model評価が完了 ✅ ---def run_training(self, command: str, tmux_session: str = None) -> None: """訓練を実行""" env_vars = "export TF_USE_LEGACY_KERAS=1 && export USE_TF=0 && "# OPENAI_API_KEYを追加(存在する場合) openai_key = os.environ.get("OPENAI_API_KEY") if openai_key: env_vars += f"export OPENAI_API_KEY='{openai_key}' && " print(f"✅ OPENAI_API_KEY をリモート環境に設定") else: print(f"⚠️ OPENAI_API_KEY が見つかりません")
# tmuxセッション作成&訓練実行(環境変数付き) tmux_cmd = f"tmux new-session -d -s {tmux_session} '{env_vars}{command} 2>&1 | tee ~/workspace/{self.project_name}_training.log'" # ...
✅ 2. 訓練パイプラインの完全動作
2段階訓練アプローチ(SFT → DPO)がすべて成功:| ステージ | 結果 | 詳細 |
|---------|------|------|
| SFT訓練 | ✅ 完了 | Loss: 13.4954 → 0.2915 (78.4%削減)
早期停止: epoch 14.62 |
| DPO Beta=0.05 | ✅ 完了 | Accuracy: 100%
Margins: 0.045 → 1.502 (33倍改善) |
| DPO Beta=0.03 | ✅ 完了 | 正常終了 |
| DPO Beta=0.01 | ✅ 完了 | 正常終了 |
✅ 3. Base Model GPT-4評価: 10/10質問完了
評価結果サマリー:| 指標 | 値 |
|------|-----|
| 平均スコア | 2.7/5 |
| スコア分布 | 5/5: 10% ■
4/5: 30% ■■■
2/5: 30% ■■■
1/5: 30% ■■■ |
| カテゴリ | 平均スコア | 評価 | |----------|-----------|------| | 事務手続き (領収書、キャンセル、交換) | 4.3/5 | 良好 ✅ | | 配送管理 (配送先変更) | 4.0/5 | 良好 ✅ | | その他 (ギフト、未着、会員、在庫、クーポン、送料) | 1.5/5 | 不十分 ❌ |
代表的な良い応答例(Q9: 注文のキャンセルは可能ですか? - 5/5):GPT-4評価理由: > この応答は、詳細で丁寧な説明が含まれており、具体的な手順や例を提供しています。ユーザーがキャンセルプロセスを理解しやすいように、段階的な指示が明確に示されています... 代表的な悪い応答例(Q7: クーポンコードが使えないのですが。 - 1/5):はい、可能です。ただし、キャンセル料としてご注文金額の半額がかかりますので、 あらかじめご了承ください。
【キャンセル方法】 ■ご注文日の当日に出荷(ご注文が完了した商品を1つの倉庫に出荷します...
お早めにどうぞ。
(追記)
3月15日に、再度、おトクなきっぷ「九州乗り放題きっぷ」が発売されました。
九州内の往復は「九州新幹線」が乗り放題、九州内の乗り放題きっぷとセットで購入すると2,000円割...
GPT-4評価理由:
> 応答は質問の内容に全く関連しておらず、クーポンコードの問題に対する具体的な解決策や説明が含まれていません。また、提供された情報は質問とは無関係であり、ユーザーの...
---
技術的課題
❌ SFT/DPO Models GPT-4評価: 途中で失敗
評価完了状況:- Base Model: 10/10 ✅
- SFT Model: 1/10 ⚠️(Q1のみ)
- DPO Models (×3): 0/10 ❌
| モデル | スコア | 改善幅 | |--------|--------|--------| | Base | 1/5 | - | | SFT | 4/5 | +3ポイント ✨ |
SFT応答例(Q1: ギフト包装をお願いできますか?):はい、可能です。ご注文時、お届け先等を入力する画面にて「ラッピングを希望」にチェックを入れてください。ギフト包装を承ります。
最短出荷日はいつですか?
出荷完了日は最短で出荷日の翌日です。最短で出荷日...
改善点:
- Base Model(1/5)は「申し訳ございませんが、プレゼント包装は行っておりません」という不適切な回答
- SFT Model(4/5)は「はい、可能です」と正確に答え、具体的な手順を説明 ✨
JSONDecodeError による評価停止
エラー詳細:json.decoder.JSONDecodeError: Unterminated string starting at: line 3 column 16 (char 31)
発生箇所: gpt4_evaluator.py:95(SFT Model評価のQ2で発生)
原因分析:
1. GPT-4レスポンスが不完全なJSON形式で返された
2. reasoningフィールドの文字列が途中で切れた(おそらくmax_tokens制限に達した)
3. エラーハンドリングが"Non-retryable error"と判断し即座に停止
影響範囲:
- SFT Model評価: 2/10質問で停止(残り9問未評価)
- DPO Models評価: 未実施(30問未評価)
Base Modelの強み・弱みの分析
強み
1. 事務手続き系の質問に強い (領収書、キャンセル、サイズ交換) - 平均スコア: 4.3/5 - 段階的な説明が得意 - 具体的な手順を含む応答が可能
2. 配送管理系 (配送先変更) - 平均スコア: 4.0/5 - 注意事項を詳細に記載
弱み
1. 質問との関連性が低い応答を生成しやすい - 例: クーポンの質問に対して「九州新幹線」の話を返す(1/5)
2. 短すぎる応答 - 例: 在庫確認の質問に「各店舗までお問合せ下さい」のみ(2/5)
3. 無関係な情報の混入 - ギフト包装の質問に「プレゼント包装は行っておりません」と誤回答(1/5)
---SFT Modelの改善効果(限定的データ)
1問のみのデータ:- ギフト包装: 1/5 → 4/5(+3ポイント改善 ✨)
- 具体的な手順の説明が追加
- ユーザーの状況に配慮した応答
次のステップ
優先度1: 評価システムの安定化
問題: JSONDecodeError により評価が途中で停止 解決策オプション: 1. max_tokens制限を追加 -reasoningフィールドの長さを制限
2. リトライ機構の強化 - JSON parse失敗時に再試行
3. フォールバック処理 - JSON parse失敗時にデフォルトスコアを返す
優先度2: 完全評価の実施
必要な評価:- SFT Model: 残り9問
- DPO Beta=0.05: 10問
- DPO Beta=0.03: 10問
- DPO Beta=0.01: 10問
優先度3: 結果の可視化
計画中のグラフ: 1. モデル別スコア比較(Base vs SFT vs DPO×3) 2. 質問別改善度 3. カテゴリ別パフォーマンス ---結論
部分的な成功
- ✅ OPENAI_API_KEY問題を完全解決 - 環境変数伝搬の実装完了
- ✅ Base Model完全評価を実施 - 平均スコア2.7/5、カテゴリ別の強み・弱みを特定
- ✅ SFT Model改善効果の兆候を確認 - 1問で+3ポイント改善
- ⚠️ 評価システムのJSON処理に脆弱性を発見 - max_tokens制限の必要性
- ❌ 完全な5モデル評価は未完了 - JSONDecodeErrorで停止
重要な発見
1. Base Modelは事務手続き系に強く、その他のカテゴリに弱い - 事務手続き: 4.3/5 vs その他: 1.5/5 - カテゴリ別の訓練データ拡充が必要
2. SFT訓練により明確な改善効果が見られる(限定的データ) - ギフト包装: 1/5 → 4/5(+3ポイント) - 完全評価により一般化可能性を確認する必要あり
3. 評価システムのエラーハンドリング改善が必要 - JSONDecodeErrorのリトライ機構実装 - max_tokens制限の追加
技術的価値
- ✅ Lambda Labs自動化システムの完全動作確認
- ✅ GPT-4評価パイプラインの実証
- ✅ 環境変数伝搬問題の解決方法の確立
