大規模言語モデル(LLM)は、テキストを生成したり、質問に答えたり、さまざまな言語タスクを実行したりする上で、多くの内部的なパラメータを持っています。これらのパラメータを調整することで、LLMの応答の創造性、一貫性、長さなどを制御できます。ここでは、LLMの動作に影響を与える主要なパラメータについて詳しく説明します。
以下の説明は、Difyで設定できるパラメータに限っています。また、モデルによっても設定できるパラメータが異なります。プログラミングでAPIを利用する場合には、リクエストボディのパラメータとして設定します。それぞれ以下のAPIリファレンスを参照して下さい。
LLMの基本的なパラメータとその動作への影響
1. Temperature
Temperatureは、LLMが次にどの単語を選択するかのランダム性を制御するパラメータです。
動作原理: LLMは、次に続く可能性のある単語それぞれに確率を割り当てます。Temperatureは、この確率分布を「鋭く」したり「平坦」にしたりします。低いTemperatureは分布を鋭くし(最も可能性の高い選択肢を強調)、高いTemperatureは分布を平坦にします(多くの選択肢にチャンスを与える)。
- 低いTemperature
- 動作: LLMはランダム性を低く抑え、最も確率の高い単語を選択しやすくなります。
- 結果: より決定的で一貫性があり、予測可能なテキストが生成されます。事実に基づいた応答や、正確さが求められる場合に適しています。しかし、創造性に欠け、同じような言い回しを繰り返す傾向があります。
- 高いTemperature
- 動作: LLMはランダム性を高め、確率の低い単語も選択肢に含めるようになります。つまり、より多くの「リスク」を取るようになります。
- 結果: より創造的で多様な、予期しないテキストが生成されます。物語の執筆やブレインストーミングなど、新しいアイデアが必要な場合に有効です。ただし、一貫性が失われたり、意味不明なテキストが生成されたりするリスクも高まります。
2. Top-p
Top-pは、LLMが単語を選択する際に考慮する候補の範囲を、累積確率に基づいて決定するパラメータです。
- 動作: LLMは、確率の高い順に単語を並べ、その確率の合計が指定された
p
の値(例: 0.9)を超えるまで単語を選択肢に含めます。 - 結果:
- 高いTop-p : 多くの単語が候補となり、より多様なテキストが生成されます(高いTemperatureに似た効果)。
- 低いTop-p : ごく少数の最も確率の高い単語のみが候補となり、より安全で予測可能なテキストが生成されます。
- 特徴: Top-pは、Temperatureとは異なり、候補となる単語の数を動的に調整します。文脈によって次の単語の予測しやすさが変わるため、確率分布が鋭い場合は候補が少なくなり、平坦な場合は候補が多くなります。これにより、品質を維持しつつ多様性を確保しやすいとされています。
3. Top-k
Top-kは、LLMが単語を選択する際に考慮する候補の数を、上位k個に限定するパラメータです。
- 動作: LLMは、確率の高い順に単語を並べ、上位
k
個(例: 50)の単語のみを選択肢として考慮します。 - 結果:
- 高いTop-k (例: 100): 多くの単語が候補となり、多様性が増します。
- 低いTop-k (例: 10): 候補が絞られ、より一般的な、あるいは安全な単語が選ばれやすくなります。
- Top-pとの違い: Top-kは常に固定数の単語を候補とするのに対し、Top-pは確率に基づいて候補数を変動させます。Top-pは、非常に低い確率の単語(ノイズ)を効果的に排除できるため、Top-kよりも優れているとされます。直感的には、Top-kの方が、コントロールしやすいかもしれません。
4. Max Length (最大トークン数)
Max Lengthは、LLMが生成するテキストの最大長をトークン数で指定するパラメータです。(トークンは、単語や句読点、あるいは単語の一部などを指します。日本語の場合は、ほぼ文字数と同じと考えて良いかと思います。)とりえる値は、使用するモデルによって異なります。
- 動作: LLMは、指定された最大トークン数に達するまで、または自然な文の終わり(EOS: End of Sequence トークン)に達するまでテキストを生成します。
- 結果: 生成されるテキストの長さを制御します。短すぎる設定は不完全な応答につながり、長すぎる設定は冗長な応答や計算リソースの無駄遣いにつながる可能性があります。
5. Frequency Penalty & Presence Penalty
単語の出現に対してペナルティを与えるパラメータです。
- Frequency Penalty (頻度ペナルティ):
- 動作: テキスト内に既に出現した単語に対して、その出現回数に応じてペナルティを与えます。頻繁に出現する単語ほど、再び選ばれる確率が低くなります。
- 結果: 特定の単語の使いすぎを防ぎます。
- Presence Penalty (存在ペナルティ):
- 動作: テキスト内に一度でも出現した単語に対して、(出現回数によらず)一律のペナルティを与えます。
- 結果: 新しいトピックや概念について話すことを奨励し、同じ話題に固執するのを防ぎます。
パラメータの相互作用と調整
これらのパラメータは独立しておらず、互いに影響し合います。例えば、
- Temperatureを高くしても、Top-pやTop-kが低いと、結局は候補が絞られてしまい、創造性はあまり高まりません。
- Max Lengthが短いと、ペナルティ系のパラメータの効果は現れにくいかもしれません。
最適なパラメータ設定は、使用するLLMやタスクの目的(創造的な文章か、正確な要約かなど)によって大きく異なります。多くの場合、試行錯誤を通じて、目的に合った最適な組み合わせを見つける必要があります。
まとめ
LLMの性能が上がってきたので、通常のDifyのLLM利用では、これらのパラメータは初期値のまま使っていただいても問題ないかと思います。
何らかの理由で、オープンソースのモデルや、特別分野の専門モデルを使った時に、不自然な文章が生成されてしまう場合などに、調整頂ければ良いかと思います。