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

【検索勉強会2024春】RAG改善からみたクエリ・ドキュメント理解とリランキング

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for mzntaka0 mzntaka0
September 12, 2025

 【検索勉強会2024春】RAG改善からみたクエリ・ドキュメント理解とリランキング

2024年5月31日の「Search Engineering Tech Talk 2024 Spring」で登壇発表した資料です
https://search-tech.connpass.com/event/318126/

Avatar for mzntaka0

mzntaka0

September 12, 2025

More Decks by mzntaka0

Other Decks in Technology

Transcript

  1. ©2024 FRAIM Inc. All Rights Reserved. 会社概要・自己紹介 2 開発部ML Unit責任者

    水野 多加雄(@mzntaka0) 社名  所在地 連絡先 設立日 代表者 事業内容 Webサイト FRAIM株式会社 / FRAIM Inc. (旧: 株式会社日本法務システム研究所 ) 東京都渋谷区千駄ヶ谷5-17-14 MSD20ビル5階 [email protected] 2018年4月27日 堀口 圭(代表取締役社長 弁護士) クラウド ドキュメント ワークスペース LAWGUE の研究・開発・提供 https://lawgue.com/ Forbes Under 30 Asia 2021 Enterprise Technology 部門 三菱UFJ銀行主催 2021年 第8回 Rise Up Festa DX部門 最優秀企業賞 主に自然言語処理・検索 /Elasticsearch、 バックエンドその他機械学習関連の開発担当 開発環境: Vim/tmux(とJupyterLab) 2017年から機械学習エンジニアとしてインバウンド向け記事の文 章要約・分類、Elasticsearch検索システム開発、 NEDOプロジェク ト(文書解析)、デジタル庁法制事務デジタル化、百貨店での人流 解析、病院向け音声認識 /OCRシステム、Tokyo Girls Collection のAI審査員、など複数機械学習のプロジェクトでの研究・開発に従 事
  2. ©2024 FRAIM Inc. All Rights Reserved. 弊社プロダクト - LAWGUEの概要 4

    独自エディタとドキュメントに関する様々な提案・レコメンド機能を提供し、ユーザーのナレッジ活用・ドキュメント作成を支援 している。
  3. ©2024 FRAIM Inc. All Rights Reserved. 弊社プロダクト - LAWGUEの概要 5

    独自エディタとドキュメントに関する様々な提案・レコメンド機能を提供し、ユーザーのナレッジ活用・ドキュメント作成を支援 している。そ れらの機能を支える基盤としてElasticsearch(on Elastic Cloud)を利用中。 主に検索・機械学習技術を活用している機能
  4. ©2024 FRAIM Inc. All Rights Reserved. これまでの検索改善 6 実施例 •

    ベクトル検索を Elasticsearchに移行した ◦ 全文検索で活用していたElasticsearchを活かしてベクトル検索を実施することで、コスト削減、 ベクトル検索×フィルタリング等の検索技術連携の容易化が実現した • Elasticsearchのトークナイザを Sudachiに移行した ◦ ユーザークエリ要望に対してRecallが向上し、喜んでもらえた ▪ 正規化により表記揺れに強くなった ▪ 誤字をある程度吸収してくれる ▪ 数字表現に強くなった ▪ 固有名詞表現(会社名等)の抽出精度向上 など • 完全一致検索や AND/OR/NOT検索を実装した ◦ 詳細検索したいユーザーの要望を実現し、カスタマーサクセスに貢献できた →これらを含む種々施策が、後述のRAGの実装効率や精度向上に寄与する部分もあった
  5. ©2024 FRAIM Inc. All Rights Reserved. 自社ナレッジを根拠とした RAG機能の構築 7 2023年3月末にLAWGUEとChatGPT連携をリリースし、その後さらに自社組織アカウントにアップロードしたナレッジ(契約書、社内規

    程、その他任意のドキュメント)を根拠に、生成AIで質問回答するRAG機能をリリースした https://lawgue.com/news/3914/ https://lawgue.com/news/4754/
  6. ©2024 FRAIM Inc. All Rights Reserved. (参考)RAGについて 8 RAG(Retrieval Augmented

    Generation)は、LLMだけではもっともらしい嘘(Hallucination)を生成してしまう課題に対して、Retrievalを組み合 わせることで根拠ドキュメントに記載されている情報(事実)に基づいた回答を生成する試み 複数パターン検索した結果のランキングをマージしたりリランキングしたりするRAG Fusionという考え方もある https://storialaw.jp/blog/9916 https://towardsdatascience.com/forget-rag-the-future-is-rag-fusion-1147298d8ad1 RAGの仕組み RAG Fusion
  7. ©2024 FRAIM Inc. All Rights Reserved. RAGで生じた課題 ①適切なドキュメントが根拠の上位に来ない場合がある 例) たまたま同じキーワードが含まれる関係のないドキュメントがランクしてしまった

    ②ユーザーのクエリ意図に合った回答ができていない場合がある 例) 類似のドキュメントを出してほしいのに、テキスト回答が返ってきた 用語定義を聞いているのに、関連のオペレーション方法が返ってきた (結論) →RAGの新たな課題というよりは、検索や質問応答・対話タスクで従来から分析・改善が行わ れてきた課題 (の一部または関連 )であることがほとんどの認識 →過去の文献・研究を参照しつつ、粛々と改善を進めていくことが重要であると考える ユーザー検証やヒアリングを重ねた結果、目立った課題として以下2つが挙げられた (他にも細かい話は様々ある)
  8. ©2024 FRAIM Inc. All Rights Reserved. RAGで生じた課題 ①適切なドキュメントが根拠の上位に来ない場合がある ②ユーザーのクエリ意図に合った回答ができていない場合がある 本日は、以下のような改善策を念頭に試行錯誤の一部を共有します

    (勉強会用にデータセットを例示として作成、主に会社規程データ) • クエリ・ドキュメント理解による適切な根拠マッチング • リランキングによる候補ドキュメントの精査 今回の解決時の制約条件 • tokenをなるべく消費しない ◦ ビジネスモデルにもよるが、tokenの消費とコストが比例するためなるべく少なく済むような 工夫が必要 ◦ 別途、LLM(プロンプト) API or ローカルモデルでどちらがコスト安か要検証 ◦ 現状は、ローカルモデル(個別タスクモデル)の方が安い試算 • 回答生成時のトークン制約の中で、高精度で上位に根拠ドキュメントを持ってくる必要がある (Top@5~10程度を想定)
  9. ©2024 FRAIM Inc. All Rights Reserved. 参考書籍 色々な本や論文を参照する中で、特にRAG関連で紹介・お薦めしたい本 「自然言語処理シリーズ 2 質問応答システム

    」 • 2009年発行の読み尽くされている本だが、今改めて読むと質問応答タスクの分析が 詰め込まれており、RAG改善に困っている人のヒントになりそう • 改善のための仮説を立てた時に、もう一度振り返って該当する過去研究を探すス タート地点に良いかもしれない →現在の技術とうまく組み合わせることで、改善の兆しが見える可能性がある https://www.coronasha.co.jp/np/isbn/9784339027525/ 以下の分類を大枠として、自然言語インターフェス、自然言語検索やその他検索関連の話まで RAGに通ずる話 が多数含まれている • ファクトイド型 (穴埋め問題 ) ◦ 回答が人名、地名、組織名、値段、日時、距離など短い言葉で簡潔に表されるものに限定 • ノンファクトイド型質問応答 (記述型問題 ) ◦ 定義型質問回答 ◦ why型質問回答 ◦ how型質問回答
  10. ©2024 FRAIM Inc. All Rights Reserved. RAG改善の検討 14 Query Routing/Natural

    Language Understanding 方策1: 分類モデル作る 方策2: ReActを使う etc Agent3 (Knowledge Q&A) Agent4 (Similarity Search) Elasticsearch or Knowledge Graph Agent5 (Full-text Search) Response Request Agent1 Meta Question LLM(共通/個別タスクごとに調整したモデル) 方策1: Azure OpenAI 方策2: ローカルLLM Elasticsearch (Vector DB) Elasticsearch Knowledge Reranking/Refinement/Fact Checking (Cross Encoder, JaColBert) Agent2 Document-Level Tasks(*) (Summarization, Check/Validation…) Elasticsearch Query Understanding Retrieval Reranking • Userがどのような要望・結果を望んでいるかを認識し、どの Agent(タスク)に流すと最適な結果が得られそうか推定する • Retrieval時の精度向上のためのメタデータを抽出する Userの要望に沿ったナレッジリソースを探 索・発見する Userの要望を満たす根拠かどうか確認・ 検証・精緻化する Generation 質問に沿った回答を生成する Agent6 (Fact/Template -based Text Generation) Elasticsearch or Knowledge Graph 自然言語インターフェス (NLI)を用いたタスク実行の設計 ※ユーザーニーズや UXの観点から、NLIが適切かは個別検討が必要 ドキュメント登録・理解が別途必要 Elasticsearch
  11. ©2024 FRAIM Inc. All Rights Reserved. RAG改善の検討 15 Query Routing/Natural

    Language Understanding 方策1: 分類モデル作る 方策2: ReActを使う etc Agent3 (Knowledge Q&A) Agent4 (Similarity Search) Elasticsearch or Knowledge Graph Agent5 (Full-text Search) Response Request Agent1 Meta Question LLM(共通/個別タスクごとに調整したモデル) 方策1: Azure OpenAI 方策2: ローカルLLM Elasticsearch (Vector DB) Elasticsearch Knowledge Reranking/Refinement/Fact Checking (Cross Encoder, JaColBert) Agent2 Document-Level Tasks(*) (Summarization, Check/Validation…) Elasticsearch Query Understanding Retrieval Evaluation • Userがどのような要望・結果を望んでいるかを認識し、どの Agent(タスク)に流すと最適な結果が得られそうか推定する • Retrieval時の精度向上のためのメタデータを抽出する Userの要望に沿ったナレッジリソースを探 索・発見する (今回は話さない) Userの要望を満たす根拠かどうか確認・ 検証・精緻化する Generation 質問に沿った回答を生成する (今回は話さない) Agent6 (Fact/Template -based Text Generation) Elasticsearch or Knowledge Graph 本日はこの辺のお話 Elasticsearch 自然言語インターフェス (NLI)を用いたタスク実行の設計 ※ユーザーニーズや UXの観点から、NLIが適切かは個別検討が必要 ドキュメント登録・理解が別途必要
  12. ©2024 FRAIM Inc. All Rights Reserved. RAGの改善策(質問応答時 ) 16 Query

    Understanding Retrieval ※自社ベクトルモデルを利用 Evaluation Query Search Result Task example Model/tool example Natural Language Understanding(Joint/Multi-task) • Intent Classification • Slot Filling • JointBERT • DIET etc Query(Intent) Classification • SetFit, Fastfit, Semantic-Router(LLM) etc NER • BERT-CRF • LUKE • SpaCy(tool) • DSPy(LLM, tool) etc Query Extension / Rewriting • HyDE(LLM) • Synonym Dict, Wordnet etc Text2SQL(DSL/RDF) https://github.com/eosphoros-ai/Awesome-Text2S QL?tab=readme-ov-file https://arxiv.org/abs/2309.17122 Query Understanding Task example Model/tool example Reranking • japanese-reranker(Cross Encoder) • (Ja)ColBERT • etc Evaluation
  13. ©2024 FRAIM Inc. All Rights Reserved. RAG改善の検討 (文書登録時 ) 17

    Metadata Extraction (Document Chunking) etc Search Engine/Vector Store (Elasticsearchなど) document Task example Model/tool example Chunk Classification • SetFit, Fastfit, Semantic-Router(LLM) etc NER • BERT-CRF • LUKE • SpaCy(tool) • DSPy(LLM, tool) etc Metadata Extraction そのほか、Text Summarization、Triple Extraction(Knowledge Graph) etc
  14. ©2024 FRAIM Inc. All Rights Reserved. 【Chunk Classification】SetFit(2022) 19 SetFitによるFew-shot

    learningをintfloat/multilingual-e5-baseをベースに実施 クラスごとのデータが少量(~60程度)の時に有利 https://arxiv.org/pdf/2209.11055 https://medium.com/@meetgandhi586/comparing-setfit-fastfit-and-semantic-router-fin ding-the-best-nlp-chatbot-intent-detection-d8161a7ad117
  15. ©2024 FRAIM Inc. All Rights Reserved. 【Chunk Classification】データセットの構築 20 •

    サンプル規程データセットのChunkごと(正確には意味単位になりそうな項の単位)以下の8ラベルのいずれかを 付与 この規程で稟議とは、職制に基づく主管部の各担当者が所 管事項または受命事項の業務処理に際し、自己の責任権限 事項を超える事項および重要事項について、これを実施に 移すにあたり事前に決裁権者に決裁を求めることをいう ✅ label_1 label_2 label_3 … label_8
  16. ©2024 FRAIM Inc. All Rights Reserved. 【Chunk Classification】アノテーションツールについて 21 •

    300~400件程度のアノテーションを実施した(数時間~1日) • 今回は、doccanoを主に利用し、label studioも少し試した ◦ 細かい話で、doccanoはスマホでもアノテーションしやすくてよかった ◦ 一方、label studioの方がSlot Filling and Intent Classificationやその他 LLM周りのアノテーションも充実していて良誘う • prodigy, Argillaといったactive learning系ツールも検証予定 https://github.com/doccano/doccano https://labelstud.io/ https://prodi.gy/ https://docs.argilla.io/en/latest/index.html
  17. ©2024 FRAIM Inc. All Rights Reserved. 【Chunk Classification】SetFit多クラス分類の評価 23 テストデータのクラスごとの偏り、データ数過少などあり評価しきれない部分もあるが、

    ベースラインモデルとしてサクッと作るのには悪くなさそう label_1 label_2 label_3 label_4 label_5 label_6 label_7 label_8
  18. ©2024 FRAIM Inc. All Rights Reserved. 【Chunk Classification】まとめ 24 •

    SetFitなどの少量のデータである程度の精度を出すには良さそう • アノテーションの効率化・半自動化のベースモデルに使えそう ◦ Active LearningやHuman in the loopへの応用 • (本当は、Query (Intent) Classificationもやった上でドキュメントを絞り込み、精度 向上するかを検証した結果も出したかった) • クエリ・ドキュメント理解の一つの手法として色々応用がありそう
  19. ©2024 FRAIM Inc. All Rights Reserved. 【Reranking】Cross Encoderについて 26 https://www.sbert.net/examples/applications/cross-encoder/README.html

    Bi-Encoder: あらかじめSentence A, Bのベクトルを生成し、その後にベクトル類似度を測る Cross-Encoder: Sentence A, Bを[SEP]などで連結してモデルに渡し、[0, 1]の類似度を出力する 精度: △ 速度: ◯ 精度: ◯ 速度: △ Vector Searchに利用される ことが多い Rerankingに利用されること が多い Bi-Encoderで絞って、 Cross-Encoderで精緻化するイメージ
  20. ©2024 FRAIM Inc. All Rights Reserved. 【Reranking】japanese-rerankerを検証してみた 28 検証用に簡易的な規程の質問応答データセットを作成 複数サンプル規程のChunkから質問文をLLMで生成し、そのChunkを根拠として紐づける

    Chunk Chunk Chunk Document ①〜可能ですか? ②〜とはなんですか? ③〜教えてください etc LLM ①Chunk文に基づいた質問文を3つずつ生成 ②生成した質問文の根拠として生成元 Chunkを紐 づける 根拠 • 生成された質問が必ずしもChunkを根 拠とするものとは限らないが、根拠にな りやすいものは生成されるだろうという 仮定 • 質問に対してrelevantなdocumentは1 件 • 自分のドメインでざっくり検証したい時 に使えるかも? • あくまでお試し ※LLMに生成データ商用利用不可など制約があるものの 場合は注意が必要 →1,000件程度のデータセットを作成した
  21. ©2024 FRAIM Inc. All Rights Reserved. 【Reranking】japanese-rerankerを検証してみた 29 ランキング評価ライブラリのranx(便利)を利用して、Bi-EncoderでTop@30を取得後にjapanese-reranker未実施・ 実施後にTop@10でどうなるか評価した

    relevantなdocumentが1件でも評価できそうなHit RateとMRRが本命の指標で、あとは参考値(適合性スコアは5に 設定) (Bi-Encoderで得たTop@30での参考指標結果) Top@30からreranking未実施・実施(上が未実施、下が実施)後にTop@10に絞って評価
  22. ©2024 FRAIM Inc. All Rights Reserved. 【Reranking】まとめ 30 • Cross-EncoderベースのRerankingでRAGの根拠ドキュメント選定の精度

    改善につながりそうな示唆が得られた • JaColBERTも試したい • モデルサイズによって処理速度が異なり、本番でどこまでどのモデルで ワークするかを検証する必要がある。モデル量子化やONNX/torch-ortな どで速度改善が可能か今後検証
  23. ©2024 FRAIM Inc. All Rights Reserved. まとめ 31 • RAGをユーザー含めて検証した結果いくつか課題がみつかった

    • RAGの新たな課題というよりは、検索や質問応答・対話タスクで従来から分析・改善が行われ てきた課題(の一部または関連)であることがほとんどの認識であり、過去の文献・研究を参照し つつ、粛々と改善を進めていくことが重要であると考える • 既存の手法ではあるがRAG改善に利用できそうなモデルや手法をいくつかサンプルデータを用いて 試行錯誤した結果を共有した • 今後特にクエリ・ドキュメント理解の部分に力をいれて改善していきたい