Slide 1

Slide 1 text

RAGの性能を評価しよう ´ JAWS-UG AI/ML #21 ´ 藏原 これはる(NCDC株式会社) ´ 2024 / 09 / 27

Slide 2

Slide 2 text

⽬次 1. ⾃⼰紹介 2. 本⽇の概要 3. 背景 RAGについて 4. 問題意識 5. 基本的な考え⽅ 6. 構築 1. Bedrock Prompt Manager 2. Bedrock Prompt Flow 7. 結果 8. RAG評価への応⽤ 9. まとめ 10. 課題 2

Slide 3

Slide 3 text

⾃⼰紹介 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

Slide 4

Slide 4 text

本⽇の概要 l RAGの回答精度の評価に関する話 l 「RAGとは」「RAGの構築」に関する話はしません l ナレッジからQAデータセットを作成し、テストを⾏ってみた l QAデータセットの作成に、Amazon Bedrockの各サービスを利⽤ l ノーコードで処理を開発できたため、⾮プログラマでも実⾏可能 4

Slide 5

Slide 5 text

背景 RAGについて l Retrieval-Augmented Generation (RAG) とは l モデルを⽤いて情報を検索(retrieval)する⼯程と、モデルを⽤いて回答を ⽣成(generation)する⼯程を組み合わせて利⽤することで、知識に対する 回答を、⽂章スタイルなどを指定して⽣成するワークフロー l モデル⾃⾝がナレッジベースを学習しているわけではない l よく誤解されますが…(そのうち整理します) 5 アプリケーション +リトリーバー LLM(LLM以外の実装もある) ジェネレーター LLM ユーザー 主として⼈間 弊社の有給取 得ルールを教 えて︕ 弊社の有給取得 ルールの説明⽂を ⽣成せよ。ただし ⽂書A中の…、⽂ 書B中の…という 内容をもとに⽣成 すること はい。弊社の 有給取得ルー ルは[……]です 参考︓https://ncdc.co.jp/columns/8742/

Slide 6

Slide 6 text

問題意識 l 世は⼤RAG時代、だが…… 1. 開発者⾃⾝がRAGの性能を評価できない l ⾃分が知らないドメインの知識に対して、「何を質問したらいいか」「その回答は 合っているのか」を判断することができない l 新⼈によくある「何がわかってないのかがわかっていない」状態 l 太宰治を読んだことがない⼈に、「⾛れメロスRAG」の性能評価はできない 2. 返答が微妙だった時の、分析が難しい l そもそもその返答は正しいのか︖ 誤りなのか︖ l ナレッジが⾜りないのか︖ l RAGの回答精度が低いのか︖ l モデル性能が低いのか︖ l プロンプトが邪魔をしているのか︖ l などなど… 6

Slide 7

Slide 7 text

RAG評価の考え⽅ 7 RAGの性能 を評価する Q-Aの データセットが あるか︖ RAG独⾃の評価⼿法 ragas contextual grounding check テキスト⽣成タスクの 評価⼿法 ROUGE BLEU BERTScore

Slide 8

Slide 8 text

(参考) 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

Slide 9

Slide 9 text

基本的な考え⽅ 1. ナレッジの内容に関して、正しいとわかっている「質問ー回答」 のテストデータセットを⽤意する 2. RAGにテストデータセットと同じ質問を⼊⼒し、RAGの回答と データセットの回答を⽐較する l RAGの回答とデータセットの回答が⼀致しているかを評価できる l しかしナレッジベースとして利⽤するデータは「質問ー回答」の形式 になっていないことがほとんど 9 ナレッジ pdf txt ナレッジベース化 ・Kendra ・OpenSearch RAG開発 ・モデル選択 ・プロンプト作成 提供 QAデータセット 作成 テスト

Slide 10

Slide 10 text

構築 Bedrock Prompt Manager l ブラウザ上で基盤モデルを調整し、プロンプトの開発・保存ができ るサービス l 以下のプロンプトを作成した l 基盤モデルにはClaude3.5 Sonnetを使⽤ l ⾼性能だが、費⽤が⾼い l 実際のRAG運⽤では、テストデータの作成にはSonnetを使い、RAG本 体にはHaikuなどのより廉価なモデルを使う、といったような運⽤の⼯ 夫が考えられる 10 以下の物語を読み、質問と回答のセットを5つ作成しなさい。テキストから作品名を明らかにしな さい。物語は{{topic}}です.

Slide 11

Slide 11 text

構築 Bedrock Prompt Flow l ノーコード・ローコードツールに近い感覚で、Bedrockの機能を⽤ いたアプリケーションを開発できるサービス l 使い勝⼿、メリット、デメリットは他のノーコード・ローコードツー ルと同様 l 使⽤できるモジュールがまだ少ない l 簡単なルーチンの⾃動化などの処理はすぐに作成できる l S3に配置したテキストファイルを読み込み、Bedrockのプロンプトを 呼び出す処理をノーコードで作成した 11

Slide 12

Slide 12 text

結果 l 「⾛れメロス/太宰治」から、質問と回答のセットを⽣成させた l 後から⼈間がチェックし、問題ないことを確認 12 番号 質問 回答 内容チェッ ク 1 メロスはどんな職業の⼈物 ですか? メロスは村の牧⼈(⽺飼い)で す。 正 2 メロスが王城に⾏った理由 は何ですか? 暴君ディオニスを排除するた めです。 正 3 メロスの⾝代わりになった 友⼈の名前は? セリヌンティウスです。 正 4 メロスが約束の時間に遅れ そうになった原因は何です か? 豪⾬による川の氾濫、⼭賊の 襲撃、極度の疲労などです。 正︖ 5 物語の最後で、暴君ディオ ニスはどのような態度を取 りましたか? メロスとセリヌンティウスの 友情に感動し、⾃分も仲間に ⼊れてほしいと頼みました。 正

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

RAG評価への応⽤ l 基盤モデルとして、Claude3.5 Sonnet/Calude3 Haiku/Claude(v2.1) を使った3つのエージェントを⽤意し、同じ 質問に対する回答を⽐較 14 データセット 3.5 Sonnet 3.0 Haiku 2.1 セリヌンティ ウスです。 メロスの友⼈で⾝代わり になった⼈物の名前はセ リヌンティウスです。セ リヌンティウスはメロス の親友であり、メロスが 約束の時間に戻ってこら れない場合に処刑される 運命を引き受けました。 … メロスの友⼈の名前は 明⽰されていませんが、 メロスの「佳き友」が、 メロスの体を皆に⾒ら れるのが嫌だと教えて やったと記述されてい ます。 申し訳ありま せんが、検索 結果にメロス の⾝代わりに なった友⼈の 名前について の情報は⾒つ かりませんで した。

Slide 15

Slide 15 text

定量評価 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

Slide 16

Slide 16 text

まとめ l RAGの性能評価を⾏った l QAデータセットをナレッジから作成し、RAGに対して質問を投げるこ とで、回答の品質評価を⾏った l QAデータセットを正解データとすることで、「なんとなく正しそう」 「データが取れてそう」という雰囲気ベースの評価以上に正確な定量 評価が⾏えるかも l QAデータセットの作成に際して、Amazon Bedrockの新サービス を活⽤した l ノーコードで作業を完結できた 16

Slide 17

Slide 17 text

課題 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

Slide 18

Slide 18 text

Thank you! ご質問は koreharu.kurahara(at)ncdc.co.jp または 弊社お問い合わせ(https://ncdc.co.jp/contact/)まで 18