はじめに
#ミリアニムビナナ異文化交流 ほんと最高😭 nikkieです。
LLM文脈で登場するtemperature(温度)なるものに関して、知っていることを書き出します。
読んで誤りに気づかれた場合は、@ftnextまでお知らせいただけると助かります。
目次
- はじめに
- 目次
- OpenAIのドキュメントより
- 『大規模言語モデル入門』より
- 松尾研LLM講座より
- 温故知新:temperatureはChatGPTのAPI固有ではない
- Ng先生「ChatGPT Prompt Engineering for Developers」より
- 終わりに
- P.S. temperature=0にしても一意に決定しない、ですよね?
OpenAIのドキュメントより
ドキュメント「Text generation models」
OpenAIのドキュメントにあたっていきます。
「Text generation models」
https://platform.openai.com/docs/guides/text-generation
OpenAI's text generation models (often called generative pre-trained transformers or large language models) (略)
OpenAIのドキュメントでは、テキスト生成モデルを指してLLMなんですね
Chat Completions APIのリファレンス
このドキュメント内の「Chat Completions API」1。
APIリファレンスが案内されます。
https://platform.openai.com/docs/api-reference/chat
APIのリクエストのパラメタの中にtemperatureがあります。 https://platform.openai.com/docs/api-reference/chat/create#chat-create-temperature
- sampling temperature
- 0から2までの数値をとる
- デフォルト値は1
Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
- 高い値は出力をよりランダムにする
- (意訳)低い値は出力をより決定的にする
We generally recommend altering this or top_p but not both.
一般にtemperatureまたはtop_pを変えることをオススメするが、両方とも変えることはオススメしない
再び「Text generation models」、FAQより
元のドキュメントのFAQにもtemperatureの大小について同様の記載があります:
How should I set the temperature parameter?
Lower values for temperature result in more consistent outputs (e.g. 0.2), while higher values generate more diverse and creative results (e.g. 1.0).
temperatureの低い値(例 0.2)はより変わらない出力となり、対して高い値(例 1.0)はより多様で創造的な出力を生成する
Select a temperature value based on the desired trade-off between coherence and creativity for your specific application.
あなたのアプリケーション特有の一貫性と創造性の間の望ましいトレードオフに基づいて、temperatureの値を選んでください
『大規模言語モデル入門』より
2023年上半期時点の自然言語処理への知の高速道路、『大規模言語モデル入門』の中ではOpenAIのAPIも叩いています(9章)。
脱線ですが、推しポイントは並行処理でAPIを呼び出している点。
さて、temperatureについても説明されます。
temperatureは出力のランダムさを制御する温度パラメータ(図7.9)です。(Kindle版 p.483)
7章の図7.9は百聞は一見に如かずで、めちゃめちゃ分かりやすいです
温度パラメータの値が0に近いとき、特定のトークンに確率のピークを持つ確率分布となり、温度パラメータの値が大きくなるにつれて、より均一な確率分布になります。(Kindle版 p.395)
松尾研LLM講座より
講義資料がダウンロード可能です(ありがとうございます!)
第1回:Overview of Language Models
LLMの概要パートより、言語モデルとは
ある単語の系列(≒文章)がどれくらい発生しやすいかをモデル化したもの (スライド5)
このモデル化に条件付き確率を採用(詳しくはスライド6)
「条件付き確率を何らかのニューラルネットで推定したモデル(スライド7)」、これが大規模言語モデルに繋がっていきます。
スライド7の図は分かりやすく
日本 -> の -> 首都 -> は とトークンの並びが来たら次に来るのは
- 「東京」が最大確率
- 「京都」が次点
- 他のトークンも小さい確率をとっている
この確率分布がtemperatureと関わります
第3回:Pre-training Pipeline
Transformerについて扱う回。
「評価」の中にtemperatureが登場します。
事前学習済みLLMを使って, テキストを出力(デコード)してみる. (スライド88)
3つ紹介されるデコード方式の中で
デコード方式③:Random Sampling
Temperature: 0以上の実数(スカラー値) (スライド91)
https://docs.cohere.com/docs/temperature より図が引用されています。
すでに見た事項の言い換えですが、
- temperatureが低いと、確率最大がスパイクしていますが
- temperatureが高いと、確率が一様に近づいていますね
温故知新:temperatureはChatGPTのAPI固有ではない
ChatGPTより前のモデルでも、上記のデコードを制御する目的でtemperatureを指定できます。
GPT-2のテキスト生成でtemperatureを指定した例を用意しました。
https://huggingface.co/blog/how-to-generate#sampling を参考に動かしました(この記事は積ん読)
- Python 3.11.4
- transformers==4.36.2
- torch==2.1.2
Ng先生「ChatGPT Prompt Engineering for Developers」より
OpenAIのドキュメントで「the desired trade-off between coherence and creativity(一貫性と創造性の間の望ましいトレードオフ)」と言われていた点、Andrew Ngセンセの講座でも言及されていました2。
Expandingが該当します
https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/7/expanding
要点としては、temperatureの値を高くすると、モデルの出力はよりランダムになるということ(言い換えると多様)。
temperatureの設定に関して
なので、アプリケーションの価値から考えて
- テキスト出力が多様になることでユーザに価値を提供できるならtemperatureの値は大きく
- 例えば、ChatBot(以前と同じ応答をしなくなりそう)
- 逆に、確実性や予測可能性がユーザ価値であるならばtemperatureの値は0
- 例えば、要約、でしょうか(要約をどう使うかで少しだけ多様にしたい場合もあるかもですね)
- プロンプトを試行錯誤する場合はtemperature=0(変数はプロンプト1つだけにしたいので)
となると理解しています
終わりに
temperatureについて、自分が知っていることを書き出しました。
書き出してみて改めて気づいた繋がりもありましたね。
そうか、次のトークンの出力に使う確率分布をtemperatureで操作しているのか!
P.S. temperature=0にしても一意に決定しない、ですよね?
直近はOpenAIのAPIを触っていないのですが、半年くらい前にNgセンセの教えにならってtemperature=0としたときは数パターン返ってくる経験をしました。
深追いできていないのですが、2023/11のDevDayで発表された「Reproducible outputs」を次は試してみたいな、と思っています。
https://platform.openai.com/docs/guides/text-generation/reproducible-outputs
we offer some control towards deterministic outputs by giving you access to the seed parameter and the system_fingerprint response field.