考察:「若葉(画像認識システム)に思うこと」

by ご近所のきよきよ


 
 この頃、コーディング開始しようとパソコンに向かうと、なにか思うところがあって、ノートに向かってしまいます。あれこれ詰めていかねばならない技術がぽろぽろとあるのです。フレームワークとなるプロセスの概略は直ぐにコーディングできたのですが、なんか細かい話になると・・・特にデータ駆動のアルゴリズムの部分になると仕事が止まってしまいます。何度も考え直していくのが良いとは思いますが、なにか覇気が無くなったような・・・。一気呵成にコーディングしていた昔が懐かしいというか・・・。
 
 ということで、細かい話を記していきたく思います。それは次のようなものです。
(1)曖昧性管理
(2)試行錯誤処理
(3)文脈からのプロセスの起動
 
1.曖昧性処理
 曖昧性管理は自然言語処理にも画像認識処理にも必要な機構です。重要な技術です。
 自然言語処理の場合は文脈とかモデルでの事象の入れ子構造から曖昧性を解決していこうと提案しました。「食事を取る」の「取る」が「食べる」の意味が強いことを、「食事」というモデルの内部の記述という文脈を検索して得ていくことになります。「知識を取るか食事を取るかどっちにする?」というような文脈ですと、「選択」の意味が強くなりますが、「〜を取るか、〜を取るか」パターンモデルというものを起こして、その連想が「選択」モデルに成っている・・・というように学習していくことで解決します。「食事を取る」の曖昧性は結局・・・状況(イメージとしてステージとかシーンを構成していって)によって、「食べる」か「選択」かを判断していくことになります。状況・・・すなわち文脈です。部分の全体の中での整合性評価で曖昧性を低減していくのです。イメージ(画像処理)で評価していくのが一番考えやすいです。記号の世界で全てを解決しようとすると、複雑なデータ操作とか知識の前提を必要とします。
 ということで、知識ベースの中でのモデルの記述は、次のようになるでしょう。
(model id=取る;
(episode id=食事-を-取る;
(verb id=取る;(mean;+eat))
(object id=食事;(mean;+food))
(case id=direct_object;食事)
(attribute id=feel;(mean;+good))
)
  (episode id=*-を-取る-か-*-を-取る;
    (verb id=取る;(mean;+select))
(object id=*)
(case id=direct_object;*)
  )
・・・・・・・・・・・・・・・
)
 もちろんこれは、記号の世界の記述で、これにはイメージデータの定義が付随していて、イメージでステージ、シーンを構成していくことができるように成っているべきです。イメージの記述は次のようになるでしょう。「海」のイメージを次に示します。


水平線のイメージです。
(model id=海;
  (image id=001;
(object id=line;
  (attribute id=length;long)
  (attribute id=direction;horizontal)
(image id=波)
)
(object id=dots;
  (attribute id=length;samll)
  (image id=波)
)
)
 
)
 
 
2.試行錯誤処理
 前の考察で、試行錯誤処理の説明しましたが、ちょっと落ちていた項目がありました。それは、線分を分断する処理が必要になる状況についてでした。文字が連続していたり、物体が重なっていたりしたとき、一続きの線分を文脈に応じて分断して、パターンマッチングして行かなくてはなりません。それは、部分てきなパターンのマッチングが取れたとき、全体のイメージを想定して、再度、線分の分布を解析しなおして、パターン解析、パターンマッチングをしていく処理になります。また、ビーズで文字を構成するように、断線した線分列を結合して、一つの線分にして再解析していくことも必要になります。試行錯誤は複数の解析プロセスを起動して、部分と全体の整合性を評価していく過程であります。
 整合性評価の基盤は、あるモデル(文脈とか知識ベースのなかの固まり)を取り上げて、それとフィットネスを解析していくことです。ばんばん連想機構は発動して、意味が整合するか見ていくことになります。
 また、試行錯誤はイメージデータのある部分を再度解析し直しますので、生のイメージデータ、細線化処理後のデータ、線分解析結果データとか、複数レベルのデータを一セットとして試行錯誤プロセスに渡すように設計しなくてはなりません。
 
 
3.文脈からのプロセスの起動
 知識ベースのデータには変数も記述できなくてはなりません。文脈によりプロセスを起動するときにこの変数を解決するのです。$valuableみたいな記述方法ですね。そんな工夫が必要です。
 それと、プロセスを起動する条件は知識ベースの特定のデータの値のセットです。知識ベースはモデルとその中の項目の集まりですから、その項目を特定しなくてはなりません。知識ベースの記述がXMLであれば、条件はXQueryでしょう。若葉は簡易システムですので、XMLではありません。解析がXMLよりずっと楽な記述です。ですから、XQueryを更に簡単にした記述をもってデータベースの項目を指定します。
 そうして、プロセスのパラメータは次の3項目からなるクラスのセットとして良いでしょう。
(1)データの場所を表す式
(2)データのタイプ
(3)データ値
 



おわり