RAGは、どんなデータで ”RAGる(らぐる)か” が大事⁉️
以下は、TISインテックグループの開発現場から生まれた技術ノウハウを公開されているFintanの記事です。
RAG(Retrieval Augmented Generation)は、クエリに対する応答を生成する前に外部データソースを検索して関連情報を取得し、その情報を生成時に活用する手法です。これによりハルシネーションを緩和することもできます。
これからは、RAGる(らぐる?)ことが増えていくように思います。
この記事による、経験的なことも含めたノウハウは必見じゃないかな。
以下は、私的なこの記事の「まとめメモ」です。ChatGPTに手伝ってもらいました。
RAGは、とにかく手元のデータを突っ込んでみればいい?
これはダメ🙅♂️。
例えば以下は避けないといけないみたい。
RAGで避けるべきこと:
不適切なデータソースの使用: 信頼性の低い外部データソースからの情報取得は避ける。誤った情報が生成プロセスに影響を与える可能性がある。
過度な依存: RAGは外部情報に依存するため、生成内容の品質が外部データソースの品質に直結する。そのため、データソースの選定と評価には慎重を期す必要がある。
適切な前処理の欠如: 入力データの前処理を怠ると、検索性能が低下し、関連性の低い情報が生成プロセスに組み込まれるリスクがある。
RAGを使用する際は、これらのポイントを考慮して、より正確で信頼性の高い生成結果を目指す必要があります。
うーん、🧐なるほど。
じゃ、どんなデータソースを選んで、どんな前処理すればいいのかな?
前処理の徹底
PDFからのテキスト抽出の最適化: PDF文書からテキストを抽出する際は、OCR(光学文字認識)技術を活用し、抽出精度を高める。また、抽出したテキストに対して、不要なマークアップや装飾、隠れたテキスト(例: 白文字)の除去を行う。
データソースの選定: 可能な限り、テキスト抽出が容易で、情報の構造が明確なデータソース(例: Word文書、構造化されたWebページ)を選択する。
言語やフォーマットに応じた前処理: 文書が複数の言語やフォーマットで構成されている場合、それぞれに適した前処理パイプラインを設定する。例えば、日本語文書と英語文書を別々に処理する、PDFとWord文書に異なる抽出ロジックを適用するなど。
メタデータの活用
メタデータ抽出の自動化: 文書からページ番号、タイトル、作成日、著者情報などのメタデータを自動的に抽出し、検索クエリの精度を向上させるためのフィルタとして使用する。
検索クエリのコンテキスト化: ユーザーの検索意図を理解し、適切なメタデータを検索クエリに組み込むことで、より関連性の高い検索結果を得る。例えば、「昨日のニュース要約」というクエリに対しては、最近の日付のメタデータを持つ文書を優先的に検索する。
チャンキング戦略の採用
文書のセグメント化: 長い文書を意味のある小さなセグメント(チャンク)に分割し、各チャンクを独立した検索対象とする。これにより、検索時の計算コストを削減し、関連性の高い情報を効率的に抽出する。
チャンクのサイズと品質の最適化: チャンクのサイズが小さすぎると情報が断片化し、大きすぎると不要な情報が含まれる可能性がある。適切なサイズのチャンクを生成し、情報の密度と品質を最適化する。
レイアウトと構造の考慮: 文書のレイアウトや構造を分析し、タイトル、見出し、パラグラフなどの構造的要素に基づいてチャンクを形成する。これにより、チャンク内の情報がコンテキストに沿ったものになるようにする。
補足
RAG利用時のチェックリスト
前処理の徹底
[ ] PDFからのテキスト抽出最適化
OCR技術を使用して精度を高める
不要なマークアップ、装飾、隠れテキストを除去
[ ] 適切なデータソースの選定
テキスト抽出が容易で情報構造が明確なデータソースを選択
[ ] 言語・フォーマット別前処理
文書の言語やフォーマットに応じた前処理パイプラインを設定
メタデータの活用
[ ] メタデータ抽出の自動化
ページ番号、タイトル、作成日、著者情報などのメタデータを自動抽出
[ ] 検索クエリのコンテキスト化
ユーザーの検索意図を理解し、適切なメタデータをクエリに組み込む
チャンキング戦略の採用
[ ] 文書のセグメント化
長い文書を意味のある小さなセグメントに分割
[ ] チャンクのサイズと品質の最適化
適切なサイズで情報の密度と品質を最適化
[ ] レイアウトと構造の考慮
文書のレイアウトや構造に基づいてチャンクを形成
よろしければサポートお願いします!