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

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 難易度

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