大規模言語モデルによるナレッジグラフ自動化の概念検証

背景
「ユーザーがソースデータをただ PUSH するだけで、“そこそこいい感じのグラフ”が自動生成され、すぐに使えるようにならないか?」
私たちの出発点は、そんなシンプルな問いかけでした。
究極的には、自社に存在する多様な情報ソースを「ブラックボックス」に放り込むだけで、即座に利用可能な知識グラフが生成される――それが実現すれば理想です。
もしそれが可能になれば、多くの企業が社内に埋もれている知識やデータ資産を可視化・再活用できるようになり、「誰でも情報にたどり着ける世界」 が広がっていくはずです。それは非常に魅力的な未来です。
実は、このようなアイデアについては過去にも複数の企業からご相談をいただき、社内プロジェクトとして挑戦したこともありました。
ただし当時は、現在のようなLLM(大規模言語モデル)が登場する以前であり、実現方法を探る中で課題ばかりが浮き彫りになったのです。

しかし今や、LLMの進化によって、かつて直面していた課題にも現実的な解決策が見えてきました。
そこで私たちは、「今の技術なら“ソースデータを PUSH するだけで使えるグラフ”にどこまで近づけるのか?」 をテーマに、概念検証を実施しました。

その結果、データモデルの設計には依然として人の介入が必要であるものの、それ以外の多くの部分については、すでに実現可能性が高まっていることが分かってきました。
目的
前項の背景で触れたとおり、今回の検証で最も重要となるのは「データモデル」です。
現実世界の複雑な事象をLLMによってどこまでグラフモデル化できるのか、あるいはLLMがどの程度その簡素化に役立つのか――まさにそこが焦点になります。
そこで本記事では、弊社が独自に展開してきた 「グラフモデル設計法」 を大規模言語モデル(LLM)に適用し、その有効性を検証することを目的としました。
特に今回は、LangChain や LlamaIndex といった既存のLLMフレームワークを利用せず、あえて独自アプローチを採用し、以下のような自動化の可能性を探りました。
- ソースデータからのグラフモデル抽出
- グラフモデルの構造をセマンティックモデルに落とし込み、ソースデータからグラフを生成
- 自然言語からのCypherクエリ自動生成
もしこのアプローチが有効であれば、既存のフレームワークに縛られない柔軟なGraphRAGの開発が可能になり、ユーザーの要求に応じて俊敏かつ独創的なGraphRAGを構築できると考えています。
なお、本記事全体の解説は Neo4j(Graph DBMS) をベースに進めています。あらかじめご了承ください。
LLMフレームワークによるGraphRAG構築の課題
あるプロジェクトでRAGの在り方を検討していた際、ナレッジベースをグラフ化(GraphRAG)して活用すれば、VectorDBよりも正確に情報を捉えられる、という話を耳にしました。当時、VectorDBで検索したデータの類似性の精度には非常にがっかりしていましたが、「グラフの活用」という発想は、Neo4jに馴染みのある筆者にとって非常に嬉しいニュースでした。しかし同時に、大きな疑問もありました。
GraphRAGという響き自体はとても魅力的ですが、LLMフレームワークは果たしてグラフモデルの課題をどのように解決できるのか。筆者の知る限り、多くのお客様がそこで挫折してきたポイントでした。
グラフモデルは、グラフ抽出やメンテナンス、さらにはCypherの生成にも影響を与えます。
非常に大雑把に言えば、グラフとは、現実の事象を「グラフモデル」という「ひな型」に定義し、そのひな型の構造に沿って生成されます。グラフモデルは、事象が持つ本来の性質や利用目的(関心事)に応じて形が決まったり、あるいは人為的に定義され、その範囲の中でグラフが抽出されます。
例えば、映画に関するグラフでは、映画タイトルと俳優の関係のように自ずと定まるモデルもあれば、利用目的に応じて人為的に取捨選択されるモデルもあります。俳優や監督など人のつながりを中心にしたグラフと、投資額・人件費・興行収益・機材コスト・資材調達先といった経済的要素を重視したグラフでは、まったく異なるモデルになるでしょう。

筆者の個人的な印象ですが、GraphRAGに取り組んでいる既存のLLMフレームワークでは、「グラフモデルをどのように定義するか」についてはあまり触れてないような気がします。筆者としては、ある事象からグラフモデルの生成をどこまで自動化できるかが、今後のLLM活用における「肝」になると感じています。
そこで本記事では、LLMを用いて「グラフモデル」をどのように構築するかに焦点を当てています。品質の高いグラフモデルが構築できれば、グラフの抽出やメンテナンス、さらにはCypherの自動生成の品質も自然と向上すると考えているからです。
今回の概念検証について
根強いグラフ活用のニーズ
「社内に蓄積された多様な情報源を、グラフとして可視化(マップ化)し活用できないか?」
この問いは、私たちが長年取り組んできたテーマのひとつです。 筆者は 2013 年頃から Neo4j の公式代理店としてライセンス販売やテクニカルサポートに携わり、つい最近にまで、「グラフ技術を業務に活かしたい」というご相談を受けてきました。
しかし現実には、「途中で挫折してしまった」というケースが少なくありません。 その背景には、意外に思われるかもしれませんが、グラフデータベースにはRDBにおける正規化のような体系的な設計論が存在しないという事情があります。
近年では、GraphRAG(Graph Retrieval-Augmented Generation)をはじめ、生成 AI とグラフデータベースを組み合わせた新しいアプローチが注目を集めていますが、果たして、グラフデータモデルの問題は解決できているのでしょうか。
グラフとは
グラフとは、ノードとリレーションシップ、そして属性を組み合わせてナレッジを表現するためのデータモデルです。
- ノード(Nodes)
- エンティティ(物や人、概念など)を表します。データベースの中ではレコードや行のような役割を果たします。例:人、会社、場所など。
- リレーションシップ(Relationships)
- ノード同士の関係性を表します。リレーションシップは方向性(矢印)を持ち、関係の意味を持つタイプも設定できます。例:「働いている」「友達である」「所有している」など。
- プロパティ(Properties)
- ノードやリレーションシップに付与される属性情報です。キーと値のペアで構成され、検索やフィルタリングに使われます。例:名前、年齢、作成日など。
グラフでは、次のように何かしらの事象の意味を直感的に表現できます。

(p1:Person{name:"田中", sex:"man"})-[:LOVE { status:"死ぬほど"}]->(p2:Person { name:"木村", sex:"woman"})
グラフモデルの設計
グラフモデルは、「現実における事象 ✕ 利用目的 = グラフモデルの種類」 と言えるほど、多様性を持っています。なお、グラフモデルの設計論はいまだ確立されていません。
しかし、その中にも一定の法則性が存在すると――筆者は考えています。
弊社ではNeo4jのトレーニング目的で、「グラフモデル設計法」 という枠組みを独自に作成しました。
以下では、今回の概念検証と関連する内容を簡潔に紹介します。
まず、次のような「事象」があると仮定します。
DanとAnnが結婚し、Annの家で一緒に暮らし始めた。
ここでは、グラフモデルにあまり知識を持っていない人でも、「ユニットグラフ」→「サブグラフ」→「マスタグラフ」 と段階的に設計していくことで、対象領域の知識を網羅的に理解・整理し、最終的には統合的なグラフモデルに仕上げることができます。
- ユニットグラフ
- もっとも基本的な単位。対象を「2つのノード」と「1つのリレーションシップ」で表し、関係を網羅的に分析する。
- DanとAnnの関係性は、次のようなユニットで構成されている。
- DanとAnnが結婚した。
- DanとAnnは一緒に暮らしている。
- DanはAnnの家に住んでいる。
- AnnはAnnの家に住んでいる。
- Annは家を所有している。

- サブグラフ
- 複数のユニットグラフを関係性に従ってグループ化する。
- ここでは、人間関係と財産関係が現れている。

- マスタグラフ
- 複数のサブグラフを結合し、1つグラフモデルとして統合する。

このプロセスは、以下のフローに従って実施し、PDCA サイクルを繰り返すことで段階的に精度を高めることが可能です。

今回、私たちは、LLMを利用してこのプロセスの有効性を検証してみることにしました。
- まず ソースデータ を入力し、そこから「グラフモデルの原型」を抽出する。
- 次に、その原型を基に「セマンティックモデル」を作成し、グラフの意味を整理する。
- 続いて、ソースデータをセマンティックモデルへマッピングすることで、構造的に一貫したグラフを抽出する。
- 最後に、そのグラフの妥当性を確認する。
ソースデータ
↓
グラフモデルの原型
↓
セマンティックモデル
↓
ソースデータ→セマンティックモデル
↓
グラフ抽出
ここで、セマンティックモデルとは、グラフの構成要素(ノード・リレーションシップ・属性)と、それぞれの意味を体系的に表現したモデルです。
単なる構造図ではなく、データ同士の関係や意味づけを明確にする点が特徴です。
このモデルを定義することで、
・ソースデータからグラフを抽出するための「ひな型」 を与えられる
・複数のデータソースを統一的に扱える
・クエリ設計や知識検索の精度を高められる
といった効果が得られます。
言い換えると、セマンティックモデルは 「データをグラフとして意味的に整理し、活用可能にするための設計図」 にあたります。
このアプローチは、LLMの推論を段階的に拡張し、各ステップの出力を次ステップの入力に合流させることで、文脈一貫性と整合性を高めるためのものです。具体的には、(1) ソースデータからグラフモデルの原型を抽出し、(2) その原型を足場にセマンティックモデルを定義し、(3) ソースデータをセマンティックモデルへマッピングして、(4) 最終的にグラフを抽出します。
要求1→(ソースデータ+グラフモデルの原型+例示+ソースデータ)
↓
結果1→(グラフモデルの原型)
↓
要求2→(グラフモデルの原型+セマンティックモデルの期待値+ソースデータ)
↓
結果2→(セマンティックモデル)
↓
要求3→(セマンティックモデル+期待値+ソースデータ)
↓
結果3→(グラフ)
検証開始
今回の検証では、専用のコードを開発せず、LLM のコンソールを直接利用する方法を採用しました。 筆者は、新しいアイデアの実現可能性を試す際に、短時間で検証できる手段としてこの方法をよく活用しています。
今回、検証に利用したLLMは、Neo4j+Cypher@ChatGPT-5とClaude4@Anthropicです。
検証にあたっては、次の点に注意しました。
- プロンプトやデータを事前に用意し、投入順序をコンテキストに合わせて設計すること
- クリーンな状態のセッションで開始すること(余計な履歴があると結果に影響するため)
- プロンプトでは最低限の形式を守り、要求の目的・内容・期待する回答・ソースデータを明確に区分して伝えること
ステップ1: グラフモデルの原型を抽出
筆者は、LLM を活用するうえで最も重要なのは、意図(期待)をどれだけ正確に伝えられるかだと考えています。 そのためには、意図を簡潔かつ明瞭に示し、単純な課題から複雑な課題へと段階的に発展させる指示設計が欠かせません。 本ステップでは、この方針に基づき、ソースデータから グラフモデルの原型を抽出します。
ソースデータには、日本映画データベース から無作為に選んだ3件の映画情報を加工せずに添付しています。 詳細は、以下を参照してください。
グラフモデルの原型を抽出
=====コンテキスト=====
われわれは、汎用的な映画情報のナレッジグラフを構築しようとしています。
対象とする GDBMS は Neo4j v4 です。
添付の「映画情報」をベースに、ノード・リレーションシップ・属性を抽出し、有向グラフの 「基本モデル」 と 「詳細モデル」 を提示してください。
出力形式は、以下の 2 種類としてください。
- ドメインモデル: (ノード)-[リレーションシップ]->(ノード)
- 例: (Persion)-[:ACTED_IN]->(Movie)
- プロパティモデル: (ノード{属性})-[リレーションシップ {属性}]->(ノード{属性})
- 例: (Persion { name} )-[:ACTED_IN {character, role}]->(Movie { title } )
=====要求=====
ソースデータを参照し、ドメインモデルとプロパティモデルを抽出してください。
=====ソースデータ=====
映画情報1:
ガールズ&パンツァー もっとらぶらぶ作戦です!
公開日 2025年12月26日
上映時間 未定
ジャンル ドラマ , 青春 , アニメーション
カラー Color
上映フォーマット DCP,ProRes
字幕入り上映
フォーマット 英語 (ProRes)
【監督】
下田正美
【キャスト】
渕上舞 ── 西住みほ
茅野愛衣 ── 武部沙織
尾崎真実 ── 五十鈴華
中上育実 ── 秋山優花里
井口裕香 ── 冷泉麻子
【スタッフ】
木村暢 ── シリーズ構成
木村暢 ── 脚本
島田フミカネ ── キャラクター原案
杉本功 ── キャラクター原案
杉本功 ── キャラクターデザイン
川面恒介 ── 総作画監督
秋山有希 ── 総作画監督
水野紗世 ── 総作画監督
岩岡優子 ── 総作画監督
浜口史郎 ── 音楽
【製作会社】
「ガールズ&パンツァー もっとらぶらぶ作戦です!」製作委員会
【配給会社(国内)】
ショウゲート
【制作会社】
P.A.WORKS×アクタス
【解説】
わちゃわちゃもりもり、みんなの日常。
こんなに青春しているなんて、まるで女子高生みたい――!?
『ガールズ&パンツァー』の大人気スピンオフコミック『ガールズ&パンツァー もっとらぶらぶ作戦です!』(著者:弐尉マルコ)がついにアニメ化!
大洗女子チームをはじめ、戦車道にトコトン邁進する学生たち(や周囲の愉快な人々)の知られざる日常と学園同士の交流にググっとフォーカス!
監督に下田正美(『ゼーガペイン』シリーズ 他)、シリーズ構成・脚本に木村暢(『コードギアス 奪還のロゼ』 他)を迎え、アニメーション制作はP.A.WORKS(『SHIROBAKO』 他)とアクタス(『ガールズ&パンツァー』 他)が共同で担当!
わちゃっとにぎやか、にっこり爽やか。
彼女たちをもっと好きになる、一大作戦の始まりです!
【公開日】
第1幕:2025年12月26日
第2幕:2026年1月30日
第3幕:2026年3月6日
第4幕:2026年4月10日
【公式サイト】
https://gup-mottolovelove.jp
【海外窓口】
(株)博報堂DYミュージック&ピクチャーズ(旧ショウゲート)
107-6321 東京都港区赤坂5-3-1 赤坂Bizタワー
担当:海外セールス部
E-mail: isales@hakuhodody-map.jp
http://www.hakuhodody-map.jp```
映画情報2:
カイダン都市伝説 洒落怖
Share-Kowa: Urban Legends That Will Scare You to Death (Working Title)
シェア
Market Look Completed
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
(c)BBB
公開日 2021年9月
上映時間 144 分
ジャンル ホラー , 劇映画 , オムニバス
カラー -
上映フォーマット ProRes
【監督】
永江二朗
鳥居康剛
副島宏司
【キャスト】
虹のコンキスタドール
【解説】
第一話「本当に危ないところを見つけてしまった…」
酒井健太郎 三木一輝 谷口昭仁 米澤成美 里衣子 冨永風音 / 片山享
コンビユーチューバーのユリマリの二人は人気が出ないことに思い悩んでいた。そんな時、ディレクターから都市伝説のヤラセLIVE配信番組を作ろうと提案され、ユリマリたちは廃墟に行くのだが…。
第二話「くねくね」
山ガール初心者の亜弥と沙奈は、ハイキング中に見つけた洞穴に入る。洞穴の中で不思議な石像を見つけ、なんだろうと訝しむ沙奈は外に出てから、突然、意識を失ってしまう。必死に助けを呼ぼうとする亜弥だったが。
第三話「異世界に行く方法」
七緒は亡くなった親友の真奈の父親から、「真奈が生きている『別の世界』がある気がする」と聞かされる。家に帰ってもその言葉が気になり一人言をつぶやくと、それを聞いた妹の佳乃から“異世界に行く方法”の噂を伝え聞く。
第四話「パンドラ」
母親の田舎に引っ越してきた梨沙と志乃の姉妹。志乃は不気味な空き家の前を通った際にそこが“パンドラ”と呼ばれていることを聞く。その晩、母親に“パンドラ”について尋ねると「絶対に近寄るな」と過剰な反応をされる。
第五話「メリーさんの電話」
加奈は足を骨折し、不便を見かねた友人の早苗に色々と手伝ってもらっていた。加奈は自身のマンションに飾られている人形を一目で気にいった様子の早苗を見て、お世話になっている御礼にとその人形をあげることにする。
最終話「トイレの花子さん」
久美は小学生時代の自分が学校のトイレで“花子さん”に引きずり込まれる夢を見て目を覚ますと、そこへ小学校の同級生の美里から電話がかかってきて、同級生の美智子が心筋梗塞で突然死したという。二人は美智子の葬儀へ向かうが…。
【海外窓口】
(株)博報堂DYミュージック&ピクチャーズ(旧ショウゲート)
107-6321 東京都港区赤坂5-3-1 赤坂Bizタワー
担当:海外セールス部
E-mail: isales@hakuhodody-map.jp
http://www.hakuhodody-map.jp
映画情報3:
九十歳。何がめでたい
90 Years Old - So What?
シェア
予告編
予告編
(c)2024映画「九十歳。何がめでたい」製作委員会 (c)佐藤愛子/小学館
(c)2024映画「九十歳。何がめでたい」製作委員会 (c)佐藤愛子/小学館
公開日 2024年6月21日
上映時間 99 分
ジャンル コメディ , 家族 , 劇映画
カラー Color
上映フォーマット ProRes
字幕入り上映
フォーマット 英語 (ProRes)
【監督】
前田哲
【プロデューサー】
岡田有正 ── 企画・プロデュース
近藤あゆみ ── プロデューサー
山田大作 ── プロデューサー
【キャスト】
草笛光子 ── 佐藤愛子
唐沢寿明 ── 吉川真也
【スタッフ】
大島里美 ── 脚本
山本英夫 ── 撮影
早野亮 ── 編集
富貴晴美 ── 音楽
【製作会社】
「九十歳。何がめでたい」製作委員会
【配給会社(国内)】
松竹
【解説】
直木賞作家・佐藤愛子による同名エッセイ集を映画化したエンタメ作。『老後の資金がありません!』などで知られる前田哲監督がメガホンをとった。
断筆宣言をした90歳の作家・愛子(草笛光子)は、鬱々とした日々を過ごしていた。同じ頃、大手出版社に勤める中年編集者・吉川(唐沢寿明)は、昔気質なコミュニケーションがパワハラ、セクハラだと問題となり、謹慎処分に。ある日、吉川の所属する編集部で愛子の連載エッセイ企画が持ち上がり…。
原作:佐藤愛子「九十歳。何がめでたい」「九十八歳。戦いやまず日は暮れず」(小学館刊)
【公式サイト】
https://movies.shochiku.co.jp/90-medetai/
【海外窓口】
(株)TBSテレビ
映画事業部
107-8006 東京都港区赤坂5-3-6 TBS放送センター17F
担当:海外映画セールス
http://www.tbscontents.com
LLMから以下のような結果が得られました。
ドメインモデル
ドメインモデルの結果です。今回のソースデータの範囲でグラフの基本構造を適切に捉えており、期待していた水準を満たしています。
(Movie)-[:DIRECTED_BY]->(Person)
(Movie)-[:ACTED_BY]->(Person)
(Movie)-[:PRODUCED_BY]->(Person)
(Movie)-[:HAS_GENRE]->(Genre)
(Movie)-[:DISTRIBUTED_BY]->(Company)
(Movie)-[:PRODUCED_BY_COMPANY]->(Company)
(Movie)-[:HAS_EPISODE]->(Episode)
(Movie)-[:BASED_ON]->(Work)
(Person)-[:VOICE_ACTED]->(Character)
(Episode)-[:PART_OF]->(Movie)
プロパティモデル
プロパティモデルの結果です。これも、ノードやリレーションシップに属する属性が適切に網羅されており、期待していた水準を満たしています。
映画とスタッフ・キャスト関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:DIRECTED_BY]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:ACTED_BY {character_name, voice_actor}]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:PRODUCED_BY {role}]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:STAFF_ROLE {position}]->(Person {name})
映画と企業・ジャンル関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:HAS_GENRE]->(Genre {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:DISTRIBUTED_BY]->(Company {name, address, contact})
(Movie {title, release_date, duration, color, format, description, official_site})-[:PRODUCED_BY_COMPANY]->(Company {name, type})
エピソード・原作関連の詳細型モデル:
エピソード関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:HAS_EPISODE {episode_number, episode_title}]->(Episode {title, release_date, description})
(Episode {title, release_date, description})-[:PART_OF]->(Movie {title, release_date, duration, color, format, description, official_site})
原作・派生作品関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:BASED_ON {adaptation_type}]->(Work {title, author, publisher, type})
(Movie {title, release_date, duration, color, format, description, official_site})-[:SPINOFF_OF]->(Work {title, franchise_name})
(Work {title, author, publisher, type})-[:CREATED_BY]->(Person {name})
キャラクター関連:
(Person {name})-[:VOICE_ACTED {role_type}]->(Character {name, description})
(Character {name, description})-[:APPEARS_IN]->(Movie {title, release_date, duration, color, format, description, official_site})
Step2: セマンティックモデルの抽出
ここまでの結果を踏まえ、LLMに「セマンティックモデルの定義」を要求しました。
セマンティックモデルの抽出
=====コンテキスト=====
今回は、同セッションのなかで一連のコンテキストの続きなので省略しています。
=====要求=====
グラフモデルの原型とソースデータを参照し、セマンティックモデルを定義してください。
-「プロパティモデル」をJSON形式に変換してください。
- 「ノード」、「リレーションシップ」、「属性」に日本語の説明を付けてください。
- 属性は、サンプルデータを付けてください。
=====グラフモデルの原型:プロパティモデル=====
映画とスタッフ・キャスト関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:DIRECTED_BY]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:ACTED_BY {character_name, voice_actor}]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:PRODUCED_BY {role}]->(Person {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:STAFF_ROLE {position}]->(Person {name})
映画と企業・ジャンル関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:HAS_GENRE]->(Genre {name})
(Movie {title, release_date, duration, color, format, description, official_site})-[:DISTRIBUTED_BY]->(Company {name, address, contact})
(Movie {title, release_date, duration, color, format, description, official_site})-[:PRODUCED_BY_COMPANY]->(Company {name, type})
エピソード・原作関連の詳細型モデル
エピソード関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:HAS_EPISODE {episode_number, episode_title}]->(Episode {title, release_date, description})
(Episode {title, release_date, description})-[:PART_OF]->(Movie {title, release_date, duration, color, format, description, official_site})
原作・派生作品関連:
(Movie {title, release_date, duration, color, format, description, official_site})-[:BASED_ON {adaptation_type}]->(Work {title, author, publisher, type})
(Movie {title, release_date, duration, color, format, description, official_site})-[:SPINOFF_OF]->(Work {title, franchise_name})
(Work {title, author, publisher, type})-[:CREATED_BY]->(Person {name})
キャラクター関連:
(Person {name})-[:VOICE_ACTED {role_type}]->(Character {name, description})
(Character {name, description})-[:APPEARS_IN]->(Movie {title, release_date, duration, color, format, description, official_site})
セマンティックモデルとは、グラフの構成要素(ノード・リレーションシップ・属性)とその意味を体系的に表現したモデルであり、ソースデータの分析結果を整理・統合したものです。
このモデルは、後続の工程でソースデータからグラフを抽出したらい、自然言語からCypherを生成するための 「ひな型」 として機能し、結果の一貫性と解釈性を担保する基盤となります。
セマンティックモデル
{
"nodes": [
{
"label": "Movie",
"description": "映画作品。監督、キャスト、スタッフ、制作会社、配給会社などとの多様な関係を持つ中心的ノード。",
"properties": {
"title": {
"type": "string",
"description": "映画のタイトル",
"sample": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
},
"english_title": {
"type": "string",
"description": "英語タイトル",
"sample": "Share-Kowa: Urban Legends That Will Scare You to Death"
},
"release_date": {
"type": "string",
"description": "公開日",
"sample": "2025年12月26日"
},
"duration": {
"type": "integer",
"description": "上映時間(分)",
"sample": 144
},
"color": {
"type": "string",
"description": "カラー情報",
"sample": "Color"
},
"format": {
"type": "string",
"description": "上映フォーマット",
"sample": "DCP,ProRes"
},
"description": {
"type": "string",
"description": "映画の解説・あらすじ",
"sample": "わちゃわちゃもりもり、みんなの日常。こんなに青春しているなんて、まるで女子高生みたい――!?"
},
"official_site": {
"type": "string",
"description": "公式サイトURL",
"sample": "https://gup-mottolovelove.jp"
}
}
},
{
"label": "Person",
"description": "映画に関わる人物。監督、キャスト、スタッフ、原作者など様々な役割を持つ。",
"properties": {
"name": {
"type": "string",
"description": "人物の名前",
"sample": "下田正美"
}
}
},
{
"label": "Character",
"description": "映画に登場するキャラクター。声優との関係を持つ。",
"properties": {
"name": {
"type": "string",
"description": "キャラクター名",
"sample": "西住みほ"
},
"description": {
"type": "string",
"description": "キャラクターの説明",
"sample": "大洗女子学園の戦車道チームの隊長"
}
}
},
{
"label": "Genre",
"description": "映画のジャンル分類。",
"properties": {
"name": {
"type": "string",
"description": "ジャンル名",
"sample": "アニメーション"
}
}
},
{
"label": "Company",
"description": "映画に関わる企業。制作会社、配給会社、製作委員会など。",
"properties": {
"name": {
"type": "string",
"description": "会社名",
"sample": "P.A.WORKS×アクタス"
},
"type": {
"type": "string",
"description": "会社の種別",
"sample": "制作会社"
},
"address": {
"type": "string",
"description": "住所",
"sample": "107-6321 東京都港区赤坂5-3-1 赤坂Bizタワー"
},
"contact": {
"type": "string",
"description": "連絡先",
"sample": "isales@hakuhodody-map.jp"
}
}
},
{
"label": "Episode",
"description": "映画の各話・各幕。シリーズ作品の個別エピソード。",
"properties": {
"title": {
"type": "string",
"description": "エピソードタイトル",
"sample": "本当に危ないところを見つけてしまった…"
},
"episode_number": {
"type": "integer",
"description": "エピソード番号",
"sample": 1
},
"release_date": {
"type": "string",
"description": "公開日",
"sample": "2025年12月26日"
},
"description": {
"type": "string",
"description": "エピソードの説明",
"sample": "コンビユーチューバーのユリマリの二人は人気が出ないことに思い悩んでいた。"
}
}
},
{
"label": "Work",
"description": "原作作品。小説、漫画、エッセイなど映画の元となった作品。",
"properties": {
"title": {
"type": "string",
"description": "作品タイトル",
"sample": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
},
"author": {
"type": "string",
"description": "作者名",
"sample": "弐尉マルコ"
},
"publisher": {
"type": "string",
"description": "出版社",
"sample": "小学館"
},
"type": {
"type": "string",
"description": "作品の種類",
"sample": "コミック"
},
"franchise_name": {
"type": "string",
"description": "フランチャイズ名",
"sample": "ガールズ&パンツァー"
}
}
}
],
"relationships": [
{
"type": "DIRECTED",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が監督した映画",
"properties": {},
"sample": {
"person": "下田正美",
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
}
},
{
"type": "ACTED_IN",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が出演した映画",
"properties": {
"character_name": {
"type": "string",
"description": "演じたキャラクター名",
"sample": "西住みほ"
},
"role_type": {
"type": "string",
"description": "役割の種類",
"sample": "声優"
}
},
"sample": {
"person": "渕上舞",
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
}
},
{
"type": "STAFF_ROLE",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が担当したスタッフ業務",
"properties": {
"position": {
"type": "string",
"description": "担当ポジション",
"sample": "シリーズ構成"
}
},
"sample": {
"person": "木村暢",
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
}
},
{
"type": "PRODUCED_BY",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物がプロデュースした映画",
"properties": {
"role": {
"type": "string",
"description": "プロデューサーの役割",
"sample": "企画・プロデュース"
}
},
"sample": {
"person": "岡田有正",
"movie": "九十歳。何がめでたい"
}
},
{
"type": "VOICE_ACTED",
"startNode": "Person",
"endNode": "Character",
"direction": "OUTGOING",
"description": "この人物が声を担当したキャラクター",
"properties": {
"role_type": {
"type": "string",
"description": "役割の種類",
"sample": "メインキャラクター"
}
},
"sample": {
"person": "渕上舞",
"character": "西住みほ"
}
},
{
"type": "HAS_GENRE",
"startNode": "Movie",
"endNode": "Genre",
"direction": "OUTGOING",
"description": "この映画が属するジャンル",
"properties": {},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"genre": "アニメーション"
}
},
{
"type": "DISTRIBUTED_BY",
"startNode": "Movie",
"endNode": "Company",
"direction": "OUTGOING",
"description": "この映画を配給した会社",
"properties": {},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"company": "ショウゲート"
}
},
{
"type": "PRODUCED_BY_COMPANY",
"startNode": "Movie",
"endNode": "Company",
"direction": "OUTGOING",
"description": "この映画を制作・製作した会社",
"properties": {
"role": {
"type": "string",
"description": "会社の役割",
"sample": "制作会社"
}
},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"company": "P.A.WORKS×アクタス"
}
},
{
"type": "HAS_EPISODE",
"startNode": "Movie",
"endNode": "Episode",
"direction": "OUTGOING",
"description": "この映画に含まれるエピソード",
"properties": {
"episode_number": {
"type": "integer",
"description": "エピソード番号",
"sample": 1
},
"episode_title": {
"type": "string",
"description": "エピソードタイトル",
"sample": "第1幕"
}
},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"episode": "第1幕"
}
},
{
"type": "BASED_ON",
"startNode": "Movie",
"endNode": "Work",
"direction": "OUTGOING",
"description": "この映画の原作となった作品",
"properties": {
"adaptation_type": {
"type": "string",
"description": "翻案の種類",
"sample": "アニメ化"
}
},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"work": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
}
},
{
"type": "SPINOFF_OF",
"startNode": "Movie",
"endNode": "Work",
"direction": "OUTGOING",
"description": "この映画がスピンオフ元となった作品",
"properties": {},
"sample": {
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"work": "ガールズ&パンツァー"
}
},
{
"type": "CREATED_BY",
"startNode": "Work",
"endNode": "Person",
"direction": "OUTGOING",
"description": "この作品を創作した人物",
"properties": {},
"sample": {
"work": "ガールズ&パンツァー もっとらぶらぶ作戦です!",
"person": "弐尉マルコ"
}
},
{
"type": "APPEARS_IN",
"startNode": "Character",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "このキャラクターが登場する映画",
"properties": {},
"sample": {
"character": "西住みほ",
"movie": "ガールズ&パンツァー もっとらぶらぶ作戦です!"
}
}
]
}
Step3: 任意の映画情報からサンプルグラフの抽出
ここからは、セマンティックモデル(グラフ構造のひな型) を実際に使ってみます。
具体的には、任意の映画情報をソースデータとして入力し、その内容がどのようにグラフへ変換されるのかを検証しました。
目的はシンプルで、「セマンティックモデルを通すことで、定型化されたグラフを安定して生成できるか」を確かめることにあります。
サンプルグラフの抽出
システムプロンプト:
ロール:
-「映画情報」を分析し、「セマンティックモデル」に合わせて、グラフの抽出を実行してください。
指示:
- グラフは、Neo4j v4のシンタックスに合わせて実行可能なCypher構文を作成してください。
- ノード、リレーションシップの、属性は、`ユーザプロンプト.スキマーコンテキスト.セマンティックモデル`に準拠してください。
出力フォーマット:
- 出力は、CypherのCREATE文にしてください。
- 例: CREATE (g1:Genre {name: "ロマンス"})
ルール:
- 属性のバリューのなかにタブルクォーテーション(")が使われる場合は、エスケープ文字(\)を付けてください。
- 例 → "description": "久美は小学生時代の自分が学校のトイレで\"花子さん\"に引きずり込まれる夢を見て目を覚ます。"
ユーザプロンプト:
スキマーコンテキスト:
- セマンティックモデル: ```JSON
{
"nodes": [
{
"label": "Movie",
"description": "映画作品。俳優、監督、脚本家、プロデューサー、レビューなど多様な関係を持つ中心的ノード。",
"properties": {
"title": {
"type": "string",
"description": "映画のタイトル"
},
"released": {
"type": "integer",
"description": "公開年"
},
"tagline": {
"type": "string",
"description": "映画のキャッチコピーや宣伝文句"
}
}
},
{
"label": "Person",
"description": "映画に関わる人物。俳優、監督、脚本家、プロデューサー、レビュアー、また他の人物をフォローするソーシャル関係を持つ。",
"properties": {
"name": {
"type": "string",
"description": "人物のフルネーム"
},
"born": {
"type": "integer",
"description": "生年"
}
}
}
],
"relationships": [
{
"type": "ACTED_IN",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が出演した映画"
},
{
"type": "REVIEWED",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物がレビューを投稿した映画",
"properties": {
"rating": {
"type": "float",
"description": "レビュースコア(例:1.0〜5.0)"
},
"summary": {
"type": "string",
"description": "レビューの要約テキスト"
}
}
},
{
"type": "PRODUCED",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物がプロデュースした映画"
},
{
"type": "WROTE",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が脚本を書いた映画"
},
{
"type": "DIRECTED",
"startNode": "Person",
"endNode": "Movie",
"direction": "OUTGOING",
"description": "この人物が監督した映画"
},
{
"type": "FOLLOWS",
"startNode": "Person",
"endNode": "Person",
"direction": "OUTGOING",
"description": "この人物がフォローしている別の人物"
}
]
}```
【映画情報】
きみの色
The Colors Within
シェア
予告編
予告編
(c)2024「きみの色」製作委員会
(c)2024「きみの色」製作委員会
(c)2024「きみの色」製作委員会
(c)2024「きみの色」製作委員会
公開日 2024年8月30日
上映時間 100 分
ジャンル ロマンス , 青春 , アニメーション
カラー Color
上映フォーマット DCP
字幕入り上映
フォーマット 英語 (DCP)
【監督】
山田尚子
【キャスト】
鈴川紗由 ── 日暮トツ子
髙石あかり ── 作永きみ
木戸大聖 ── 影平ルイ
【スタッフ】
吉田玲子 ── 脚本
牛尾憲輔 ── 音楽
小島崇史 ── キャラクターデザイン
小島崇史 ── 作画監督
ダイスケリチャード ── キャラクターデザイン原案
【製作会社】
「きみの色」製作委員会
【配給会社(国内)】
東宝
【制作会社】
サイエンスSARU
【解説】
「けいおん!」シリーズや『映画 聲の形』などで知られる山田尚子監督によるオリジナル長編アニメーション。
人が“色”で見える高校生のトツ子(声:鈴川紗由)は、同じ学校に通っていた美しい色を放つ少女・きみ(声:髙石あかり)と、古書店で出会った音楽好きの少年・ルイ(声:木戸大聖)とバンドを組むことに。それぞれが誰にも言えない悩みを抱えていた3人は音楽で心を通わせていき、友情とほのかな恋のような感情が生まれ始める。
【公式サイト】
https://kiminoiro.jp
【映画祭・受賞歴】
2024 アヌシー国際アニメーション映画祭 Feature Films Competition部門
2024 上海国際映画祭 Feature Films部門 金爵賞アニメーション最優秀作品賞
2024 ロカルノ国際映画祭
【海外窓口】
STORY(株)
E-mail: pr@story-inc.co.jp
以下は、LLMからの回答です。
CREATE文
// 映画ノード
CREATE (m1:Movie {
title: "きみの色",
english_title: "The Colors Within",
released: 2024,
tagline: "人が"色"で見える高校生のトツ子と、美しい色を放つ少女・きみ、音楽好きの少年・ルイがバンドを組む青春ストーリー",
runtime: 100,
color: "Color",
format: "DCP",
release_date: "2024年8月30日",
description: "「けいおん!」シリーズや『映画 聲の形』などで知られる山田尚子監督によるオリジナル長編アニメーション。人が"色"で見える高校生のトツ子は、同じ学校に通っていた美しい色を放つ少女・きみと、古書店で出会った音楽好きの少年・ルイとバンドを組むことに。それぞれが誰にも言えない悩みを抱えていた3人は音楽で心を通わせていき、友情とほのかな恋のような感情が生まれ始める。",
official_site: "https://kiminoiro.jp"
})
// 人物ノード
CREATE (p1:Person {name: "山田尚子"})
CREATE (p2:Person {name: "鈴川紗由"})
CREATE (p3:Person {name: "髙石あかり"})
CREATE (p4:Person {name: "木戸大聖"})
CREATE (p5:Person {name: "吉田玲子"})
CREATE (p6:Person {name: "牛尾憲輔"})
CREATE (p7:Person {name: "小島崇史"})
CREATE (p8:Person {name: "ダイスケリチャード"})
// キャラクターノード
CREATE (c1:Character {name: "日暮トツ子", description: "人が色で見える高校生"})
CREATE (c2:Character {name: "作永きみ", description: "美しい色を放つ少女"})
CREATE (c3:Character {name: "影平ルイ", description: "音楽好きの少年"})
// ジャンルノード
CREATE (g1:Genre {name: "ロマンス"})
CREATE (g2:Genre {name: "青春"})
CREATE (g3:Genre {name: "アニメーション"})
// 会社ノード
CREATE (co1:Company {name: "「きみの色」製作委員会", type: "製作会社"})
CREATE (co2:Company {name: "東宝", type: "配給会社"})
CREATE (co3:Company {name: "サイエンスSARU", type: "制作会社"})
CREATE (co4:Company {name: "STORY(株)", type: "海外窓口", contact: "pr@story-inc.co.jp"})
// リレーションシップ作成
CREATE (p1)-[:DIRECTED_BY]->(m1)
CREATE (p2)-[:ACTED_BY {character: "日暮トツ子", role_type: "声優"}]->(m1)
CREATE (p3)-[:ACTED_BY {character: "作永きみ", role_type: "声優"}]->(m1)
CREATE (p4)-[:ACTED_BY {character: "影平ルイ", role_type: "声優"}]->(m1)
CREATE (p5)-[:PRODUCED_BY {role: "脚本"}]->(m1)
CREATE (p6)-[:PRODUCED_BY {role: "音楽"}]->(m1)
CREATE (p7)-[:PRODUCED_BY {role: "キャラクターデザイン"}]->(m1)
CREATE (p7)-[:PRODUCED_BY {role: "作画監督"}]->(m1)
CREATE (p8)-[:PRODUCED_BY {role: "キャラクターデザイン原案"}]->(m1)
CREATE (p2)-[:VOICE_ACTED]->(c1)
CREATE (p3)-[:VOICE_ACTED]->(c2)
CREATE (p4)-[:VOICE_ACTED]->(c3)
CREATE (m1)-[:HAS_GENRE]->(g1)
CREATE (m1)-[:HAS_GENRE]->(g2)
CREATE (m1)-[:HAS_GENRE]->(g3)
CREATE (m1)-[:DISTRIBUTED_BY]->(co2)
CREATE (m1)-[:PRODUCED_BY_COMPANY]->(co1)
CREATE (m1)-[:PRODUCED_BY_COMPANY]->(co3)
前項で作成した 日本映画を題材としたグラフデータに対して、Neo4j Browser 上で CREATE 文を実行し、そのスキーマ構造を確認しました。
CALL db.schema.visualization
このコマンドにより、下図のようなグラフスキーマが可視化されます。

以下は、3本の映画を対象に抽出されたドメイン関係の例です。今回の結果は、セマンティックなエンティティ関係モデルへ自然にマッピングされており、ドメイン知識に沿った抽出になっていることが確認できます。
(Movie)-[:DIRECTED_BY]->(Person)
(Movie)-[:ACTED_BY]->(Person)
(Movie)-[:PRODUCED_BY]->(Person)
(Movie)-[:HAS_GENRE]->(Genre)
(Movie)-[:DISTRIBUTED_BY]->(Company)
(Movie)-[:PRODUCED_BY_COMPANY]->(Company)
(Movie)-[:HAS_EPISODE]->(Episode)
(Movie)-[:BASED_ON]->(Work)
(Person)-[:VOICE_ACTED]->(Character)
(Episode)-[:PART_OF]->(Movie)
Step4: 自然文からCyperを生成
自然言語からCyhper作成してみました。
同セッションなかでコンテキストが維持されている状態なので、ダイレクトに「要求」を出しています。
もし、APIで投入するなら、ロールや指示、ルール、出力フォーマット、セマンティックモデル、ソースデータを添付すべきです。
=====要求====
映画「きみの色」に関係するすべてのグラフをみたいです。
ここからは、次のような2つのクエリ文を取得しています。
関連する全ノード表示クエリ(推奨)
MATCH (m:Movie {title: "きみの色"})
OPTIONAL MATCH (m)-[r]-(n)
RETURN m, r, n
すべての関連パスを含む表示
MATCH (m:Movie {title: "きみの色"})
MATCH path = (m)-[*0..2]-(connected)
RETURN path

さらに以下のような日本語からCypherを生成して実行してみました。
映画「きみの色」の出演者と演じたキャラクターを知りたいです。
↓
MATCH (m:Movie {title: "きみの色"})
MATCH (person:Person)-[r:ACTED_BY]->(m)
RETURN person.name AS 出演者, r.character AS キャラクター名, r.role_type AS 役割
出演者 | キャラクター名 | 役割 |
---|---|---|
"鈴川紗由" | "日暮トツ子 | "声優" |
"髙石あかり" | "作永きみ" | "声優" |
"木戸大聖" | "影平ルイ" | "声優" |
映画「きみの色の、出演者名、演じたキャラクター、役割、キャラクター名の詳細、キャラクター説明、映画タイトルを知りたい。
RETURNの結果値は、「→」を付けて整形してください。
例: 鈴川紗由→日暮トツ子→声優
↓
MATCH (m:Movie {title: "きみの色"})
MATCH (person:Person)-[r:ACTED_BY]->(m)
OPTIONAL MATCH (person)-[:VOICE_ACTED]->(character:Character)
RETURN
person.name + "→" + r.character + "→" + r.role_type AS 出演者情報,
CASE
WHEN character.name IS NOT NULL THEN character.name + "→" + character.description
ELSE "詳細情報なし"
END AS キャラクター詳細,
m.title AS 映画タイトル
ORDER BY person.name
出演者情報 | キャラクター詳細 | 映画タイトル |
---|---|---|
"木戸大聖→影平ルイ→声優" | "影平ルイ→音楽好きの少年" | "きみの色" |
"鈴川紗由→日暮トツ子→声優" | "日暮トツ子→人が色で見える高校生" | "きみの色" |
"髙石あかり→作永きみ→声優" | "作永きみ→美しい色を放つ少女" | "きみの色" |
まとめ
今回の検証では、映画情報という比較的シンプルなソースデータを用い、弊社独自のアプローチで「データモデルの自動抽出の可能性」を試してみました。
データ自体は単純でしたが、それでも大きな手ごたえを得ることができました。
「ソースデータ → ドメインモデル → プロパティモデル → セマンティックモデル → サンプルグラフ → 評価」というPDCAサイクルを回すことで、「セマンティックモデル」をさらに洗練できる可能性が見えてきました。
この「セマンティックモデル」は、グラフの抽出・メンテナンスに加え、自然言語からCypherを生成する際にも活用でき、LLMにより正確な回答を得るためのシステムプロンプトの中核となり得ます。
一方で、グラフモデルの評価や改善には依然として人の介入が必要になりそうです。特に利用目的に応じて、どの関係性や属性を重視するか、どのように持たせるのか設計したり、判断するプロセスは、人間の知識や意図が大きく影響する部分です。
ただ、AIの時代は、まだ始まったばかりです。
「仕事がなくなる」とか「真っ先にやられるのは開発者だ」といった話を耳にすると、正直、少し憂鬱になることもあります。ですがその一方で、魔法のようなことが現実に起こり得るのではないかというワクワク感も、たしかにあるのです。
だからこそ、もっと好奇心を持ち、楽しみながら技術と向き合っていきたいと思います。