W&Bを用いたRAGの構築・評価ステップ
このレポートは、RAGを実際に手を動かしながら説明し、W&Bと一緒に使用する方法を説明しています。
Created on October 31|Last edited on February 7
Comment
Overview
RAGは、LLM(Large Language Model)ベースのアプリケーションの中で最も人気のあるものの1つになっています。このレポートでは、W&Bを使用してRAGを開発および評価する方法を探ります。RAGを構築する詳細に興味がある方には、動画のトレーニングも提供されているので、英語ではありますが、是非合わせて参照してください。
このレポートでは、「Wandbot」と呼ばれるLLM(Large Language Model)を活用したドキュメンテーションアプリケーションを評価する方法について見ていきます。もしまだWandbotを使ったことがない方は是非wandbjp.slack.comの#wandbotのチャネルにいき、試してみてください。
💡

このレポートは、以下のステップで進めていきます。
Step 0:最初に、wandbログインから始めましょう。
Step 1:RAGにはさまざまなプロセスが関与していますが、このレポートでは最初にTracesと呼ばれる機能を使用してそれらを可視化します。数百のサンプルの評価に進む前に、予測が正確かどうかをいくつか評価しましょう。問題がある場合、Tracesは問題がどのフェーズで発生しているかを特定するのに役立ちます。
Step 2:その後、RAGの評価に移ります。評価方法はさまざまですが、ここではモデルベースの評価に特に焦点を当てます。
Step 3:最後に、Sweepsを使用して、最も有望なパターンを特定しましょう。
Step0: Wandb セットアップ
Wandbのセットアップについては、 こちらのドキュメントを参照してください。W&Bのdedicated クラウド、VPC、またはオンプレミスを使用している場合は、こちらのドキュメントおよび次の図を参照してください。

Step1: Tracesを用いた中間プロセスの可視化
サンプルコードはこちらにあります。一緒に走らせながら、学んでいきましょう。
LangChainおよびTracesとの統合
LangChainを使用する際にos.environ["LANGCHAIN_WANDB_TRACING"] = "true"と設定することで、簡単に結果を記録できます(official document).。
TracesはWeaveダッシュボードでも使用される予定です。そこでは、長い文章をより美しく可視化できます(この機能はプライベートベータ版です)
💡
Run: solar-flower-61
1
Artifactsを用いたドキュメントやプロンプトテンプレートの保存
- ドキュメントやプロンプトテンプレートなどのデータを保存し、Artifactを使用してバージョン管理することができます (official document).。

実験の比較
さまざまな方法を試してみましょう!

Step2: LLMベースの評価
LLM(Large Language Model)ベースのシステムを評価するのは簡単ではありません。それには複数のステップと数週間にわたる深い考察が必要です。 "How to Evaluate, Compare, and Optimize LLM Systems?" では、LLMベースのシステムの評価について詳しく説明しています。このレポートでは詳細には触れませんが大まかに評価の方法は以下の3つの主要なカテゴリに分かれます
目視のよる1つ1つの評価:モデルの性能を評価するために一つ一つ目で確認する評価を行い、おおまかに所望の回答が得られるかを確認にします。
教師ありデータを用いた評価:評価のための注釈付きデータセットを人間が生成し、評価する方法です。評価の実行としては、人間が行う方法と下記のようにモデルが行う方法があります。
LLMsベースの評価:gpt4などの強力なLLMを活用して、評価をします。QAボットの場合、LLMに質問と回答のペアを生成するところもLLMに行わせる手法があります。
ステップ1では、評価の「目視のよる1つ1つの評価」フェーズの一部をすでに実施してきました。ステップ2では、LLMを使用してRAGを評価しましょう。
LLMを用いて、評価データセットを生成
まず最初に、評価データセットを作成しましょう。QAボットを実際に評価するには、評価セット内の質問と回答のペアが必要です。このようなデータセットはLLMを用いて作成することもできます。このアプローチには明らかな利点と制限があります。
利点:
- スケーラビリティ:必要に応じて大量のテストケースを生成できます
- 柔軟性:テストケースは特定のエッジケースや複数のドメインに適用でき、関連性と適用可能性を評価できます
- 低コスト:LLMは複数のドキュメントから情報を迅速に収集し、低コストで実行できます。
制限:
- 医療分野などの専門的なラベラーが必要なユースケースでは機能しません。
- 実際のユーザーの使用に対するパフォーマンスを評価しません。この方法では予期しない状況やエッジケースに対処できません。
-
評価データセットを生成するためのツール
Langchainには、質問と回答のペアを特定の文書から抽出するQAGenerationChainと呼ばれる便利なチェーンがあります。データローダーを使用して文書を読み込み(こちらで解説されています)、小さなチャンクに分割し、チェーンを使用してQAペアを抽出できます。
# scriptの変更ポイント:# 以下の "eval_artifact","prompt_version","doc_version"のpathをstep1, 2で作成したartifactsのpathに置き換えてくださいconfig = {"model_name": "gpt-3.5-turbo", # model used for creating answers"eval_model":"gpt-4", # model used for evaluation"eval_artifact": '' , # evaluation data artifact"prompt_version":'', # prompt artifact path"doc_version":'', # doc artifact path"embedding_method":"faiss",}
Run: gentle-feather-64
1
評価データセットを用いてRAGを評価
QAペアの評価セットを用意することができたので、LLMベースのQAボットに質問の予測を生成させることができます。予測された答えと真の答えが与えられた場合、LLMを使用して、予測が真の答えと比べてどれほど良いかを評価することができます。
二つのテキスト(真の答えと予測された答え)の一致率をllmに判断させ、そのスコアを0から10まで付けることができます。
幸い、LangchainにはQAEvalChainというチェーンがあり、質問と真の答え、予測された答えを入力して、それらのスコアや「CORRECT / INCORRECT」のラベルを出力することができます。
Run: divine-moon-71
1
Step3: 最適化
Sweepsは、CL・notebookで実装方法が若干異なりますが、下記はnotebookの例です。
まず、sweep_configで、サーチ方法を選定し、その後評価メトリックを選択し、大きくなる方が良いのか、小さくなる方が良いのかを設定します。
その後、parameterのサーチ範囲をきめ、
wandb.agent(sweep_id=sweep_id, function=model_pipeline_sweep, count=10)のcountで実行回数を決めて、複数のパターンを自動実行します。
例えば、gpt-4に匹敵するgpt-3.5-turboの設定を探してみましょう。
# scriptの変更ポイント:# 以下の "eval_artifact", "prompt_version","doc_version"のpathをstep1, 2で作成したartifactsのpathに置き換えてください# prompt_versionについては、2 version作成していますが、2 versionとも記載しましょう。sweep_config = {'method': 'random','metric': {'name': 'model_mean_score','goal': 'maximize'},}parameters_dict = {"model_name": {'values': ["gpt-3.5-turbo", "gpt-4"]},"eval_model": {'value': "gpt-4"},"eval_artifact": {'value': ''},"prompt_version":{'values': ["",""]},"doc_version":{'value': ""},"embedding_method":{'values': ["chroma","tfidf","faiss"]}}sweep_config['parameters'] = parameters_dict
Sweep: 4mwvu0r0 1
10
Sweep: 4mwvu0r0 2
0
参考文献
英語にはなりますが、下記のレポートも参考にしてください。
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.
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.
How to Evaluate, Compare, and Optimize LLM Systems
This article provides an interactive look into how to go about evaluating your large language model (LLM) systems and how to approach optimizing the hyperparameters.
How to Evaluate an LLM, Part 1: Building an Evaluation Dataset for our LLM System
Building gold standard questions for evaluating our QA bot based on production data.
How to Fine-Tune an LLM Part 1: Preparing a Dataset for Instruction Tuning
Learn how to fine-tune an LLM on an instruction dataset! We'll cover how to format the data and train a model like Llama2, Mistral, etc. is this minimal example in (almost) pure PyTorch.
How to evaluate an LLM Part 3: LLMs evaluating LLMs
Employing auto-evaluation strategies to evaluate different component of our Wandbot RAG-based support system.

Training and Fine-tuning Large Language Models (LLMs)
Explore the architecture, training techniques, and fine-tuning methods for creating powerful LLMs. Gain theory and hands-on experience from Jonathan Frankle (MosaicML), and other industry leaders, and learn cutting-edge techniques like LoRA and RLHF.

Building LLM-Powered Apps
Learn how to build LLM-powered applications using LLM APIs, Langchain and W&B Prompts. This course will guide you through the entire process of designing, experimenting, and evaluating LLM-based apps.
Google colabが使えない方向けのファイル
Add a comment