Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Amazon Bedrock、Amazon Auroraを組み合わせたRAGで回答精度の向上に...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Naoki
February 06, 2024
Technology
15k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Amazon Bedrock、Amazon Auroraを組み合わせたRAGで回答精度の向上に取り組んでみた! 2月6日 Jr.Champions勉強会 -Top Engineers参観回
Naoki
February 06, 2024
More Decks by Naoki
See All by Naoki
AWS表彰プログラムとキャリアについて
naoki_0531
1
220
Qiita埋め込み用スライド
naoki_0531
0
27k
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
750
Amazon Bedrock、Amazon Auroraを組み合わせたRAGで回答精度の向上に取り組んでみた!
naoki_0531
4
530
Agents for Amazon BedrockとAmazon Kendraを活用してRAGを構築してみた!
naoki_0531
5
1.4k
Amazon BedrockとAmazon Kendraで専門知識から回答できる生成系AIサービスを構築!~業務効率化につなげている話~
naoki_0531
0
1k
ChatGPTを活用したAWSコスト削減
naoki_0531
0
250
Other Decks in Technology
See All in Technology
本当の”仕事”を手放せる未来が見えた
mu7889yoon
0
190
Flow 不死:AI 時代 DevOps 的不變本質
cheng_wei_chen
2
550
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
280
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
180
PostgreSQL 19 新機能概要 OSC Hokkaido 2026
nori_shinoda
0
260
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
110
はてなのサービス基盤を支える Kubernetes《足腰》
masayoshimaezawa
0
160
【FinOps】データドリブンな意思決定を目指して
z63d
2
480
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
7.7k
Zenoh on Zephyr on LiteX
takasehideki
2
130
Agile and AI Redmine Japan 2026
hiranabe
4
500
自分が詳しくない領域でAIを使う #プロヒス2026
konifar
20
7.9k
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Side Projects
sachag
455
43k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
For a Future-Friendly Web
brad_frost
183
10k
sira's awesome portfolio website redesign presentation
elsirapls
0
290
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
Amazon Bedrock、Amazon Auroraを 組み合わせたRAGで 回答精度の向上に取り組んでみた! セゾン情報システムズ 石原直樹 1 Jr.Champions勉強会 -Top
Engineers参観回 2024年2月6日
自己紹介 ⚫ 普段の業務 • グループ企業のCCoE • 社内LLM研究会にも所属 ⚫ 好きなAWSサービス •
Amazon Bedrock ⚫ トピック • 来週AWS MLS受験します! 2 @Ishihara_Naok1 X最近始めました!
宣伝! 3 https://minorun365.connpass.com/event/309029/ お助けメンバーとして皆さんを全力でサポートします! 興味ある方是非ご応募ください!
4 ⚫AWSにおけるRAG実装方法3選 ⚫↑のうち1つの回答精度向上手法 ⚫実際に精度向上したか評価(3つのRAG回答と比較) ⚫今回の検証で苦戦したこと 今日話す内容 お気軽に質問ください!
はじめに 5
RAGとは ・LLMが外部のDBから情報を取得し回答を生成する仕組み 用途例:社内ナレッジに関する質問に回答できるAIチャットボット データベース ~~~~~~ ~~~~~~ ドキュメント ④ドキュメントの一部テキストを取得 ⑤質問&テキストを受け取る ~~~~?
②質問 ③検索 ⑥回答 LLM ①前処理して追加 RAG回答生成までの流れ
AWS上でRAGを実装する方法3選 7 ※ Amazon Q For Business Useは省略しています RAGでの実装 アプローチ
1. Bedrock & Kendra※ 2. Knowledge Base for Amazon Bedrock 3. Bedrock & ベクター DB RAGのフロー処理 要開発 AWSマネージドで提供 =開発不要 要開発 ドキュメントの前処理 AWSマネージドで提供 =開発不要 AWSマネージドで提供 =開発不要 要開発 検索処理 AWSマネージドで提供 =開発不要 AWSマネージドで提供 =開発不要 要開発 DBの選択肢 Kendra OpenSearch Serveless Aurora PostgreSQL Pinecone Redis Enterprise Cloud OpenSearch Service/Serveless Document DB MemoryDB for Redis Aurora/RDS PostgreSQL Pinecone Redis Enterprise Cloud その他 3rd Party SaaS ※ AWSが提供している全文検索エンジン ※ 2023.11.29 一般利用開始
RAGでの実装 アプローチ 1. Bedrock & Kendra※ 2. Knowledge Base for
Amazon Bedrock 3. Bedrock & ベクター DB RAGのフロー処理 要開発 AWSマネージドで提供 =開発不要 要開発 ドキュメントの前処理 AWSマネージドで提供 =開発不要 AWSマネージドで提供 =開発不要 要開発 検索処理 AWSマネージドで提供 =開発不要 AWSマネージドで提供 =開発不要 要開発 DBの選択肢 Kendra OpenSearch Serveless Aurora PostgreSQL Pinecone Redis Enterprise Cloud OpenSearch Service/Serveless Document DB MemoryDB for Redis Aurora/RDS PostgreSQL Pinecone Redis Enterprise Cloud その他 3rd Party SaaS ※ AWSが提供している全文検索エンジン ※ 2023.11.29 一般利用開始 AWS上でRAGを実装する方法3選 8 それぞれの処理をカスタム実装することで精度の向上に挑戦 最小コストが低く※管理がしやすいAurora Servelessを選択 Aurora Serverless v2 0.5 ACU $43.8/月 OpenSearch Serveless 2 OCU $350.4/月 Kendra Developer Edition $810/月 ※
補足:ベクターDBを用いたRAGの処理 9 ~~~~? LLM (0.2,0.9…-0.1) ~~~~~ ~~~~~ (0.1,0.7…0.2) (0.5,0.6…0.3) ①チャンク分割
②チャンクをベクトル化 埋め込み モデル ~~~~~ ~~~~~ ~~~~~ ~~~~~ ドキュメントの前処理 ベクターDB ~~~~~~ ~~~~~~ ①質問のベクトル化 ②ベクトル検索 (0.2,0.8…-0.1) 検索処理 ③チャンクを取得 RAGでの実装 アプローチ Knowledge Base for Amazon Bedrock Bedrock & Vector DB チャンク分割処理 10~1000トークンで設定した固定サイ ズ or チャンクなし 要開発 検索処理 ベクトル検索でチャンクを検索・取得 要開発 埋め込みモデル Amazon Titan Embeddings 要開発 ※2024.1.18よりCohere Embedも選択可能に
今回検証した精度向上手法 10
検証した精度向上手法3つ 11 ① Claudeによるチャンク分割 ② LangChainの高度な検索機能 ③ 高性能な埋め込みモデル
検証で構成したRAG ① 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~
~~~~~ Amazon Bedrock Claude Amazon Aurora LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) (0.2,0.8…-0.1) Amazon Bedrock Cohere LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ Amazon Bedrock Claude ② ② ③ ③ ~~~~?
①Claudeによるチャンク分割 Amazon Aurora LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~
3. ~~~~ ~~~~~ Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) (0.2,0.8…-0.1) Amazon Bedrock Cohere LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ Amazon Bedrock Claude ② ② ③ ③ ~~~~? 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon Bedrock ① Claude
・固定サイズでのチャンク分割※ チャンク分割による回答精度への影響 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC
~~~~~~~~。 ・セクションごとのチャンク分割 ⚫ 1チャンクに異なるセクションの内容が含まれる ➢ LLMに不要な情報や断片的な情報を渡す • 回答精度が悪化 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC ~~~~~~~~。 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC ~~~~~~~~。 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC ~~~~~~~~。 ⚫ 1チャンクに1セクションの内容がまとまっている ➢ LLMにまとまった情報を渡すことができる • 回答精度の向上につながる 可能であればセクション単位で分割したい ※例:Knowledge base bedrockでのチャンク分割
Claudeによるチャンク分割※ 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC ~~~~~~~~。
Human: あなたは、与えられたテキストの、区切りを表すsectionを抽出す る優秀なアシスタントです。 ~~~~~~~ 出力されたsectionについては以下のようなJSON形式で順番に返 却することができます。 <example>{ "sections": [ str ] }</exapmle> JSON以外の文字列は返却しないでください。 ~~~~~~~ [与えられたドキュメントの内容] Assistant: { Amazon Bedrock Claude { “sections": [ “AAAA", “BBBB“, “CCCC“ ] } 1.AAAA ~~~~~~~~~ ~~~~~~~~~ ~~~~~~~~。 2.BBBB ~~~~~~~~~ ~~。 3.CCCC ~~~~~~~~。 ・XMLタグで回答例を示す ・Assistantの後に”{”を入れる ①ドキュメントを プロンプトに加える ②Claudeに与える ③セクションのリストをJSONで出力 ※Claude v2.1 なら最大200kトークン を処理可能(15万文字程度) セクションごとにチャンク分割 ④リストでドキュメントを分割 ※参考:GPT-4 Turboにドキュメントのチャンク分けを任せてみる(https://tech.explaza.jp/entry/2023/12/04/162659)
① 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~
Amazon Bedrock Claude Amazon Aurora LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) (0.2,0.8…-0.1) Amazon Bedrock Cohere LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ Amazon Bedrock Claude ② ② ③ ③ ~~~~?
2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon
Bedrock Claude ① ②LangChainの高度な検索機能 Amazon Aurora Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) (0.2,0.8…-0.1) Amazon Bedrock Cohere Amazon Bedrock Claude ③ ③ ~~~~? LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ ② LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ ②
チャンクサイズとベクトル検索の精度 ・チャンクサイズが大きい ・チャンクサイズが小さい 1.AAAA ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ XXXXXXXXXX~~~~~~。 2.BBBB ~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。 XXXXXXXXXX? ・ベクトル(意味)は近い ・検索でヒットしやすい ・情報は断片的 ・ベクトル(意味)は遠い ・検索でヒットしにくい ・情報はまとまっている 質問(クエリ) 検索対象としてのチャンクは小さく LLMに渡すチャンクは大きくしたい XXXXXXXXXX~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。 1.AAAA ~~~~~~~~~~~~~~ 2.BBBB ~~~~~~~~~~~~~~~
LangChain※のParent Document Retrieverを使用 1.AAAA ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ XXXXXXXXXX~~~~~~。 2.BBBB ~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。 XXXXXXXXXX~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。 1.AAAA ~~~~~~~~~~~~~~ 2.BBBB ~~~~~~~~~~~~~~~ 親チャンク分割 (parent_splitter) 子チャンク分割 (child_splitter) ベクターストア (vector store) ローカルディレクトリ (docstore) 親チャンクとそのIDを保管 子チャンクのベクトルと 親チャンクIDを保管 参考:https://python.langchain.com/docs/modules/data_connection/retrievers/parent_document_retriever ※LLMを使ったアプリケーション開発のOSSフレームワーク
1.AAAA ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ XXXXXXXXXX~~~~~~。 2.BBBB ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。
XXXXXXXXXX~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~。 ~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~。 1.AAAA ~~~~~~~~~~~~~~ 2.BBBB ~~~~~~~~~~~~~~~ 親チャンク分割 (parent_splitter) 子チャンク分割 (child_splitter) XXXXXXXXXX? クエリ 検索対象は子チャンク LLMに渡すチャンクは親チャンク LangChainのParent Document Retrieverを使用 ベクターストア (vector store) ローカルディレクトリ (docstore)
① 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~
Amazon Bedrock Claude Amazon Aurora LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) (0.2,0.8…-0.1) Amazon Bedrock Cohere LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ Amazon Bedrock Claude ② ② ③ ③ ~~~~?
LangChain 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~
② LangChain 1. ~~~~ ~~~~~ ~~~~~ ~~~~~ ② 2. ~~~~ 1. ~~~~ ~~~~~ ~~~~~ 3. ~~~~ ~~~~~ Amazon Bedrock Claude ① ③高性能な埋め込みモデル Amazon Aurora Amazon Bedrock Claude ~~~~? Amazon Bedrock Cohere (0.3,-0.6…0.1) (0.2,0.9…-0.1) (0.1,0.7…0.2) (0.5,0.6…0.3) (0.1,0.7…0.2) (-0.2,0.8…0.3) ③ (0.2,0.8…-0.1) Amazon Bedrock Cohere ③
埋め込みモデルにCohere Embed Multilingualを採用 ※ 「OpenAI の Embeddings API はイケてるのか、定量的に調べてみる [AWS
の Embeddings を追加]」 https://qiita.com/akeyhero/items/ce371bfed64399027c23 理由:埋め込みモデルのベンチマークMTEBの評価が高い※※ Cohere Embed Multilingual > text-embedding-ada-002 > Amazon Titan Embeddings 特徴:一度に埋め込みできる最大サイズは512トークン(Titanは8192トークン) ➢ Parent Document Retrieverと組み合わせることで、埋め込むチャンクが小さくても、 大きなチャンクをLLMに渡すことができる ※ Cohereの多言語用の埋め込みモデルを日本語で評価してみる https://hironsan.hatenablog.com/entry/2023/11/06/133504 ↑Amazon Bedrock 利用可 ↑Amazon Bedrock 利用可 ↑Azure OpenAI Service利用可
評価 24
今回検証したRAGの評価について ⚫ databricks社の記事※を参考にアレンジ ➢ 回答の正しさ、包括性、読みやすさを0~3の4段階でGPT-4に評価させる ➢ それぞれに重み付け(正しさ60%、包括性20%、読みやすさ20%)し総合評価点を算出 ⚫ 以下条件でそれぞれの回答と比較 RAGの実装方法
1. Bedrock & Kendra 2. Knowledge Base for Amazon Bedrock 3. 今回検証したRAG チャンクサイズ 設定なし 300トークン 親チャンク=セクションごとのチャンク 子チャンク=100トークン 検索処理 全文検索&セマンティック検索 ベクトル検索でチャンクを検索・取得 Parent Document Retriever 埋め込みモデル 設定なし Amazon Titan Embeddings Cohere Embed Multilingual DB Kendra Aurora Serveless v2 Aurora Serveless v2 LLM Claude v2.1 Claude v2.1 Claude v2.1 25 ※Best Practices for LLM Evaluation of RAG Applications https://www.databricks.com/blog/LLM-auto-eval-best-practices-RAG
26 今回検証したRAGの評価について ⚫ ドキュメントは「Amazon Bedrockユーザーガイドp9~p21」※ ⚫ 公式HPのFAQやドキュメントから質問を8つ用意 ※https://docs.aws.amazon.com/ja_jp/bedrock/latest/userguide/bedrock-ug.pdf Q1. Amazon
Bedrock ではどの モデルが利用できますか? Q2. Amazon Bedrockにおいてプロヴィジョニングされたスループットで利用できるモデルを教えてください。 Q3. Amazon Bedrockではどのような機能を利用することが出来ますか? Q4. Amazon Bedrock の使用を開始するにはどうすればよいですか? Q5. Amazon Bedrock Chat Playground とは何ですか? Q6. Amazon Bedrock はどの AWS リージョンで利用できますか? Q7. Amazon Bedrock の料金体系について教えてください Q8. Amazon Bedrockへのアクセス権を付与するにはどのような方法がありますか?
27 結果 RAGの実装方法 1. Bedrock & Kendra 2. Knowledge Base
for Amazon Bedrock 3. 今回検証したRAG 総合評価点の平均 (3点満点) 2.68 2.25 2.98 ⚫ 今回検証したRAGが最も高い点数となった ⚫ Knowledge Baseはドキュメントと関連しない回答があった ➢ 適切なチャンクを取得できていなかった ⚫ Kendraは包括性が低い回答が見受けられた ➢ 1ドキュメントに対する最大取得トークンが少ないことが原因? 8個の質問に対するRAG回答の評価比較
苦戦したこと 28
ClaudeからセクションJSONを出力させる処理に大苦戦 29 1. LangChainからBedrockのClaudeを呼び出すとうまくJSONを作ってくれない ➢ boto3を利用 2. Claude v2.1だとJSONに加えて文章も出力してしまう ➢
Claude instant v1だと確実にJSONだけを出力してくれる ➢ セクション抽出精度はClaude v2.1の方が優秀 ◆回答からJSONだけ抜き出す処理を追加 3. 「Amazon Bedrockユーザーガイド」のいくつかのページはセクションを抽出できない ➢ ドキュメントに “¥n¥nHuman: ¥n¥nAssistant:” がありClaudeが混乱
さいごに 30
31 ⚫ 今回検証した手法でRAGの精度を向上できた ① Claudeによるチャンク分割 ② LangChainのParent Document Retriever ③
埋め込みモデルにCohere Embed Multilinguals ⚫ 検証の詳細は後日記事にする予定です ➢ @Ishihara_Naok1フォローいただけると幸いです! まとめ
32 参考資料 1. GPTsより精度の高いRAGシステムの構築 https://speakerdeck.com/mkazutaka/gptsyorijing-du-nogao-iragsisutemunogou-zhu?slide=30 2. BedrockとAurora Serverless PostgreSQL pgvectorでRAGする
- Amazon Titan Embeddingsでベクトル入門③ https://qiita.com/cyberBOSE/items/aaf64c73f4da7e4cdb43 3. Knowledge Base for Amazon Bedrock のベクターストアとして Aurora PostgreSQL が利用可能に! https://qiita.com/hayao_k/items/45e59c1c2a183c27b20d 4. Amazon BedrockのClaudeとAmazon Kendra、AWS Lambdaを利用し、RAGを実装してみた https://dev.classmethod.jp/articles/amazon-bedrock-kendra-lambda-rag/ 5. 【langchain】retrieveで検索文章とLLMに渡す文章を別にする方法およびretrieveの保存・読込方法の検討 https://qiita.com/shimajiroxyz/items/facf409b81f59bb68775 ご清聴ありがとうございました!