Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RAGの性能を評価しよう

Koreharu
September 27, 2024

 RAGの性能を評価しよう

JAWS-UG AI/ML #21:Generative AI LT大会にて発表した資料です。

Koreharu

September 27, 2024
Tweet

More Decks by Koreharu

Other Decks in Technology

Transcript

  1. ⽬次 1. ⾃⼰紹介 2. 本⽇の概要 3. 背景 RAGについて 4. 問題意識

    5. 基本的な考え⽅ 6. 構築 1. Bedrock Prompt Manager 2. Bedrock Prompt Flow 7. 結果 8. RAG評価への応⽤ 9. まとめ 10. 課題 2
  2. ⾃⼰紹介 l ⽒名 l 藏原 これはる(Kura-Colle) l ロール l NCDC株式会社

    ITコンサルタント l 略歴 l 2021/03 京都⼤学⼤学院情報学研究科 修了 l 2021/04 建設系企業に就職(情シス職) l 2023/11 NCDC⼊社 l 趣味など l 読書(百年の孤独をちまちま読む) l 気になってる本︓記号創発システム論ー来るべきAI共⽣社会の「意味」理解に向けてー l ポケモンGO l オタ活 l 好きなAWSサービス l Amazon Bedrock, Amazon CloudWatch 3
  3. 背景 RAGについて l Retrieval-Augmented Generation (RAG) とは l モデルを⽤いて情報を検索(retrieval)する⼯程と、モデルを⽤いて回答を ⽣成(generation)する⼯程を組み合わせて利⽤することで、知識に対する

    回答を、⽂章スタイルなどを指定して⽣成するワークフロー l モデル⾃⾝がナレッジベースを学習しているわけではない l よく誤解されますが…(そのうち整理します) 5 アプリケーション +リトリーバー LLM(LLM以外の実装もある) ジェネレーター LLM ユーザー 主として⼈間 弊社の有給取 得ルールを教 えて︕ 弊社の有給取得 ルールの説明⽂を ⽣成せよ。ただし ⽂書A中の…、⽂ 書B中の…という 内容をもとに⽣成 すること はい。弊社の 有給取得ルー ルは[……]です 参考︓https://ncdc.co.jp/columns/8742/
  4. 問題意識 l 世は⼤RAG時代、だが…… 1. 開発者⾃⾝がRAGの性能を評価できない l ⾃分が知らないドメインの知識に対して、「何を質問したらいいか」「その回答は 合っているのか」を判断することができない l 新⼈によくある「何がわかってないのかがわかっていない」状態

    l 太宰治を読んだことがない⼈に、「⾛れメロスRAG」の性能評価はできない 2. 返答が微妙だった時の、分析が難しい l そもそもその返答は正しいのか︖ 誤りなのか︖ l ナレッジが⾜りないのか︖ l RAGの回答精度が低いのか︖ l モデル性能が低いのか︖ l プロンプトが邪魔をしているのか︖ l などなど… 6
  5. (参考) Guardrails for Amazon Bedrock について l Guardrails for Amazon

    Bedrock で contextual grounding check を実⾏で きるようになりました(2024/08) l Grounding: モデルからの出⼒が、ナレッジベースの情報にどれだけ基づ いているかを0~1で評価した値 l Relevance: モデルからの出⼒が、ユーザーの質問内容とどれだけ関連し ているかを0~1で評価した値 l GroundingとRelevanceを両⽅評価することで、ハルシネーションを起こ している可能性が⾼い回答をフィルターすることが可能 l Guardrailsのコンソール画⾯では値を確認することができる l Agentに組み込んだ状態で、かつcheckを通過した時の値がどこから も確認できないのが課題 l CloudWatchでモニタリングしたいんです… 8
  6. 基本的な考え⽅ 1. ナレッジの内容に関して、正しいとわかっている「質問ー回答」 のテストデータセットを⽤意する 2. RAGにテストデータセットと同じ質問を⼊⼒し、RAGの回答と データセットの回答を⽐較する l RAGの回答とデータセットの回答が⼀致しているかを評価できる l

    しかしナレッジベースとして利⽤するデータは「質問ー回答」の形式 になっていないことがほとんど 9 ナレッジ pdf txt ナレッジベース化 ・Kendra ・OpenSearch RAG開発 ・モデル選択 ・プロンプト作成 提供 QAデータセット 作成 テスト
  7. 構築 Bedrock Prompt Manager l ブラウザ上で基盤モデルを調整し、プロンプトの開発・保存ができ るサービス l 以下のプロンプトを作成した l

    基盤モデルにはClaude3.5 Sonnetを使⽤ l ⾼性能だが、費⽤が⾼い l 実際のRAG運⽤では、テストデータの作成にはSonnetを使い、RAG本 体にはHaikuなどのより廉価なモデルを使う、といったような運⽤の⼯ 夫が考えられる 10 以下の物語を読み、質問と回答のセットを5つ作成しなさい。テキストから作品名を明らかにしな さい。物語は{{topic}}です.
  8. 構築 Bedrock Prompt Flow l ノーコード・ローコードツールに近い感覚で、Bedrockの機能を⽤ いたアプリケーションを開発できるサービス l 使い勝⼿、メリット、デメリットは他のノーコード・ローコードツー ルと同様

    l 使⽤できるモジュールがまだ少ない l 簡単なルーチンの⾃動化などの処理はすぐに作成できる l S3に配置したテキストファイルを読み込み、Bedrockのプロンプトを 呼び出す処理をノーコードで作成した 11
  9. 結果 l 「⾛れメロス/太宰治」から、質問と回答のセットを⽣成させた l 後から⼈間がチェックし、問題ないことを確認 12 番号 質問 回答 内容チェッ

    ク 1 メロスはどんな職業の⼈物 ですか? メロスは村の牧⼈(⽺飼い)で す。 正 2 メロスが王城に⾏った理由 は何ですか? 暴君ディオニスを排除するた めです。 正 3 メロスの⾝代わりになった 友⼈の名前は? セリヌンティウスです。 正 4 メロスが約束の時間に遅れ そうになった原因は何です か? 豪⾬による川の氾濫、⼭賊の 襲撃、極度の疲労などです。 正︖ 5 物語の最後で、暴君ディオ ニスはどのような態度を取 りましたか? メロスとセリヌンティウスの 友情に感動し、⾃分も仲間に ⼊れてほしいと頼みました。 正
  10. RAG評価への応⽤ l 基盤モデルとして、Claude3.5 Sonnet/Calude3 Haiku/Claude(v2.1) を使った3つのエージェントを⽤意し、同じ 質問に対する回答を⽐較 13 データセット 3.5

    Sonnet 3.0 Haiku 2.1 暴君ディオニ スを排除する ためです。 メロスが王城に⾏った理 由は、暴君の⼿から市を 救うためでした。メロス は短剣を持って王城に⼊ り、捕まって王の前に引 き出されました。王に尋 問されたとき、メロスは 「市を暴君の⼿から救う のだ」と答えています。 メロスが王城に⾏った 理由は、⾃分の町を暴 君の⼿から救うためで した。メロスは短⼑を 持って王城に⼊り、王 に対して「この短⼑で 何をするつもりであっ たか。⾔え!」と問われ、 「市を暴君の⼿から救 うのだ」と答えていま す。 メロスが王城 に⾏った理由 は、市を暴君 ディオニスの ⼿から救うた めだったと述 べています。
  11. RAG評価への応⽤ l 基盤モデルとして、Claude3.5 Sonnet/Calude3 Haiku/Claude(v2.1) を使った3つのエージェントを⽤意し、同じ 質問に対する回答を⽐較 14 データセット 3.5

    Sonnet 3.0 Haiku 2.1 セリヌンティ ウスです。 メロスの友⼈で⾝代わり になった⼈物の名前はセ リヌンティウスです。セ リヌンティウスはメロス の親友であり、メロスが 約束の時間に戻ってこら れない場合に処刑される 運命を引き受けました。 … メロスの友⼈の名前は 明⽰されていませんが、 メロスの「佳き友」が、 メロスの体を皆に⾒ら れるのが嫌だと教えて やったと記述されてい ます。 申し訳ありま せんが、検索 結果にメロス の⾝代わりに なった友⼈の 名前について の情報は⾒つ かりませんで した。
  12. 定量評価 l BERTScoreを使って評価 l 時間がなかったので、ローカルpython環境で回しました l 5つの質問全ての回答を出⼒し、スコアの平均値を⽐較 l Claude 2.1が最もスコアが⾼い結果に

    l セリヌンティウスの名前も答えられていないのに l 3.5 Sonnet は回答が⻑い傾向があり、結果としてデータセットと⼀致 度が下がってしまう l 論理的な整合性だけを評価できる指標はないか︖ 15 3.5 Sonnet 3.0 Haiku 2.1 BERTScore 0.655 0.664 0.698
  13. 課題 l QAデータセット⽣成処理の⾃動化 l ナレッジを追加したタイミングで処理が⾛り、QAデータがjsonなどで吐き出される形が理想 l 本当はナレッジベースからQAデータセットを作りたい l 定量評価の⾃動化 l

    CI/CDみたいにできるのが理想 l ಀ͛ΔͳΞΞʂʂ ίʔσΟϯά͔Βಀ͛ΔͳΞΞʂʂʂ l AWS Step Functions Workflow Studio…? l txtファイル以外への対応 l 現状prompt flowで読み込めるのはutf-8エンコーディングされたプレーンテキストのみ l トークン数の上限対応 l ⼀度に20万⽂字程度が限界 l 性能向上のための分析の切り分け l QAデータセットが間違っている可能性への対応 l そもそも「正しい」って何 l 哲学 17