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

The Ultimate RAG Showdown (Japanese)

moritalous
August 24, 2024
16

The Ultimate RAG Showdown (Japanese)

moritalous

August 24, 2024
Tweet

More Decks by moritalous

Transcript

  1. 自己紹介 森田 和明 富士ソフト株式会社 主任 / フェロー(アーキテクト・エバンジェリスト) AWS Ambassador(2023~) AWS Top

    Engineer(2020~) AWS All Certifications Engineer(2024) AWS Community Builder(2024) 生成AIに限らず、AWS関係のアーキテクトとエバンジェリストをやってます Java Webアプリ開発出身 新しいもの好き X / Qiita / GitHub : @moritalous 2 「Jumping deer with japanese temple」 Amazon Titan Image Generatorにて生成
  2. 3

  3. Knowledge bases for Amazon Bedrock Knowledge bases for Amazon Bedrockのアーキテクチャ

    10 埋め込み 埋め込み 回答生成 テキスト 抽出 チャンク 分割 OpenSear ch Serverles s 検索 S3 質問 回答
  4. 1回のAPI呼び出しで検索と回答生成が可能 def retrieve_and_generate(question: str): response = client.retrieve_and_generate( input={"text": question}, retrieveAndGenerateConfiguration={

    "knowledgeBaseConfiguration": { "knowledgeBaseId": knowledgeBaseId, "modelArn": modelArn, "orchestrationConfiguration": { "queryTransformationConfiguration": {"type": "QUERY_DECOMPOSITION"} }, "retrievalConfiguration": { "vectorSearchConfiguration": {"overrideSearchType": "HYBRID"} }, }, "type": "KNOWLEDGE_BASE", }, ) return response 11 APIを一つ呼び出すだけで検索と回答生成が同時に処理される (検索だけを実行するAPIもあります)
  5. ナレベベの評価 • 難易度:☆☆☆ マネージメントコンソールの操作だけで構築可能 OpenSearch Serverlessを自動で作成するクイック作成もある • 機能の豊富さ:☆☆ 機能アップデートが頻繁にあり、最近はAdvanced RAGを構築する機能が追加

    RAGの最適化手法の中から厳選されたものを簡単に適用できる • 拡張性:☆ 新しい手法や新しいLLMが登場してもすぐに使えるわけではない • 日本語対応:☆ クイック作成で作成されるOpenSearch Serverlessのインデックスには、日本 語向けの設定が入っていない 12
  6. 処理1)検索クエリ生成関数 def generate_search_query(question: str): result = bedrock_runtime.converse( modelId="cohere.command-r-plus-v1:0", additionalModelRequestFields={"search_queries_only": True},

    additionalModelResponseFieldPaths=["/search_queries"], messages=[ { "role": "user", "content": [{"text": question}], } ], ) return list( map( lambda x: x["text"], result["additionalModelResponseFields"]["search_queries"], ) ) 17 検索前にユーザーの質問からクエリを作成する処 理。 Cohere Command R/R+で用意されている 機能 例:「Kendraが提供されていて、Bedrockで Claude 3.5が使えるリージョンは?」 ・Kendraが提供されているリージョン ・BedrockでClaude 3.5が提供されている リージョン
  7. 処理2)Kendra検索関数 def fetching_relevant_documents(queries: list[str]): items = [] for query in

    queries: response = kendra.retrieve( IndexId=kendra_index_id, QueryText=query, AttributeFilter={ "EqualsTo": {"Key": "_language_code", "Value": {"StringValue": "ja"}} }, ) items.extend( list( map( lambda x: {k: v for k, v in x.items() if k in ["Id", "DocumentId", "DocumentTitle", "Content", "DocumentURI"]}, response["ResultItems"], ) ) ) return items 18 Kendraで検索する処理
  8. 処理3)回答生成関数 def generating_response(question: str, documents: list[str]): result = bedrock_runtime.converse( modelId="cohere.command-r-plus-v1:0",

    additionalModelRequestFields={"documents": documents}, messages=[ { "role": "user", "content": [{"text": question}], } ], ) return result["output"]["message"]["content"][0]["text"] 19 Bedrockで回答を生成する処理 Cohere Command RのAPIと相性がよい
  9. The Ultimate RAG Showdown 21 ナレベベ KendRAG 難易度 ☆☆☆ ☆☆

    機能の豊富さ ☆☆ ☆ 拡張性 ☆ ☆☆☆ 日本語対応 ☆ ☆☆
  10. Search pipeline OpenSearch Service Ingest pipeline OpenSearchRAGのアーキテクチャ 24 Bedrock テキスト

    抽出 データソー ス 質問 回答 Bedrock SageMaker Bedrock 埋め込み 検索 リランク 回答生成 チャンク分割 埋め込み
  11. OpenSearchの検索API def search(query: str): response = client.search( index=index_name, body={ "_source":

    {"exclude": ["body_chunk_embedding"]}, "query": { "hybrid": { "queries": [ {"match": {"body_chunk": {"query": query,}}}, {"nested": { "score_mode": "max", "path": "body_chunk_embedding", "query": { "neural": { "body_chunk_embedding.knn": { "query_text": query, "model_id": titan_model_id, }}},}},],}}, "ext": { "rerank": {"query_context": {"query_text": query,},}, "generative_qa_parameters": { "llm_model": "litellm", "llm_question": query, "context_size": 4, },},}, params={"search_pipeline": "hybrid-rerank-search-pipeline"}, ) 25 context = list(map(lambda x: x["_source"], response["hits"]["hits"])) for tmp in context: del tmp["body_chunk"] return { "answer": response["ext"]["retrieval_augmented_generation"]["answer"], "context": context, } 検索パイプラインを定義しておくことで、検索 APIを呼び出すだけでRAGの結果を取得できる
  12. The Ultimate RAG Showdown 27 ナレベベ KendRAG OpenSearchRAG 難易度 ☆☆☆

    ☆☆ ☆ 機能の豊富さ ☆☆ ☆ ☆☆ 拡張性 ☆ ☆☆☆ ☆ 日本語対応 ☆ ☆☆ ☆☆
  13. 性能評価の検証条件 • AWSのWhat's Newの記事のうち、2024年に公開された日本語記事 を対象(全1,267件) • Ragasを使って質問と回答を生成しテストデータとして利用(200件) • テストデータ生成と評価はGPT-4o miniを使用

    30 Ragasが生成した質問 請求対象の使用量は AWS ConfigのAmazon CloudWatchメトリ クスでどのように表示されるようになったのでしょうか ? Ragasが生成した回答 AWS Config のデータ使用量をモニタリングするための Amazon CloudWatch メトリクスには、請求対象となる使用量のみが表示 されるようになりました 。これにより、請求対象外の使用量は表 示されなくなり、AWS Config の設定と使用量を検証し、 請求対 象となる使用量を関連コストと関連付けることができます 。
  14. 各アーキテクチャ個別の条件 31 ナレベベ KendRAG OpenSearchRAG 回答生成LLM Claude 3 Sonnet Command

    R+ Mistral Large 2 埋め込みLLM Titan Embeddings v2 未使用 Titan Embeddings v2 その他機能 • Hierarchical chunking • Break down queries • Hybrid search • Generate search query • Japanese Index • Sudachi analyzer • Reranking with Cohere Rerank3 • Hybrid search • Text chunking
  15. 性能評価の結果 33 ナレベベ (Claude 3 Sonnet) KendRAG (Command R+) OpenSearchRAG

    (Mistral Large 2) faithfulness 0.7904 0.8423 0.6197 answer_relevancy 0.6914 0.6723 0.7345 context_precision 0.9346 0.8814 0.8981 context_recall 0.9675 0.9342 0.9400
  16. 回答生成例 34 Ragasが生成した質問 請求対象の使用量は AWS ConfigのAmazon CloudWatchメトリ クスでどのように表示されるようになったのでしょうか ? ナレベベの回答

    AWS ConfigのAmazon CloudWatchメトリクスでは、今後は請 求 対象となる使用量のみが表示されるようになりました 。記録さ れていないリソースタイプの使用量は表示されなくなり、請求対 象の使用量に合わせたより明確なビューが提供されます。これに より、CloudWatchメトリクスを使ってAWS Configの設定と使用量 を検証し、請求対象となる使用量を関連コストと関連付けること ができます 。
  17. 回答生成例 35 Ragasが生成した質問 請求対象の使用量は AWS ConfigのAmazon CloudWatchメトリ クスでどのように表示されるようになったのでしょうか ? KendRAGの回答

    AWS Config は、記録されたリソースタイプごとに設定項目 (CI) を生成することにより、リソース設定の変更を監視します。 請求 対象となる使用量のみが表示されるようになった のは、今回の リリースにより、AWS Config の使用量についての Amazon CloudWatch メトリクスには、記録されたリソースタイプの使用量 のみが表示されるようになったからです。
  18. 回答生成例 36 Ragasが生成した質問 請求対象の使用量は AWS ConfigのAmazon CloudWatchメトリ クスでどのように表示されるようになったのでしょうか ? OpenSearchRAGの回答

    AWS Config と Amazon CloudWatch メトリクスの違いは、 AWS Config はリソースの設定変更を記録し、コンプライアンスを監査 するためのサービスです。一方、 Amazon CloudWatch メトリクス は、リソースのパフォーマンスデータを収集し、監視するための サービスです。AWS Config はリソースの設定変更を追跡し、コ ンプライアンスを確認するのに役立ちますが、 CloudWatch メトリ クスはリソースのパフォーマンスをリアルタイムで監視するのに 役立ちます。
  19. The Ultimate RAG Showdown 総合結果 38 ナレベベ KendRAG OpenSearchRAG 難易度

    ☆☆☆ ☆☆ ☆ 機能の豊富さ ☆☆ ☆ ☆☆ 拡張性 ☆ ☆☆☆ ☆ 日本語対応 ☆ ☆☆ ☆☆ 性能評価 ☆☆ ☆☆ ☆☆