NotebookLMを使ってRAGについて勉強してみた
Anycloudの山下です!
最近は生成AIを仕事で使っていると、プロンプトエンジニアリングだけでは精度を上げる限界があると感じています。
そこで、前々から気になっていたRAG(Retrieval-Augmented Generation)という技術を使ってより精度を上げられないかを考えました。
まずは記事を読んだりしながら勉強を始めようと思いましたが、せっかくなのでGoogleのNotebookLMというツールを使って勉強しその過程を記事にできたらと思います!
はじめる前にNotebookLMを解説
NotebookLMはGoogleが開発するリサーチアシスタントAIで、URLやPDFなどの資料をアップロードするだけで、AIが資料のことをなんでも答えてくれるようになります。
要するに、NotebookLMは、今まで一方的に受け取っていた情報(本や記事など)に質問ができる先生がついて、一緒に読み進めていけることを実現したツールです。
詳細については以前NotebookLMについては紹介した記事が書かれているので見てみてください!
学習スタート
まずは参照するためのデータを選びます。
RAGをGoogleで調べ、以下の情報が信頼できそうと判断しこれらの記事を読み込みます。
- RAGが初めて提唱された論文:https://arxiv.org/pdf/2005.11401
- nvidiaから出されているRAGに関する解説記事:https://blogs.nvidia.co.jp/2023/11/17/what-is-retrieval-augmented-generation/
- RAGにおけるドキュメント検索精度向上について(概要編):https://zenn.dev/sompojapan_dx/articles/eb755a18e893ce
- RAGにおけるドキュメント検索精度向上について(実践編):https://zenn.dev/sompojapan_dx/articles/ef594abff3a3c0
- 【未経験者大歓迎】RAG超入門:AWSが推奨するRAGを体験するハンズオン:https://qiita.com/moritalous/items/61f91039c13aeb9a51eb
- RAGの実案件に取り組んできた今までの知見をまとめてみた:https://dev.classmethod.jp/articles/rag-knowledge-on-real-projects/
あまりソースが多すぎても精度が下がってしまうと思ったので、理論的な部分、概要の解説、実務で実践する場合の知見が入るようにソースを選択しました。
まずは “よくある質問” の生成から
NotebookLMでは最初によくある質問を生成することができるので、まずは生成してみることに。
生成結果
- RAGとは何ですか?
RAG (Retrieval Augmented Generation) は、外部ソースから取得した情報を用いて、生成 AI モデルの精度と信頼性を向上させる技術です。従来の言語モデルは、学習データに含まれる知識のみに基づいて回答を生成するため、最新の情報や専門性の高い情報を含む回答が難しい場合がありました。RAG は、ユーザーの質問に対して関連性の高いドキュメントを外部データベースから検索し、その情報を参照して回答を生成することで、より正確で信頼性の高い回答を生成します。
- Amazon Kendra と RAG はどのように連携するのですか? (中略)
- Advanced RAG とは何ですか? Advanced RAG は、従来の RAG のアーキテクチャを改良し、回答精度を向上させるための手法です。従来の RAG では、質問応答の精度が、検索されたドキュメントの品質に大きく依存していました。Advanced RAG では、生成 AI モデルが検索結果の関連性を評価し、より適切なドキュメントを選択することで、回答精度を向上させています。
- RAG を使うメリットは何ですか? RAG を使うメリットは、生成 AI モデル単体で使用する場合と比べて、以下の点が挙げられます。 正確性と信頼性の向上: 外部データソースから最新の情報や専門性の高い情報を取得することで、より正確で信頼性の高い回答を生成できます。 ハルシネーションの抑制: 生成 AI モデルは、学習データに存在しない情報を生成してしまう「ハルシネーション」を起こす可能性がありますが、RAG を利用することで、外部データソースを参照して回答を生成するため、ハルシネーションのリスクを軽減できます。 説明責任の向上: 回答の根拠となったドキュメントを明示することで、ユーザーは回答の信頼性を確認することができます。
- Amazon Kendra を利用する際に、クロール対象の URL を制限する方法はありますか? (中略)
- Amazon Kendra でサポートされているユーザーアクセス制御の方法は何ですか? (中略)
- Knowledge Bases for Amazon Bedrock では、どのようなベクトルデータベースを利用できますか? (中略)
- Amazon Kendra の検索分析で使用できるメトリクスには、どのようなものがありますか? (中略)
結果は一部の記事にかなり引っ張られているようにも見えます。しかし、最初に聞きたい質問はいくつか出せていそうです。
RAGについては端的にまとめられていて、いい感じですね。ただ、この説明だけでは少し分かりづらいので具体例も踏まえて解説してもらいましょう。
RAGとは?
「初学者にもわかりやすいように具体事例も入れてRAGについて説明して」と聞いてみます。
回答
RAG(Retrieval Augmented Generation) は、質問応答システムにおいて、大規模言語モデル(LLM)の能力を拡張する技術です。LLMは大量のテキストデータから言語を学習し、質問に対して自然な文章で回答することができます。しかし、LLM単体では、その学習データに含まれていない最新の情報や、特定の分野の専門知識に関する質問に答えることはできません。 RAGは、LLMが外部のデータソースを参照することで、より正確で信頼性の高い回答を生成できるようにする技術です。
具体例
例えば、あなたが自動車保険について詳しく知りたいとします。RAGを搭載したチャットボットに「飛び石による車の修理費用は保険でカバーされますか?」と質問するとします。
質問の分析と検索クエリの生成: RAGはまず、質問を分析し「飛び石」「修理費用」「保険」「自動車保険」などのキーワードを抽出します。そして、これらのキーワードを組み合わせて、外部データソースを検索するためのクエリを生成します。
関連情報の検索: 生成されたクエリをもとに、外部データソース(例えば、保険会社のウェブサイトや約款などのドキュメントデータベース)から、関連する情報が書かれた文書を検索します。
回答の生成: 検索された文書から、質問に対する回答に関連する部分を抽出し、LLMに入力します。LLMは、これらの情報と自身の持つ言語知識を組み合わせて、自然な文章で回答を生成します。例えば、「飛び石による車の修理費用は、車両保険の補償対象となります。」といった回答を生成します。
メリット
- 最新の情報に対応可能: 外部のデータソースを参照するため、LLM単体では保持できない最新の情報にも対応できます。
- ハルシネーションのリスク軽減: 情報源に基づいた回答を生成するため、LLMが事実とは異なる内容を生成してしまう「ハルシネーション」のリスクを軽減できます。
- 透明性の向上: 回答の根拠となった情報源を明示することで、ユーザーは回答の信頼性を確認することができます。
高度なRAG
- 検索精度の向上: 質問に対してより適切な文書を検索するために、さまざまな検索技術が開発されています。例えば、単語の意味をベクトルで表現することで、より高度な検索を可能にする「ベクトル検索」などが挙げられます。
- 回答生成の改善: 回答の質を向上させるために、LLMに入力する情報や指示を工夫する「プロンプトエンジニアリング」という技術も重要となります。
- 検索結果の関連度評価: 複数の文書が検索された場合、それぞれの文書が質問に対してどれほど関連性が高いかを評価し、より関連性の高い文書を優先的にLLMに入力することで、回答の精度を向上させることができます。
課題
- 検索精度の向上: 質問に適切な文書を検索できるかどうかが、回答の精度に大きく影響します。より高度な検索技術の開発が必要です。
- 計算コスト: 大規模なデータソースからの検索や、LLMによる回答生成は、計算コストがかかります。効率的な処理方法の開発が求められます。
- 倫理的な考慮: 情報源の偏りや、誤った情報の拡散など、倫理的な問題にも注意が必要です。
まとめ
RAGは、LLMの可能性をさらに広げる技術として期待されています。今後、技術開発が進むことで、より高度な質問応答システムが実現すると考えられます。
やや長いですが、いい感じに回答してくれました!
つまりRAGとは、生成AIがもともと知っている情報の範囲を広げる技術のことみたいですね。
AIが答えられない質問が来たとき、外からピンポイントで必要な情報を探して持ってくる。そして、その新しい情報をAIに教えてあげることで、AIはもともと答えられなかった質問にも対応できるようになるというイメージで理解しました。
これは、AIの「頭の良さ」を一時的に増強するようなもので、最新の情報や専門的な内容にも柔軟に対応できるようにする便利な方法みたいです。
実際に活用するには?
RAGの概要は理解できました。もう少し踏み込んでその仕組みを解説してもらうのも面白そうですが、今回は実践重視で学んでいきます。
RAGは事前に保管したデータを参照して生成AIに必要な情報を与える点が重要だと考えられます。しかし、ここで疑問が浮かびます。そのデータ、どう保管すればいいのでしょうか?
効果的なデータ保管方法や検索手法について、もっと掘り下げて聞いてみます。
まずはRAGの精度が何によって左右されるのかを見ていきます。これを見ることでRAGの何に対して調べたらより実践に近い形で使えるのかのあたりがつけられると思います。
「RAGの精度を左右するものは何でしょうか?特に重要なもののみに絞って回答してください」と聞いてみます。
回答
RAGの精度を左右する最も重要な要素は、適切な関連ドキュメントを検索できるかどうかです。
正しいドキュメントが検索できない場合、LLMは正確な回答を生成できません。逆に、検索精度が高ければ、正しい回答を生成できる可能性が高まります。
ソースでは、検索精度の重要性を示すために、ドキュメントの検索精度と正答率の関係を示した実験結果を紹介しています。 この実験結果からも、RAGの精度向上には、検索精度の向上が不可欠であることが分かります。
RAGの精度を左右する最も重要な要素は検索精度だということがわかりました。つまり、必要な情報をいかに正確に見つけ出せるかが、RAGの性能を決定づけるようです。
では、正確な検索を実現するために、データをどのように保管し、どのように取り出せばいいのでしょうか?
検索精度を高めるには、データの保管方法と取り出し方が密接に関係しているはず。なので、これらの点について詳しく聞いてみます。
RAGのデータ管理、どうすればいい?
「RAGではデータを参照し答えると思います。このデータの保管方法や使用すべきサービスを教えてください。」と聞いてみます。
回答
RAGのデータ保管方法と推奨サービスは、データの種類と用途によって異なります:
- 大規模なテキストデータベース:
- 保管方法:文章を一定の長さで分割し、各チャンクをベクトル化して保存。
- 推奨サービス:ベクトルデータベース(Faiss、Pinecone、Amazon OpenSearch Serverlessなど)
- 社内ドキュメント:
- 保管方法:テキスト形式(Markdownなど)での保存が推奨。
- 推奨サービス:エンタープライズ検索サービス(Amazon Kendra、Azure AI Searchなど)
- FAQデータ:
- 保管方法:質問と回答のペアでデータベースに保存。
- 推奨サービス:Amazon Kendra、データベースサービス
- ユーザーからのフィードバックデータ:
- 保管方法:データベースに保存。
- 推奨サービス:データベースサービス
データの種類によって、保管方法も使うサービスも変えた方がいいみたいです。
大量のテキストデータを扱うときはベクトルデータベース、社内文書を管理するときはエンタープライズ検索サービスがおすすめみたいです。
RAGに関するまとめ
ここまでRAGについて色々と調べてきましたが、やっとその全体像が見えてきた気がします。まとめてみると以下のようになるかと思います。
- RAGって結局のところ、AIの知識を一時的に増強する技術。AIが知らないことを聞かれたときに、外部から情報を持ってきて「ほら、これ見て答えてね」という感じで教えてあげる仕組みみたいです。
- 大事なのは、AIに渡す情報をどう選ぶか。これが RAGの精度を左右する最大の要因みたいです。つまり、いかに適切な情報を見つけ出せるかが鍵になるわけです。
- また、その情報をどう保管するかも重要。テキストデータならベクトルデータベース、社内文書ならエンタープライズ検索サービスみたいに、データの種類によって使うツールを変えるのがいいみたいです。
- RAGの流れは以下のようになっている
- ユーザーから入力がある(ex: 質問)
- 入力に対して関連しそうなデータを検索する
- データベースからデータを取得する
- プロンプトに取得したデータを追加し生成AIに投げる
- 出力をユーザーに返す
- 特にb部分が全体の質を大きく左右するため、Amazon KendraやElasticsearchのような高度な検索エンジンを使うことを検討する(自前で作るなら、単語のベクトル化とか、TF-IDFみたいな技術も使えるかも)
- c部分でベクトルデータベースの出番
結局のところ、RAGは単にAIの能力を拡張するだけじゃなくて、人間の知識とAIの能力をうまく組み合わせる技術なんだなと思いました。これからAIを使う上で、RAGの考え方はますます重要になりそうです。
まとめ
NotebookLMを使ってRAGを学んでみた感想としては、このツールはすごく優れているものの、体系的に何かを学ぶには少し物足りない部分があると感じました。特に、何がわからないのかがわからない状態では質問をするのが難しいです。
そのため、体系的に何かを学ぶ場合は、まず概要がまとまった記事を一読し、その後でより専門的な部分についてNotebookLMを使って質問しながら進めていくのが効果的だと思いました。
また、NotebookLMの使い方として、単にソースを読み込ませて質問するだけでなく、ソースを読みながら理解できない箇所について質問していくスタイルが良いのではとも思いました。これは、ソースに関する先生が伴走してくれているような感覚で、非常に良い学習方法だと感じます。
今回を通して、自分の学習方法もアップデートする必要がありそうです。AIツールを効果的に活用しながら、より効率的で深い学びを実現できる可能性を感じ、これからの学習では、こうした新しいアプローチを積極的に取り入れていきたいと思います。