AIエージェント設計論: 意味記憶と知識表現のアーキテクチャ

こんにちは。スパイスコード代表の中河です。今日は前回の弊社 CTO 櫻木の記事の続きとして、弊社のエピソード・意味記憶に関する実装フレームワークを紹介したいと思います。

長くなってしまったので、ざっくりまとめ:

  • 知識の表現には圏論(Category Theory)を採用。Object(対象)と Morphism(関係)という統一モデルで、多くの知識抽出手法の出力を格納できます。Functor(関手)で異なる知識グラフを紐づけ、知識の出自追跡や横断的な検索を実現しています
  • トリプル抽出・命題分解といった抽出手法からGraphRAG的なもう少し包含的な手法まで Pluggable(差し替え可能)に運用できる。フレームワーク側は変えなくて OK
  • 実運用ではドメインに特化した Category を追加することで、特定タスクの精度を向上させています
  • 意味記憶の定着へはエピソード記憶(体験)→ 意味記憶(知識)への固定化と、外部データからの直接抽出、2つの入力経路があります

1. 導入 — 記憶の分類と意味記憶の位置づけ

前回の記事: AI エージェントの手続き記憶 — Chain 機構の設計

今回はその続編として、長期記憶のもう一つの柱である意味記憶(Semantic Memory)に焦点を当てます。

記憶の分類

まず、生物学的知能における記憶の全体像を改めて整理します。

graph TD
    LTM["長期記憶<br/>(Long-term Memory)"]
    DM["陳述記憶 / 宣言的記憶<br/>(Declarative Memory)"]
    NDM["非陳述記憶 / 非宣言的記憶<br/>(Non-declarative Memory)"]
    EM["エピソード記憶<br/>(Episodic Memory)<br/><i>個人的な体験の記憶</i>"]
    SM["意味記憶<br/>(Semantic Memory)<br/><i>一般的な知識・事実</i>"]
    PM["手続き記憶<br/>(Procedural Memory)<br/><i>スキル・手順の記憶</i>"]
    OTHER["プライミング, 条件づけ 等"]

    LTM --> DM
    LTM --> NDM
    DM --> EM
    DM --> SM
    NDM --> PM
    NDM --> OTHER

    style SM fill:#e8f4fd,stroke:#1976d2,stroke-width:3px
    style PM fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px,stroke-dasharray:5 5

前回の記事で扱った手続き記憶は「どうやるか(How)」の知識です。具体的には、高階関数として構成された tool chain の組み合わせ、あるいはタスク実行のための Python コードとして永続化され、LLM の推論を介さずに高速・低コストで再実行できる形態をとります。これに対し、意味記憶は「何であるか(What)」の知識です。たとえば、食品業界における商品の規格情報、アレルゲンの分類体系、取引先間の関係性といった構造化された知識は、すべて意味記憶の領域に属します。

なぜ AI エージェントに意味記憶が必要か

LLM は pre-training によって膨大な世界知識を獲得していますが、特定のドメインにおける専門知識 — とりわけ運用の中で蓄積される業務固有の知識 — は事前学習だけではカバーできません。AI エージェントが長期的に価値を発揮するには、以下の能力が不可欠です。

  • 体験からの知識抽出: タスク実行の記録(エピソード記憶)から、再利用可能な構造化知識(意味記憶)へと変換する
  • 外部知識の取り込み: 商品規格書、業務マニュアル、取引先データなど、外部ドキュメントから知識を抽出・統合する
  • 知識の体系的な管理: 断片的な情報を Entity と Relation のネットワークとして組織化し、推論可能な形で保持する

これはまさに、生物学的脳における記憶の固定化(Memory Consolidation)— 海馬での一時的な記憶が大脳新皮質の長期記憶へと再編成されるプロセス — に対応する機構です。

この記事の概要

本記事では、以下の 4 つの観点から意味記憶のアーキテクチャを論じます。

  1. 記憶の固定化メカニズム — 生物学的知能における海馬-新皮質間の記憶転送と、AI エージェントにおける知識構造化パイプラインの対応関係
  2. 圏論を用いた知識表現 — Category Theory のフレームワークを応用し、ドメイン知識の Entity ・ Relation ・ Property を数学的に整理する手法
  3. Pluggable な知識抽出戦略 — トリプル抽出、命題分解、GraphRAG など、入力ソースや要件に応じて切り替え可能な抽出パイプラインの設計
  4. 意味記憶の形成パイプライン — エピソード記憶や外部データから意味記憶が形成される全体フローと、Knowledge Graph への永続化

2. 生物学的知能における記憶の固定化

AI エージェントの意味記憶アーキテクチャを設計する前に、そのインスピレーションの源である生物学的知能の記憶メカニズムを概観します。ここでは特に、記憶の固定化(Memory Consolidation) — 一時的な体験の記録が、構造化された長期知識へと変換されるプロセス — に焦点を当てます。

注意: 以下の記述は、脳の機能局在に関する知見を大幅に単純化しています。実際の脳はここで描くような単純な二分法では動作しておらず、海馬と新皮質は常に相互作用しながら記憶処理を行っています。ここでの目的は、AI システム設計に有用なメンタルモデルを構築することであり、神経科学の厳密な記述ではありません。

2.1 エピソード記憶と意味記憶の神経科学的基盤

エピソード記憶と意味記憶の区分は、Endel Tulving (1972) が Organization of Memory において提唱したものです。Tulving は意味記憶を「言語の使用に必要な記憶を提供する心的シソーラス」、エピソード記憶を「時間的に特定されたエピソードや出来事、およびそれらの間の時空間的関係の記憶」と定義しました。

この区分は、神経心理学的な症例研究によって支持されています (Greenberg & Verfaellie, 2010)。

  • 内側側頭葉(MTL)損傷患者(例: 患者 H.M.): エピソード記憶に重度の障害がみられるが、発症前に獲得された意味記憶は概ね保持されている。固定化された意味記憶が新皮質に存在することを示唆する所見である。
  • 意味性認知症患者: 意味記憶に広範かつ重度の障害がみられるが、エピソード記憶は比較的保たれている。前側頭葉の変性と関連する、相補的なパターンである。

この二重解離は、エピソード記憶と意味記憶が異なる神経基盤に依存していることを示唆しています。

海馬(Hippocampus) は、エピソード記憶の高速形成を担う構造と考えられています。進行中の体験の各要素を迅速に結びつけ(binding)、スパースな符号化とパターン分離により、異なる記憶痕跡間の重複を最小化するとされています。これにより、個別のエピソードを one-shot learning で高忠実度に保存できると考えられています。海馬の損傷は前向性健忘(新しいエピソード記憶の形成不能)と、時間的に傾斜した逆向性健忘(最近の記憶ほど失われやすい)を引き起こすことが知られており、これが記憶固定化の標準モデルの重要な根拠となりました (Squire & Alvarez, 1995)。

新皮質(Neocortex) は、意味記憶の長期保存を担うと考えられています。海馬とは異なり、新皮質の学習は遅く漸進的であり、多数のエピソードにわたる統計的規則性と潜在的構造を抽出するとされています。分散的で重複する表現(distributed, overlapping representations)を用いることで、カテゴリ構造や一般化可能なルールを自然に捕捉すると言われています。

2.2 Complementary Learning Systems (CLS) Theory

なぜ脳はこのような二重構造を必要とするのでしょうか。McClelland, McNaughton, & O'Reilly (1995) は、その原論文 "Why there are complementary learning systems in the hippocampus and neocortex" (Psychological Review) において、コネクショニストモデルの根本的な問題から出発してこの問いに答えました。

その問題とは 破滅的干渉(catastrophic interference) です。ニューラルネットワークが新しい情報を学習すると、以前に学習した情報が完全に上書きされてしまう傾向があります。McClelland らはこの制約を、脳の二重記憶アーキテクチャの説明的フレームワークへと転換しました。

海馬 = Fast Learner:

  • スパース符号化とパターン分離により、異なる記憶痕跡間の干渉を最小化
  • 任意の連合の one-shot learning が可能
  • 個別エピソードを高忠実度で保存
  • 新皮質の「教師」として機能し、保存されたエピソードを再生(replay)して新皮質の漸進的学習を駆動

新皮質 = Slow Learner:

  • 分散的で重複する表現により、多数のエピソードにわたる統計的規則性を自然に捕捉
  • 学習は遅く、interleaved でなければならない — 破滅的干渉を回避するため
  • 多くのエピソードにわたって漸進的に統合し、意味的知識を構築
  • 文脈非依存的な構造化知識の柔軟な検索をサポート

CLS 理論における固定化メカニズムは次のように説明されます。まず記憶は海馬系のシナプス変化として保存されます。次にこれらの海馬痕跡が新皮質での最近の体験の再現(replay)を支持します。各再現に伴い新皮質のシナプスが漸進的に変化し、最終的に遠隔記憶は蓄積された新皮質変化に基づくようになります。この interleaved replay により、新皮質は古い記憶と新しい記憶の混合に曝されるため、既存の知識を破壊することなく新しい情報を漸進的に受容できます。

CLS 理論のアップデート: Kumaran, Hassabis, & McClelland (2016) は "What Learning Systems do Intelligent Agents Need?" (Trends in Cognitive Sciences, 20, 512-534) において、CLS 理論を大幅に拡張しました。主要な更新点は以下の通りです。

  • 海馬 replay の役割を拡大 — 体験統計の goal-dependent(目標依存的)な重み付けが可能
  • 海馬痕跡の反復的活性化が、エピソード的詳細だけでなく一部の汎化もサポートしうることを示した
  • 既存の知識構造(schema)と整合的な情報に対しては、新皮質学習が高速化しうることを示した — これは元の理論からの重大な拡張である
  • CLS 原理を人工知能(強化学習、deep learning における experience replay)と明示的に結びつけた

schema-consistent 情報の高速新皮質学習は、Tse et al. (2007) の実験で劇的に示されました。ラットがスキーマを獲得した後、スキーマと整合的な新しい連合は 1 回の試行で学習され、その記憶の固定化はわずか 48 時間以内に完了しました。McClelland (2013) はこの知見を CLS 理論に組み込み、新情報が既存スキーマと整合する場合、通常の遅い interleaving 過程を経ずに新皮質ネットワークへ迅速に統合されうると提案しました。

2.3 Sleep Replay と記憶の固定化

記憶の固定化において重要な役割を果たすと考えられているのが、睡眠中のオフライン再処理です。

睡眠 replay(sleep replay)とは、覚醒時の体験中に活動していた海馬のニューロン発火パターンが、睡眠中に自発的に再活性化される現象です。この再活性化は、システム固定化を駆動する「オフライン再学習試行」として機能すると考えられています。

Rasch & Born (2013) の包括的レビュー (Physiological Reviews) は、睡眠と記憶の関係について以下の主要知見をまとめています。

  • 初期の理論は睡眠の受動的役割(干渉からの保護)を主張したが、現在の理論は睡眠中に記憶がシステム固定化を経る能動的役割を強調している
  • 徐波睡眠(SWS) は宣言的記憶の固定化に特に重要であり、REM 睡眠は手続き記憶や情動記憶の処理により寄与する
  • 新たに獲得された記憶は SWS 中に自発的に replay され、海馬から新皮質へと再活性化が流れる

2.4 AI エージェント設計への示唆

以上の神経科学的知見は、AI エージェントの記憶アーキテクチャ設計に対して明確なアナロジーを提供します。

生物学的メカニズム AI エージェントにおける対応
海馬 — 体験の高速符号化、one-shot learning エピソード記憶ストア — タスク実行ログの即時記録、個別の体験を高忠実度で保存
新皮質 — 分散表現、統計的規則性の漸進的抽出 意味記憶(Knowledge Graph) — 構造化された知識の長期保存、多数のエピソードからのパターン抽出
記憶の固定化 — 海馬から新皮質への段階的再編成 知識抽出パイプライン — エピソード記憶からの構造化知識の抽出・統合
Sleep replay — オフラインでの再活性化と再処理 バッチ処理パイプライン — 非同期的な知識抽出・統合ジョブ
Catastrophic interference 回避 — interleaved replay 増分的な知識グラフ更新 — 既存知識との整合性を保ちながらの漸進的統合
Schema-consistent 高速学習 — 既存スキーマと整合的な情報の迅速な新皮質統合 スキーマベースの高速取り込み — 既存のオントロジーに適合する情報の効率的な構造化

Kumaran et al. (2016) が明示的に指摘したように、CLS 理論の原理は deep learning におけるexperience replayと直接的な対応関係があるとされています。DQN(Deep Q-Network)が過去の体験をバッファに蓄積し、ランダムにサンプリングして interleaved training を行う手法は、海馬 replay による新皮質学習の計算論的アナロジーです。

我々の AI エージェントにおける意味記憶システムも、同様の原理に基づいて設計されています。タスク実行の記録(エピソード記憶)は即時に保存され、非同期の知識抽出パイプライン(固定化プロセス)がこれらのエピソードから Entity、Relation、Property を抽出して知識グラフ(意味記憶)へと統合します。このとき、既存のオントロジー(schema)と整合的な情報は効率的に統合される一方、新しいカテゴリの知識は段階的に取り込まれます — まさに CLS 理論が予測する動態です。

次のセクションでは、この異なる意味記憶の構造を統一フレームワークで取り扱うため、圏論(Category Theory)のフレームワークを導入します。

3. 圏論による統一的な知識表現フレームワーク

3.1 なぜ圏論か

AI エージェントの意味記憶は、リソース知識(ツリー構造)、トリプル知識(密なネットワーク)、チャンク知識(局所的クラスタ)、エピソード知識など、異質なグラフ構造を統一的に扱う必要があります。圏論(Category Theory)を採用する理由は 2 つあります。

  1. 異質なグラフ構造の統一表現: 異なる種類の知識グラフを「対象と射からなる圏」という共通モデルで表現し、Functor によってグラフ間の関係を統一的に扱える
  2. 抽出精度に応じた圏の構造の選択: 知識抽出パイプラインは「自由圏の構築(LLM 抽出)→ 商圏の構築(重複排除)」の 2 段階で構成される(Section 3.5)。抽出精度が高いドメインでは商圏まで進め、重複排除と同一視により推論的な検索に適した密なグラフを構築できる。精度が十分でないドメインでは自由圏に留め、ベクトル検索による柔軟なマッチングに重きを置くことができる

3.2 圏論の基本概念

圏論の基本概念を、ソフトウェアエンジニア向けにコンパクトに整理します。厳密な定義は Awodey, Category Theory (2nd ed., Oxford, 2010) および Mac Lane, Categories for the Working Mathematician (2nd ed., Springer, 1998) に準拠しています。

圏(Category)

C は以下のデータから構成されます。

  1. 対象(Object)の集まり Ob(C)
  2. 対象の各ペア (A, B) に対する射(Morphism)の集まり Hom(A, B)。射 f in Hom(A, B) を f : A -> B と書く
  3. 射の合成(Composition): Hom(B, C) x Hom(A, B) -> Hom(A, C)、すなわち (g, f) |-> g . f
  4. 各対象 A に対する恒等射(Identity Morphism) id_A : A -> A

これらは 2 つの公理を満たす必要があります。

  • 結合律(Associativity): h . (g . f) = (h . g) . f
  • 単位律(Identity Law): id_B . f = f = f . id_A

ソフトウェアエンジニアの言葉で言えば、圏とは「ノード(対象)とエッジ(射)からなるグラフに、エッジの合成規則と各ノードの自己ループ(恒等射)を加えたもの」です。重要なのは、合成の結合律が保証されている点 — これにより、複数の射の合成を括弧の付け方に依存せず一意に計算できます。

関手(Functor)

圏 C から圏 D への関手 F : C -> D は、構造を保存する写像です。

  • 対象の写像: A |-> F(A)
  • 射の写像: (f : A -> B) |-> (F(f) : F(A) -> F(B))

以下の 2 条件を満たします。

  • 合成の保存: F(g . f) = F(g) . F(f)
  • 恒等射の保存: F(id_A) = id_{F(A)}

ソフトウェアの文脈では、関手は「グラフ間の構造保存変換」に相当します。あるグラフのノードとエッジを別のグラフのノードとエッジに変換しつつ、接続関係を壊さないマッピングです。

自由圏(Free Category)

有向グラフ G が与えられたとき、G から生成される自由圏 F(G) は以下のように定義されます。

  • 対象: G の頂点
  • : G 上のパス(辺の有限列)。長さ 0 のパス(空パス)が恒等射
  • 合成: パスの連結

自由圏の本質は普遍性(Universal Property)にあります。任意の圏 D と任意のグラフ準同型 H : G -> U(D)(U は圏の「下に横たわるグラフ」を取る忘却関手)に対し、H を一意に拡張する関手 H' : F(G) -> D が存在します。

G ---H---> U(D)
|            ^
|eta_G       |U(H')
v            |
U(F(G)) ----+

つまり自由圏は、「グラフ構造を完全に保存する、最も一般的な圏」です。グラフに対して余計な等式を一切課さず、すべてのパスを独立な射として保持します。ソフトウェアの比喩を使えば、自由圏は「グラフのパスを全列挙したインデックス」のようなものです。

商圏(Quotient Category)

圏 C 上の合同関係(Congruence) R とは、各 Hom(A, B) 上の同値関係であって、合成と両立するものです。すなわち、f ~ f' かつ g ~ g' ならば g . f ~ g' . f' が成立します。

合同関係 R による商圏 C/R は以下のように構成されます。

  • 対象: C と同じ
  • : 同値類 [f](射 f の同値類)
  • 合成: [g] . [f] = [g . f](合同関係により well-defined)

商圏の要点は、特定の射を「同じもの」として同一視する操作です。

圏の提示: 自由圏 + 関係 = 圏

「基本となる矢印(生成元)」と「ルートの同一視ルール(関係)」を組み合わせることで、目的の圏を定義できます。具体的には以下のステップを踏みます。

  1. 生成元: ベースとなる有向グラフ G を指定する
  2. 関 係: 「このルートとあのルートは結果が同じ」という等式の集合 E を指定する
  3. 構 成: グラフ上のすべてのパスの集まり(自由圏 F(G))を、ルールの通りに同一視してまとめる(商圏 C = F(G) / R_E)

ソフトウェアの設計に例えると、「取り得るすべての状態遷移や処理のルート(自由圏)を洗い出し、最終的な結果や状態が同じになるルート同士を同一視する(重複排除・正規化)ことで、システムの本質的な振る舞いやデータ構造を抽出する」というパイプラインに対応します。

3.3 グラフ構造へのマッピング

圏論の概念を、我々の意味記憶システムの具象構造にマッピングします。

圏論の概念 意味記憶システムにおける対応
Category(圏) 知識グラフ全体(1つの抽出単位)
Object(対象) グラフのノード(Entity)
Morphism(射) グラフのエッジ(Relation)
Identity Morphism(恒等射) 自己参照エッジ(Entity の Self-loop)
Functor(関手) グラフ間の構造保存マッピング

知識の種類に応じて、4つの CategoryType を定義しています。

class CategoryType(IntEnum):
    """Type of semantic category."""
    CHUNK = 0     # テキストチャンクから抽出された知識グラフ
    RESOURCE = 1  # 構造化リソースから抽出された知識グラフ
    EPISODE = 3   # エピソード記憶から汎化された知識グラフ
    TRIPLE = 4    # トリプル形式で抽出された知識グラフ

各 CategoryType はそれぞれ異なる抽出手法から生成されますが、いずれも同一のデータモデル — Object(ノード)と Morphism(エッジ)の集合 — として表現されます。

@dataclass
class ExtractedCategory:
    """1 つの圏 = 1 つの知識グラフ"""
    name: str
    description: str
    objects: list[ExtractedObject]      # 対象 = ノード群
    morphisms: list[ExtractedMorphism]  # 射 = エッジ群
    hierarchy_level: int | None = None  # 抽象度レベル
    functors: list[ExtractedFunctor] | None = None  # 他の圏への関手

@dataclass
class ExtractedObject:
    """対象 = グラフのノード"""
    id: str
    name: str
    description: str
    properties: dict[str, Any]
    uri: str | None = None     # ソースリソース URI
    chunk: str | None = None   # ソーステキスト

@dataclass
class ExtractedMorphism:
    """射 = グラフのエッジ"""
    id: str
    name: str
    source_object_id: str   # domain(始域)
    target_object_id: str   # codomain(終域)
    description: str
    is_identity: bool       # 恒等射かどうか
    properties: dict[str, Any]

以下の Mermaid 図は、CategoryType 間の Functor 関係を示しています。異なる抽出手法から生成された知識グラフ同士が、Functor によって関連付けられます。

graph TB
    subgraph "CategoryType = RESOURCE (1)"
        R_CAT["Resource Category<br/><i>構造化リソースから抽出</i>"]
        R_OBJ1["Object: 商品 A"]
        R_OBJ2["Object: 規格 X"]
        R_OBJ1 -->|"Morphism: has_spec"| R_OBJ2
    end

    subgraph "CategoryType = TRIPLE (4)"
        T_CAT["Triple Category<br/><i>トリプル形式で抽出</i>"]
        T_OBJ1["Object: 商品 A"]
        T_OBJ2["Object: カテゴリ Y"]
        T_OBJ1 -->|"Morphism: belongs_to"| T_OBJ2
    end

    subgraph "CategoryType = CHUNK (0)"
        C_CAT["Chunk Category<br/><i>テキストチャンクから抽出</i>"]
        C_OBJ1["Object: 商品 A"]
        C_OBJ2["Object: 原材料 Z"]
        C_OBJ1 -->|"Morphism: contains"| C_OBJ2
    end

    subgraph "CategoryType = EPISODE (3)"
        E_CAT["Episode Category<br/><i>エピソードから汎化</i>"]
        E_OBJ1["Object: 発注パターン"]
        E_OBJ2["Object: 商品 A"]
        E_OBJ1 -->|"Morphism: targets"| E_OBJ2
    end

    R_CAT -.->|"Functor"| T_CAT
    T_CAT -.->|"Functor"| C_CAT
    E_CAT -.->|"Functor"| R_CAT

    style R_CAT fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    style T_CAT fill:#fce4ec,stroke:#c62828,stroke-width:2px
    style C_CAT fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
    style E_CAT fill:#fff3e0,stroke:#e65100,stroke-width:2px

他の例として、例えば、同じ商品規格書のテキストに対して、トリプル抽出と命題分解をそれぞれ適用した場合を考えます。トリプル抽出は「商品 A — 含有 → 小麦」のような Entity 間の関係を抽出し、TripleCategory に格納します。命題分解は「商品 A は小麦を主原料とする北海道産の製品である」のような atomic な命題を抽出し、PropositionCategory に格納します。TripleCategory と PropositionCategory はいずれも、ソーステキストの ChunkCategory を Functor で参照します。つまり、同じチャンクから抽出された異なる粒度の知識が、ChunkCategory を介して Functor Element で紐づけられます。これにより、トリプルの構造的な関係と命題の文脈的な情報を横断的に検索・統合できます。

Functor は ExtractedFunctor として実装されており、ソース圏の Object をターゲット圏の Object にマッピングする要素のリストを保持します。

@dataclass
class ExtractedFunctor:
    """関手 = 圏間の構造保存マッピング"""
    name: str
    description: str
    elements: list[ExtractedFunctorElement]  # Object 間のマッピング
    target_category_name: str | None = None

@dataclass
class ExtractedFunctorElement:
    """関手の 1 要素 = Object 間の対応"""
    source_object_id: str
    target_object_id: str

3.4 4 つの圏の役割と階層構造

4 つの圏は、それぞれ異なる知識の側面を表現しています。

役割 含まれる Object の例
ResourceCategory 知識元のファイルや URL を表す。1つのリソース(ファイル、URL、ドキュメント)が 1 つの Object となる 「商品 A 規格書.pdf」「https://example.com/product-a
EpisodeCategory 過去のエピソード(タスク実行の体験)を表す。エージェントの行動履歴から汎化された知識が含まれる 「発注パターン」「在庫調整手順」
ChunkCategory テキストチャンクそのものを表す。チャンキングされた文書の各パッセージが 1 つの Object となる 「商品 A の規格書 第 2 段落」「発注履歴レポート 冒頭部」
TripleCategory トリプル分解(Subject-Predicate-Object)の結果を表す。抽出された Entity が Object となり、Relation が Morphism となる 「商品 A」「小麦」「北海道」(Object)、「含有」「産地」(Morphism)

重要な点は、これらの圏はそれぞれ独立して存在するのではなく、階層構造を持ち、Functor Element によって互いの Object 同士が紐づいていることです。

階層レベルと Functor 生成

抽出パイプラインは、各圏を階層レベル順に生成します。各レベルの処理が完了すると、上位レベルの圏から直前の下位レベルの圏への Functor が自動生成されます。

graph TB
    subgraph "Level 2"
        TRIPLE["TripleCategory<br/><i>トリプル分解結果</i>"]
    end
    subgraph "Level 1"
        CHUNK["ChunkCategory<br/><i>テキストチャンク</i>"]
    end
    subgraph "Level 0"
        RESOURCE["ResourceCategory<br/><i>知識元ファイル/URL</i>"]
    end

    TRIPLE -.->|"Functor<br/>(自動生成)"| CHUNK
    CHUNK -.->|"Functor<br/>(自動生成)"| RESOURCE

    style TRIPLE fill:#fce4ec,stroke:#c62828,stroke-width:2px
    style CHUNK fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
    style RESOURCE fill:#e3f2fd,stroke:#1565c0,stroke-width:2px

つまり、1つの入力データから抽出される複数の圏は、Functor で自動的に連鎖する構造を形成します。EpisodeCategory もエピソード記憶パイプラインにおいて同様の階層に組み込まれ、エピソードから抽出されたトリプルとの間に Functor が生成されます。

Functor Element による Object 間の紐づけ

Functor は圏と圏の間の構造ですが、実際に Object 同士を紐づけるのは Functor Element です。1つの Functor Element が「ソース圏のある Object」と「ターゲット圏のある Object」の対応を 1 件記録し、Functor に紐づく複数の Functor Element が 2 つの圏の間の Object 群のマッピングを構成します。

例えば、TripleCategory → ChunkCategory の Functor では、トリプル抽出時に各 Object がどのチャンクから抽出されたかを追跡しており、Functor Element はその出自関係に基づいて Object 同士を紐づけます。

graph LR
    subgraph "TripleCategory"
        T1["Object: 商品 A"]
        T2["Object: 小麦"]
        T1 -->|"Morphism: 含有"| T2
    end

    subgraph "ChunkCategory"
        C1["Object: 規格書 第 3 段落"]
    end

    subgraph "ResourceCategory"
        R1["Object: 商品 A 規格書.pdf"]
    end

    T1 -.->|"Functor Element"| C1
    T2 -.->|"Functor Element"| C1
    C1 -.->|"Functor Element"| R1

    style T1 fill:#fce4ec,stroke:#c62828,stroke-width:2px
    style T2 fill:#fce4ec,stroke:#c62828,stroke-width:2px
    style C1 fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
    style R1 fill:#e3f2fd,stroke:#1565c0,stroke-width:2px

この構造は、知識の出自追跡(Provenance Tracking)を可能にします。エージェントが「商品 A は小麦を含有する」というトリプルを利用する際に、Functor Element を辿ることで、その根拠となる Chunk テキスト(規格書 第 3 段落)と元のリソース(商品 A 規格書.pdf)まで遡ることができます。

EpisodeCategory の場合も同様に、エピソードから抽出されたトリプルとの間に Functor Element が生成され、「この知識はどのタスク実行で得られたか」というエピソード的文脈を保持します。一方、Section 5.2 で後述する外部データ(規格書等)からの直接抽出の場合、EpisodeCategory への Functor は生成されません — 体験を経由しない知識にはエピソード的文脈が存在しないためです。

ドメイン特化 Category の追加

ResourceCategory、ChunkCategory、EpisodeCategory、TripleCategory の 4 つは汎用的な基本圏ですが、このフレームワークは特定のドメインや業務タスクに特化した構造を持つ Category を自由に追加して運用できる設計になっています。

例えば、食品業界であれば「アレルゲン管理に特化した Category」を定義し、アレルゲン物質を Object、含有関係や閾値を Morphism として構造化することが考えられます。物流ドメインであれば「配送ルート最適化 Category」を定義し、倉庫・配送先を Object、配送経路を Morphism として表現できます。

新たに追加されたドメイン特化 Category も、既存の基本圏と同じ Object/Morphism のデータモデルに従うため、Functor Element によって基本圏の Object と紐づけることができます。つまり、ドメイン固有の知識構造を導入しても、既存のストレージ、検索、重複排除の仕組みはそのまま利用でき、他の Category との横断的な知識統合も自然に実現されます。

これは圏論ベースのフレームワークがもたらす拡張性の核心です。「対象と射からなる圏」という抽象度の高い統一モデルを採用しているからこそ、ドメインごとに異なる知識構造を同一のフレームワーク内に共存させることができます。

3.5 実装の圏論的構造

我々の知識抽出パイプラインは、圏論的に見ると以下の 2 段階で構成されています。

第 1 段階: 自由圏の構築(LLM 抽出)

LLM による知識抽出は、入力テキストから有向グラフ G を生成し、その自由圏 F(G) を構築するプロセスに対応します。LLM が抽出した全ての Object と Morphism はそのまま保持され、パス間の等式は一切課されません。

第 2 段階: 商圏の構築(重複排除)

抽出されたグラフには重複が含まれます — 同一の Entity が異なる名前で抽出されたり、異なるチャンクから同じ Relation が抽出されたりします。これを解消するのが deduplication(重複排除)プロセスであり、圏論的には合同関係による商圏の構築に対応します。

「商品 A」と「商品 A」と「Product A」が同一 Entity であるという同値関係を定義し、これらを 1 つの同値類に同一視する。この操作は、自由圏 F(G) 上に合同関係 R を定義し、商圏 F(G)/R を構成することと対応しています。

全体として: 意味記憶 = F(G) / R = 自由圏 / 合同関係

3.6 制約事項

我々の実装は、圏論の公理(結合律・単位律・合成の網羅性)を完全には保証していません。LLM による知識抽出は本質的に確率的であり、抽出されたグラフが厳密な圏を構成するとは限らないためです。

ただし、Section 3.1 で述べたように、これは段階的に対処可能な制約です。抽出精度が十分でないドメインでは自由圏に留めて公理に依存しない運用を行い、精度が高いドメインでは商圏まで進めて重複排除や同一視といった圏論の構造的特性を積極的に活用できます。公理の成立度合いが抽出精度と連動する設計により、圏論は精度に応じて実質的な計算上の恩恵を提供するフレームワークとして機能しています。

3.7 なぜ万能か — Section 4 への橋渡し

ここまでの議論を振り返ると、圏論による知識表現の核心的な強みが見えてきます。

GraphRAG のようにドキュメントをチャンク分割して Entity-Relation を抽出する手法も、Proposition ベースで atomic な命題を抽出する手法も、トリプル形式で主語-述語-目的語を抽出する手法も、出力は常に「ノードの集合とエッジの集合」です。圏論の言葉で言えば、これは「対象と射からなる圏」です。

この汎用性により、以下が可能になります。

  1. 同一モデルへの格納: あらゆる抽出手法の出力を ExtractedCategory(対象と射のリスト)として統一的に格納できる
  2. Functor による横断的関連付け: 異なる CategoryType の知識グラフ間で、Object 同士のマッピング(Functor)を定義し、知識を横断的に統合できる
  3. 抽出手法の Pluggable 化: 入力ソースや要件に応じて抽出手法を切り替えても、下流のストレージや検索の仕組みを変更する必要がない

この汎用性は、自由圏の普遍性(Universal Property)に裏付けられています。任意のグラフから圏を構成できるという自由圏の性質が、多様な抽出手法の出力を統一モデルに受け入れる能力を保証し、関手の概念が異なる知識グラフ間の構造保存的な関連付けを可能にします。

次のセクションでは、この統一フレームワークの上で実際にどのような知識抽出戦略(Extraction Strategy)が動作するかを詳しく見ていきます。

4. Pluggable な知識抽出戦略

4.1 フレームワークがもたらす Pluggability

Section 3.7 で述べたように、あらゆる知識抽出手法の出力は Category/Object/Morphism モデルとして統一的に格納できます。新しい抽出戦略の追加は「テキストから ExtractedCategory への変換ロジックを書く」ことに帰着し、下流のストレージ・検索・重複排除はすべて抽出手法に依存しません。

本セクションでは、この原理が具体的にどう機能するかを、3つの代表的な抽出手法(トリプル抽出、命題分解、GraphRAG)のマッピングを通じて示します。

graph TB
    INPUT["入力テキスト"]

    subgraph "抽出戦略(Pluggable)"
        S1["トリプル抽出"]
        S2["命題分解"]
        S3["GraphRAG"]
        S4["将来の手法..."]
    end

    subgraph "統一データモデル(不変)"
        CAT["ExtractedCategory"]
        OBJ["Object 群(Node)"]
        MOR["Morphism 群(Edge)"]
        CAT --- OBJ
        CAT --- MOR
    end

    subgraph "下流パイプライン(不変)"
        STORE["Knowledge Graph 永続化"]
        DEDUP["重複排除(商圏)"]
        SEARCH["検索・推論"]
    end

    INPUT --> S1
    INPUT --> S2
    INPUT --> S3
    INPUT --> S4
    S1 --> CAT
    S2 --> CAT
    S3 --> CAT
    S4 --> CAT
    CAT --> DEDUP --> STORE --> SEARCH

    style CAT fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    style S1 fill:#fce4ec,stroke:#c62828
    style S2 fill:#e8f5e9,stroke:#2e7d32
    style S3 fill:#fff3e0,stroke:#e65100
    style S4 fill:#f3e5f5,stroke:#7b1fa2,stroke-dasharray:5 5

4.2 トリプル抽出と命題分解

テキストから構造化された知識を抽出する代表的なアプローチとして、トリプル抽出命題分解があります。

トリプル抽出(Triple Extraction) は、テキストから (Subject, Predicate, Object) 形式のトリプルを抽出する手法です。OpenIE(Banko et al., 2007)に始まり、REBEL(Cabot and Navigli, Findings of EMNLP 2021)による seq2seq 化を経て、現在は LLM ベースの抽出(KGGen: Mo et al., arXiv:2502.09956, 2025)が主流です。我々の実装でも DSPy を用いた LLM ベースのトリプル抽出を採用しています。トリプル (Subject, Predicate, Object) は射 Predicate : Subject -> Object として圏の構造に直接対応し、マッピングは最も直截的です。

命題分解(Proposition Extraction) は、テキストを原子的な命題(proposition)に分解するアプローチです。Chen et al.(arXiv:2312.06648, 2023; EMNLP 2024)は "Dense X Retrieval" において、Atomic(単一事実)・ Minimal(最小限の情報)・ Self-contained(自己完結的)な命題を検索単位として提案し、パッセージ単位やセンテンス単位と比較して検索精度の大幅な向上を示しました。命題分解では各命題が Object、命題間の関係(supports, contradicts 等)が Morphism となります。

2 つのアプローチの本質的な違いは、何を中心に据えるかです。トリプル抽出では Entity 間の Relation が主役で密なネットワークを形成し、命題分解では atomic な事実が独立した情報単位として機能します。どちらも最終的には Object + Morphism の集合として ExtractedCategory に格納され、フレームワーク側から見れば違いは抽出ロジックのみです。

4.3 エンティティ + 関係の構造化抽出(Microsoft GraphRAG)

Edge et al.(arXiv:2404.16130, 2024)が提案したGraphRAGは、トリプル抽出をさらに発展させ、抽出されたグラフに対するコミュニティ検出と階層的要約を組み合わせたアプローチです。

パイプライン概要

GraphRAG の知識抽出パイプラインは 4 つの段階から構成されます。

  1. ソースドキュメントのチャンク分割: テキストをチャンクに分割する。論文では、チャンクサイズ 600 トークンが 2400 トークンに比べて約 2 倍の Entity 参照を抽出できることが報告されている
  2. Entity ・ Relationship 抽出: LLM プロンプトにより、各チャンクから Entity(ノード)、Relationship(エッジ)、および Claim(共変量)を抽出する。Gleaningsと呼ばれる技法で、LLM を複数ラウンド呼び出して前のラウンドで見逃された Entity の追加抽出を促す
  3. Leiden アルゴリズムによるコミュニティ検出: 構築されたグラフに対して Leiden アルゴリズム(Traag, Waltman, and van Eck, Scientific Reports, 2019)を適用し、階層的なコミュニティ構造を検出する。Leiden アルゴリズムは louvain 法を改良したもので、局所的ノード移動、refinement フェーズ(poorly connected なコミュニティの分割)、集約の 3 フェーズからなり、well-connected なコミュニティを保証する
  4. コミュニティ要約: LLM が各コミュニティの要約を生成し、そのクラスタ内の主要なテーマと関係を捕捉する

マッピング: GraphRAG → Category/Object/Morphism

GraphRAG の出力には、Entity、Relationship、そして Community という 3 つの構造が含まれます。これらは圏論のフレームワークに以下のようにマッピングされます。

GraphRAG 要素 圏論の概念 データモデル
Entity Object(対象) ExtractedObject — Entity 名と description を格納
Relationship Morphism(射) ExtractedMorphism — 2 つの Entity 間の関係
Community(低レベル) Category(圏) ExtractedCategory — コミュニティ内の Entity 群と Relationship 群
Community(上位レベル) 上位 Category ExtractedCategory with hierarchy_level — 階層レベルを指定
コミュニティ間の包含関係 Functor(関手) ExtractedFunctor — 下位コミュニティの Node を上位コミュニティの Node にマッピング

特に重要なのは、Leiden アルゴリズムが生成する階層的コミュニティ構造が、hierarchy_level 属性を持つ複数の ExtractedCategory として自然に表現できる点です。下位レベルの Category から上位レベルの Category への Functor は、コミュニティのネスト構造(ある小さなコミュニティがより大きなコミュニティに包含される関係)を圏論的に記述します。

graph TB
    subgraph "hierarchy_level = 2"
        C2["Category: 食品流通全体<br/>(上位コミュニティ)"]
    end

    subgraph "hierarchy_level = 1"
        C1A["Category: 冷蔵品グループ"]
        C1B["Category: 常温品グループ"]
    end

    subgraph "hierarchy_level = 0"
        C0A["Category: 乳製品"]
        C0B["Category: 鮮魚"]
        C0C["Category: 調味料"]
        C0D["Category: 乾物"]
    end

    C0A -.->|"Functor"| C1A
    C0B -.->|"Functor"| C1A
    C0C -.->|"Functor"| C1B
    C0D -.->|"Functor"| C1B
    C1A -.->|"Functor"| C2
    C1B -.->|"Functor"| C2

    style C2 fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    style C1A fill:#e8f5e9,stroke:#2e7d32
    style C1B fill:#e8f5e9,stroke:#2e7d32
    style C0A fill:#fff3e0,stroke:#e65100
    style C0B fill:#fff3e0,stroke:#e65100
    style C0C fill:#fff3e0,stroke:#e65100
    style C0D fill:#fff3e0,stroke:#e65100

4.4 Chunking 手法との組み合わせ

知識抽出戦略は、入力テキストの Chunking 手法と密接に関連します。どの抽出手法を用いるにしても、長大なドキュメントをどのような単位に分割するかは抽出品質に直接影響します。

主要な Chunking 手法を概観します。

  • Fixed-size Chunking: テキストを固定トークン数(例: 256, 512, 1024)で分割する最もシンプルな手法。文の途中で分割される可能性がある
  • Semantic Chunking: Greg Kamradt が提唱し、LangChain で実装された手法。連続する文の embedding 間の cosine similarity を計算し、類似度が閾値を下回る地点でブレークポイントを設定する
  • Context-enriched Chunking(Contextual Retrieval): Anthropic(2024)が発表した手法。LLM を用いて各チャンクにドキュメント全体における位置づけを説明する短いコンテキストを付与してから embedding する。top-20-chunk 検索の失敗率を最大 67%削減した
  • Late Chunking: Jina AI(Gunther et al., arXiv:2409.04701, 2024)が提案した手法。従来の「チャンク分割 → embedding」の順序を逆転させ、長コンテキスト embedding モデルでドキュメント全体をまず transformer 層に通し、トークンレベルの文脈化表現を得てからチャンク境界で mean pooling を適用する

これらの Chunking 手法もまた、圏論のフレームワーク内で表現できます。各チャンクを Object(ノード)とし、チャンク間の隣接関係や親子関係を Morphism(エッジ)とすれば、1つの Chunking の結果は ExtractedCategory として表現可能です。

この発想を拡張すると、抽出戦略と Chunking の階層的な組み合わせが可能になります。例として、以下のような 3 レベルの階層を考えます。

graph TB
    subgraph "Level 2: Triples"
        T1["Category: チャンク 1 のトリプル群"]
        T2["Category: チャンク 2 のトリプル群"]
        T3["Category: チャンク 3 のトリプル群"]
    end

    subgraph "Level 1: Chunks"
        CH1["Category: チャンク 1"]
        CH2["Category: チャンク 2"]
        CH3["Category: チャンク 3"]
    end

    subgraph "Level 0: Resource"
        R["Category: ドキュメント全体"]
    end

    T1 -.->|"Functor<br/>(出自追跡)"| CH1
    T2 -.->|"Functor<br/>(出自追跡)"| CH2
    T3 -.->|"Functor<br/>(出自追跡)"| CH3

    CH1 -.->|"Functor<br/>(出自追跡)"| R
    CH2 -.->|"Functor"| R
    CH3 -.->|"Functor"| R

    style T1 fill:#fce4ec,stroke:#c62828
    style T2 fill:#fce4ec,stroke:#c62828
    style T3 fill:#fce4ec,stroke:#c62828
    style CH1 fill:#e8f5e9,stroke:#2e7d32
    style CH2 fill:#e8f5e9,stroke:#2e7d32
    style CH3 fill:#e8f5e9,stroke:#2e7d32
    style R fill:#e3f2fd,stroke:#1565c0,stroke-width:2px

Level 2(Triples)から Level 1(Chunks)への Functor は各トリプルがどのチャンクから抽出されたかを追跡し、Level 1 から Level 0(Resource)への Functor はチャンクのソースドキュメントへの出自を記録します。Section 3.4 と同じく、抽象度の高い知識(トリプル)を上位レベル、知識元(リソース)を下位レベルとする体系です。各レベルの Category は hierarchy_level 属性で区別され、Functor 群がレベル間の構造的な接続を提供します。このように Chunking と抽出を Functor で結ぶことで、抽出されたトリプルからソースチャンク、さらにソースドキュメントへの遡行が、グラフ構造として自然に表現されます。

4.5 まとめ: フレームワーク側は変えない

本セクションで見てきたように、トリプル抽出、命題分解、GraphRAG の Entity-Relationship 抽出、そして各種 Chunking 手法は、それぞれ異なるアルゴリズムと異なる目的を持ちながらも、すべて同一のデータモデル — Category/Object/Morphism — に変換可能です。

この設計の要点は明確です。

  • 不変なもの: ExtractedCategory / ExtractedObject / ExtractedMorphism のデータモデル、Neo4j への永続化ロジック、重複排除(商圏)の機構、Functor によるグラフ間接続
  • 変わるもの: テキストから Graph への変換ロジック — すなわち、どのような手法で Entity と Relation を抽出するかという部分のみ

新しい抽出手法が学術コミュニティで提案されたとき — 例えば、より高精度な LLM ベースのトリプル抽出や、ドメイン特化型の構造化抽出手法が登場したとき — フレームワーク側のコードを変更する必要はありません。新しい手法の出力を ExtractedCategory に変換するロジックを追加するだけで、既存のパイプライン全体がそのまま利用できます。

次のセクションでは、これらの抽出戦略がどのようにパイプラインとして統合され、エピソード記憶や外部データソースから意味記憶が形成される全体フローを見ていきます。

5. 意味記憶の形成パイプライン

Section 3 で圏論に基づく統一データモデル(Category/Object/Morphism)を定義し、Section 4 で Pluggable な知識抽出戦略を論じました。本セクションでは、これらの部品がどのようにパイプラインとして統合され、意味記憶が実際に形成される全体フローを示します。

意味記憶の形成には2 つの入力経路が存在します。エピソード記憶からの固定化(体験を通じた学習)と、外部データからの直接抽出(体験を介さない知識の取り込み)です。これは神経科学的にも支持される構造であり、まずそれぞれの経路を知識獲得の神経科学的プロセスとシステムパイプラインの対比で解説し、最後に両経路の統合を論じます。

5.1 エピソード記憶からの固定化(体験からの学習)

第一の経路は、エージェントのタスク実行という体験を起点とする意味記憶の形成です。Section 2 で述べた記憶の固定化(Memory Consolidation)— 海馬での一時的なエピソード記憶が新皮質の長期的な意味記憶へと再編成されるプロセス — のシステム実装に相当します。

知識獲得の神経科学的プロセス(3段階)

生物学的知能における体験からの知識獲得は、以下の 3 段階で進行すると考えられています。

  1. エピソード記憶化 — タスク実行の体験が海馬に高速符号化される。CLS 理論(McClelland et al., 1995)によれば、海馬はスパース符号化とパターン分離により、個別のエピソードを one-shot learning で高忠実度に保存するとされる
  2. 意味記憶化 — 海馬に保存されたエピソード記憶が、睡眠中の replay(Rasch & Born, 2013)を通じて新皮質に漸進的に転送されると考えられている。このプロセスで、個別の体験から文脈非依存的な構造化知識(意味記憶)が抽出・固定化されるとされる
  3. 意味記憶の整理 — 新皮質において、重複する知識の統合、関連する知識間のリンク形成、そして重要度に基づくスコアリングが行われると考えられている。Tse et al. (2007) の実験では、既存のスキーマと整合的な新情報が迅速に統合されることが示されている

システムパイプライン(4段階)

上記の神経科学的プロセスに対応するシステムパイプラインは、以下の 4 段階で構成されています。

  1. エピソード記憶化 — タスク実行の完了後、AgentEpisodeKnowledge が生成され、Kinesis ストリームに送出される。これが海馬への高速符号化に対応する
  2. Extraction — Kinesis Consumer がストリームからエピソードを取得し、EpisodeKnowledgeGenerator -> EpisodeKnowledgeFilter -> EpisodeKnowledgePreChunker のパイプラインを経て、トリプル抽出(extract_triples_from_episode)が実行される。ここで個別の体験から構造化された知識(Entity + Relation)が抽出される
  3. RDB への保存 — 抽出された ExtractedCategory / ExtractedObject / ExtractedMorphism / ExtractedFunctor が、それぞれ AgentSemanticCategoryKnowledge / AgentSemanticObjectKnowledge / AgentSemanticMorphismKnowledge / AgentSemanticFunctorKnowledge として RDB に永続化される
  4. Vector Search & Graph DB への Indexing — 永続化された Object と Morphism の embedding が OpenSearch にベクトルインデックスとして登録され、同時に Neo4j/Neptune にグラフ構造(Node + Edge)として書き込まれる。CategoryVectorRetrievalGateway がベクトル検索を、CategoryGraphGateway がグラフトラバーサルを担う

対応表

脳神経 システム
海馬への一時保存(高速符号化) Kinesis ストリーム + AgentEpisodeKnowledge
新皮質への固定化(構造化) Extraction(EpisodeKnowledgeGenerator -> トリプル抽出)
エピソードと意味知識の関連づけ Functor(Episode Category -> Triple Category)
記憶の整理・統合 Dedup(RecordLinkageService + EdgeDeduplicationService)+ Scoring -> RDB / Vector / Graph

パイプライン全体図

graph LR
    subgraph "体験(覚醒時)"
        TASK["タスク実行"]
        EPK["AgentEpisode<br/>Knowledge 作成"]
        TASK --> EPK
    end

    subgraph "Kinesis ストリーム(海馬)"
        KIN["Kinesis<br/>Stream"]
    end

    subgraph "Extraction(固定化)"
        GEN["Generator"]
        FIL["Filter"]
        PCH["PreChunker"]
        TRI["トリプル抽出"]
        GEN --> FIL --> PCH --> TRI
    end

    subgraph "永続化(新皮質)"
        RDB["RDB<br/>Category / Object<br/>Morphism / Functor"]
        VEC["OpenSearch<br/>ベクトル Index"]
        GDB["Neo4j / Neptune<br/>グラフ構造"]
    end

    EPK --> KIN
    KIN --> GEN
    TRI --> RDB
    RDB --> VEC
    RDB --> GDB

    style TASK fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style KIN fill:#e8eaf6,stroke:#283593,stroke-width:2px
    style TRI fill:#fce4ec,stroke:#c62828,stroke-width:2px
    style RDB fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
    style VEC fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    style GDB fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px

5.2 外部データからの直接抽出(知識の取り込み)

第二の経路は、エピソード(体験)を経由しない意味記憶の形成です。商品規格書、業務マニュアル、マスタデータなどの外部リソースから、構造化された知識を直接抽出・取り込みます。

脳神経的なアナロジー

この経路には、強力な神経科学的裏付けがあります。

Vargha-Khadem et al. (1997) は Science 誌において、出生時・ 4 歳・ 9 歳にそれぞれ両側海馬の損傷(MRI で確認)を受けた 3 名の患者を対象とする症例研究を報告しました。

これらの患者は、日常生活のエピソード(いつ、どこで、何をしたか)に関する記憶が重度に障害されていたにもかかわらず、通常の学校に通い、言語能力、識字力、事実的知識において平均下位から平均の水準を達成しました。すなわち、エピソード記憶の形成能力が著しく損なわれた状態であっても、意味記憶(事実的知識)の獲得は可能だったのです。

この知見は、意味記憶がエピソード記憶から独立した経路でも形成されうることを示しています。Vargha-Khadem らは、海馬はエピソード記憶(体験の記憶)には必須であるが、意味記憶(事実的知識)の獲得には必ずしも必要でないという見解を提唱しました。

日常的なアナロジーで言えば、これは教科書を読んで学ぶプロセスに相当します。我々は教科書から「東京は日本の首都である」という事実を、東京を訪れるという体験なしに獲得できます。体験(エピソード)を経由せず、構造化されたテキストから直接的に意味知識を獲得する経路です。

ユースケース: 商品規格書からの意味記憶抽出

食品業界における具体例として、商品規格書(原材料、アレルゲン、栄養成分、産地等を記載した文書)からの知識抽出を考えます。

規格書は ResourceCategory(CategoryType = RESOURCE)として取り込まれます。パイプラインは以下の階層的な処理を行います。

  1. 規格書全体を ResourceCategory として登録
  2. テキストの Chunking(SemanticKnowledgePreChunker
  3. 各チャンクからのトリプル抽出(SemanticKnowledgeMemory

例えば、ある商品の規格書から以下のようなトリプルが抽出されます。

  • 「商品 A — 含有 -> 小麦」(アレルゲン情報)
  • 「商品 A — 産地 -> 北海道」(産地情報)
  • 「商品 A — 栄養成分 -> タンパク質 15g」(栄養成分)

これらはそれぞれ Object(商品 A、小麦、北海道、タンパク質 15g)と Morphism(含有、産地、栄養成分)として構造化され、Knowledge Graph に統合されます。

重要な違いは、この経路ではエピソード記憶が介在しないため、Episode Category との紐づけ(Functor)が生成されない点です。Vargha-Khadem et al. (1997) の患者が事実を知っていても「いつ・どこでそれを学んだか」を思い出せなかったのと同様に、外部データから抽出された知識は「どのタスク実行で得られたか」というエピソード的文脈を持ちません。

システムパイプライン(4段階)

  1. データ取り込み — Loader(API/ファイル)が外部リソースを取得し、AgentSemanticKnowledgeInput として登録する
  2. Extraction — リソースを SemanticKnowledgePreChunker で Chunking 後、SemanticKnowledgeFilter を経て、トリプル抽出が実行される
  3. RDB への保存AgentSemanticCategoryKnowledge / AgentSemanticObjectKnowledge / AgentSemanticMorphismKnowledge を RDB に永続化する。ただし AgentSemanticFunctorKnowledge のうち Episode Category への Functor は生成されない
  4. Vector Search & Graph DB への Indexing — エピソード経路と同一のインフラ(OpenSearch + Neo4j/Neptune)にインデキシングされる

5.3 両経路の統合

2 つの経路は入力ソースと前処理が異なりますが、最終的に同一のデータモデルに収束します

graph TB
    subgraph "経路 1: エピソード記憶からの固定化"
        TASK["タスク実行<br/>(体験)"]
        EPK["AgentEpisode<br/>Knowledge"]
        KIN["Kinesis<br/>Stream"]
        E_EXT["Episode<br/>Extraction"]
        E_FUN["Functor 生成<br/>(Episode → Triple)"]
        TASK --> EPK --> KIN --> E_EXT
        E_EXT --> E_FUN
    end

    subgraph "経路 2: 外部データからの直接抽出"
        SRC["外部リソース<br/>(規格書等)"]
        SKI["AgentSemantic<br/>KnowledgeInput"]
        S_EXT["Resource<br/>Extraction"]
        SRC --> SKI --> S_EXT
    end

    subgraph "統一データモデル(収束点)"
        CAT["Category<br/>(AgentSemanticCategoryKnowledge)"]
        OBJ["Object<br/>(AgentSemanticObjectKnowledge)"]
        MOR["Morphism<br/>(AgentSemanticMorphismKnowledge)"]
        CAT --- OBJ
        CAT --- MOR
    end

    subgraph "永続化 & Indexing"
        RDB["RDB"]
        VEC["OpenSearch<br/>ベクトル Index"]
        GDB["Neo4j / Neptune<br/>グラフ構造"]
        DEDUP["重複排除<br/>(RecordLinkage<br/>+ EdgeDedup)"]
    end

    E_EXT --> CAT
    E_FUN --> CAT
    S_EXT --> CAT
    CAT --> DEDUP
    DEDUP --> RDB
    RDB --> VEC
    RDB --> GDB

    style TASK fill:#fff3e0,stroke:#e65100,stroke-width:2px
    style SRC fill:#e0f2f1,stroke:#00695c,stroke-width:2px
    style CAT fill:#e3f2fd,stroke:#1565c0,stroke-width:3px
    style OBJ fill:#e3f2fd,stroke:#1565c0
    style MOR fill:#e3f2fd,stroke:#1565c0
    style RDB fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
    style VEC fill:#f3e5f5,stroke:#7b1fa2
    style GDB fill:#fce4ec,stroke:#c62828
    style DEDUP fill:#fff8e1,stroke:#f57f17

この統合が自然に機能する理由は、Section 3 で導入した圏論のフレームワークにあります。

同一のデータモデルへの収束: 両経路とも、最終出力は ExtractedCategory(Object 群 + Morphism 群)です。エピソード経由であれ外部データ経由であれ、抽出された Entity と Relation は同じ Category/Object/Morphism モデルとして格納されます。

Knowledge Graph 上での自然な統合: エピソード経由で抽出された「商品 A — 在庫不足 -> 発注推奨」というトリプルと、規格書から抽出された「商品 A — 含有 -> 小麦」というトリプルは、共通の Object「商品 A」を介して Graph 上で自然に接続されます。重複排除(RecordLinkageService + WithinBatchDuplicateDetector)が同一 Entity の同定を行い、商圏の構築(Section 3.5)により統合された Graph が形成されます。

Functor による横断的な関連付け: エピソード経由の知識は FunctorType を通じて Episode Category と Triple Category の間に構造保存的なマッピングを持ちます。一方、外部データ経由の知識は Resource Category と Triple Category の間に Functor を持ちます。これらの Functor により、あるトリプルが「どのエピソードから抽出されたか」あるいは「どのリソースから抽出されたか」を遡行的に追跡できます。ただし、外部データ経由の知識が Episode Category への直接的な Functor を持つことはありません — これは Vargha-Khadem et al. (1997) の知見と対応する設計上の選択です。

全体として、この 2 経路の統合は、生物学的知能が体験と教示の両方から知識を獲得し、それらを単一の意味記憶ネットワークに統合するプロセスの計算論的実装と位置づけることができます。

6. 結論と今後の展望

6.1 記憶システム全体のまとめ

本記事では、AI エージェントの意味記憶(Semantic Memory)エピソード記憶(Episodic Memory)のアーキテクチャを、生物学的知能の設計原理を出発点として論じてきました。前回の記事で扱った手続き記憶(Procedural Memory)= Chain 機構と合わせると、AI エージェントの記憶システムにおける主要な 3 つの柱をカバーしたことになります。

graph TD
    LTM["長期記憶<br/>(Long-term Memory)"]
    DM["陳述記憶 / 宣言的記憶<br/>(Declarative Memory)"]
    NDM["非陳述記憶 / 非宣言的記憶<br/>(Non-declarative Memory)"]
    EM["エピソード記憶<br/>(Episodic Memory)<br/><i>個人的な体験の記憶</i>"]
    SM["意味記憶<br/>(Semantic Memory)<br/><i>一般的な知識・事実</i>"]
    PM["手続き記憶<br/>(Procedural Memory)<br/><i>スキル・手順の記憶</i>"]
    OTHER["プライミング, 条件づけ 等"]

    LTM --> DM
    LTM --> NDM
    DM --> EM
    DM --> SM
    NDM --> PM
    NDM --> OTHER

    style SM fill:#e8f4fd,stroke:#1976d2,stroke-width:3px,color:#000
    style PM fill:#f3e5f5,stroke:#7b1fa2,stroke-width:3px,color:#000
    style EM fill:#fff3e0,stroke:#e65100,stroke-width:3px,color:#000
    style OTHER fill:#f5f5f5,stroke:#9e9e9e,stroke-width:1px,stroke-dasharray:5 5

手続き記憶(前回) では、大脳基底核のチャンキング機構を出発点に、Chain 機構によるタスク実行パイプラインの設計を論じました。手続き記憶の実体は、高階関数として構成された tool chain の組み合わせ、またはタスク実行 Python コードです。一度学習(記録)された Chain は LLM の推論を介さずに決定的に再実行でき、エラー時のみ自己修復機構が介入します。スキルの自動化、エラーモニタリング、そしてサブルーチンの階層的な組み合わせが、エージェントの「どうやるか(How)」の知識を構成します。

エピソード記憶・意味記憶(今回) では、海馬-新皮質間の記憶の固定化(Memory Consolidation)メカニズムを出発点に、エピソード記憶の即時記録から Knowledge Graph による構造化知識の長期保存に至るアーキテクチャを論じました。CLS 理論(McClelland et al., 1995)が示す二重記憶システムの原理を、エピソード記憶ストアと Knowledge Graph の関係に適用し、圏論(Category Theory)のフレームワークを用いて多様な知識抽出手法の出力を統一的に表現する仕組みを構築しました。

振り返ると、本記事の各セクションは以下のように有機的に接続しています。

  • Section 2 が生物学的知能の記憶固定化メカニズムを概観し、AI システム設計のメンタルモデルを提供した
  • Section 3 が圏論のフレームワークを導入し、Category/Object/Morphism という統一的なデータモデルを定義した
  • Section 4 がこの統一モデルの上で動作する Pluggable な知識抽出戦略(トリプル抽出、命題分解、GraphRAG)を論じた
  • Section 5 が 2 つの入力経路(エピソード記憶からの固定化と外部データからの直接抽出)を統合するパイプライン全体像を示した

生物学的知能の設計原理を AI システム設計に応用するこのアプローチの核心は、脳のメカニズムを忠実に再現することではなく、進化が数億年かけて洗練した情報処理の構造的パターンを、エンジニアリング上の設計指針として抽出することにあります。CLS 理論が Fast Learner(海馬)と Slow Learner(新皮質)の分離を説明するように、我々のシステムもエピソード記憶の即時記録と意味記憶の漸進的構築を分離しています。圏論が数学の諸分野に共通する構造的パターンを抽象化するように、我々のフレームワークも多様な知識抽出手法の出力に共通するグラフ構造を抽象化しています。

6.2 今後の課題

現在のアーキテクチャは知識グラフ(Object ・ Morphism)の抽出・格納・検索という基盤を確立していますが、生物学的知能の記憶システムが持ついくつかの重要な機能についてはパイプラインとしての自動化に至っていません。

これらの機能は現在、専用の Knowledge Manager Agent を介して人間が Knowledge Graph を直接操作する運用(不要な知識の削除、スコアの調整、知識の修正・統合、確信度の評価など)で対応しています。完全自動化に至っていない理由は、運用の安定性を重視しているためです。意味記憶の自動的な書き換えや削除は、誤った操作がエージェントの後続の推論に連鎖的な影響を及ぼすリスクがあります。現段階では、人間が最終判断を行う運用が合理的と考えています。

その上で、段階的に自動化の範囲を広げるべく、以下の 4 つの方向で実験を進めています。

6.2.1 忘却メカニズム

人間の記憶において、忘却は欠陥ではなく不可欠な機能です。不要な情報の pruning により、関連性の高い知識への効率的なアクセスが維持され、知識の検索空間が適切なサイズに保たれます。

現状、llm_score(LLM による重要度評価)と human_score(人間によるフィードバック)によるスコアリングは存在しますが、低スコアの知識を自律的に除去・降格する仕組みは組み込んでいません。実験中のアプローチとして、スコアベースの pruning、使用頻度に基づく減衰(Decay)、コンテキストに対する関連度の動的評価(Relevance scoring)を検討しています。

6.2.2 記憶の再固定化

Nader, Schafe, & LeDoux (2000) は、Nature 誌において、既に固定化された記憶も再活性化時に再び不安定になり、更新可能であることを示しました。この記憶の再固定化(Reconsolidation)は、記憶が一度固定化されれば永続的に安定するという従来の仮説を覆す発見でした。

現状、一度格納された知識が検索・利用時に自動的に再評価・更新される仕組みは組み込んでいません。実験中のアプローチとして、検索・利用時に関連知識を自律的に再評価・更新する仕組み — 記憶を想起するたびにその記憶が一時的に可塑的になり、更新されうるという再固定化の計算論的実装 — の導入を検討しています。

6.2.3 メタ認知的な記憶管理

生物学的知能は、自らの知識の状態を認識するメタ認知(Metacognition)の能力を備えています。「何を知っていて何を知らないか」を把握し、知識の確信度を評価し、情報源の信頼性を判断する能力です。

現状、知識の確信度管理(抽出信頼度、ソース品質、複数ソースからの裏付け)、出典の信頼性評価、時間経過に伴う知識の鮮度管理といったメタ認知的機能が体系化されていません(一部時間を取り扱う機能等は入っていますが、体系化されているとは言い難い)。エージェントが「この知識は確実か」「この情報は最新か」「この回答に十分な根拠があるか」といった判断を自律的に下せるようになることが、意味記憶システムの信頼性を次の段階に引き上げる鍵となります。

6.2.4 圏論的公理への接近

Section 3.6 で述べたように、現在の実装は圏論の公理(結合律、単位律、合成の網羅性)を完全には保証していません。LLM による抽出が本質的に確率的である以上、抽出直後のグラフが厳密な圏を構成しないことは避けられません。しかし、抽出精度の向上により公理に即した構造へ近づけることは、上述の自律的な再評価・更新の仕組みにとって重要な基盤となります。例えば、射の合成が結合律を満たすかどうかを検証できれば、矛盾する知識の検出や、再固定化における更新の整合性チェックに活用できます。抽出品質の改善と公理検証の段階的な導入は、知識グラフの構造的な信頼性を高め、忘却・再固定化・メタ認知の各機構がより確かな基盤の上で動作することを可能にします。


参考文献

神経科学・認知科学:

  • Tulving, E. (1972). Episodic and semantic memory. In E. Tulving & W. Donaldson (Eds.), Organization of Memory (pp. 381-403). Academic Press.
  • McClelland, J. L., McNaughton, B. L., & O'Reilly, R. C. (1995). Why there are complementary learning systems in the hippocampus and neocortex: Insights from the successes and failures of connectionist models of learning and memory. Psychological Review, 102(3), 419-457.
  • Squire, L. R., & Alvarez, P. (1995). Retrograde amnesia and memory consolidation: A neurobiological perspective. Current Opinion in Neurobiology, 5(2), 169-177.
  • Vargha-Khadem, F., Gadian, D. G., Watkins, K. E., Connelly, A., Van Paesschen, W., & Mishkin, M. (1997). Differential effects of early hippocampal pathology on episodic and semantic memory. Science, 277(5324), 376-380.
  • Nader, K., Schafe, G. E., & LeDoux, J. E. (2000). Fear memories require protein synthesis in the amygdala for reconsolidation after retrieval. Nature, 406(6797), 722-726.
  • Frankland, P. W., & Bontempi, B. (2005). The organization of recent and remote memories. Nature Reviews Neuroscience, 6(2), 119-130.
  • Tse, D., Langston, R. F., Kakeyama, M., Bethus, I., Spooner, P. A., Wood, E. R., Witter, M. P., & Morris, R. G. M. (2007). Schemas and memory consolidation. Science, 316(5821), 76-82.
  • Greenberg, D. L., & Verfaellie, M. (2010). Interdependence of episodic and semantic memory: Evidence from neuropsychology. Journal of the International Neuropsychological Society, 16(5), 748-753.
  • McClelland, J. L. (2013). Incorporating rapid neocortical learning of new schema-consistent information into complementary learning systems theory. Journal of Experimental Psychology: General, 142(4), 1190-1210.
  • Rasch, B., & Born, J. (2013). About sleep's role in memory. Physiological Reviews, 93(2), 681-766.
  • Kumaran, D., Hassabis, D., & McClelland, J. L. (2016). What learning systems do intelligent agents need? Complementary learning systems theory updated. Trends in Cognitive Sciences, 20(7), 512-534.

圏論:

  • Mac Lane, S. (1998). Categories for the Working Mathematician (2nd ed.). Springer.
  • Awodey, S. (2010). Category Theory (2nd ed.). Oxford University Press.

知識抽出手法:

  • Banko, M., Cafarella, M. J., Soderland, S., Broadhead, M., & Etzioni, O. (2007). Open information extraction from the web. In Proceedings of the 20th International Joint Conference on Artificial Intelligence (IJCAI) (pp. 2670-2676).
  • Angeli, G., Premkumar, M. J., & Manning, C. D. (2015). Leveraging linguistic structure for open domain information extraction. In Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics (ACL) (pp. 344-354).
  • Traag, V. A., Waltman, L., & van Eck, N. J. (2019). From Louvain to Leiden: Guaranteeing well-connected communities. Scientific Reports, 9, 5233.
  • Cabot, P.-L., & Navigli, R. (2021). REBEL: Relation extraction by end-to-end language generation. In Findings of the Association for Computational Linguistics: EMNLP 2021 (pp. 2370-2381).
  • Chen, T., Wang, H., Chen, S., Yu, W., Ma, K., Zhao, X., Zhang, H., & Yu, D. (2023). Dense X retrieval: What retrieval granularity should we use? arXiv preprint arXiv:2312.06648. (EMNLP 2024)
  • Edge, D., Trinh, H., Cheng, N., Bradley, J., Chao, A., Mody, A., Truitt, S., Metropolitansky, D., Ness, R. O., & Larson, J. (2024). From local to global: A graph RAG approach to query-focused summarization. arXiv preprint arXiv:2404.16130.
  • Anthropic. (2024). Introducing contextual retrieval. Anthropic Research Blog.
  • Gunther, M., Mohr, I., Williams, D. J., Wang, B., & Xiao, H. (2024). Late chunking: Contextual chunk embeddings using long-context embedding models. arXiv preprint arXiv:2409.04701.
  • Mo, B., Yu, K., Kazdan, J., Cabezas, J., Mpala, P., Yu, L., Cundy, C., Kanatsoulis, C., & Koyejo, S. (2025). KGGen: Extracting knowledge graphs from plain text with language models. arXiv preprint arXiv:2502.09956.