このブログの更新は X(旧Twitter)アカウント @m_hiyama で通知されます。
Follow @m_hiyama

ご連絡は上記 X アカウントに DM にてお願いします。

参照用 記事

用語・用法図から知識グラフへ

用語・用法図は「パンダ用法と用語・用法図」で導入した図/図解法です。この記事で、用語・用法図の辺に付けるラベルを増やすことにより、用語・用法図を知識グラフにまで拡張します。知識グラフはその名の通り、知識の記述や分析に効果的に使用できます。

また、かつて提案し現在まで使っている「記述の正確さを増してコミュニケーションミスを防ぐ手法」をここで再度述べます。具体的には、正規表現による一括記述とアットマーク修飾がその手法です。

関連する内容をかき集めて詰め込んだので、だいぶ長い記事になってしまいました。が、“曖昧性を減らす/正確さを増す”ための様々な手法を、この記事にまとめられたと思います。

記事内で使う文字の色については「文字の色の約束(再確認)」を参照してください。$`\newcommand{\cat}[1]{\mathcal{#1}}
\newcommand{\mrm}[1]{\mathrm{#1}}
\newcommand{\mbf}[1]{\mathbf{#1}}
%\newcommand{\msf}[1]{\mathsf{#1}}
%\newcommand{\mbb}[1]{\mathbb{#1}}
%\newcommand{\msc}[1]{\mathscr{#1}}
\newcommand{\id}{\mathrm{id} }
\newcommand{\In}{\text{ in } }
%\newcommand{\hyp}{\text{-} }
\newcommand{\T}[1]{\text{#1} }
\newcommand{\BR}[1]{ \big[\!\big[ {#1} \big]\!\big] } % BRacket
\newcommand{\corr}{\leftrightarrow } % correspondence
\newcommand{\lcorr}{\longleftrightarrow } % long correspondence
\newcommand{\lto}{\longrightarrow } % long to
`$

内容:

ハブ記事:

正規表現による一括記述

同じ意味、またはほとんど同じ意味なのに、呼び名・言い回しが大量にあることがあります。そのような、たくさんの呼び名・言い回しを一括記述するために正規表現パターンが使えます。そのことは以下の過去記事(2019年)に書いています。

正規表現パターンの事例を挙げると:

  • {{X-}?{parametrized | indexed}}? family {of Ys}?

10個の語句に展開されます(詳細は「用語のバリエーション記述のための正規表現」参照)。

このパターンに当てはまる長い語句として X-indexed family of Ys があります。ここで、X, Y はプレースホルダーです。X に集合の名前〈固有名〉 $`\mbf{N}`$ を、Y に語句 "real number"を入れると、次の語句になります。

  • $`\mbf{N}`$-indexed family of real numbers

この語句は、無限の実数列を意味します。

上記の正規表現パターンを日本語に翻訳するなら:

  • {{X {の|で|-}? }? {パラメータ | インデックス | 添字} { {付き | 付けられた}? }? {Yの}? }? {ファミリー | 族}

これは何個の語句に展開されるでしょうか? 不適切な日本語は除く必要があります。僕は途中で面倒になってしまい全数列挙はしていません。展開して具体化した例のひとつは:

  • $`\mbf{N}`$ で添字付けられた実数族

ローヴェア・セオリー〈Lawvere theory〉を表すたくさんの用語(日本語)の正規表現パターンは:

  • {代数{的}? | ローヴェア | Lawvere | {ローヴェア | Lawvere}{の}?代数{的}?}{理論 | セオリー | {理論 | セオリー}?圏}

これは60個の語句に展開されます(詳細は「用語のバリエーション記述のための正規表現」参照)。

ここまでに使っている正規表現のメタ文字は '|' と '?' だけです(括弧も入れるなら '{' と '}' も)。「アレンジメント計算 6: 用語・記法の整理」(2020年)で、'!' を追加しました。

{確率}?{分布 | 測度}? で表現される文字列は次の6つになります。

  1. "確率分布"
  2. "確率測度"
  3. "確率"
  4. "分布"
  5. "測度"
  6. "" (空文字列)

...[snip]... {‥‥}! を導入します。これは「空文字列は除く」意味です。{{確率}?{分布 | 測度}?}! だと、空文字列は除くので、5つの文字列を意味します。

「同時{{確率}?{分布 | 測度}?}!」というビックリマーク〈'!'〉入りの正規表現は、次の5個の語句に展開されます。

  1. 同時確率分布
  2. 同時確率測度
  3. 同時分布
  4. 同時測度
  5. 同時確率

どれも同じ意味ですが、いずれも使われる可能性があります。

ビックリマークの他の使用事例も展開してみます。

アレンジメント計算 7: AlmostSurelyEqual」にて:

今回は、基本となるASEと、その一般化・変種である {{一般}?{二段}?}!ASE を定義しました。

「{{一般}?{二段}?}!ASE」は、次の3個の語句に展開されます。

  1. 一般二段ASE
  2. 一般ASE
  3. 二段ASE

回路代数とグラフ置換モナド」にて:

  • {{free}? {floating}?}! loop

「{{free}? {floating}?}! loop」は、次の3個の語句に展開されます。

  1. free floating loop
  2. free loop
  3. floating loop

モノイドと群の淡中再構成 1/n」にて:

米田{{同型}?{写像}?}!

「米田{{同型}?{写像}?}!」は、次の3個の語句に展開されます。

  1. 米田同型写像
  2. 米田同型
  3. 米田写像

同義語注釈(山形括弧)

僕は、山形括弧内に同義語を入れる記法を使っています。例えば「関数〈写像〉」のように。これは「いつ頃から始めたのだろう?」と思ったのですが、山形括弧を検索したら膨大にあるので、使用開始時期の特定は諦めました。

昔のメモ編ブログのアーカイブで見つかった使用事例は:

一般形式言語理論のアンビアント・モデル圏」(2007年)にて:

リボン言語やツリー言語(ひょっとしてグラフ言語も)含むような一般的な形式言語理論を展開するためのアンビアント〈アンビエント〉(あるいはユニバーサルな)モデル圏は何だろう? と探していたが、余対角を持つ(あるいは余GS)デカルト圏(cartesian category with codiagonals / co-GS cartesian category)がいいような気がする。

カタカナ表記の揺れを表すために「アンビアント〈アンビエント〉」を使っていたようです。しかし、「余対角を持つ(あるいは余GS)デカルト圏(cartesian category with codiagonals / co-GS cartesian category)」では丸括弧を使っています。今なら次のように書くでしょう。

  • {余対角を持つ | 余GS}デカルト圏〈{cartesian category with codiagonals | co-GS cartesian category}〉

ルビ〈振り仮名〉の代わりに山形括弧を使っていた記憶があります。自分ならルビをふるだろうという語句を検索してみたら:

ハイパーメディア・アプリケーションをどう捉えればいいのか」(2012年)にて:

僕の用語法がどうも杜撰〈ずさん〉で誤解を招いたキライがあります。

圏論的ひっくり返し:単純なケース」(2016年)にて:

上記3つの問〈とい〉の意味自体が分かりにくいかも知れません。

自然演繹はちっとも自然じゃない -- 圏論による再考」(2016年)にて:

比較的最近(2016年2月)も、絵を描く様〈さま〉を連続的に写真に撮って証明オブジェクトの構成過程(リーズニング)を記録してみる実験をしてみたり。

タイトルにルビ代わり山形括弧を使っている例は:

山形括弧の使用開始時期は分かりませんが、(たまたま選んだ)2018年の記事「圏論の随伴をちゃんと抑えよう」を調べてみると、重複も含めて29回山形括弧を使っています。

  1. 随伴〈adjoint, adjunction〉
  2. 随伴対〈adjoint pair | 随伴ペア〉
  3. 左随伴(関手)〈left adjoint (functor)〉
  4. 右随伴(関手)〈right adjoint (functor)〉
  5. 単位〈unit〉
  6. 余単位〈counit〉
  7. ニョロニョロ関係式〈snake {relation | equation | identity}〉
  8. 随伴系〈adjoint system〉
  9. 記法は図式順〈diagrammatic order notation〉
  10. 恒等〈identity〉
  11. ハット〈キャレット | サーカムフレックス〉
  12. 随伴対〈随伴ペア〉
  13. ベクトル空間の双対〈双対空間ペア〉
  14. 随伴対〈随伴ペア〉
  15. 対〈ペア〉
  16. 随伴系〈adjunction〉
  17. 随伴〈adjunct〉
  18. 随伴系〈adjunction〉
  19. 随伴系〈adjoint system〉
  20. エンドセット〈endset〉
  21. 自己射〈endomorphism〉
  22. インデックス族〈indexed family〉
  23. 随伴〈adjunct〉
  24. エミリー・リエル〈Emily Riehl〉
  25. 転置〈transposes〉
  26. カリー化〈currying〉
  27. 反カリー化〈uncurrying〉
  28. 転置〈transpose〉
  29. 反転置〈untranspose | opposite transpose〉

「左随伴(関手)〈left adjoint (functor)〉」は、今なら正規表現を使って「左随伴{関手}?〈left adjoint {functor}?〉」と書くでしょう。

アットマーク修飾

用語の曖昧性を解決するために、アットマークを後置して修飾する方法を導入したのは比較的最近、2024年の過去記事からです。

最初の例は:

  1. フィールド @ 物理
  2. フィールド @ 代数
  3. フィールド @ データベース

当該の用語の後にアットマークを置いて、分野、コミュニティ、個人、製品などの名前で修飾します。

その後もアットマーク修飾は使ってますが、アットマークの文字が安定してなくて、

  • @ U+0040 (COMMERCIAL AT)
  • @ U+FF20 (FULLWIDTH COMMERCIAL AT)

両方の文字が混じっています。今後も混じってしまうかも知れません(苦笑)。

当初、アットマークの後に置く修飾語について深くは考えていませんでした。現状では、次のように考えています。

  1. 分野、コミュニティ、個人、製品などに基づいた名前空間ツリー〈階層的名前空間〉を考える。
  2. 名前空間パスは、ファイルシステムのパスと同じくスラッシュ区切りで書く。
  3. アットマークの後には、名前空間パスをルートからのフルパス形式で書く。例えば、「フィールド@/IT/データベース」。
  4. 名前空間フルパスに対して、一単語の別名〈エイリス | 短縮名〉を付けてよい。例えば、alias クリス・デイト := /IT/データベース/RDB/クリス・デイト
  5. アットマークの後には、一単語の別名を使用してもよい。例えば、「属性@クリス・デイト」。
  6. 複数の名前空間ツリーをグローバルに識別するには、そのツリーのオーナー識別子をスーパールートの直下に置く。例えば、//hiyama@chimaira.org/IT/データベース/RDB/クリス・デイト は、僕〈檜山〉が使っている名前空間ツリーの /IT/データベース/RDB/クリス・デイト という名前空間パス。(メールアドレス内のアットマークは、アットマーク修飾とは無関係。)

実際のところ、用語を分類整理するための名前空間ツリーの定義は難しいでしょう。定義したところで、誰もが満足するような分類体系は無理です。そこで、ツリー状の分類ではなくて、タグにより修飾する方法を提案したのが次の過去記事です。

上記記事で出している最初の例は:

  • タプル @{データベース, RDB, 原理主義}
  • フィールド @{データベース}
  • 包括圏 @{圏論, 型理論}

波括弧で囲まれたなかにタグを書いています。ここでの「データベース」や「RDB」は名前空間名ではなくてタグ名です。

用法によるアットマーク修飾

パンダ用法と用語・用法図」の用語・用法図でもアットマーク修飾を使っています。が、分野やコミュニティなどで分類した名前空間パスや別名で修飾しているわけではありません。

例えば、“用法 1”から“用法 0”(標準用法)への写像は次の図に描けます。

$`\quad \xymatrix@C-1pc{
{}
&\T{パンダ@0}
&{}
\\
\T{レッサーパンダ@0} \ar@{-}[rr]|-{|} \ar@{^{(}->}[ur]
&{}
&\T{ジャイアントパンダ@0} \ar@{_{(}->}[ul]
\\
\T{パンダ@1} \ar@{|->}[u]
&{}
&\T{ジャイアントパンダ@1} \ar@{|->}[u]
}`$

「アットマーク+番号」は、どの用法の用語かを明示するための記法です。矢印 $`\mapsto`$ が用語のあいだの対応を示します。

アットマークの後には、用語・用法図の番号や名前が入ります。論理的な階層的分類を示す名前空間パスと、用語・用法図の番号・名前は別物です。同じ形で書くのは好ましくないので、用法(の番号・名前)は角括弧〈ブラケット〉に入れることにします。「パンダ@[0]」とか「ジャイアントパンダ@[1]」とかです。

過去記事の修正はしませんが、今後は、アットマーク+角括弧で、その用語が含まれる(オリジナルの)用語・用法図を明示します。

2024年の過去記事でも、用法による修飾を扱っています。

上記過去記事の「インスタンス」に関する用法1と用法2をまとめて“「インスタンス」の用法 A”、用法3と用法4をまとめて“「インスタンス」の用法 B”として、用語・用法図を描いてみます(単にサンプルです)。

$`\T{「インスタンス」の用法 A}\\
\quad \xymatrix{
{}
&{\T{要素@集合} }
\\
{\T{インスタンス@型理論} } \ar@{|->}[ur] \ar@{|->}[dr]
&{}
\\
{}
&{\T{終対象からの射@圏論} }
}
`$

$`\T{「インスタンス」の用法 B}\\
\quad \xymatrix{
{}
&{\T{射@圏論} }
\\
{\T{インスタンス@型理論} } \ar@{|->}[ur] \ar@{|->}[dr]
&{}
\\
{}
&{\T{セクション@圏論} }
}
`$

さらに、“「インスタンス」の用法 A”と“「インスタンス」の用法 B”をまとめて少し情報を足して“「インスタンス」の用法 C”を作りましょう。このとき、各用語の出自・来歴を「@[A]」と「@[B]」で律儀に書き込むなら次のようになります。

$`\T{「インスタンス」の用法 C}\\
\quad \xymatrix{
{}
&{\T{(要素@集合)@[A]} } \ar@{.}[dd]|{-}
\\
{\T{(インスタンス@型理論)@[A]} } \ar@{|->}[ur] \ar@{|->}[dr]
\ar@{=}[ddd]
&{}
\\
{}
&{\T{(終対象からの射@圏論)@[A]} } \ar@{_{(}->}[d]
\\
{}
&{\T{(射@圏論)@[B]} }
\\
{\T{(インスタンス@型理論)@[B]} } \ar@{|->}[ur] \ar@{|->}[dr]
&{}
\\
{}
&{\T{(セクション@圏論)@[B]} } \ar@{^{(}->}[uu]
}
`$

この用語・用法図はアットマーク修飾のサンプルなので、内容は気にしなくていいです。

まとめると、用語に対するアットマーク修飾には次があります。

  1. 名前空間ツリー〈階層的名前空間〉のフルパスによる修飾
  2. 名前空間フルパスの別名(一単語の短縮名)による修飾
  3. 幾つかのタグによる修飾(波括弧を使用)
  4. 用語・用法図の番号・名前による修飾(角括弧を使用)

用語・用法図で使っている辺ラベル

用語・用法図のノードには用語を書きます。用語は原則的に名詞または名詞句です。用語 ◯◯◯ に対して、$`\BR{\T{◯◯◯}}`$ は次を意味します。

  • 「◯◯◯」という名前で呼ばれるすべてのモノ達からなる集合

$`\BR{\T{◯◯◯}}`$ を使うと、用語・用法図の意味を正確に記述できます(すぐ下で使う)。

用語・用法図では、特別な形の矢印・辺($`\xymatrix@1{{}\ar@{^{(}->}[r] &{}}`$ や $`\xymatrix@1{{}\ar@{^{-}}[r]|{|} &{}}`$)を使ってますが、これはグラフィカルなショートハンドで、矢印・辺にラベルを載せてもいいとします。

パンダ用法と用語・用法図」で導入した矢印・辺は次のものです。

  1. 包含 $`A \overset{\T{included}}{\lto} B`$ : 意味は $`\BR{A}\subseteq \BR{B}`$ 、ショートハンドは $`\xymatrix@1{A \ar@{^{(}->}[r] &B}`$
  2. イコール $`A \overset{\T{equals}}{\lcorr} B`$ : 意味は $`\BR{A} = \BR{B}`$ 、ショートハンドは $`\xymatrix@1{A \ar@{=}[r] &B}`$
  3. 排他的 $`A \overset{\T{exclusive}}{\lcorr} B`$ : 意味は $`\BR{A} \cap \BR{B} = \emptyset`$ 、ショートハンドは $`\xymatrix@1{A \ar@{-}[r]|{|} &B}`$
  4. 写像 $`A \overset{\T{mapsto}}{\lto} B`$ : 用語 $`{A}`$ を用語 $`{B}`$ に対応付けられる。ショートハンドは $`\xymatrix@1{A \ar@{|->}[r] &B}`$

ショートハンド $`\xymatrix@1{A \ar@{|->}[r] &B}`$ は、条件付きの代替可能性としても使われます。行きがかり上、ショートハンドがコンフリクトしてしまいましたが、実害はないでしょう。

  • 条件付き代替可能性 $`A \overset{\T{maybe}}{\lto} B`$ : 場合によっては、用語 $`A`$ の代わりに用語 $`B`$ を使ってもよい。ショートハンドは $`\xymatrix@1{A \ar@{|->}[r] &B}`$

条件付き代替可能性は、曖昧多義語の記述に使われます。

$`A\T{ は曖昧多義語}\\
\quad \xymatrix{
{}
&{B_1}
\\
{A}\ar@{|->}[r] \ar@{|->}[dr] \ar@{|->}[ur]
&{B_2}
\\
{}
&{B_3}
}
`$

黒丸を使った以下の図は、黒丸が「$`A`$ または $`B`$」のことで、$`\BR{\bullet} = \BR{A}\cup \BR{B}`$ を意味します。

$`\quad \xymatrix{
{}
&{\bullet}
&{}
\\
{A} \ar@{^{(}->}[ur]
&{}
&{B} \ar@{_{(}->}[ul]
}
`$

用語・用法図の応用: 「関係」、「グラフ」」で追加した記法は:

  1. 同型 $`A \overset{\T{isomorphic}}{\lcorr} B`$ : 意味は $`\BR{A}\cong \BR{B}`$ 、ショートハンドは $`\xymatrix@1{A \ar@{<->}[r] &B}`$(ラベルなしの両矢印)
  2. 異なる・違う $`A \overset{\T{different}}{\lcorr} B`$ : 意味は $`\BR{A}\setminus \BR{B} \ne \emptyset`$ かつ $`\BR{B}\setminus \BR{A} \ne \emptyset`$ 、2つの用語が排他的とは限らないが、包含関係が存在しないことを示す。ショートハンドは $`\xymatrix@1{A \ar@{.}[r]|{|} &B}`$
  3. コンフリクト $`A \overset{\T{conflict}}{\lcorr} A`$ : 違う意味で同じ綴りの2つの用語(同綴異義語)がコンフリクト〈衝突 | バッティング〉していることを示す。ショートハンドは $`\xymatrix@1{A \ar@{-}[r]|{☓} &A}`$
  4. 省略 $`A \overset{省略}{\lto} B`$ : $`A`$ を省略した〈短くした〉用語が $`B`$ であることを示す。ショートハンドはなし、ラベル「省略」を使用する。

Propositions-as-Types が説明困難な事情: n回目の整理 // 構文論と意味論を区別する」で、「解釈できる」というラベルを導入しました。

「◯◯項」と「◯◯実体」のあいだは「解釈できる」とラベルされた破線矢印で結ぶことにします。

$`\quad \xymatrix@1{ \T{◯◯項} \ar@{-->}[r]^{\T{解釈できる}} &{\T{◯◯実体}}}`$

今後、構文に意味を対応させる矢印は破線にして、「解釈できる」とか「意味する」というラベルを載せることにします。

用語・用法図で分析: 「評価」とラムダ計算 // 計算」では「どうにも曖昧」な状況を波線両矢印で表しています。

こういう「どうにも曖昧」な状況(区別が本質的に不明瞭な状況)を以下のように表しましょう。

$`\quad \xymatrix@1{\T{代入}\ar@{<~>}[r] &{\T{計算}}}`$

同義語・多義語にホトホト困っている」では、「無関係でもない」/「類似性がある」というゆるい関係を「~」で示しています。

「~」で表される関係は同値関係ではありません。推移律は成立せず、対称性〈双方向性〉があるだけです。「無関係でもない」といった意味合いです。この関係は類似関係〈similarity relation〉と呼ぶことにします。

その例は:

  • フィールド@データベース ~ プロパティ@IT一般
  • データベース@/データベース/Notion ~ テーブル@/データベース/RDB
  • リレーション@/データベース/Notion ~ 外部キーによる参照@/データベース/RDB
  • テーブル@/データベース/RDB ~ 関係@/データベース/RDB/原理主義
  • カラム@/データベース/RDB ~ 属性@/データベース/RDB/原理主義

今後、波線両矢印の上にラベルを載せて、ハッキリしない関係を示すことにします。例えば:

$`\quad \xymatrix@1{\T{フィールド@データベース}\ar@{<~>}[r]^-{類似} &{\T{プロパティ@IT一般}}}`$

知識グラフ

用語・用法図は、ノードを用語(原則的に名詞・名詞句)だとして、ノードを結ぶ辺に関連性〈relationship〉を表すラベルを載せた属性付きグラフ(「属性付き集合から属性付き半グラフへ」参照)です。頻繁に出現する関連性には、ラベルの代わりにグラフィカルなショートハンドを使っています。

これは知識グラフknowledge graph〉の一形態と言えます。知識グラフは意味ネットワーク〈semantic network〉とも言いますが、ここでは「意味ネットワーク」という呼び名は使いません。その理由は、意味だけではなくて、構文解析ツリー(後述)のような構文的・文法的グラフも扱うので、用途を「意味記述」に限定したくないからです。

知識グラフで使う関連性〈関係〉で一番有名なものは“is-a関係”でしょう。例えば:

$`\quad \xymatrix@1{\T{犬} \ar[r]^-{\T{is-a}} &{\T{哺乳類}} }`$

しかし、is-a は既に included(グラフィカルなショートハンドは $`\xymatrix@1{{}\ar@{^{(}->}[r] &{} }`$)があるので使いません。

$`\quad \xymatrix@1{\T{犬} \ar@{^{(}->}[r] &{\T{哺乳類}} }`$

is-a〈included〉で分かりにくいところは、固有名に is-a〈included〉が使えるか? です。例えば:

$`\quad \xymatrix@1{\T{うちのポチ} \ar@{^{(}->}[r] &{\T{犬}} }`$

ここで、「うちのポチ」は固有特定の一匹の犬です。

包含の意味は $`\BR{\T{うちのポチ}} \subseteq \BR{\T{犬}}`$ です。これは次のことを意味します。

  • 「うちのポチ」という名前で呼ばれるすべてのモノ達からなる集合は、「犬」という名前で呼ばれるすべてのモノ達からなる集合の部分集合である。

「うちのポチ」という名前で呼ばれるすべてのモノ達からなる集合は、ポチ一匹だけからなる単元集合です。その単元集合は、「犬」という名前で呼ばれるすべてのモノ達からなる集合の部分集合になるので、is-a〈included〉の左側に固有名を置いても辻褄は合います。

しかし、左側が固有特定の対象のとき is-a〈included〉は気持ち悪い感じはします。そんなときは、exam-of(example of の短縮)を使うことにします。

$`\quad \xymatrix@1{\T{うちのポチ} \ar[r]^-{\T{exam-of}} &{\T{犬}} }`$

これは、うちのポチは、犬という生物種の特定の事例〈example〉になっている、ということです。別な例として:

$`\quad \xymatrix@1{\T{円周率} \ar[r]^-{\T{exam-of}} &{\T{実数}} }\\
\quad \xymatrix@1{\T{集合圏} \ar[r]^-{\T{exam-of}} &{\T{圏}} }
`$

これらは、$`\pi\in \mbf{R}`$、$`\mbf{Set}\in |\mbf{CAT}|`$ という所属命題と同じことです。

is-a と共に有名な関連性〈関係〉に、全体〈構造物〉と部分〈部品〉の関係を記述する has があります。例えば:

$`\quad \xymatrix{
{}
&{\T{タイヤ}}
\\
{\T{自動車}}\ar[r]^{\T{has}} \ar[dr]_{\T{has}} \ar[ur]^{\T{has}}
&{\T{ハンドル} }
\\
{}
&{\T{エンジン}}
}
`$

ここでは、has の逆方向の part-of を主に使います。

$`\quad \xymatrix{
{}
&{\T{タイヤ}} \ar[dl]_{\T{part-of}}
\\
{\T{自動車}}
&{\T{ハンドル} } \ar[l]_{\T{part-of}}
\\
{}
&{\T{エンジン}} \ar[ul]^{\T{part-of}}
}
`$

例えば、半群〈semigroup〉と呼ばれる代数構造は、台集合と乗法(と呼ぶ演算)と結合法則からなるので、part-of関係の知識グラフで描けます。

$`\quad \xymatrix{
{}
&{\T{台集合}} \ar[dl]_{\T{part-of}}
\\
{\T{半群}}
&{\T{乗法} } \ar[l]_{\T{part-of}}
\\
{}
&{\T{結合法則}} \ar[ul]^{\T{part-of}}
}
`$

上記の知識グラフは、半群という構造物〈structure〉の構成素〈constituents〉を表しています。それに対して、「台集合」は "carrier" とも呼び、「結合法則」は「結合律」とも言うことは、呼び名・言葉の問題です。知識グラフには、構造記述と言葉の問題を混ぜて書き込んでしまっていいとします。

$`\quad \xymatrix{
{}
&{\T{台集合}} \ar[dl]_{\T{part-of}}
&{\T{carrier}} \ar@{=}[l]
\\
{\T{半群}}
&{\T{乗法} } \ar[l]_{\T{part-of}}
&{}
\\
{}
&{\T{結合法則}} \ar[ul]^{\T{part-of}}
&{\T{結合律}} \ar@{=}[l]
}
`$

ごちゃ混ぜな印象はありますが、ひとつの図で済むので便利ではあります。

知識グラフと指標

新しいラベルとして should-be を導入します。

$`\quad \xymatrix@1{ A \ar[r]^{\T{should-be}} &B}`$

この関連性〈関係〉の意味は:

  • $`A`$ と呼ばれるモノの種類・タイプは、$`B`$ でなくてはならない。

is-a関係〈included関係〉と似てますが、次の点が違っています。

  1. 「であるべき」、「でなくてはならない」という制約として機能する。
  2. $`A`$ が、なんらかの構造のパート〈部品 | 構成素〉であるときに使う。

前節の半群に対して、should-be関係を入れると:

$`\quad \xymatrix{
{}
&{\T{台集合}} \ar[dl]_{\T{part-of}} \ar[r]^{\T{should-be}}
&{\T{集合}}
\\
{\T{半群}}
&{\T{乗法} } \ar[l]_{\T{part-of}}\ar[r]^{\T{should-be}}
&{\T{二項演算}}
\\
{}
&{\T{結合法則}} \ar[ul]^{\T{part-of}}\ar[r]_{\T{should-be}}
&{\T{等式的命題}}
}
`$

should-be により記述される制約を日本語の文で書けば:

  • 半群のパート〈部品 | 構成素〉である台集合は、集合でなくてはならない。
  • 半群のパート〈部品 | 構成素〉である乗法は、二項演算でなくてはならない。
  • 半群のパート〈部品 | 構成素〉である結合法則は、等式的命題でなくてはならない。

part-of と should-be を使った知識グラフは、ほぼ指標〈signature〉に対応します。指標については、「ホーア論理とホーアオートマトン 3/n : 言葉と習慣、Go言語」の2つの節「指標、シグニチャ、プロファイル、インターフェイス」「指標」で説明しています。より詳しくは次の過去記事を参照してください。

「指標」という語を含むすべての過去記事は:

半群の指標は、例えば次のように書けます。

$`\T{signature Semigroup}\: \{\\
\quad \T{sort } U\\
\quad \T{operation } m : U\times U \to U\\
\quad \T{equation } \mrm{assoc} :: (m\times \id_U);m = \alpha_{U,U,U}; (\id_U \times m); m \\
\quad\quad : (U\times U)\times U \to U\\
\}
`$

equation は、以下の可換図式を写し取ったものです。

$`\quad \xymatrix{
{(U\times U)\times U} \ar[d]_{m\times \id_U} \ar[r]^{\alpha_{U,U,U}}
&{U\times (U\times U)} \ar[d]^{\id_U \times m}
\\
{U\times U} \ar[d]_m
&{U\times U} \ar[d]^m
\\
U \ar@{=}[r]
&U
}\\
\quad \T{commutative }\In \mbf{Set}
`$

あえて圏論的・集合論的な書き方をするなら:

$`\T{signature Semigroup}\: \{\\
\quad U \in |\mbf{Set}|\\
\quad m \in \mbf{Set}(U\times U, U)\\
\quad \mrm{assoc} \in \mbf{Set}( (U\times U)\times U, U)(\, (m\times \id_U);m \,,\: \alpha_{U,U,U}; (\id_U \times m); m \,) \\
\}
`$

$`\mrm{assoc}`$ がゴチャゴチャしていて分かりにくいですが、これは、等式を集合圏の2-射と考えているのです。以下のようにも図示できます。

$`\quad \xymatrix@C+2pc{
{(U\times U)\times U} \ar@/^1.2pc/[r]^{(m\times \id_U);m}
\ar@/_1.2pc/[r]_{\alpha_{U,U,U}; (\id_U \times m); m}
\ar@{}[r]|{\mrm{assoc}\;\Downarrow}
&{U}
}\\
\quad \In \mbf{Set}
`$

集合圏の2-射としての等式については、以下の過去記事を参照してください。

今は、指標を圏論的・集合論的に解釈しましたが、依存型理論的な書き方と解釈も可能です。いずれにしても、半群の知識グラフに描かれたpart-of関係やshould-be関係は成立しています。

知識グラフと構文解析ツリー

構文解析ツリー〈parse tree | 解析木〉(「コンピュータによる言語処理の常識」参照)も知識グラフとして描いてみましょう。プログラミング言語ではなくて、自然言語(英語)を例にします。しかし、自然言語解析を話題にするわけではなくて、ごくごく簡単な自然言語文法をサンプルにするだけです。

中学・高校の英文法で5文型を習いました。それを、構文生成規則〈production rule〉として書くと:

  1. 文 → S V
  2. 文 → S V C
  3. 文 → S V O
  4. 文 → S V O O
  5. 文 → S V O C

ここでは、第3文型の S V O だけを考えます。第3文型は次の知識グラフとして描けます。

$`\quad \xymatrix{
{}
&\T{文}
&{}
\\
\T{S} \ar[ur]^{\T{part-of}}
&\T{V} \ar[u]|{\T{part-of}}
&\T{O} \ar[ul]_{\T{part-of}}
}
`$

S(主語)、V(動詞)、O(目的語)を、文という構造物〈structure〉のパート〈構成素 | constituents〉と考えるわけです。

S, O は名詞句である必要があります。V は(品詞が)動詞である必要があります。

  • S, O と呼ばれるモノの種類・タイプは、名詞句 でなくてはならない。
  • V と呼ばれるモノの種類・タイプは、動詞 でなくてはならない。

これはまさにshould-be関係です。

$`\quad \xymatrix{
{}
&\T{文}
&{}
\\
\T{S} \ar[ur]^{\T{part-of}} \ar[d]_{\T{should-be}}
&\T{V} \ar[u]|{\T{part-of}} \ar[d]|{\T{should-be}}
&\T{O} \ar[ul]_{\T{part-of}} \ar[d]^{\T{should-be}}
\\
\T{名詞句}
&\T{動詞}
&\T{名詞句}
}
`$

同じ「動詞〈verb〉」という呼び名でも、V は文の構成素〈パート〉としての役割り名で、下側の「動詞」は品詞(語の種類/クラス)です。

名詞句の構文生成規則は、例えば次を考えましょう。

  1. 名詞句 → 固有名詞
  2. 名詞句 → 冠詞 名詞
  3. 名詞句 → 形容詞 名詞
  4. 名詞句 → 冠詞 形容詞 名詞
  5. 名詞句 → 冠詞 名詞 名詞

主語には第1の規則「固有名詞」、目的語には第3の規則「形容詞 名詞」を適応するなら、構文解析ツリーはさらに次のように展開されます。

$`\quad \xymatrix{
{}
&\T{文}
&{}
&{}
\\
\T{S} \ar[ur]^{\T{part-of}} \ar[d]_{\T{should-be}}
&\T{V} \ar[u]|{\T{part-of}} \ar[d]|{\T{should-be}}
&\T{O} \ar[ul]_{\T{part-of}} \ar[d]^{\T{should-be}}
&{}
\\
\T{名詞句}
&\T{動詞}
&\T{名詞句}
&{}
\\
\T{固有名詞} \ar[u]^{\T{part-of}}
&{}
&\T{形容詞} \ar[u]^{\T{part-of}}
&\T{名詞} \ar[ul]_{\T{part-of}}
}
`$

最後に具体的な語句を追加しましょう。

$`\quad \xymatrix{
{}
&\T{文}
&{}
&{}
\\
\T{S} \ar[ur]^{\T{part-of}} \ar[d]_{\T{should-be}}
&\T{V} \ar[u]|{\T{part-of}} \ar[d]|{\T{should-be}}
&\T{O} \ar[ul]_{\T{part-of}} \ar[d]^{\T{should-be}}
&{}
\\
\T{名詞句}
&\T{動詞}
&\T{名詞句}
&{}
\\
\T{固有名詞} \ar[u]^{\T{part-of}}
&{}
&\T{形容詞} \ar[u]^{\T{part-of}}
&\T{名詞} \ar[ul]_{\T{part-of}}
\\
\T{"Ichiro"} \ar[u]^{\T{exam-of}}
&{\T{"eat"}} \ar[uu]|{\T{exam-of}}
&\T{"Jiro-style"} \ar[u]^{\T{exam-of}}
&\T{"ramen"} \ar[u]_{\T{exam-of}}
}
`$

実際の文にするには、動詞に「三単現のs」を付けて:

  • Ichiro eats Jiro-style ramen.
  • 一郎が二郎系ラーメンを食べる。

別な例として、S(主語)を「冠詞 名詞」に展開して、O(目的語)を「冠詞 名詞 名詞」(最初の名詞は形容詞的意味)に展開する例を挙げます。

$`\xymatrix{
% 1
{}
&{}
&\T{文}
&{}
&{}
&{}
\\
% 2
{}
&\T{S} \ar[ur]^{\T{part-of}} \ar[d]_{\T{should-be}}
&\T{V} \ar[u]|{\T{part-of}} \ar[d]|{\T{should-be}}
&{}
&\T{O} \ar[ull]_{\T{part-of}} \ar[d]^{\T{should-be}}
&{}
\\
% 3
{}
&\T{名詞句}
&\T{動詞}
&{}
&\T{名詞句}
&{}
\\
% 4
\T{冠詞} \ar[ur]^{\T{part-of}}
&\T{名詞} \ar[u]|{\T{part-of}}
&\T{}
&\T{冠詞} \ar[ur]^{\T{part-of}}
&\T{名詞} \ar[u]|{\T{part-of}}
&\T{名詞} \ar[ul]_{\T{part-of}}
\\
% 5
\T{"a"} \ar[u]^{\T{exam-of}}
&\T{"boy"} \ar[u]|{\T{exam-of}}
&{\T{"kick"}} \ar[uu]|{\T{exam-of}}
&\T{"the"} \ar[u]^{\T{exam-of}}
&\T{"soccer"} \ar[u]|{\T{exam-of}}
&\T{"ball"} \ar[u]_{\T{exam-of}}
}
`$

動詞の時制を現在進行型(is kicking)にすると:

  • A boy is kicking the soccer ball.
  • 少年があのサッカーボールを蹴っている。

ここで描いた構文解析ツリーは、次の手順で描いたものです。

  • 文を構造物とみなして、構文生成規則により構成素〈パート | 部品〉の列へと展開する。
  • 文と構成素のあいだの関係はpart-of関係となる。
  • 文の構成素と品詞との関係をshould-be関係により記述する。
  • 品詞(例えば名詞句)の構造をさらにpart-of関係で記述する。
  • 展開し終わった品詞と、具体的な語句との関係はexam-of関係として記述する。

おわりに

ここで紹介した知識グラフは、用語・用法図を拡張したもので、あえて構文的情報と意味的情報をごちゃ混ぜにして描いています。構文論と意味論を厳密に分離する必要性があるときもありますが、多くのケースでは、ごちゃ混ぜにしても実害はなく、むしろ便利です。

指標や構文解析ツリーも、知識グラフとして描けることを示しました。指標や構文解析ツリーを知識グラフで代替しようという気はありません。知識グラフは、指標や構文解析ツリーに別な見方を提供して、補助するために役立つだろうと思います。

構文的にまたは意味的に、あるいは両者が混じり合ったややこしい状況において、知識グラフが事情をクリアに記述するために使えると期待できます。