LLMシステムを評価、比較、最適化する方法
この記事では、大規模言語モデル(LLM)システムの評価に取りかかる方法、およびハイパーパラメーターの最適化アプローチを実行する方法について、インタラクティブな方法で検証していきます。
Created on May 1|Last edited on May 30
Comment
ChatGPT (正直なところ、むしろエージェント)とGPT4(間違いなく純粋なLLM)が一般リリースされて以来、大規模言語モデル(LLM)空間は急激に拡大しつつあります今後もさらなる進展が見られ、付随して、内部でLLMを使用するシステム(ツール、ボット、サービスなど)も発展していくでしょう。
それでも、世間で発表されている事例の多くはトイモデル、デモ、または概念実証にとどまります。現時点では、生産されているLLMシステムはほんの一握りであり、最大の障害となっているのはそのようなシステムの正確な評価でしょう。
医療QAボットのシンプルな例について考えてみましょう。診断(クエリ)を入力し、システムが薬剤と投薬量を提案します(応答)。このようなシステムは薬剤データベースから情報(コンテキスト)を取り出し、コンテキストとクエリ(プロンプト)を照合して最後にLLMを使って応答を生成します。
しかし、応答が正しいことをどのように確認できるのでしょうか?結局、医療の ユースケースでは、これを正しく行うことが極めて重要です。偽陽性や偽陰性は、人生を左右するような影響を持つ場合があります。
このようなLLMシステムの評価にはどのように取り組むことができるのでしょうか?この記事では、
- LLMベースのシステムについて、評価を1つの概念として検証します。シンプルな例から始めて、それを土台としてシステム評価(ここでは当社のQAドキュメント)へと進みます。
- また少し掘り下げて、ハイパーパラメーターの最適化(HPO)を活用して、より適切にチューニングされたLLMベースのシステムを見つける方法も見ていきます。
LLMアプリを構築であり、このレポートが気に入った場合は、当社が提供している無料コースにぜひご登録ください(下のボタンをクリック)。
無料LLMコースにサインアップ
以下は、この記事で扱う内容の詳細です:
目次
目次簡単なLLM評価1. 目測2.ヒューマンアノテーション、別名:教師あり評価計算機(すなわち、シンプルなLLMベースのシステム)教師あり評価ハイパーパラメーターの最適化観察LLMを評価するLLM1. LLMを使用した評価用データセットの生成LangchainのQAGenerationChain2. メトリクス1.メトリクスとしてのLLM?2. 標準メトリクスハイパーパラメーターの最適化観察評価戦略において何を改善できるでしょうか?検索システムを別々に評価するとどうなるでしょうか?結論関連リソース
こちらでコードをお試しください
簡単なLLM評価
LLMの評価とLLMベースシステムの評価は異なります。今日の大規模言語モデルは、次のような複数のタスクを実行することができます:テキストの要約、質疑応答、テキストのセンチメントを見つける、翻訳、その他多数。
通常、事前トレーニング後(一般的に巨大なデータセットについて)、LLMは次のような標準的なベンチマークに関して評価されます — GLUE、SQuAD 2.0、およびSNLI(これらは数例です)。ここでは標準メトリクスが使用されます。しかしこれらのLLMは、このままでは役に立たない場合があります。その理由は次を参照してください:
- 特定のユースケースについては、「プライベート」データセットでLLMの微調整を行う必要があります。この場合、評価は大抵簡単です - グラウンドトゥルースデータセットがあり、これに対して、たいていは標準メトリクスを使って、微調整済みのモデルを評価します。ただし、コストと時間がかかることを考えると、微調整は第一の検討事項ではありません。上記の例を踏まえ、医療システムは患者データまたは医学研究に基づいて微調整されることがありますが、LLM設計者はこれらをすぐに利用できません。
- LLMは有能ですが、熟慮されたプレ/ポストエンジニアリングによって、私たちは、多くの場合十分適切に機能する、LLMベースのシステムを構築することができます。Langchain、LlamaIndex、およびその他のツールのおかげで、そのようなシステムの構築は簡単になりました。ただし、適切なコンポーネントを見つけること(詳細は後で説明)、および適切にシステムを評価することはやはり困難です。
以下はいくつかの簡単な評価戦術です。そのうち、最も簡単なものから始まります:
1. 目測
LLMベースのシステムの構築を始める際、私たちは通常、システムからの応答を目測することで評価を開始します。通常、いくつかの入力と予期される応答があり、さまざまなコンポーネント、プロンプトテンプレートなどを試すことで、システムのチューニングと構築を行います。これによって優れた概念実証が得られますが、システムを完全に評価しなければなりません。
このワークフローをサポートするには、W&Bプロンプトの使用をお勧めします。実際、LangchainまたはLlamaIndexを使う場合、プロンプトをそのまま使うことができます。チェーン/プラグインをプロンプトとともに使用することもできます。
以下に、LlamaIndexを使ってシンプルなドキュメントにクエリする例があります。ワークフローに目測が含まれる場合、このツールを使って、内部で発生していることを確認することができます。このプロンプト例を自由にクリックしてください。これはインタラクティブです:
query
4346ms
synthesize
4138ms
llm
4115ms
retrieve
208ms
embedding
201ms
Click and drag to pan
query
4346ms
Result Set 1 | |
Inputs | |
query_str | What did the author do growing up? |
Outputs | |
response |
The author grew up writing essays, learning Italian, exploring Florence, painting people, working with computers, attending RISD, living in a rent-stabilized apartment, building an online store builder, editing Lisp expressions, publishing essays online, writing essays, painting still life, working on spam filters, cooking for groups, and buying a building in Cambridge. |
Metadata | |
Kind | AGENT |
Start Time | Thu Jun 08 2023 11:47:52 GMT+0000 (Coordinated Universal Time) |
End Time | Thu Jun 08 2023 11:47:56 GMT+0000 (Coordinated Universal Time) |
Child Spans | 2 |
2.ヒューマンアノテーション、別名:教師あり評価
LLMシステムを評価する際の最善かつ最も信頼できる方法は、LLMベースのシステムの各コンポーネントに対して評価データを作成することです。このアプローチの最大の欠点は、そのようなデータセットを作るためのコストと作成にかかる時間です。LLMベースのシステムによっては、評価データセットの設計は困難になることがあります。
新しいデータセットの作成を疑問に感じ、標準的なベンチマークを使わないことを不思議に思うかもしれません。LLMベースシステム構築のアイデアは、実際に微調整せずに、プライベートデータをLLMにもたらすことです。プライベートデータ(つまり当社の「ドメイン」)でシステムを評価することが理想的です。
シンプルなLLMベースのシステムの例、計算機を見てみましょう。計算機は、BODMASルールを使って、与えられた数式を解くことができます(これはPEMDASまたはBEDMASルールとして知られ、地域によって異なります)。
計算機(すなわち、シンプルなLLMベースのシステム)
当社の計算機は、括弧や記号などが含まれる数式を受け入れます。基礎を成すLLM(たとえばGPT4)を使って計算し、回答を返します。Langchainを使うと、数行のコードでこれを構築できます。
教師あり評価
意外にも、システムを適切にチューニングしないと、GPT4は一度に多数の数式を正しく解決できません。ここで問題が提起されます:評価について議論する前に、チューニング可能な要素とは何でしょうか?
さまざまなLLM( gpt-4、 gpt-3.5-turboなど)で実験したり、さまざまなプロンプトで実験したり、APIに提供された引数(温度など)やその他を微調整したりすることができます。「その他」は、構築しようとしているシステムによって異なります。
目測手法を使ってチューニングを盲目的に試すこともできますが、前に述べたように、これによって、システムを製造に進めるのに必要な確信は得られません。当社の計算機の例では、Python関数を使って数式を評価し、それを「人間が注釈づけした評価データセット」と呼びます。(これはシミュレーションされたデータですが、目的は、関連データを収集することでそのようなシステムを評価する方法を示すことです。)
以下のW&Bテーブルは true_resultを示しています。これは人間が注釈づけした評価データであり(この例では、Python関数を使って生成されている)、一方 pred_resultは当社のLLM計算機によって計算されています。トークン数と、応答の生成コストも記録されています。
💡
ユースケースと、そのような評価データセットの可用性に応じて、ユースケースに最も関連性があるメトリクスを選ぶことができます。この例では、精度は十分優れています。以下に、評価データセットに関するLLM計算機の精度、および106件の予測を実行するコストが示されています。
確実に、LLMベースの計算機のパフォーマンスを改善することができます。(実際、ここで瞬時にこれを行います。)
ハイパーパラメーターの最適化
評価データセットと、微調整すべき複数のコンポーネントがある場合、ハイパーパラメーター最適化のセットアップは筋が通ります。W&Bスイープの使用は非常に簡単です。3種類のプロンプトテンプレート、3つのモデル( text-davinci-003、 gpt4、 gpt-3.5-turbo)および温度(0~1の範囲)を試します。
注:温度はパラメーターであり、ここでは、モデルの応答をどの程度「創造的」にするかを調整します。温度を下げると、奇抜な出力とランダム性は少なくなります。温度を上げると、内容は多様になりますが、モデルが文脈を無視する可能性が高くなります。
💡
試みるさまざまなプロンプトテンプレート:
- maths_prompt_template_1.txt
The following is the mathematical expression provided by the user.{question}Find the answer using the BODMAS rule in the {format_instructions}:
2. maths_prompt_template_2.txt
The following is the mathematical expression provided by the user.{question}Find the answer in the {format_instructions}:
3. maths_prompt_template_3.txt
You are an expert mathematician. You can solve a given mathematical expression using the BODMAS rule.BODMAS stands for Bracket, Orders of Indices, Division, Multiplication, Addition and Subtraction. The computation should happen in that order.The dorder is as follows:B: Solve expressions inside brackets in this order -> small bracket followed by curly bracket and finally square bracket.O: Solve the indices such as roots, powers, etc.D: Divide the numbers which are givenM: Multiply the numbers nextA: Sum up the next numbersS: Subtract the numbers left in the endThe following is the mathematical expression provided by the user.{question}Think about it step-by-step. Don't skip steps.When ready with the answer return in the {format_instructions}:
おわかりのように、 maths_prompt_template_2.txtは、「BODMAS」ルールが言及されていない最もシンプルなプロンプトです。 maths_prompt_template_1.txtテンプレートで「BODMAS」を言及します。最後のプロンプトテンプレート、 maths_prompt_template_3.txtで詳細な説明を提供します。
Run set
44
観察
- 3つの精度バンドがあります - 低(10~40%)、中(60~70%)、最後に高(88%+)です。3つのバンドは、コストと確実に相関しています。コストが高くなると、より高い精度が達成されます。
- GPT4ルールがすべてを決定します。GPT4モデルは最高精度を提供します。
3. GPT4は優れていますが、適切にプロンプトを行う必要があります。プロンプトテンプレート3では~90%の精度が得られ、プロンプトテンプレート1は60~70%でした。これは、20%以上のシステムパフォーマンスの改善です。この例では、LLMの教育を増加することで、より優れた結果が得られました。
4. モデルが適切でないと、適切な結果は得られません。プロンプトテンプレートに関係なく、 text-davinci-003のパフォーマンスは不適切であり、結果として精度は20%を下回りました。 Gpt-3.5-turboも適切に機能しません(精度 <40%)。
費用がかかるほど最高の精度を得られます。予測したように、gpt4は、より詳細かつ正確なプロンプトテンプレートを使うとパフォーマンスが最高になります。シンプルなLLMベースのシステムでは結果は予測どおりですが、これは多少複雑度が高いシステムには当てはまらない場合があります。
時間とお金をかけて評価データセットを構築できる場合、そのようなデータセットで評価されたLLMベースのシステムを展開すると、最も高い確実性が得られます。これは、LLMベースのシステムを評価する際の、方法論的に最も堅実な方法です。
💡
LLMを評価するLLM
こちらでコードをお試しください
LLMは汎用的であり、興味深い特性があります。LLMは特に、提供されたテキストからの情報抽出に優れ、性能は向上し続けています。これにより、LLMを使ってLLMを評価する実践が発展しています。中心にあるアイデアは、LLMを使ってテストケースを生成してから、そのケースでLLMベースのシステムを評価することです。
当社のLLMベースのシステムは、このセクションのRetrieval Augmented QAボットになります。このようなシステムにはいくつかのコンポーネントがあります:埋め込みモデル、検索システム、およびLLM駆動のQAチェーン。このLangchain Chat with Your Dataディープラーニングコースで、このようなシステムの構築方法を学ぶことができます。
QAボットは、「The Cookbook of Self-Supervised Learning」(arXiv:2304.12210)というタイトルの論文に基づいて質問に回答するように構築されています。このようなシステムの評価に移りましょう。まず、評価データセットを準備し、メトリクスを決定する必要があります。
1. LLMを使用した評価用データセットの生成
QAボットを実際に評価するには、評価の中に質問と回答のペアが必要です。当社のボットは情報検索(IR)システムを使うため、このシステムの評価を検討する必要もあります(詳細は後で説明)。
前のセクションで説明したように、人間のアノテーターを使って、絶対的基準の質問と回答のペアを手動で作成することができます。これは全体として優れたメソッドですが、費用と時間がかかります。結局、医療データに関してQAボット用の評価セットを構築するには、訓練を受けた人材が必要です。
このような特定分野のユースケースの多くでは(シンプルなクラウドソーシングが機能せず、専門家の利用がはるかに得策である)、適切な人材を見つけるのが難しく、高いコストにつながり、個人や小企業にとっては実行不可能になります。そのようなデータセットを作成するための実行可能な方法の1つはLLMの活用です。このアプローチには明らかなメリットと制限があります:
- 拡張可能性。多数のテストケースをオンデマンドで生成できます。
- 柔軟性。特殊なエッジケースに対してテストケースを生成し、複数の分野に応用でき、関連性と適用性を確保できます。
- 安価で高速。LLMは、低コストで、複数ドキュメントからの情報をすぐに照合できます。
最大の制限については上で説明しました:ラベル付け専門家が必要になるユースケースは、最もよく必要とされるユースケースです(たとえば医療分野)。
LangchainのQAGenerationChain
Langchainには、QAGenerationChainという便利なチェーンがあります。これは、特定のドキュメントから質問と回答のペアを抽出することができます。関連するデータローダー(Hamelによる優れたツール)を使ってドキュメントを読み込み、小さいチャンクに分割し、チェーンを使ってQAペアを抽出できます。
私はこのプロンプトを使用し、 QAGenerationChainを使ってQAペアを生成しました。このような60個のペアを作成しました。その内45個は gpt-3.5-turboを使って作成し、残りの15個はCohereの commandモデルを使って作成しました。
You are a smart assistant designed to come up with meaninful question and answer pair. The question should be to the point and the answer should be as detailed as possible.Given a piece of text, you must come up with a question and answer pair that can be used to evaluate a QA bot. Do not make up stuff. Stick to the text to come up with the question and answer pair.When coming up with this question/answer pair, you must respond in the following format:```{{"question": "$YOUR_QUESTION_HERE","answer": "$THE_ANSWER_HERE"}}```Everything between the ``` must be valid json.Please come up with a question/answer pair, in the specified JSON format, for the following text:----------------{text}
以下で生成されたQAペアを確認します。両方のモデルから生成されたQAペアに目を通します。生成の品質に違いを見つけられますか?
さまざまなプロンプトで実験し、質問と回答のトーンを変え、詳細への注意を増加/減少し、否定的な回答を作成します。このアプローチの最善の部分は、LLMは時間とともに強化され、幅広いユースケースに対してこのアプローチがより実行可能になることです。
2. メトリクス
QAペアの評価セットが準備できたところで、LLMベースのQAボットに質問の予測を生成させることができます。それからメトリクスを使って、予測された「真の」回答を評価できます。
1.メトリクスとしてのLLM?
予測された「真の」回答を考慮して、文字通りLLMを使って、真の回答と比較して、予測がどの程度適切であるかを確認することができます。継続:テキストの意味を適切に理解できるという点で、LLMは優れています。2つのテキスト(真の回答と予測された回答)を考慮して、LLMは理論上、これらが意味論的に同じかどうかを判断できます。同じである場合、その予測に「正確」ラベルを付け、同じでない場合は「不正確」ラベルを付けることができます。
幸い、Langchainには QAEvalChainというチェーンがあり、これは予測された回答とともに、質問と「真の」回答を理解し、「正確」ラベルと「不正確」ラベルを出力することができます。そのような評価ジョブが含まれる以下のW&Bテーブルをご覧ください。ここで、LLMはメトリクスとして使用されました( llm_based_eval_acc)。
2. 標準メトリクス
NLPタスクとして、質問/回答には、いくつかの主要なメトリクスを含む豊富な文献があります。SQuADを含む、さまざまなQAベンチマークデータセットで使用される2つの主要なメトリクスは以下のとおりです:
- 完全一致:各質問/回答ペアについて、モデル予測のトークンが真の回答のトークンと完全に一致した場合、 exact_matchは100になり、それ以外の場合、 exact_matchは0になります。確率システムでは、各トークンの一致は稀であることが想像できるでしょう。当社のユースケースでは、このメトリクスを完全に信じてはいけません。
- F1スコア:これは有名なメトリクスで、特に精度とシステムのリコールを平等に考慮します。精度は、予測内のトークン総数に対する、共有されたトークンの割合です。リコールは、グラウンドトゥルース内のトークン総数に対する、共有されたトークンの割合です。
HuggingFaceの評価ライブラリを使って squadメトリクスを読み込み、 exact_matchと f1を計算することができます。上記の同じ評価ジョブについて、以下のサンプル当たりのベースで、 exact_matchとf1スコアを確認します。
ハイパーパラメーターの最適化
評価セットがあるという前提で、W&Bスイープを使って、メトリクスを強化するハイパーパラメーター最適化検索コンポーネントを迅速にセットアップしましょう。この例ではmean F1スコアです。私は以下のスイープ構成を使用しました。
method: randomname: random_qa_full_sweepsparameters:embedding:values:- SentenceTransformerEmbeddings- OpenAIEmbeddings- CohereEmbeddingsllm:values:- gpt-4- gpt-3.5-turbo- text-davinci-003- command- command-lightprompt_template_file:values:- data/qa/prompt_template_1.txt- data/qa/prompt_template_2.txtretriever:values:- Chroma- TFIDFRetriever- FAISSprogram: qa_full_sweeps.py
ご覧のように、私は、埋め込みモデル、さまざまなLLM(OpenAIのGPTファミリーのモデル、Cohereのコマンドファミリーのモデル)、プロンプトテンプレート、およびいくつかのレトリーバーを使って実験しています。プロンプトテンプレート2は、プロンプトテンプレート1を多少変更したものです。もう1つ注意すべきことは、 TFIDFRetrieverは埋め込みモデルを使用しないことです(明らかに)。
Run set
65
観察
- OpenAIモデルは、Cohereモデルよりもパフォーマンスが優れています。上位F1スコア(50+)は、OpenAI モデル ファミリーから得られています。
2. TFIDFRetrieverは、埋め込みベースのChromaとFAISSと比較して、驚くほどパフォーマンスが優れています。 TFIDFRetrieverは埋め込みモデルを使わないため、このレトリーバーを使うと、パフォーマンスを低下させずにコストを削減できます。
3. gpt-3.5-turboは全体的に、 gpt4よりもパフォーマンスが優れているようです。これは、評価セットが gpt-3.5-turboを使って生成されたためでしょうか?この問いには評価戦略のさらなる調査が必要であり、また gpt-4がいかに優れているかが示されています。
以下のチェックボックスをクリックして、そのモデルに対する実験を選択します。結果として得られるF1スコアは、実験全体の平均です。
6
10
4. gpt-4F1スコアが低いのは、プロンプトテンプレート2によるものです。これは正しいプロンプティングの重要性を示しています。
評価戦略において何を改善できるでしょうか?
上記の観察に基づいて、評価戦略の改善方法を考えることができます。
- おそらく、F1スコアよりも優れたメトリクスを使用し、「Semantic Answer Similarity for Evaluating Question Answering Models」(arXiv:2108.06130)で提案されているような意味類似性メトリクスを使用します。
- gpt-3.5-turboは平均的にパフォーマンスがより優れているため、評価セットを更新して以下を含めるのが良いでしょう。
- より多くのQAペアが、Cohereファミリーのモデル( commandおよび command-light)を使って生成されされています。
- すべてのLLMを使ってQAペアが生成され、さらに精査されます。
検索システムを別々に評価するとどうなるでしょうか?
情報検索(IR)は、QAパイプラインの極めて重要なステップです。上で提案された評価戦略は、全体としてパイプラインを評価します。個々のシステムを評価する方法が必要です。
ドキュメントのチャンクを使って質問と回答のペアを生成しながら、チャンク(信頼できる情報源)をペアとともに保存する必要があります。評価中、IRシステムは、与えられた質問に対して上位kチャンクを選びます。信頼できる情報源が選択されたチャンクにある場合、そのレトリーバーのスコアが決定されます。スコアは、選択されたチャンク内の信頼できる情報源のランクにも依存します。
別のレポートでこれを実際にご紹介します。
結論
LLMベースのシステムの評価はまだ開発の早期段階にあり、多くの研究が行われ、システム用ツールが多数開発されています。LLMは普及しており、多数の問題ステートメントが、いくらかの容量でLLMの活用を始めています。このレポートによって、LLMベースのシステム評価の重要性が理解されることを願っています。また、LLMベースのシステム評価の実用的な方法も提供したいと思っています。
私は、「LLMを評価するLLM」は「いずれは」ありふれたことになりますが、何らかの進展が必要であると思っています。最も体系的なシステム評価方法は、人間が生成した評価セットの使用です。おそらく、ハイブリッド評価戦略が出現するでしょう。初めにLLMを使って別のLLMを評価し、ある容量でシステムを展開し、人間からの実際のデータを収集します。それから、人間によるテストケースで評価セットを更新します。
関連リソース
A Gentle Introduction to LLM APIs
In this article, we dive into how large language models (LLMs) work, starting with tokenization and sampling, before exploring how to use them in your applications.
How to Run LLMs Locally With llama.cpp and GGML
This article explores how to run LLMs locally on your computer using llama.cpp — a repository that enables you to run a model locally in no time with consumer hardware.

COURSE: Building LLM-Powered Apps
A free, interactive course from Weights & Biases
Prompt Engineering LLMs with LangChain and W&B
Join us for tips and tricks to improve your prompt engineering for LLMs. Then, stick around and find out how LangChain and W&B can make your life a whole lot easier.
Add a comment
Iterate on AI agents and models faster. Try Weights & Biases today.