GraphGen: 知識グラフからSFT用QAデータを合成するパイプラインの実像
GraphGen: Enhancing Supervised Fine-Tuning for LLMs with Knowledge-Driven Synthetic Data Generation
ひと目でわかる
- これは何?
- GraphGenはソース文書から知識グラフを構築し、期待較正誤差でLLMの知識ギャップを狙い撃ちしてQAペアを合成するフレームワークだ。その仕組みと、導入前に確認すべき境界を整理する。
- 誰に向いている?
- GraphGenは、手元に対象ドメインの文書があり、そのドメインでLLMが苦手とする長尾知識を狙ってSFTデータを増やしたいチームに向く。逆に、汎用的な指示追従データや対話スタイルの多様性が欲しいだけの用途、あるいは入力文書の品質に責任を持てない場合は遠回りになる。
- 商用利用できる?
- できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 30 日前です。
- 何の言語で書かれている?
- 主に Python です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
GraphGenが埋めようとしている穴は何か
SFT用のデータセットを作るとき、多くのチームは既存のオープンデータを混ぜるか、人手でQAを書き起こす。前者はドメイン固有の細かい知識が抜け落ち、後者はコストが読めない。GraphGenはこの隙間を、ソース文書から作った知識グラフで埋めようとする。READMEの説明では、まずソーステキストから細粒度の知識グラフを構築し、次に期待較正誤差(expected calibration error)の指標を使ってLLM側の知識ギャップを特定し、価値が高く長尾な知識を狙うQAペアの生成を優先する。対象読者は、自社ドメインや専門分野の文書を持っていて、その内容に根ざしたSFTデータを増やしたい人である。汎用的な指示追従データを大量に欲しいだけなら、この設計は過剰になる。
文書からグラフ、グラフからQAへ: データフローの実体
パイプラインの骨格は、ソーステキストからの知識グラフ構築、期待較正誤差による知識ギャップの特定、マルチホップ近傍サンプリング、スタイル制御付き生成という4段階である。マルチホップ近傍サンプリングは、単一のエンティティではなく関係をたどった範囲を文脈として取り出す仕組みで、複雑な関係情報をQAに載せる役割を持つ。スタイル制御付き生成は、同じ知識から異なる文体のQAを作り、データの多様性を確保する。2025年8月14日の更新ではLeidenアルゴリズムによるコミュニティ検出が追加され、Chain-of-Thought(CoT)データの合成が可能になった。グラフのクラスタ単位で推論過程を組み立てられるという意味で、単発のQAよりも学習信号が濃い。2025年12月26日には知識グラフの評価指標として、エンティティと関係の正確性、矛盾検出による一貫性、ノイズ・連結性・次数分布といった構造的堅牢性が加わっている。生成側だけでなくグラフ側を検証する道具が揃ってきた点は、実運用では効く。
動かすまでに触る設定とコマンド
配布はPyPIのgraphgパッケージとして行われ、READMEのクイックスタートに従う形になる。入力形式はテキストに限らず、2025年10月21日からMinerU経由でPDFが使える。2026年2月4日にはHuggingFace Datasetsが入力データソースとしてサポートされた。検索バックエンドはGoogle、Bing、Wikipedia、UniProtが2025年7月31日に追加され、2025年12月1日にはNCBIとRNAcentralが加わり、DNAやRNAのデータをバイオインフォマティクス系データベースから引けるようになっている。推論バックエンドは2025年10月30日にOllama、HTTPクライアント、HuggingFace Transformers、SGLangが加わり、2025年12月16日にはvLLMがローカル推論バックエンドとして追加された。同じ日にキーバリューストアとしてRocksDB、グラフデータベースとしてKuzuDBがサポートされ、データ生成パイプラインはRayで再構成されて分散実行とリソース管理を担うようになった。VQAデータを生成する場合はREADMEに記載のスクリプト `bash scripts/generate/generate_vqa.sh` を実行する。ここで押さえておきたいのは、これらが個別の更新として積み上がっているという点だ。設定キーの一覧や既定値はREADMEには載っておらず、GitBookのクックブック側を参照する必要がある。
期待較正誤差を生成の優先度に使うという設計判断
GraphGenの特徴は、生成量を増やすのではなく生成対象を選ぶところにある。期待較正誤差は、モデルが自信を持っている度合いと実際の正答率のずれを測る指標で、これを知識ギャップの代理として使う。長尾知識を優先するという方針は、データセットの平均品質を上げるより、モデルが誤答しやすい領域を潰すことに効く。ただしこの指標はモデル依存である。対象モデルを差し替えればギャップの位置も変わるので、生成したQAセットは特定のモデルとチェックポイントに対して最適化されたものになる。別のモデルを学習させる予定があるなら、そのモデルでギャップを測り直す必要がある。この点はREADMEに明記されているわけではないが、指標の定義から素直に導ける帰結だ。
向かない場面と、代替との設計差
GraphGenが向かないのは、入力文書が薄い、あるいは雑多な場合である。知識グラフの粒度と品質はソーステキストに直接依存するので、文書が断片的だとグラフも断片的になり、そこから生成されるQAも浅くなる。グラフ評価指標が2025年12月に追加されたのは、まさにこの弱点への対処だろう。もうひとつの限界は、パイプラインが重いことだ。グラフ構築、ギャップ測定、マルチホップサンプリング、スタイル制御生成と段階が多く、LLM呼び出しも各段で発生する。Rayによる分散化とvLLMによるローカル推論はこのコストを下げるための仕組みだが、裏を返せば単一マシンで気軽に回す設計ではない。代替として挙げられるのは、LLMに文書をそのまま読ませてQAを書かせる素朴な合成である。こちらはグラフもギャップ測定も持たないため、知識の網羅性も長尾への到達も保証されない。GraphGenとの差は、生成の前に構造を作るかどうかにある。構造を作る分だけ前処理が増え、その代わり生成物が文書中の関係に紐づく。
学習側への接続と、Apache-2.0の及ぶ範囲
生成したデータは、READMEによればLLaMA-FactoryとxtunerでLLMのファインチューニングに使える。GraphGen自体は学習器ではなく、データを吐き出す側に徹している。この分離は導入判断を単純にする。既存の学習パイプラインを変えずに、その手前だけを差し替えられる。ライセンスはApache-2.0で、特許条項と帰属表示の条件を含む標準的な許諾型ライセンスである。ただしライセンスが及ぶのはGraphGenのコードに対してであって、生成されたQAデータや、入力として使う文書の権利関係は別問題になる。特にPDFやHuggingFace Datasetsを入力にする場合、元データの利用条件が生成物にどう波及するかは各自で確認する必要がある。ここは法的助言ではなく、確認事項の指摘にとどめる。
導入前に確かめるべき3点
第一に、手元の文書でLeiden法によるコミュニティ検出とマルチホップ近傍サンプリングが意味のあるまとまりを返すか。返さなければCoT合成の前提が崩れる。第二に、期待較正誤差の測定に使うモデルが、最終的に学習させたいモデルと一致しているか。ずれていれば生成の優先順位がずれる。第三に、合成したQAをLLaMA-Factoryとxtunerのどちらに流すか、そしてその形式に変換が必要かどうか。READMEは両者を挙げるが、変換手順までは示していない。バージョンはv0.1.0.post20250930が2025年9月30日付、20250422が2025年4月22日付で、更新は継続している。設定キーの網羅的な一覧はクックブック側にあるため、READMEだけで完結させようとすると詰まる。
編集部の結論
GraphGenは、手元に対象ドメインの文書があり、そのドメインでLLMが苦手とする長尾知識を狙ってSFTデータを増やしたいチームに向く。逆に、汎用的な指示追従データや対話スタイルの多様性が欲しいだけの用途、あるいは入力文書の品質に責任を持てない場合は遠回りになる。導入前に確認すべきは、Leiden法によるコミュニティ検出とマルチホップ近傍サンプリングが自分のドメイン文書で意味のあるグラフを返すか、そして合成したQAをどの学習フレームワークに流すかである。
コミュニティノート