カテゴリ
RAG
ステータス
稼働中技術スタック
モデル
50ページのPDFを読むのは遅い。ナレッジグラフを辿るのは速い。この実験では、PDFからエンティティ、関係、主張を抽出し、Neo4j上に問い合わせ可能なナレッジグラフを構築して、D3.jsで対話的に可視化する自動パイプラインを作った。論文をアップロードすれば、概念、手法、発見を、直線的な文章ではなくつながったグラフとして探索できる。
40点の文書でパイプラインを検証した。ML/AI分野の論文15点、法務契約10点、技術仕様10点、年次報告書5点である。LlamaParseがPDFから構造化テキストを抽出する。Claude Sonnetが2段構成で、エンティティ(人物、組織、概念、手法、指標)の抽出と、関係(使う、引用する、比較する、矛盾する、拡張する)の抽出を行う。Neo4jがエンティティと関係の型にインデックスを張ってグラフを保持する。エンティティ抽出のF1は、人手で注釈した正解と比べて測った。
LlamaParseがレイアウトを踏まえてPDFを解析する。Claude Sonnetが構造化されたプロンプトでエンティティと関係を抽出する。Neo4jが全文検索とCypherに対応したナレッジグラフを保持する。D3.jsが力学モデルによる対話的なグラフを描画する。Next.jsがフロントエンドを提供し、サーバー側でグラフを問い合わせる。
この実験から得られた、もっとも重要な知見です。
2段構成の抽出でF1が0.79から0.89へ
エンティティと関係を1回のLLM呼び出しでまとめて抽出すると、F1は0.79だった。エンティティ抽出を1段目、既知のエンティティを踏まえた関係抽出を2段目に分けると、関係の取りこぼしが減りF1は0.89へ上がった。
ナレッジグラフは文書をまたぐ発見をもたらす
複数の論文を取り込むと、著者が明示していないつながりが浮かび上がる。共通する手法、矛盾する結論、そして研究の系譜を示す引用の連鎖などである。
探索では可視化が検索に勝る
ユーザーテスト(n=10)では、参加者は元のPDFをキーワード検索する場合に比べ、グラフの可視化を使うと自由回答型の問いへの答えを2.3倍速く見つけた。
出典のリンクで来歴を追える
グラフのすべてのノードと辺が、元のPDFの該当ページと段落へ紐づく。関係をクリックすれば該当箇所が開き、抽出された知識への信頼につながる。
アップロードされたPDFは、LlamaParseがページと位置のメタデータ付きの構造化テキストブロックへ変換する。各ブロックはClaude Sonnetへ送られてエンティティを抽出し、そのエンティティを本文とともに再度送って関係を抽出する。得られたトリプル、つまりエンティティと関係とエンティティの組は、出典とともにNeo4jへ書き込まれる。D3.jsのフロントエンドはCypher APIを通じてNeo4jへ問い合わせ、ノードをエンティティ、辺を関係として、型ごとに色分けし絞り込める形で描画する。
40点の文書でエンティティ抽出のF1は0.89、関係抽出のF1は0.82。20ページの文書あたりの平均処理時間は45秒。グラフの可視化は500ノードまで60fpsで描画する。ユーザーテストでは、キーワード検索に比べて探索的な分析が2.3倍速くなった。
検証を進めるうえで解決が必要だった技術的な課題です。
同一エンティティの解決
同じ対象が別の表記で現れる。「GPT-4」「GPT4」「OpenAIの最新モデル」などである。あいまい一致と埋め込みの類似度を組み合わせる処理を入れ、表記の違いを別名リストを持つ正規のノードへ統合した。
大きなグラフの可読性
300ノードを超えると視覚的に把握しきれなくなった。関連するエンティティを折りたためるスーパーノードへまとめる階層的クラスタリングと、注目した領域の詳細が現れるセマンティックズームを追加した。