乱雑なドキュメントの山を厳密なナレッジグラフに変換する方法
最近、大規模言語モデルの作業において最も面倒なタスクの1つを解決するユーティリティを見つけました。それは、長いプロンプトを書かずに生テキストを予測可能な形式にパースすることです。
このプロジェクトはHyper-Extractと呼ばれています。CLIユーティリティとPythonライブラリで、構造化されていないファイルを型付きデータ構造(リスト、Pydanticモデル、ハイパーグラフ、時空間リレーションシップなど)に変換するために設計されています。
標準的なRAGの何が問題か
テキストを500トークンのチャンクに分割し、ベクトルデータベース検索を行う典型的な単純なRAGは、しばしば混乱を引き起こします。エンティティ間の複雑な関係が失われ、イベントの時系列コンテキストが曖昧になります。財務報告や科学論文をモデルに投入しようとすると、平坦なベクトル検索では相互接続の正確な把握は困難です。
GraphRAGやLightRAGなどのフレームワークがこれらを改善しようとしましたが、ゼロからプロジェクトに統合するのは面倒です。Hyper-Extractの著者は、用意されたテンプレートとともに、知識抽出エンジンをコンパクトなコマンドラインユーティリティとライブラリにパッケージ化することにしました。
内部構造と動作原理
内部的には、このライブラリは3層アーキテクチャに依存しています。
- 8つのデータ構造タイプ。これにはPydanticモデル、単純なリスト、セット、标准的なナレッジグラフ、ハイパーグラフ、時間グラフ、空時グラフが含まれます。
- 抽出アルゴリズム。フレームワークはKG-Gen、GraphRAG、LightRAG、Hyper-RAG、Cog-RAGエンジンをサポートしています。
- 用意されたテンプレート。リポジトリにはFinance、Medicine、Law、科学論文など異なるドメイン向けの80以上の事前作成されたYAMLファイルが含まれています。
テンプレートはコードなしで動作します。用意されたプリセットを取得し、どのフィールドと関係タイプを抽出するかを指定するだけです。たとえば、関係グラフの場合、テンプレートはエンティティ(entity)と関係(relationship)の定義を含む標準的なYAMLマニフェストのように見えます:
language: en
name: Knowledge Graph
type: graph
tags: [general]
description: 'Extract entities and their relationships.'
output:
entities:
fields:
- name: name
type: str
- name: type
type: str
- name: description
type: str
relations:
fields:
- name: source
type: str
- name: target
type: str
- name: type
type: str
identifiers:
entity_id: name
relation_id: '{source}|{type}|{target}'
数分で始める
このユーティリティは、モダンなパッケージマネージャー(pipやuvなど)介して1つのコマンドでインストールできます:
uv tool install hyperextract
次に、モデルプロバイダーを設定する必要があります。このユーティリティはOpenAI、Anthropic Claude、DeepSeek、Alibaba Cloud Bailian、ローカルvLLMインスタンスと連携します。
DeepSeekまたはClaudeを使用する場合は、1つの詳細に注意してください:それらには独自の埋め込みAPIがないため、ベクトル検索には埋め込みモデルを別途設定する必要があります(例:OpenAI互換エンドポイントを介して):
# Настройка для связки DeepSeek + OpenAI Embeddings
he config llm -p deepseek -k YOUR_DEEPSEEK_API_KEY
he config embedder -p openai -k YOUR_OPENAI_API_KEY
データを外部に送信せずに完全にローカルで動作させるには、Qwenやbge-m3などのモデルでvLLMを起動できます:
he config llm -p vllm -u http://localhost:8000/v1 -k dummy -m Qwen/Qwen3.5-9B
he config embedder -p vllm -u http://localhost:8001/v1 -k dummy -m BAAI/bge-m3
設定が完了したら、ドキュメントのパースを開始します:
# Извлекаем граф связей из биографии
he parse examples/en/tesla.md -t general/biography_graph -o ./output/ -l en
# Делаем семантический поиск по собранной базе
he search ./output/ "What are Tesla's major achievements?"
# Запускаем интерактивную визуализацию графа прямо в браузере
he show ./output/
コマンドを実行すると、結果のノードと関係を探索できる対話型インターフェースが生成されます。
Pythonで書いている場合は、クラスを通じてプログラム的にパースを呼び出すことができます:
from hyperextract import Template
ka = Template.create("general/biography_graph")
with open("examples/en/tesla.md") as f:
result = ka.parse(f.read())
result.show()
便利な機能
最近、このプロジェクトは、 обычныхパーススクリプトとは異なる、便利な統合機能をいくつか追加しました。
まず、Obsidianへのエクスポートです。1つのコマンドで、グラフが標準的なリンクで 연결된Markdownノートのセットに変換されます。これはObsidianでナレッジベースを維持しており、エンティティを手動で转移したくない人にとって非常に便利です。
次に、組み込みのMCPサーバー(Model Context Protocol)です。コマンドを実行すると、Claude DesktopやIDEエージェントがナレッジベースにアクセスできるようになります。彼らは検索を呼び出し、RAGを実行し、标准プロトコルを介して直接コンテキストを取得できます。
3番目に、インクリメンタル更新です。新しいドキュメントがある場合、グラフを最初から再構築する必要はありません。新しいファイルを既存のディレクトリに投入するだけで、データベースに新しいノードが追加されます。
このプロジェクトの対象者
このツールは、企業ドキュメント上に複雑なパイプラインを構築し、非構造化応答でのLLM幻覚に疲れた開発者に適しています。また、何百ものPDFページを迅速に理解可能な構造にデジタル化したいアナリストや研究者にも便利です。
リポジトリは整理されており、明確なドキュメントがあり、Apache 2.0ライセンスを使用しています。ナレッジグラフとRAGの操作に秩序をもたらしたいなら、自分のドキュメント coupleでHyper-Extractを試してみてください。コードとテンプレートはプロジェクトのGitHubリポジトリで確認できます。
関連プロジェクト