三日後の自分は他人…最近、メモをChatGPTで壁打ちすることが増えました。さくさく進む一方、なんだか記憶に残りづらくなったような気がします。え、わたしだけ?
ところで、昔のAIブームの中には、『オントロジー言語(Ontology language)』という概念があるんですって…!温故知新、PlantUMLを使ってオントロジー言語を試してみましょう。
お届けしたい層
この記事は、次の状況を想定して書きました。
ソフトウェア開発において、
- さくさく進めたいのにプログラミング技術の日進月歩に悩んでいる
- メモから曖昧さを軽減して長期的に役立つナレッジベースを構築したい
- クラスベースのオブジェクト指向に関するモデリングにつなげたい
とくにシニア級上達を一緒に目指す現役エンジニアさんへお届けしたいです。
オントロジー言語とは
オントロジー言語においては、全言語共通のメタ概念をオントロジーと呼ぶそうです。
オントロジー言語の構成要素
次に挙げるのは、オントロジーで用いる構成要素の例です。
| 構成要素 | 省略記法 | 説明 |
|---|---|---|
| is-a 関係 | - | ある「概念」が、ある「概念」の部分集合。 |
| attribute-of 関係 | a/o | ある「概念」の述語。 |
| part-of 関係 | p/o | ある「概念」が、ある「概念」をたらしめる。 |
オントロジーの記述例「車」
たとえば、「車」ってなんでしょう?一言で「車」といってもバイク(自動二輪)から自転車までいろいろありますね。辞書で引いてみると次のようにあります。
【1】軸を中心にして回転する仕組みの輪。車輪。
【2】車輪を回転させて進むようにしたものの総称。自動車・自転車・荷車など。特に、現在では、自動車を、明治・大正時代では人力車を、中古・中世では牛車をさすことが多い。「車で駆けつける」── デジタル大辞泉より一部引用
【2】で「進むようにしたもの」とあります。進まなければ「車」ではなさそうですね。また、「車輪」というキーワードが出現しています。このキーワードの出現をきっかけに「車輪」について考えると、「車」が「進む」ための仕組みとして「車輪」が必要であると、先立って認識していることに気づきます。これらを踏まえて、「車」についての関係をオントロジー言語として概念整理します。
車のオントロジー
車
a/o 進む
- 二輪車
a/o 「車輪の数」は、「2個」である
- 自動二輪
p/o 「動力源」は、「エンジン」である
- 自転車
p/o 「動力源」は、「人力」である
- 三輪車
a/o 「車輪の数」は「3個」である
このオントロジーの言外では、「三輪車は二輪車ではないこと」並びに「エンジンが動力源である三輪車に言及しない」という認識をモデリングできていることがわかるかと思います。
これで、「車」が体系的となりました。
PlantUMLとオントロジーの対応付け
オントロジーを視覚的にするため、PlantUMLを使います。
PlantUMLーオントロジー構成要素対応表
| 種類 | 構成要素 | PlantUML記法 |
|---|---|---|
| 継承 |
is-a 関係 |
<|-- |
| メンバー |
attribute-of 関係 |
+ |
| 合成 |
part-of 関係 |
*-- |
この表に基づいて、視覚化したオントロジーが以下のとおりです。
図PlantUML形式のソースコード
@startuml
車 <|-- 二輪車
二輪車 <|-- 自動二輪
二輪車 <|-- 自転車
車 <|-- 三輪車
class 車 {
+進む
}
class 二輪車 {
+「車輪の数」は、「2個」である
}
class 自動二輪 {
+「動力源」は、 「エンジン」である
}
class 自転車 {
+「動力源」は、「人力」である
}
class 三輪車 {
+「車輪の数」は「3個」である
}
@enduml
まとめ
PlantUMLを活用しつつ「車」という概念がオントロジー言語で分かりやすくなりましたね。
もし将来、強いAI(strong artificial intelligence)とオントロジーがつながったら、どんな未来が訪れるか楽しみです♪
