【Knowledge Bases for Amazon Bedrock】矛盾した内容のドキュメントを同期するとどう出力されるのか検証してみた
はじめに
お疲れ様です。
おおくまです。
今回は、「【Knowledge Bases for Amazon Bedrock】矛盾した内容のドキュメントを同期するとどう出力されるのか検証してみた」ということで、Knowledge Bases for Amazon Bedrockについて学習する中で、個人的に気になったことを検証してみました。
少しでも皆様の参考になりますと幸いです。
対象読者
注意点
Amazon Bedrockとは
Amazon Bedrockとは、AWSが提供する生成AIサービスです。
Amazon Bedrockを利用することで、AnthropicのClaudeシリーズや、MetaのLlamaシリーズなどの生成AIモデルを手軽にサーバーレスで使用することができます。
Knowledge Bases for Amazon Bedrockとは
Knowledge Bases for Amazon Bedrockとは、Amazon Bedrockで提供されているサービスの1つで、S3やWeb Crawlerなどをデータソースとして同期することで、簡単にRAGアプリを構築することができます。
検証環境
今回、以下の書籍と記事を参考にKnowledge Bases for Amazon Bedrockについて学習しました。
今回の検証したKnowledge Bases for Amazon Bedrockは以下のように構成しました。
S3に格納するためのドキュメントとして、以下のような文章が書かれているPDFを2つ用意しました。
株式会社おおくまの2023年の年間売上が1000億円であることを示すPDF①
株式会社おおくまの2023年の年間売上が2000億円であることを示すPDF②
検証
今回、プロンプトは、
「株式会社おおくまの2023年の年間売上はいくらですか?」
で、質問しました。
ドキュメント同期前
ドキュメント同期前の出力結果は以下のようになりました。
情報が無いため、出力できない旨が出力されました。
PDF①のみ同期
PDF①のみ同期した時の出力結果は以下のようになりました。
PDF①の内容が反映され、1000億円である旨が出力されました。
PDF②を追加で同期
PDF②を追加で同期した時の出力結果は以下のようになりました。
PDF①とPDF②で、矛盾した情報が提供されていること、2000億円の情報の方がスコアが高いこと、などが出力されました。
その後、複数回、同期や質問を試してみましたが、同じような出力結果でした。
てっきり、質問するたびに、1000億円と2000億円の情報がランダムで出力されるのかと思っていましたが、そうではないようです。
また、今回のパターンでは、2000億円の情報の方がスコアが高いようです。
どうして1000億円よりも2000億円の情報の方がスコアが高いのでしょうか。
ここで、私の中で、スコアが高くなった要因は以下の2つではないかという仮説が生まれました。
1.最後に同期した情報が優先される
2.ドキュメントの作成日時が新しい方が優先される
では、まず、1つ目の仮説である「最後に同期した情報が優先される」を検証してみます。
PDF①をS3から削除し、PDF②のみ同期
PDF①をS3から削除し、PDF②のみ同期した時の出力結果は以下のようになりました。
PDF②の内容が反映され、2000億円である旨が出力されました。
PDF①を再度同期
PDF①を再度同期した時の出力結果は以下のようになりました。
PDF①を後から同期したのにも関わらず、先ほどと同じで、2000億円の方がスコアが高い旨が出力されました。
こうなると、1つ目の仮説である「最後に同期した情報が優先される」は違うようです。
次に、2つ目の仮説である「ドキュメントの作成日時が新しい方が優先される」を検証してみます。
PDF①を再作成し、再度同期
仮説の2つ目である「ドキュメントの作成日時が新しい方が優先される」を検証するために、PDF①をS3から削除し、PDFファイルを再作成し、再度同期した時の出力結果は以下のようになりました。
PDF①を再作成したにも関わらず、2000億円の方がスコアが高い旨が出力されました。
こうなると、2つ目の仮説である「ドキュメントの作成日時が新しい方が優先される」も違うようです。
なぜPDF②の方がスコアが高いのかをAIに聞いてみた
最後に、AIに、なぜPDF②の方がスコアが高いのかを
「「株式会社おおくまの2023年の年間売上はいくらですか?」という質問に対して、2000億円の文書の方がスコアが高い理由を教えてください」
というプロンプトで質問してみました。
この中で、情報の新しさは、特にPDFに明記していないですし、先ほど検証した結果、スコアに影響していないことは分かっています。
どちらのPDFも私が作成したもののため、情報源は同じで、追加の情報もありません。
そうなると、4番の質問との関連性が高いという理由が最も妥当であると思います。
「株式会社おおくまの2023年の年間売上はいくらですか?」というプロンプトをAIがベクトル化し、同じくPDFの内容もベクトル化し比較した結果、PDF②の方がプロンプトとの関連性が高いと判断されたので、スコアが高かったのではないかと思います。
各PDFに更新日を追記して再度同期
PDF①、PDF②に以下のように更新日を追記してみました。
2024年8月1日更新と追記したPDF①
2024年7月1日更新と追記したPDF②
現在S3にアップロードされているPDFを全て削除し、再度、これら2つのPDFを同期し、
「株式会社おおくまの2023年の年間売上はいくらですか?」
というプロンプトで質問してみました。
すると、以下のように出力されました。
それぞれのPDFから売上と更新日が取得できており、その結果、PDF①の情報の方が最新と判断されています。
まとめ
今回の検証結果から、Knowledge Bases for Amazon Bedrockで構築したRAGアプリは、矛盾した内容のドキュメントを同期すると、矛盾した内容のドキュメントがあること、どの情報がスコアが高いかなどを出力してくれることが分かりました。
また、スコアには、同期した順番やドキュメントの作成日時が関係していないことも分かりました。
ドキュメントに更新日を追記することで、きちんと最新の情報を取得できることも分かったのは、とても大きい収穫でした。
今後、RAGアプリを構築する際には、このような点にも注意して、より良いRAGアプリを構築していきたいと思います。
今回の検証結果が、皆様の参考になれば幸いです。
最後までお読みいただき、ありがとうございました。
参考文献
Discussion