1. HOME
  2. 知識工学

知識工学ソリューション

知識工学とは

知識工学は古くから存在している応用分野のひとつで、専門家(エキスパート)が持つ知識をコンピュータで処理できる形で表現し、それらを用いてコンピュータに推論させることで、問題解決を行うことを目指す学問分野です。近年は専門家が手作業で知識ベースを構築するばかりではなく、自然言語処理や機械学習の技術を応用して、半自動的に知識ベースを構築する取組がなされてきています。特に当社においては以下のようなテーマに取り組んでおります。

  • Common Lisp, Prolog, Haskellを用いたプログラム開発
  • プログラム解析によるプログラム仕様理解
  • グラフ形式で表現された知識を活用するセマンティックWebアプリケーションの開発

Common Lisp / Prolog / Haskell

Common Lisp, Prolog, Haskell はそれぞれ非常に特徴あるプログラミング言語で、知識工学の分野で古くから利用されています。当社は、これらのプログラミング言語を活用したアプリケーションの開発を数多く手がけています。

Common Lispは知識処理に適したプログラミング言語で、記号処理を主とした人工知能(AI)の定番の言語です。プログラムもデータもS式と呼ばれるリスト形式で表現されます。Common Lispは高級言語としてFortranの次に古いぐらい歴史がありますが、非常に先見の明があった言語で、クロージャ、ガベージコレクトといった昨今のプログラミング言語にも取り入れられているような概念を持っています。特にマクロの機能は強力です。当社ではAllegro Common LispやSBCLといったCommon Lisp処理系を用いた開発を行っています。

PrologはCommon Lispと同じく、記号処理に適したAIの定番の言語です。一階述語論理に基づいた論理型プログラミング言語です。自然言語処理や知識ベースと親和性が高い言語です。

Haskell は純粋関数型言語の一つです。(純粋な)関数型言語は副作用がないため、そのプログラムは、再利用し易い、並列化に適している、バグが入りこみにくい、テストし易いといったメリットを持ちます。このようなメリットを生かせるアプリケーションが Haskell での開発が適しているものとなりますが、プログラム解析に関しては、副作用がない部品を組み合わせるようにプログラミング言語のパーザを作成できます。

プログラム解析

     

当社は伝統的なプログラム解析技術の応用に取り組んでいます。例えば、プログラムスライシングの技術を活用して、プログラムソースコードのリバースエンジニアリングに取り組んでいます。

./image/reverse.png

レガシー化したプログラムソースから、仕樣書を自動生成し、 保守性の向上に寄与するプロジェクトや、セキュリティ診断 (SQL Injection の検知など)にも同じ技術を適用しています。

セマンティック技術

当社はRDF(Resource Description Framework)を利用した知識処理に取り組んでいます。RDFはセマンティックWebの標準のデータ形式です。通常のWeb検索では、ユーザがキーワードを入力して検索し、得られた検索結果の一部を眺めて、欲しい情報にマッチしていそうなものを自ら判別してクリックしています。一方でセマンティックWebの目指す世界は、Webページの意味をコンピュータが理解できる(処理できる)知識として与え、それを処理する知識処理システムにより、より労力をかけずに欲しい情報を得られる世界です。

例えば、「数理システム」といっても、それが会社名を意味しているのか、なにかの情報処理システムを意味しているのかといった点はHTMLでは記述できません。セマンティックWebでは、Web上のデータにメタデータを付与して意味を定義し、互いにつなげます。この意味づけによるリンクを実現するためのデータ表現形式がRDFです。RDFはリソースを主語(Subject)、述語(Predict)、目的語(Object)のトリプル(3つ組)で表現します。      

./image/rdf.png

リソースはURIで一意に特定します。主語はリソースを同定できるURI、述語は主語と目的を同定できるURI、目的語は文字列リテラルまたはリソースを同定できるURIです。

例えば、Numerical Optimizerというソフトウェアを開発しているNTTデータ数理システムという企業と数理システムというソフトウェアを開発している信濃町情報システム(※架空)の企業が存在し、それぞれの企業が東京都新宿区信濃町に存在していることをRDFで表現したイメージが以下です(※細かいところは気にしないでください)。

./image/rdf_sample.png

述語でリソース間の意味づけをしてリンクさせているので、このような知識ベースがあれば、「数理システムという製品を所有している企業は?」という問いに対して、「信濃町情報システム」という検索結果を得ることができます。また、「東京都新宿区信濃町に所在地がある企業は?」という問いに対しては、「NTTデータ数理システム」と「信濃町情報システム」という検索結果が得られます。

セマンティック技術では以下の3つの要素が重要です。

  • グラフデータベース
  • 問い合わせ言語
  • ルール記述

グラフデータベース

グラフ構造を管理することに特化したデータベースがグラフデータベースです。グラフデータベースは人間関係や依存関係など、リソース間のリンク関係(つながり)を自由に管理可能です。一方で、リレーショナルデータベース(RDB)で関係性を管理する場合、リソースと関係性を適切に分離するようにテーブルを設計する必要があります。しかし、テーブル設計に関係性が固定されるため、新たな関係性が出てきた場合、柔軟に拡張していくことが困難です。また、検索時にはテーブル結合をする必要があり、友達の友達のように関係を複数たどっていくクエリの場合、非効率的になります。グラフデータベースとして、AllegroGraph, Neo4j InfiniteGraph などが知られています。当社では、主にAllegroGraphを使用しています。以下は、先のデータをAllegroGraphに格納して、Gruffという可視化ツールで可視化した様子です。データをグラフ構造で持つことにより、データ間のつながりがわかりやすく、より直感的な「見える化」が可能になります。

./image/rdf_gruff.png

問い合わせ言語

グラフデータベース(RDFデータベース)への問い合わせ言語として、SPARQL(Protocol and RDF Query Language)があります。例えば、先の例の「東京都新宿区信濃町に所在地がある企業は?」は、以下のように書けます(※細かいところは気にしないでください)。

  select ?s where {
    ?s rdf:type ex:企業 ;
        ex:所在地 ex:東京都新宿区信濃町 .
 } 
           

また、「数理システムという製品を所有している企業は?」は、以下のように書くことができます。

  select ?s where {
    ?s rdf:type ex:企業 ;
        ex:has-product ex:数理システム .
 } 
           
selectで始めて、where以下で検索条件を記述する点はSQLと類似しています。

なお、AllegroGraphではPrologの問い合わせの形でもクエリを書くことができます。

  (select (?s)
     (q- ?s !rdf:type !ex:企業)
     (q- ?s !ex:所在地 !ex:東京都新宿区信濃町))
          
     

ルール

ルールを設定しておくことで、日々更新されるデータに対し、ルールの発火を検知できます。これにより、機器の故障、重要顧客、要注意人物の検出といった応用が可能です。例えば、AllegroGraphでは「同じ出身・職業・同じ場所に滞在したことがある友人がおり、その友人がテロリストAに影響を受けている人は危険だ」というルールを以下のように記述できます。      

  (<-- (dangerp ?agent)
    (birthPlace ?agent ?birth)
    (occupation ?agent ?occupation)
    (hasBeenIn ?agent ?been)
    (hasFriend ?agent ?friend)
    (birthPlace ?friend ?birth)
    (occupation ?friend ?occupation)
    (hasBeenIn ?friend ?been)
    (influencesAgent TerroristA ?friend))
        

Linked Data

     

インターネットの世界はデータが分散されて管理されています。データ管理者が、それぞれ所有しているデータを機械処理が可能な形で構造化してWeb上に公開し、相互にリンクさせることができれば、それはインターネット空間全体に広がった超巨大なデータベースとなり、大きな価値を生み出すことができると期待されています。このような「つながるデータ」は「Linked Data」と呼ばれています。Linked Dataの公開データモデルとしてRDFが採用されており、これまでに述べてきたようなAllegroGraphのようなグラフデータベース(RDFデータベース)やSPARQLといった技術が適用されています。Linked Dataの中でもオープンデータはLinked Open Data(LOD)と呼ばれ、公的機関や自治体などを中心に国内外を問わずデータをLOD化する取組みが進んできています。Linked Dataに関連した取り組みは今後ますます活発になると考えています。

お問い合わせ
株式会社NTTデータ数理システムは、Common Lisp, Prolog, Haskell を駆使した知識処理やシステム開発の業務に携わってきた専門スタッフを擁しております。これは他社にはほぼ見られない大きな特徴で、この経験と知識を皆様のビジネスのために役立てたいと願っております。さまざまなご相談をお待ちしております。
E-mail : msi-info@msi.co.jp
TEL : 03-3358-6681