はじめに
今度は生き残りゲーム? インシテミルみたいな感じなのかな。 nikkieです。
めちゃめちゃ高揚するキーノートがあった、先日のOpenAI DevDay。
キーノート以外のセッションもアーカイブ公開されたと知り、気になった一本「A Survey of Techniques for Maximizing LLM Performance」を視聴しました。
目次
「A Survey of Techniques for Maximizing LLM Performance」
参加者のツイートで以下を見かけていたのですが、
.@openAI has put in a lot of work into RAG (retrieval augmented generation).
— Ben Parr (@benparr) 2023年11月6日
Accuracy has jumped from 45% to 98% with things like retaining, prompt engineering, and query expansion. pic.twitter.com/byvuHlqF4Y
これはこのトーク中のスライドでした(RAGについてパートの事例の1つ)
LLMの本番運用のために、LLMの性能を最大化することをテーマにしたセッションです。
サーベイということで、理論についての3つのパートと、応用(アプリケーション)のパートからなります
- 導入
- 理論
- プロンプトエンジニアリング
- RAG
- ファインチューニング
- 応用
これら3つについてどんな課題を解くために使うかが分かった気がします。
理解したことメモ
まとめ1
- LLMの性能向上はプロンプトエンジニアリングから始める
- プロンプトエンジニアリングで性能向上が頭打ちになったらエラー分析
- モデルに新しい知識を入れる必要がある場合はRAG
- モデルが厳密な出力構造に従う必要がある場合はfine-tune
- 一貫性のない指示に従っている場合も該当するようですが、「一貫性のない指示」ってなんだろう?(私の英語力の限界)
それぞれの定義
- RAG
Giving the model access to domain-specific content
- ファインチューニング
continuing the training process on a smaller, domain-specific dataset to optimize a model for a specific task
RAGとファインチューニングは解きたい課題が違う!
- コンテキストの問題
- モデルが何を知る必要があるか
- RAGでアプローチする
- 短期記憶の問題(イメージ:試験で手元に開いた本がある)
- LLMの問題
- モデルはどのように振る舞う必要があるか
- ファインチューニングでアプローチする
- 長期記憶の問題(イメージ:試験のために勉強する)
4象限の整理3が分かりやすかったです。
RAG(context高・LLM低) | RAGもファインチューニングも(context高・LLM高) |
プロンプトエンジニアリング(context低・LLM低) | ファインチューニング(context低・LLM高) |
上記ツイートのようにいくつか事例が共有されましたが、ファインチューニングの事例(失敗例)は印象的でした。
- ライティングアシスタントを作りたい
- トーンを著者の書き方に調整したい
- 2年分のSlackの投稿データでファインチューニング!
- Slackの書き方を再現してしまった(一同爆笑)
- 500語のブログ書いて
- 朝やるよ
- いまお願いします
- ok
このセッションで知ったこと(積ん読リスト)
RAGのHyDE retrieval
LangChainに実装があるみたい
https://github.com/langchain-ai/langchain/blob/v0.0.336/cookbook/hypothetical_document_embeddings.ipynb
ほかにもReRankerなど、RAGは全然知らないことばかりだ〜
Ragas score
RAGの評価指標で2軸4指標
- LLMの評価
- コンテンツの評価
- retrieveしたコンテンツが誤っているとLLMは間違えてしまう
プロンプトエンジニアリング
複数の戦術を使った例を見られました。写経できるぞ!
戦術は以下のドキュメントにもあります
https://platform.openai.com/docs/guides/prompt-engineering
終わりに
「A Survey of Techniques for Maximizing LLM Performance」の視聴ログでした。
✍️評価データを用意し、プロンプトエンジニアリングからはじめ、エラー分析してRAGかファインチューニングかを判断。
プロンプトエンジニアリングが注目される(バズる)ことが多いイメージですが、実課題を解く機能をLLMで提供するにはRAGやファインチューニングが肝なのかなあと思いました。
印象的だったのが、(意訳ですが)プロンプトエンジニアリングは始めるにはよい(good to start)が、特定のタスクを解くgreatな方法ではない、という説明。
プロンプトエンジニアリング、RAG、ファインチューニングを駆使した改善の反復、非常にわくわくしますね。
断片的に知っていた情報が結びついたサーベイでした。
公開に感謝です。素振っていこう!
- 再生時間 https://youtu.be/ahnGLM-RC1Y?si=5CJnTbAYLkxGFzUa&t=2666↩
- FSLはファインチューニングのベストプラクティスから↩
- https://youtu.be/ahnGLM-RC1Y?si=ub5CgvSBUAGwhIC4&t=254↩