LLM のプロンプトエンジニアリング
2025/05/17 05:16
2025/05/17 16:19
読書メモ: LLM のプロンプトエンジニアリング
LLM を理解する
LLM が見る世界
- LLM にテキストを送信するとまずトークンと呼ばれる複数文字のチャンク(断片)に分解される
- LLM によって利用するトーカナイザーが異なるためどういった分割単位でトークンとなるかは一概に定義できないが、おおむね 3〜4 文字長
- モデルが利用するトークンの集合を語彙とよぶ
- LLM はトークン単位で文を組み立てるため、一文字ずつ吟味する必要があるタスクが苦手
- 文字を逆順にして出力するなどといったことは苦手
- こういった処理はプログラムにより前処理/後処理したほうがよい
- LLM には入力/出力テキストの合計トークン数に上限があり、これをコンテキストウィンドウサイズとよぶ
- LLM は過去のトークンをもとに次のトークンを予想する特性上、基本的にすでに生成されたトークンを修正するような動きはできない
- LLM はトークンや文字の形の視覚的特徴を捉えることが苦手
- 小文字を大文字に変換するなどのタスクは構造上得意ではない
- LLMは、テキスト全体やトークン全体を直接変換するのではなく「複数のトークン」から「次の1つのトークン」を生成する自己回帰(オートリグレッシブ)を行う
Temperature と確率
- モデルは基本的に過去のトークンを元に次にくる確率の高いトークンをリストアップし、そのなかからサンプリング(選択)し、次のトークンを生成することを繰り返している
- サンプリングの手法には最も確率の高いトークンを選ぶほか、それよりも確率の低いトークンを選ぶという方法があり、この幅を Temparature というパラメータで指定できる
- 0: 最も有力なトークンのみを選択し、ほぼ決定論的な生成を行える
- 0.1〜0.4: 最も有力なトークン以外の有力候補をたまに拾うような生成を行う
- 0.5〜0.7: 厳密な正確性より多様性を重視する生成を行う
- 1: トレーニングデータの出現確率分布をそのまま反映させて次のトークンを予想した生成を行う
トランスフォーマー
重要そうだがサクッと理解できなかったのでのちほど読む
- テキスト処理の際、過去のトークンから情報を受け取り、処理を行う
チャット形式への移行
- LLM はベースモデルの次のトークンを予想する補完の機能から、チャット可能なアシスタントへファインチューニングすることにより、より有用な存在となる
- チャット可能なアシスタントには次のようなことが求められる
- 丁寧で簡潔、正確でハルシネーションのような誤った情報を出力しないこと
- 医者の専門知識を持ちながら海賊のように話すといった自由なカスタマイズが可能であること
- ただし、そうしたカスタマイズが勝手に解除されない「脱獄」を防ぐ仕組みも必要とされる
- 以下ではベースモデルをチャット可能なアシスタントへファインチューニングする手法をみていく
人間のフィードバックによる強化学習(RLFH)
- RLFH は人間の好みに基づき LLM の振る舞いを調整するトレーニング手法
- 2022/3 に発表された論文をもとにその手法を確認していく
Pinned Articles
About
ウェブ界隈でエンジニアとして労働活動に励んでいる @gomi_ningen 個人のブログです
Tags
LLM
promptfoo
GenAI
JavaScript
PowerShell
fluentd
kibana
elasticsearch
nginx
村川梨衣
五十嵐裕美
イベント
logrotate
IoT
Scala
Java
ICMP
iputils
C言語
WUG
mastodon
Swift
AWS
Windows
Clock
PoEAA
アーキテクチャ
iOS
DeviceFarm
プログラミング言語
OS
StepFunctions
Lambda
Serverless
terraform
ポエム
RHEL
ネットワーク
GraphQL
CloudWatch
Linux
Coreutils
nc
network
telnet
LinuxKernel
fpinscala
ELB
IAM
AppSync