本節では理論的基盤となっている分布意味論を紹介し、次に本研究で実装を行 なったPRISMプログラムとPRISM処理系の概要を示す。
分布意味論(distributional semantics)は Poole [17] の枠組に近 いが理論的観点からすると完全加法性をもつ確率測度を使うこと、広範囲のプ ログラムに確率的意味を与えること、最小不動点意味論を特殊な場合として含 むこと、意味論に対応した学習規則が存在することが異なっている。
まずプログラム(以下 DB)とは高々可算無限個の確定節(definite clause)の集合である。ただし節は変数を含まないものとし、変数を含む場合 は常に基底代入をしてものを考える。 DB は単節の集合 F を空でない ボディをもつルールの集合 R に分かれる。簡単のため R も F も無限 集合とする。
以下の確率の文脈ではアトムを真のとき1, 偽のとき0をとる確率変数と考える。 F の解釈 ω は F ={A1, A2,...} と並べたときの<A1, A2,...>の実現値と見なすことができる。すなわち{0, 1}の可算無限個の直積
PF から PDB への拡大の具体例として我々は次の小さなプログラム PDB を考えよう。
本研究ではまずプログラミング言語PRISMを提案する。現在我々が考えている
PRISMプログラムのクラスは佐藤が提案したBSプログラムのみである。PRISMプ
ログラムのクラスの拡張は今後の課題になっている。
(1) BSプログラム
BSプログラムはファクトとしてPRISMに組み込みの確率的述語 bsw/3 の
みを許す論理プログラムである。 bsw(i,n,x) について i は確
率パラメータのID(真になる確率は θi)を表し、グループIDと呼ぶ。
n は各試行のIDを表す。また x は 0,1 のいずれかである。
bsw(i,n,1) と bsw(i,n,0) はどちらか一方のみが真になり、
n≠m または i≠j のとき bsw(i,n,・) と
bsw(j,m,・) の真偽は独立である。記述例は次に述べる。
(2) BSプログラムの記述例
プログラミング言語PRISMの記述例として血液型の決定に関する記号的/確率
的知識を血液型遺伝子モデルとして取り上げよう。血液型/血液型遺伝子は専
門的にはもっと細かく分類されるが、ここでは単純に外部から観測可能な表現
型(phenotype)はA, B, O, AB の4通りで分類され、ヒトの血液型の遺伝子型
(genotype)は3種類の血液型遺伝子 A, B, O の組合せ
AA, AB, BA, BB, AO, OA, BO, OB, OO
の9通りであるとしよう。そのとき血液型に関する教科書的知識を次のように 書き下すことができる。
R1〜R4 は記号的知識である。一方 R5, R6 は統計的知識である。これら の知識をBSプログラムで記述する。述語 bloodtype/1, genotype/2, gene/1 を
bloodtype(X) :- 血液型の表現型が X である。と定め、我々の知識を次のように記述する。表現型のみが外部から観測される ので bloodtype(・) がPRISMプログラムの中の仮想的な観測点とな る。
genotype(X,Y) :- 血液型の遺伝子型が XY である。
gene(X) :- 遺伝子は X である。
C1〜C5 は記号的知識、C6(a)〜(c)は確率的知識である。ここで bsw(1,P,X) と bsw(2,P,Y) を X, Y = 0, 1 をとる互いに独立な2 値スイッチ(binary switch) と考えたときC6(a)〜C6(c) ではこの2つのス イッチを2分木(図 --1)のように組合せている。
図 --1: 2分木: bsw(i,n,x) から gene(・) の決定
すると P に dad, mum を代入して得られる 6 つの基底アトム
gene(dad,a), gene(dad,b), gene(dad,o),の確率的性質が以下のように定められる。これは R5, R6 の確率的知識を満た すものである。
gene(mum,a), gene(mum,b), gene(mum,o)
BSプログラムを用いれば記号的知識/確率的知識を自然な形で混ぜ合わせて記 述できる。先に述べたように分布意味論の立場では bloodtype(a) のよ うな基底アトムを確率変数(確率事象)と見なしている。従って上の節は確率事 象間の関係を表していると考えることもできる。更にこのBSプログラムは血液 型遺伝子モデルを表現していると同時に実行/学習可能なプログラムでもある。
概念的に見るとPRISMプログラムは統計モデル(statistical model)、ユーティ リティプログラム(utility program)、制御宣言(control declaration)の3つ から構成される(図 --2)。統計モデルではまずプログラ ム中の仮想的な観測点としてターゲットアトム(target atom)を考える。一方 実世界において観測されるアトムを観測アトム(observed atom)と呼び、独立 に観測された観測アトムの集合を教師データ(teacher data)と呼ぶ。そしてター ゲットアトムの証明木を考えたとき葉の部分に bsw(i,n,x) が出 現し、各々の bsw(i,・,・) は真になる確率(以下パラメー タと呼ぶ)θi をもつ。
先ほども述べたように統計モデルは実行/学習可能なプログラムである。実行 では bsw(i,n,x) に付与されたパラメータ値 θi からター ゲットアトムの確率分布を導くという処理が行なわれ、逆に学習では教師デー タが与えられたとき、ターゲットアトムの確率分布が観測アトム(教師データ) の確率分布に近付くように bsw(i,n,x) のパラメータ値 θi の調節が行なわれる。
ユーティリティプログラムは統計モデルを利用するために使われる通常の Prolog プログラムで、実行/学習系の組み込み述語 learn/0-1, prob/1-2, cprob/2-3 などが利用可能である。概念的には統計モデル とユーティリティプログラムは区別する必要があるが、ユーザは統計モデルと ユーティリティプログラムをひとまとめにして単に Prolog プログラムに bsw/3 や learn/0-1 などの組み込み述語が加わった程度の意識 でプログラミングできる。実行/学習系の組み込み述語によって統計モデルを メタレベルで操作できるため、統計モデルを備えた大規模な確率推論/学習プ ログラムも組むことができる。
最後に制御宣言は学習に必要な情報を処理系に伝えるのに用いられる。現在は ターゲット宣言(target declaration)とデータ宣言(data declaration)の2種 類の宣言形式を考えている。ターゲット宣言はターゲットアトムの述語名 Predicate_Name と引数長 Arity を宣言するものである。述語 target/2 を用いて target( Predicate_Name, Arity). のように宣言する。またデータ宣言によって教師データのファイル 名 Filename を宣言する。述語 data/1 を用いて data( Filename). のように宣言する。現段階では学習に必要な情報の 記述はこの2種類の宣言形式で充分であるが、PRISM言語の拡張に従って制御宣 言の種類を増やす必要があるだろう。
PRISM処理系の構成図を図 --3 に示す。PRISM処理系は翻訳 (translation)、学習(learning)、実行(execution)の3つの系を備えており、 各系はそれぞれ異なった動作が要求される。PRISM翻訳系はPRISMプログラムを 学習と実行に特化した2つのプログラムに翻訳する。学習系では翻訳された学 習プログラムを組み込みのEM学習ルーチンと組み合わせて処理を行なう。実行 系ではサンプリング実行(sampling execution)、確率つき答え(answer with probability)、確率計算式つき答え(answer with probabilistic formula)の3 つの実行方式(モード)が利用可能である。これらは学習されたパラメータ、も しくはユーザに人工的に設定されたパラメータを用いる。
(1) 学習系
学習系の目的は教師データが与えられたとき、ターゲットアトムの確率分布が
観測アトム(教師データ)の確率分布に近付くように bsw(i,n,x)
のパラメータ値 θi の調節が行なわれる。その方法として我々は
θi の最尤推定を採用しており、PRISM学習系では2段階で処理される
(図 --4)。