Upgrade to Pro — share decks privately, control downloads, hide ads and more …

実例で紹介するRAG導入時の知見と精度向上の勘所

 実例で紹介するRAG導入時の知見と精度向上の勘所

2024/04/24に開催したセミナーで登壇した際に、使用した資料です

https://dev.classmethod.jp/news/240424-ai-rag-webinar/

Hiroki YAMAMOTO

April 30, 2024
Tweet

More Decks by Hiroki YAMAMOTO

Other Decks in Technology

Transcript

  1. 5 自己紹介:山本紘暉 クラスメソッド株式会社 研究開発エンジニア 2020年 5月~ ・コンピュータビジョン 骨格検出や人物追跡 2023年 3月~

    ・生成AIやLLM 最近はRAGに注力 「クラスメソッド 山本 ブログ」で検索 https://dev.classmethod.jp/author/yamamoto-hiroki/ 研究開発 ・最新研究と実適用の間の橋渡し ・妥当な期間・コスト・品質 ・着実に進めるために ・有り物だけでなく自作も
  2. 9 LLMの問題点・RAGの目的 ユーザ 質問 誤った回答 LLM プログラム 質問 誤った回答 ユーザ

    質問 正しい回答 LLM プログラム 質問 + 関連テキスト 正しい回答 参考 ドキュメント 検索 関連テキスト 通常 RAG
  3. 10 RAGの構成要素(ベーシックな構成) ユーザ 質問 回答 LLM プログラム 質問 + 関連テキスト

    回答 参考 ドキュメント インポート 検索 システム 質問 関連テキスト
  4. 11 RAGのシステム構成(例:AWSの場合) AWS ユーザ Slack App Slack Notion アップロード ドキュメント

    (PDF・ワードなど) Python プログラム (in コンテナ) App Runner Kendra インデックス S3 バケット Bedrock Anthropic Claude インポート
  5. 15 他手法の比較(独自情報をLLMに答えさせる方法) ※ 大まかな傾向の比較です。ケースや基準によって異なります 構築の 難易度 構築 コスト 精度 (理想)

    分析・改善の 難易度 (≒ 開発コスト) ランニング コスト (簡単な) fine-tuning ◯ 低い ◯ 安い ◯ ✕ 難しい (コスト高い) ◯ 安い RAG ◯ 低い ◯ 安い ◯ ◯ やりやすい (コスト低い) △ (検索サービスが 必要) モデルの独自 カスタマイズ (継続学習) ✕ 高い ✕ かなり高い ◎ ✕ 難しい (コスト高い) ◯ 安い
  6. 24 構築の方針(目的のレイヤー・粒度はどれか?) 文書検索サービス RAGアプリ作成サービス 文章検索エンジン用ライブラリ 文章検索エンジンサービス 抽象度が高い サービス これで十分ならOK だが調整できる項目は少なめで、

    不足感があるケースが多い 目的の粒度に合致している 調整がしやすい エンタープライズ検索が便利(後述) 粒度が少し細かすぎる まず導入時は検索できればよい ここまで調整できる必要がない (時間対効果が高くない) ※ エンジニア目線としては下側も大事
  7. 30 どこまで構築するか?(実装する機能) 質問 + 会話履歴 LLM (回答生成) プログラム 質問 +

    関連テキスト + 会話履歴 回答 検索 システム 検索クエリ 関連テキスト 検索クエリ LLM (クエリ生成) 会話履歴 標準的な構成 (必要最低限の構成 + α) 会話履歴を保存する 質問から検索クエリを考える (前処理をはさむ) 検索クエリでドキュメントを検索する (質問文では検索しない) ドキュメントをもとに 回答を生成する
  8. 42 ステップ1-2:分析 「役に立った」回答 ・これはOK ・使用方法を軽く把握しておけば良い 「役に立たなかった」回答 ・以下を見てみる ・質問内容 ・ドキュメントに該当する内容があるか ・検索結果

    ・回答内容 ・グルーピングする 様々なケース ・専門用語が多い ・重箱の隅をつつく質問 ・コンテキスト(社内の話)を 知らないと答えられない ・単語のみしか書いてない (検索エンジン的な使い方) ・ドキュメントに情報がない ・ドキュメントはあるが 検索でヒットしなかった ・検索できたが回答できなかった
  9. 44 補足:認識合わせ・目標決めの観点 RAGシステムとして ・検索精度面 ・回答品質面 チャットボットとして ・体験面 社内プロジェクトとして ・運用面 ・コスト面

    研究だと知見は少なめ、かなり実践的 世の中の事例を参考にすると良い 研究で取り組まれている知見を活かせる 論文や公開サンプルを活用する 今までのソフトウェア開発と同様 考え方・手法を活かせる
  10. 45 補足:「精度」の定義がかなり難しい 研究・世の中の事例 ・正解/評価が定義できている ・データセットを作成し実験 実際(導入時) ・そもそも使われ方が分かっていない ・正解/評価が定義できていない ・全体的な体験で評価したいのか 個別機能を評価したいのか

    回答内容は少し間違っているが、 「詳細は参照先を見て確認してね」 と回答したケース ・間違ってはいない ・これは正解?不正解? ドキュメントにデータがないケース ・そもそも正解?不正解? ・全体としてはミス(改良すべき点)
  11. 53 課題例1の原因:抽出する範囲が合っていない タイトル 回答例 詳細情報・回答根拠・リンク先情報 ログインパスワードを忘れたときの手順を教えて "ログインパスワードが分からなくなった場合は Slackで情シス宛に初期化依頼をしてくだい。 詳細はリンク先を参照してください。 [リンク先](http://sample.classmethod.jp/sample/sample/1)"

    "初期化する権限は情シスのみが保有しています。 ユーザのみでは行えないので、ご連絡ください。" 〇〇が反応しないときの対処手順を教えて "設定画面を開き、〇〇が有効になっているか確認してください。 確認方法や詳細はリンク先を参照してください。 [リンク先](http://sample.classmethod.jp/sample/sample/2)" "〇〇は誤って無効にされてしまうケースが多いです。 設定を改めてご確認ください" 〇〇できないときの対処方法を教えて "ソフトウェアの再起動をしてください。 詳細はリンク先を参照してください。 [リンク先](http://sample.classmethod.jp/sample/sample/3)" "再起動処理が完了するまでに、数分かかります。 再起動後アイコン上はすぐに接続できるように見えますが、 処理中の状態ですので、時間をあけて接続して下さい" 行をまたいで、途中が抽出されしまった ヘッダーの情報もない
  12. 56 課題例2:似たドキュメントを内容を混同してしまった 起動手順 ・アプリを起動 ・リストをタップ ... 製品A マニュアル 起動手順 ・アプリを起動

    ・ファイルを確認 ... 製品B マニュアル 質問 「製品Aの起動手順を教えて」 回答 「アプリを起動し、リストをタップした後、 ファイルを確認してください」
  13. 62 課題例3の結果:人間が読む順序で文字起こしできた 詳細はこちらのブログをご覧ください https://dev.classmethod.jp/articles/read-powerpoint-document-with-claude-3/ # 経済産業省のMission ## 日本経済・国民の暮らしを豊 かにする ###

    産業政策 - 人工知能、IoT、ヘルスケア - データ活用、中小企業 - 産業構造・・・ ### 通商・貿易 - EPA、TPP、インフラ輸出 - 新興国戦略、ルール形成 - 戦略・・・ ### 資源・エネルギー - 電力自由化、新エネ・省エネ - 原発、資源外交・・・ ### 手段 - 経済成長 - 産業競争力の強化 - イノベーション - 世界の富の取り込み - エネルギー安定供給 ### 目的 - 社会課題の解決 Ex.少子高齢化、貧困問題、 世界の不安定化 - 豊かな社会の実現
  14. 63 課題例3の結果:画像を説明させることができた 詳細はこちらのブログをご覧ください https://dev.classmethod.jp/articles/read-powerpoint-document-with-claude-3/ # 活気ある職場・働きやすい環境 1 ## 職場風景 [オフィスの様子が写っている。複数の人が机を囲んで作業を

    している。] [3人の男女がパンフレットを見ながら話し合っている。壁に は絵画が掛かっている。] ## 働きやすい職場環境 - テレワーク ※29FYは延べ7,000人以上が実施。中央省庁では 最多。 - ペーパーレス ※4年で37%削減 - フレックス - 風通しのよい職場 (職員意識調査:職場満足度77割以上) - 様々な研修制度 (年間100回以上の勉強会の開催など) [2台のノートPCが写っている。] 個人PC:軽量で持ち運びが容易 ※ プロンプトの指示は簡易なものを使用したので、 出力される説明は改良の余地があります
  15. 64 課題例4:社内知識・業務知識が必要 例: ・質問 「20期の年末年始の スケジュールを教えて」 ・ドキュメント ・2023年の年末年始 ・2022年の年末年始 ポイント

    ・20期が何なのか把握させる ・20期が何年に対応するのか 計算させる ・1期が何年なのか教える 普遍的な社内知識に対応させる (こうしたケースが大量にある)
  16. 67 課題例4の結果:社内用語とその説明を抽出できた 2255ファイルから5153件を抽出できた(※ 重複あり) 一例 #01help-me 社内のヘルプデスクやサポート窓口を指す用語。社員がIT関連のトラブルや問題を報告するための連絡先 第14期 会社の年度を表す用語。会社の創業年を1期として、その年から数えて14年目を表す。2017年度を指す。 入場アンケートフォーム

    新入社員や異動者が入社・異動時に提出するフォーム。必要なPCやシステムのアクセス権限などを申請するため に使用される。 Nulabアカウント Cacooを利用するために必要なアカウント。社内の手続きを経て発行される 2代目めそ子 社内用語で、社内向けイベントカレンダーにイベントを追加する際に招待するゲストの名前。社内システムや ツールを指している可能性がある。 04.パソコン・周辺機器利用・返却申請 WF 社内のパソコンや周辺機器の利用申請や返却手続きを行うためのワークフロー。 Lab チームでワイワイ開発したり、もくもくと作業をするエリアの名称 Hub ビジネスについて議論するエリアの名称。電話やオンライン会議も可能 Core 財務経理室、労務の執務室、倉庫、セキュリティルームのエリアの総称 キャリブレーション 評価の基準を合わせるための会議。評価者間で評価のばらつきを防ぐために行われる JD 社内の人事評価制度に関連する用語。職務記述書(Job Description)の頭文字から取った略称で、目標設定や評 価の面談やシートを指す。 FU-1102(どんたく) 福岡オフィスの11階にある会議室の名称。4人収容可能
  17. 70 このあたりは取り入れても良さそう (Advanced RAGな範囲) 検索精度面 ・クエリ検討モデルをfine-tuningする ・取り出す範囲を拡大する ・(チャンクではなく) ファイル全体を取得する ・親/兄弟要素も取り出す

    ・検索エンジンを自作する 回答品質面 ・回答モデルをfine-tuningする ・プロンプトエンジニアリングを進める 体験面 ・一つのファイルを選択して、 その内容を深堀りして聞けるようにする 運用面 ・社内ドキュメントサービスとの接続 ・社内チャットツールとの接続 ・データを自動更新できるようにする ・フィードバックループ(体制)をつくる
  18. 76 検索方式 全文検索 + セマンティック ・キーワード検索 + 意味的な検索 頻度ベクトル検索(疎ベクトル) ・単語の頻度をもとに検索

    埋め込みベクトル検索(密ベクトル) ・文章の意味の近さをもとに検索 ナレッジグラフ ・文章を分解し、意味構造を作る 情報が多い・理解しやすい 比較的扱いやすい 世の中のエンタープライズ検索で 使われている(利用しやすい) → 敷居は低め(まずはオススメ) 情報が少ない・理解が難しい 比較的扱いが難しい (理想的には)精度が高い → 敷居が高め
  19. 77 ベクトル検索の種類 https://docs.pinecone.io/guides/data/understanding-hybrid-search https://www.pinecone.io/learn/splade/ 検索方式 長所 短所 例 疎ベクトル 単語の頻度

    キーワード一致に強い (専門用語・特殊な用語の 検索に適している) 「似たような意味だが 違う単語」だとヒットしない TF/IDF BM25 密ベクトル (embed) 意味的な近さ 単語が違っても 意味が同じなら対応可能 (抽象的な概念でも 検索可能) 同じキーワードが有っても、 検索でヒットしないことがある (表面上似た意味の “文章”がヒットしてしまう) GPTベース (各社API) ハイブリッド (上記2つの組合せ) ー (上記の両者) ー 係数で 重み付け 疎埋め込み ベクトル 単語の頻度 + 意味的な近さ (上記の両者) ー SPLADE
  20. 78 検索システムの仕様 テキストの取り出し方が違う Kendra queryメソッド 1ファイル、1箇所 Kendra retrieveメソッド 1ファイルあたり、箇所の上限なし ②

    ③ ① ※ 改行あり ※ 改行なし ② ④ ① ④ ⑤ ⑥ ③ ⑤ ⑥ 見落としが少ない方を選ぶ (この場合だとretrieveの方が良い)
  21. 79 テキストの取り出し方:Amazon Kendra ② ③ ① ② ④ ① ④

    ⑤ ⑥ ③ ⑤ ⑥ queryメソッド retrieveメソッド ・チャンク数:1ファイル1箇所 ・サイズ :中(数百文字) ・チャンク数:1ファイルあたり上限なし ・サイズ :中(数百文字) ・ランク :チャンクごと ※アップデートやAPIのバージョンにより 異なる可能性があります
  22. 80 テキストの取り出し方:Azure AI Search ② ④ ① ③ ⑤ ⑥

    ② ③ ① ④ ⑤ ⑥ query_type:simple query_type:semantic ・チャンク数:1ファイル1箇所 ・サイズ :大(数千文字) ・チャンク数:1ファイル1箇所 ・サイズ :中(数百文字) ② ③ ① ④ ⑤ ⑥ query_type:vector ・チャンク数:1ファイル上限なし ・サイズ :中(数百文字) ・ランク :チャンクごと ※アップデートやAPIのバージョンにより 異なる可能性があります
  23. 81 テキストの取り出し方:Google Vertex AI Search ・チャンク数:1ファイル複数箇所 ・サイズ :中(数百文字) ・ランク :ファイルごと

    ※ 複数箇所:数を設定可能 パラメータ名:max_extractive_segment_count 最大10箇所 ① ③ ④ ⑤ ⑥ ② ※アップデートやAPIのバージョンにより 異なる可能性があります
  24. 82 構築時の要素 LLM 回答 指示 ・あなたはC社の質問受付ボット ・関連情報に基づいて回答して 関連情報 ・サービスAは〇〇です ・サービスBでは

    ・〇〇の場合:ーーです ・✕✕の場合:ーーです 質問 ・〇〇ってなんですか? プロンプト 入力 出力 プロンプトの全体を工夫する (改良点2) いいモデルを使う (改良点1) 情報の渡し方を工夫する (改良点3) ※ 最初は改良点1・改良点2は固定して 改良点3に注力をすると エンジニアリング的に進めやすし、効果が高い (パラメータを減らす) RAGのコアな部分(回答生成)
  25. 83 構築時の要素:どのモデルを使うか 完璧人間:100点 普通人間:85点 LLM :80点 Anthropic Claude3 Opus OpenAI

    GPT4 Google Gemini LLMの選択肢 情報が十分にあれば、人間と同様のレベルに回答できる モデルによって大きな差はない (モデル選びの時間対効果は低い) → まずは構築するクラウドや許容コストに合わせて選択
  26. 84 構築時の要素:どういったプロンプトを使うか あなたは会社内の質問を受け付け、社内ドキュメントをもとに回答を行う担当窓口です。 ユーザからの質問と、その回答で利用できる情報があります。 {回答生成の手順} の通りに、ユーザの質問に対する回答を生成してください。 <回答生成の手順> - {制約} {ドキュメントのファイルパスと内容}

    をすべて理解してください。 - {制約} は、回答を生成する際に守らなければならないことです。必ず従ってください - {ドキュメントのファイルパスと内容} には、参考とするべきドキュメントが含まれています。ドキュメントはデータベースに保存されており、そのファイルパスが与えられます。 - このあとユーザとあなたの会話のやりとりと、最後にユーザからの質問が続きますので、会話の内容と、ユーザの疑問点を理解してください - 会話のやりとりは、これまでのユーザの質問とあなたの回答です - ユーザからの質問が、ユーザが最も知りたいことなので、重要視してください。 - {ドキュメントのファイルパスと内容} の中から、ユーザの疑問点に関連する情報を見つけ、その情報をもとに回答を行ってください - その際、{制約} に必ず従ってください。 - ドキュメント間で矛盾している内容がある場合は、その内容をユーザに補足として伝えてください </回答生成の手順> <制約> - 質問に関係のない情報は無視し、関係ある情報にのみ基づいて回答してください。 - 使用したドキュメントは、その番号を引用の形式で示してください。例:[0],[2] - 回答に「AI:」は含めないでください。必ず従ってください。例外はありません。 </制約> <ドキュメントのファイルパスと内容> {available_info} </ドキュメントのファイルパスと内容> 世の中のプロンプトテンプレートを参考にできるので、まずはこれを使う → 必要が生じたら、構成・要素・形式を改良する プロンプトの内容(現状)
  27. 89 課題例3の結果:人間が理解する形で文字起こしできた # セキュリティ体制 ## ISMS・ITSMS上の役割 役割 | 氏名 ---

    | --- 最高情報責任者(CIO) | Aさん 情報セキュリティ管理責任者(CISO) | Aさん サービス管理責任者 | Aさん ISMS事務局、ITSMS推進事務局 | Aさん ITSMS推進(AWS事業本部オペレーション部) | Aさん ...(※ 略)... AWS事業本部(モダンアプリケーションコンサルティング 部) | Aさん | Aさん AWS事業本部(サービス企画室) | Aさん | Aさん CX事業本部(Business 部) | Aさん | Aさん CX事業本部(Delivery 部) | Aさん | Aさん データアナリティクス事業本部(インテグレーション部) | Aさん | Aさん ...(※ 略)... 不要な情報(フッター・ページ数)を削除 ページの切れ目があってもつなげて出力 表部分をMarkdown形式で出力 (Claude3は1リクエストに複数画像を含めることができる) (※ 略) は正しい結果が出力されていました
  28. 92 課題例4の補足:暗黙的な情報を追加する(前提1) 人間が利用している情報とは(社内情報に関するQAの場合) ※ 山本独自の用語です 性質 1質問に関わる量 暗黙知 明文化 (ドキュメント)

    暗黙知 明文化 (ドキュメント) 業務知識 社内知識 暗黙知 明文化 (ドキュメント) 業界の常識 間接的・普遍的 直接的・専門的 少ない 多い ドキュメント化されている割合
  29. 96 課題例4の補足:暗黙的な情報を追加する(前提5) 回答に関係する情報(社内情報に関するQAの場合) 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知

    明文化 (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 システムが使用している情報は、人間に比べてごく一部 → できるかぎり多く、暗黙的な情報を追加する テキスト 画像 リンク 通常の検索システムの 対象範囲
  30. 97 課題例4の補足:人間が使っている暗黙的情報 暗黙知 明文化 (ドキュメント) 暗黙知 明文化 (ドキュメント) 業務知識 社内知識

    暗黙知 業界の常識 エンタープライズ検索で 検索できる(しやすい)範囲 暗黙知 社会の常識 ある程度はLLMが対応できる
  31. 98 課題例4の原因:情報量の差 回答に関係する情報(社内情報に関するQAの場合) 質問本文 メタデータ コンテキスト ドキュメント 本文 メタデータ コンテキスト

    通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 システムが使用している情報は、人間に比べてごく一部 → できるかぎり多く、暗黙的な情報を追加する テキスト 画像 リンク 通常の検索システムの 対象範囲
  32. 99 課題例4の補足:課題の根本原因と対策 質問本文 メタデータ コンテキスト 暗黙知 明文化 (ドキュメント) 暗黙知 明文化

    (ドキュメント) 業務知識 社内知識 暗黙知 業界の常識 ドキュメント 本文 メタデータ コンテキスト 通常のQAシステムの 対象範囲 通常のQAシステムの 対象範囲 エンタープライズ検索で 検索できる(しやすい)範囲 テキスト 画像 リンク 通常の検索システムの 対象範囲 検索システムを 変更する プログラムを 改良する プログラムを 改良する 別の検索システムを追加する(?) できる限り範囲をふやす (制約:そもそもデータがあるか・実装コスト・運用可能か) どうする? (明文化してもらう)