NISHIO Hirokazu[日本語][English]

概念マップ勉強会

概念マップ勉強会

GraphRAG

  • 論文: From Local to Global: A Graph RAG Approach to Query-Focused Summarization
  • サーベイ論文: Graph Retrieval-Augmented Generation: A Survey
    • この論文は色々な構成をまとめて説明しているので抽象度高い
      • 「入力がテキストの場合もグラフの場合もあるよね」とか
      • 今回の勉強会では我々のユースケースをメインのフォーカスに絞って解説する
    • 従来型RAGもGraphRAGも家族的類似性でまとまってる概念なので性質の説明は必要条件ではなく傾向にすぎない
      • 「GraphRAGにはXという特徴がある」はすべてのGraphRAGにはXという特徴があるという意味ではない、しばしば例外がある
  • 従来型RAGの問題点
    • 従来: たとえば短い断片に刻んでからベクトル埋め込みしてベクトルの類似度で検索
    • 関係性を扱うのが苦手
      • 関係性を拾うことに失敗しやすい、後で図で説明する
    • "ベクトルの類似度で検索"
      • "ベクトルの類似性"は一般的な意味の類似性
        • 一般的にはGrは「グループ」だけどサイボウズ文脈だと「Garoon」だ、みたいなことをembeddingモデルは知らない
        • 「Gr=Garoon=ガルーン」とか「ガブキン=GovTech Kintone」とかの知識を与えて、使って欲しいが、その知識をどう与えるか、どう使わせるかが悩ましい
    • コンテキストが繰り返しだらけ、長くなる
      • 自前でモデルの学習をトレーニングするのは高コストなのでコンテキストに積むことが行われがち
      • 検索して似ているものを見つけてコンテキストに積むので、コンテキストが似た文章の断片の羅列になる
      • そういう「ベクトル検索の結果の羅列ドキュメント」ってLLM以前にはなかったから、LLMにとって「見慣れないフォーマット」であり、それを扱うことはあんまり得意ではない
      • リランカーを訓練するアプローチが有効
  • GraphRAGのアプローチ
    • 従来型RAGにおけるチャンクは生のテキストを切り出したもの
    • GraphRAGは概念と関係性を抽出する
    • image
    • グラフであることによって幅優先探索や経路探索ができる
      • 「概念Aと概念Dの関係は?」
      • image
      • 元文章に"A→B"、"B→C"、"C→D"の記述があるとする
      • 従来型RAGの検索では「B→C」のチャンクを拾わない
        • そのチャンクにAもDも含まれてないからね
      • GraphRAGはグラフからAとDのノードを見つけた後、グラフ上での経路探索を行なってB→Cの情報を見つけられる
    • 曖昧な概念を指す複数のシンボル
      • image
      • 一般的な会話で使う概念は数学などと違って明確な境界を持っていない
      • 境界のぼんやりした意味MをシンボルAで表現したりBで表現したりする
        • その二つは同義語なのではなく、まだ言語化されていないニュアンスの違いがあったりする
        • 二つのシンボルはMの異なる「側面」と関連している(関連: 経験の側面)
      • あるシンボルC1はもっぱらAと繋がり、あるシンボルC2はもっぱらBと繋がり、あるシンボルC3はAともBとも繋がる、なんてことが起きる
      • (この辺りの図や用語の用法は「体験過程と意味の創造」勉強会4あたりを参照)

概念マップ

  • 論文紹介: A Framework for Constructing Concept Maps from E-Books Using Large Language Models: Challenges and Future Directions
    • Pythonの授業に使うe-bookから概念と関係を抽出
    • GPT-4oでの実験でエキスパートの作成した主要概念リストと8割がた一致
  • 概念とその関係を抽出するところがGraphRAGのインデクシング部分と近い構造
  • ちょうどPlurality本の原稿データが利用可能になったところなので実験対象にしてみた
    • GPT5 Proが論文を読んでプロトタイプ実装を作ってくれた、捗る
    • image
  • 具体的な実装
    • 元ドキュメントを3〜4回読んでいる
      • 1: 章ごとに概念を抽出
      • 2: 章ごとに概念間の関係を抽出
      • 3: 章ごとに作成したグラフが連結になるように最小限の概念と関係を新たに抽出
      • 4: 章をまたいだ関係性を抽出
    • これは「重要」の微調整だという認識
      • 文章だけを見て「重要」と判定されたものが(1)
      • 「一つの章に書かれた内容がひとつながりになるために橋渡ししている概念は重要だよね」が(3)
      • 「一つの書籍の中で複数の章の記述を橋渡ししてる関係性は重要だよね」が(4)
    • オリジナル論文はGPT-4oを使っていたがGPT-5-miniの方がぱっと見いいデータだった
      • 書籍1冊分で1USD
    • 出来上がったグラフを可視化してみた
      • イメージ湧きにくいGraphRAGのイメージを深める
      • してみたら連結でなかったので別途連結化をした(3)
        • ここはプロンプトを生成してからChatGPT GPT5 Thinkingにコピペしてやらせている
        • Thinkingなら一発で連結グラフになる、gpt-5-miniとかだとダメ
    • 抽出される概念や関係は「根拠」として原文からの引用を伴う
      • image
      • これを使って原文の該当箇所にジャンプできるようにした
      • これによってグラフを眺めて違和感があったときに引用や原文を見て「確かにそう書いてあるな」とか「いや、この抽出は適切じゃないか」とか判断できる
      • 今の概念マップWebサービスにはJSONで静的に与えてるけど、将来的には質問したりツッコミを入れたりしながらグラフが改善されていくといいと思う
    • オリジナルの論文では関係はカテゴリカル
      • is_aとかpart_ofとかいくつかの選択肢に限定している
      • これは個人的に好きではないので、関係は文で表現するようにした
        • カテゴリカルだとLLMを使わずにプログラムで判断できるメリットはあるだろうけど、それが必要なら後付けでis_a, part_of, ..., otherに分類することをLLMにやらせたらいいやという判断

limitation/future work

  • 今回の概念マップ作成はグラフの作成と可視化にフォーカスした
    • GraphRAGの3段階のうちの一つGraph-Based Indexingだけ
      • Graph-Based Indexing
      • Graph-Guided Retrieval
      • Graph-Enhanced Generation
    • 残り2つもいずれ試したい
  • 今回、Markdown形式のPlurality本の本体部分の原稿を処理してから、サイボウズ式に置かれている著者らの日本語版に向けての前書きと、WIREDに置かれている鈴木健さんの解説とを追加コンテンツとしてマージした
    • こうやって追加コンテンツを増やしていってコンテンツ間リンクで繋いでいくのは面白そう
    • 特にテキストで書かれた文章と、講演などの動画の字幕との間に橋渡しができると面白い
      • 技術的には難しくない
      • 出典リンクが動画のタイムスタンプリンクになって欲しいからSRTを使うと良さそう
    • 追加コンテンツを3つ足して思ったこと
      • どんどん追加していくと本編のグラフにどんどん外部リンクが増えてしまう
      • image
      • そりゃそうだ、どうしたらいいか?
      • ノードや関係の数は段階的に増えていくのがいいと思う
        • まずは「この章の中だけ」
        • それから「この本の中だけ」
        • それが終わった後で「他のコンテンツとの関係」
      • そう考えると「各章」がスタートでいいのか?という疑問が湧いてくる
        • 「書籍まるごと」のダイジェスト版が必要かも
      • 今は章をまたぐリンクを双方向表示にしているが、本編からextraへのリンクは無しにした方がいいのかも?
  • グループウェア的文脈
    • 全データを対象にしようとするのではなく、新人向けオンボーディング資料から始めた方がいいのではないか
      • 小規模なデータで試して観察して改善するプロセスを数回回すのが良さそう
    • 社内用語集的なデータは親和性高そう
      • ほぼ「人間がチョイスした重要概念」
      • それらの概念間の関係を抽出するのはすぐにでもできそう
      • ただし書籍と違ってひとつながりのストーリーとして執筆されてないのでグラフを可視化しても散り散りになりそう
      • GraphRAGまで社内でやるようになった時には、質の高いデータソースとして有望
  • Keichobot的文脈
    • かんがえをひきだすチャットボットKeichobot
    • ユーザと会話しながらキーワード抽出
    • 頻出するキーワードを重要なキーワードだとみなして掘り下げ質問
    • 十分重要なキーワードが見つかったらそのキーワードの間の関係を質問する
    • これ「概念抽出」してから「関係抽出」する流れと同じじゃん!
    • チャットしながらサイドに概念マップを出したら面白いのではないか?
    • そもそも「ゼロからチャットする」ことを今までやってきたが、書きかけの文章などを入れると質問してくれて、話した内容を元に文章を改善してくれるとかの構成を考えると「概念マップと会話する」形になる
      • 概念がユーザの外にあって中に入れようとしてるのか、ユーザの中にあるものの言語化を促して外に出そうとしてるのかの方向は逆
    • チャットによって言語化を促す系は、もう1年くらい経つと音声でスムーズに会話できるサービスが手軽に使えるようになると思う
  • 情報整理の文脈
  • リンクと意味の創造

(C)NISHIO Hirokazu / Converted from Markdown (ja)
Source: [GitHub] / [Scrapbox]