なぞなぞ生成のためのgpt-4o-miniパラメータ設定メモ

## はじめに
なぞなぞを生成するためのプロンプトを何度も変えて試していますが、なかなか質のよい問題が生成されませんでした。調べたところ、パラメータの調整も行うと効果がありそう。パラメータの内容や調整するとどうなるかの備忘録です。

## gpt-4o-miniで使えるパラメータ
https://openrouter.ai/models/openai/gpt-4o-mini/parameters

公式サイトの内容を抜粋してまとめたものが以下になります。

| **パラメーター**       | **説明**                                                                                                                                                                                        | **オプション**              | **デフォルト** |
|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|----------------|
| **temperature**         | モデルの応答における多様性に影響を与えます。低い値は予測可能で典型的な応答を導き、高い値は多様で予想外の応答を促します。0では、同じ入力に対して常に同じ応答を返します。                   | 任意、浮動小数点、0.0～2.0    | 1.0            |
| **top_p**               | モデルが選択するトークンの範囲を確率の割合で制限します。Pの確率を満たす最も可能性の高いトークンのみを選択します。低い値は応答を予測しやすくし、デフォルト設定はフルレンジを許可します。 | 任意、浮動小数点、0.0～1.0    | 1.0            |
| **top_k**               | これは、各ステップでモデルが選択できるトークンの数を制限します。値が1の場合、モデルは常に最も可能性の高いトークンを選択し、予測可能な結果を導きます。デフォルトでは無効化されています。       | 任意、整数、0以上            | 0              |
| **frequency_penalty**    | この設定は、入力内のトークンがどのくらい繰り返されるかを制御し、出現頻度が多いトークンを抑制します。トークンペナルティは出現頻度に比例して増加します。負の値はトークンの再利用を促進します。     | 任意、浮動小数点、-2.0～2.0   | 0.0            |
| **presence_penalty**     | 入力内で既に使用されたトークンをモデルが繰り返す頻度を調整します。高い値はそのような繰り返しを減少させ、負の値は逆に繰り返しを促します。ペナルティは出現頻度に依存しません。            | 任意、浮動小数点、-2.0～2.0   | 0.0            |
| **repetition_penalty**   | 入力内のトークンの繰り返しを減少させます。値が高いほど、モデルは繰り返しを避けますが、値が高すぎると出力が意味不明な長文になる可能性があります。元のトークンの確率に基づいてペナルティが増加します。| 任意、浮動小数点、0.0～2.0    | 1.0            |
| **min_p**               | 最も可能性の高いトークンに対するトークンの最小確率を表します。たとえば、Min-Pが0.1に設定されている場合、最も可能性の高いオプションの1/10の確率以上のトークンのみが選択されます。   | 任意、浮動小数点、0.0～1.0    | 0.0            |
| **top_a**               | 最も可能性の高いトークンの確率に基づいて「十分に高い」トークンのみを選択します。top_aの低い値は最も高い確率のトークンに基づく選択に焦点を当てますが、範囲が狭くなります。                 | 任意、浮動小数点、0.0～1.0    | 0.0            |


結構、ありますね！👀
なぞなぞ生成とヒントの生成には、どれを調整するのか、これだけでは、よく分からないので、GPTに頼りました。以下に、その結果を記載します。

## **なぞなぞの生成に必要なパラメータ設定**

なぞなぞは、通常ユニークでクリエイティブな発想が求められるため、応答の多様性を重視します。そのため、以下のパラメータ設定が推奨されます。

| **パラメーター**        | **推奨設定** | **理由**                                                                                                                                                            |
|------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **temperature**         | 0.7～1.2     | 高めの値に設定することで、よりクリエイティブでユニークな回答が期待できます。特に、なぞなぞの多様性を重視するため、高めのtemperatureが適しています。                             |
| **top_p**               | 0.8～1.0     | 高めに設定することで、幅広いトークンの選択肢からユニークな回答が生成されます。フルレンジの1.0に設定すると、予想外のアイデアが生まれる可能性が高まります。                            |
| **top_k**               | 0～50        | 特に制限を設けず、クリエイティブな発想を広げるために0にするか、少し制限を設けたい場合は50程度に設定すると良いでしょう。                                               |
| **frequency_penalty**   | 0.0～0.5     | トークンの繰り返しをあまり抑制しない設定が良いでしょう。多様性を保ちながらも、多少繰り返しがあっても不自然にならない範囲で設定します。                                    |
| **presence_penalty**    | 0.2～0.5     | 少しだけ繰り返しを抑制して、新しい発想が出やすくするために低めに設定します。ただし、完全に排除する必要はないので、0.2～0.5の範囲が適切です。                                 |

私は、当初、temperatureのみ設定をしていました。temperature（0.6~0.8）で調整して試していましたが、その状態で生成されたのがこちら↓
```text
問題:「顔は見えないけど、みんなが知っている動物は何？」
答え:「いぬ」
```
どういう論理？という問題が出来上がったので、他のパラメータも合わせて調整してみたいと思います。


## **ヒントの生成に必要なパラメータ設定**

ヒントは、なぞなぞの答えに関する手がかりを提供するもので、あまりに曖昧すぎず適切な指示を与える必要があります。クリエイティブさも求められますが、正確さがより重要です。そのため、次の設定が推奨されます。

| **パラメーター**        | **推奨設定** | **理由**                                                                                                                                                            |
|------------------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| **temperature**         | 0.3～0.6     | ヒントの内容があまりにも多様だと混乱を招くため、低めに設定して正確さを重視します。低めのtemperature設定は、予測可能で正確な応答を導きます。                             |
| **top_p**               | 0.7～0.9     | トークン選択の範囲をある程度制限し、答えに近い適切なヒントを生成できるようにします。0.7～0.9程度の設定で、最も可能性の高いトークンに絞りつつ、多少の多様性も残します。      |
| **top_k**               | 0～10        | より正確なヒントを生成するため、選択肢を狭めます。`top_k`を10程度に設定することで、予測可能な範囲内で正しいトークンを選択させます。                                   |
| **frequency_penalty**   | 0.0～0.2     | ヒントでは繰り返しがあっても問題ないので、低めに設定します。トークンの再利用を許可して、説明が分かりやすくなるようにします。                                         |
| **presence_penalty**    | 0.0～0.2     | トークンの繰り返しを許容し、答えに近づくようなヒントを生成するため、低めに設定します。繰り返しによって説明が明確になることもあります。                                   |

## **まとめ**

- **なぞなぞの生成**では、クリエイティブで予測不可能な答えが求められるため、**temperature**や**top_p**を高めに設定し、広い範囲のトークンを使用してユニークな回答を生成します。
- **ヒントの生成**では、正確さを重視するため、**temperature**や**top_k**を低めに設定し、適切な手がかりを提示できるようにします。

## さいごに
まだまだ調整が必要な段階なので、引き続き、精度を高められるように精進していきたいと思います。
最後まで、お読みいただきまして、ありがとうございました！ご意見や誤り等ありましたら、ご指摘くださるとありがたいです。