知識には向かない? gpt-3-5-turboのfine-tuningを試す

導入

近年、AI技術の急速な進展の中で、Fine-tuningという手法が一般的にアクセス可能となり、様々なタスクでの利用が期待されています。特に、自然言語処理の領域では、ユーザとの対話を通じて人格を持ったように振る舞うロールプレイするAIキャラクターが注目されています。私自身も、このようなAIキャラクターの実現に強い興味を抱いており、OpenAIのGPTモデルをベースとして、Default ModelとFine-tuned Modelの二つの異なるアプローチを用いて比較・分析を行いました。この経験を通じて、AIキャラクターの可能性や、それぞれのモデルの特性を探求することを目的としています。

条件

  1. データセット:

    • 同じデータセットを使用することで、学習の条件を揃えます。

  2. 質問の種類:

    • 各モデルに同じ質問またはタスクを提示することで、応答を正確に比較します。

  3. few-shot学習のプロンプト:

    • デフォルトモデルには、タスクの具体的な例をいくつか示して、その後に本来の質問を提示します。これにより、モデルに所望のタスクの文脈を理解させることができます。

  4. 繰り返し試行:

    • 複数の異なる質問を試すことで、全体的なパフォーマンスを評価します。

  5. パラメータ:

    1. temperature:defaultの1

few shot用
ファインチューニング用
def compare_responses(userPrompt, fine_tuned_model_id, default_model="gpt-3.5-turbo-0613", temperature=1):
  
    systemPrompt = "You are a chatbot roleplaying 春霞つくし."

    completionDefault = openai.ChatCompletion.create(
      model=default_model,
      temperature=temperature,
      messages=[
        {"role": "system", "content": systemPrompt + promptFewShot},
        {"role": "user", "content": userPrompt}
      ]
    )

    completionFinetuning = openai.ChatCompletion.create(
      model=fine_tuned_model_id,
      temperature=temperature,
      messages=[
        {"role": "system", "content": systemPrompt},
        {"role": "user", "content":userPrompt}
      ]
    )

    default_response = completionDefault.choices[0].message.content
    fine_tuned_response = completionFinetuning.choices[0].message.content

    return default_response, fine_tuned_response

# 使用例
default_ans, fine_tuned_ans = compare_responses("あなたの趣味は?", FINETUNED_MODEL_ID,temperature=1)
print("Default Model:", default_ans)
print("Fine-tuned Model:", fine_tuned_ans)

temperature:1の時の結果

  1. 応答の長さ:

    • デフォルトモデルの回答は概して長めで、具体的な情報や詳細が含まれています。

    • ファインチューニングされたモデルは、一貫してシンプルで短い回答をしています。

  2. 内容の一貫性:

    • デフォルトモデルはほとんどの場合「カフェ巡り」を趣味として応答しており、それに関連する詳細や補足情報も提供しています。

    • ファインチューニングされたモデルも多くの場合「カフェ巡り」と答えていますが、時折異なる回答をしていることが確認できます(例: 読書、彼女体験)。

  3. ユーザーへの質問の有無:

    • デフォルトモデルは、いくつかの応答でユーザーに趣味を尋ねる形を取っています。

    • ファインチューニングされたモデルはそのような傾向が見られません。

  4. モデルの特性:

    • デフォルトモデルは、提供される情報を詳しく展開して回答する傾向があります。

    • ファインチューニングされたモデルは、回答がシンプルであり、多くの場合で直接的な回答をしています。しかしながら、時折想定外の回答も見受けられます。

総合的に見ると、ファインチューニングされたモデルは、与えた学習データ通りのシンプルでストレートな回答を好む傾向があります。一方、デフォルトモデルは、より詳細な情報や補足を提供することが多いです。しかし、ファインチューニングモデルの一部の回答は意外性があり、意図しない方向に進むこともあるようです。(ハルシネーションと言えるのでは?)これはファインチューニングの過程やデータセットの質に依存する可能性があります。
故にファインチューニングされたモデルを独自データのFAQに使うには注意が必要と言えそうです。


temperature:0の時の結果


比較結果

学習データ:

user: あなたの趣味は?
assistant: 私の趣味はカフェ巡りです。
  1. Default Modelの応答:

    • Default Modelは「私の趣味はカフェ巡りです。新しいカフェを探したり、美味しいコーヒーやスイーツを楽しむのが好きです。カフェの雰囲気やインテリアも楽しんでいます。」という詳細な回答を繰り返して提供しています。

  2. Fine-tuned Modelの応答:

    • Fine-tuned Modelは「私の趣味はカフェ巡りです。」というシンプルな回答を繰り返しています。この回答は学習データと一致しています。これは、Fine-tuned Modelが新しい学習データに基づいて調整されていることを示唆しています。

  3. temperatureの影響:

    • temperatureの値が0のため、Fine-tuned Modelは最も確実と思われる回答を選択しています。このため、学習データに一致する回答が繰り返されているのは予測される動作です。

結論として、Fine-tuned Modelは学習データに基づいて短い回答を繰り返していますが、few-shotを使用したDefault Modelはより詳細な回答を繰り返しています。temperatureの値が0に設定されていることから、Fine-tuned Modelの回答は学習データと一致することが期待されます。

所感

Default ModelとFine-tuned Modelの比較を通じて、それぞれのモデルが異なる特性と利点を持っていることが明らかになりました。ただし以下は今回の検証の範囲であり、さらに検証が必要です。

  • temperatureが大きい時でもfew-shotを使用したDefault Modelは正確な情報を提供した

  • temperatureが0の時、Fine-tuned Modelと学習データの質問回答と一致した

fine-tuningをイメージするときは、LLMの答えを出す確率を少し調整する感じなのかもしれません。この調整の度合いを表すのが「temperature」で、これが高いとLLMは色々な答えを考えるようになり、その結果、時々変な答え(ハルシネーション)も出てくることがあります。

GPTは、一つの回答の中で情報が矛盾しないように整合的な答えを出すのが得意と言われています。だから、少しだけ前の情報(few-shot)を使ってヒントを与えると、temperatureが高くてもちゃんとした答えを出すことができたのでないでしょうか。

使い分けの提案:

  • 回答の創造性も正確性もバランスよく必要な時:

    • few-shotを使用したDefault Modelでtemperatureを高めに

    • 例:キャラクターや人格における、背景情報やプロフィール、行動指針、制約条件

  • 独自データをできるだけ正確に回答したいとき:

    • Fine-tuned Modelでtemperatureを低めに

    • 例:カスタマーサポート、特定のFAQ


この記事が気に入ったらサポートをしてみませんか?