形式文法による文章生成

「形式文法」について調べてみると、その厳密な定義やオートマトンと組み合わせた判定・解釈の話が多くて、具体的な文章生成に関する説明が見当たらない。
ここでは、形式文法によって文章を作り出す方法について、簡単な具体例を使って説明してみる。


■ はじめに


「形式文法による文章の生成」

文字の置き換えによる文章の生成」
のこと。



■ 例えば


<主語><述語>


という文字列があったときに、<主語>を「私は」に、<述語>を「寝る。」に置き換えると、


私は寝る。


という文章ができあがる。


■ だけど・・・

<主語>を「@%!」にして、<述語>を「★*」に置き換えると、


@%!★*


なにがなにやら・・・ということになってしまうので、置き換えに使える文字列は、予め決めておかなければならない。


最終的にできあがる文章は、次の単語しか使ってはいけないと決めておく。


{私は,あなたは,寝る。,食べる。}


つまり今回は、この4つの単語以外は最終的な文章に登場しない。


使ってよい言葉が決まった。
しかし、<主語>を「あなたは」にして、<述語>を「私は」に置き換えると、


あなたは私は


という文章ができあがる。これでは適切な文章とは言い難い。
そこで、文字の置き換えに次のようなルールを定める。


<主語>→「わたしは」または「あなたは」
<述語>→「寝る。」または「食べる。」


このような置き換えのルールを決めてあげることで、

<主語><述語>という文字列から、「わたしは寝る。」「わたしは食べる。」「あなたは寝る。」「あなたは食べる。」という4つの文章が作り出せる。


■ つまり・・

「使用できる言葉と、置き換えのルールを決めることで、適切な文章を作り出しましょう」


というのが形式文法の考え方。

使用できる単語や、置き換えルールを増やすことで、様々な変化に富んだ文章を作り出すことができる。


■ さて・・

少し天下り式になるけど、文章生成のときには、第一歩を踏み出すための初期状態が必要になる。
文章の作成は、あくまで「文字の置き換え」で実現するものだから、何もない空っぽの状態から、いきなり文章を作ることはできない。


そこで、まず最初の状態を


<文章>


で表すこととして、


<文章>→<主語><述語>


という新しい置き換えルールを追加する。


これによって、


<文章>→<主語><述語>→私は寝る。


という流れで文章が作られる。


■ まとめると

これまでに登場したものを全部まとめると、次のようになる。


□ 置き換えルールで、「置き換えられる側」のもの
{<文章>,<主語>,<述語>}

□ 使ってよい言葉
{私は,あなたは,寝る。,食べる。}

□ 置き換えルール
{
<文章>→<主語><述語>
<主語>→「わたしは」または「あなたは」
<述語>→「寝る。」または「食べる。」
}

□ 最初の状態
<文章>


■ 一般的な表現では

毎回、上のように書くのは大変だし、厳密ではないので、記号を使って次のように書く。
===============
N = {<文章>,<主語>,<述語>}
Σ = {私は,あなたは,寝る。,食べる。}
P = {
<文章>→<主語><述語>
<主語>→わたしは|あなたは
<述語>→寝る。|食べる。
}
S = <文章>
===============
これら全部をまとめて、1つの形式文法と呼ぶ。

つまり、形式文法の教科書に必ず出てくる

形式文法 G = {N,Σ,P,S}

だ。


■ 用語


N = {<文章>,<主語>,<述語>}
最後に出てくる文章には含まれないので非終端記号(non-terminal symbol)と呼ぶ。
必ず、何か別のものに置き換えられる必要がある。(もちろん決められたルールに従って)。


Σ = {私は,あなたは,寝る。,食べる。}
最後に出てくる文章に登場する。
これ以上、別のものに置き換えられることはないので、これを 終端記号(terminal symbol)と呼ぶ。


● 置き換えルールの集まりであるP生成規則(production rule)と呼ぶ。


● 初期状態を表すS開始記号(start symbol)と呼ぶ。



■ さらにもう一歩


これまでの例では、<文章>→<主語><述語>というルールによって、生成される文章は必ず、主語が1つ、述語が1つ含まれるものだった。
文章生成のルールに、次のようなものを追加したらどうなるだろう。


<文章>→<文章><文章>


1つの文章は、2つの文章から構成されることを許容する。というルールだ。


この場合、<文章>に対して、2つの置き換えルールが存在することになる。

<文章>→<主語><述語> (ルール1)
<文章>→<文章><文章> (ルール2)


適用できるルールが複数ある場合、どれか1つ、好きな方をランダムに選択すればよい。


つまり、



<文章>
↓ (ルール1を適用)
<主語><述語>

私は寝る。


でもいいし、



<文章>
↓ (ルール2を適用)
<文章><文章>
↓ (最初の<文章>にルール1を適用)
<主語><述語><文章>
↓ (最後の<文章>にルール1を適用)
私は食べる。<主語><述語>

私は食べる。あなたは寝る。

でも、構わないわけだ。


このようにして、新しいルールを1つ追加するだけで、長さが自在に変化する文章を作り出すことが可能になる。



■ 補足

今回説明した文法は「文脈自由文法(2型)」と呼ばれるもの。文脈(それまでの分の構造)に依存せずに、自由に次の置き換えをできるため。



■ 関連エントリ
論文自動生成プログラムSCIgen - 大人になってからの再学習


マッチ箱の脳(AI)―使える人工知能のお話

マッチ箱の脳(AI)―使える人工知能のお話


ブルックスの知能ロボット論―なぜMITのロボットは前進し続けるのか?

ブルックスの知能ロボット論―なぜMITのロボットは前進し続けるのか?

論文自動生成プログラムSCIgen

人工知能がチューリングテストに合格したり、アメリカのクイズ番組で人工知能ワトソンが人間のチャンピオンを破って優勝したり、日本では大学入試で私大400校に合格できるレベルの人工知能が開発されたり、最近の「人工知能」に関する進歩は目覚ましいものがある。


少し検索すれば、ニュース記事を自動生成するプログラムの話や、アフェリエイトSEO対策のために数万規模のWebページを自動生成するプログラムの話などが簡単に見つかる。
一方で、GoogleはこのようなSEO対策のために自動生成された文章を見破るためのアルゴリズムを開発したりしている。すでに、人工知能どうしの戦い」は始まっていると言っていい状態だ。


人間の進歩はコンピュータの進歩の速度にはとうてい敵わないので、近い将来、人間の知能を凌駕するコンピュータが登場するのも時間の問題だろう。
医療、司法、政治、教育、様々な分野でコンピュータの言いなりにならざるを得ない、そんな時代が来るかもしれない。


最近では、論文のねつ造事件とあいまって、論文自動生成プログラムSCIgenが再び注目されるようになっている。
SCIgenは、マサチューセッツ工科大学で開発された、論文を自動生成するプログラムで、その論文が国際会議に採択された(まともな学術論文として受理された)として、大きな話題となった。


権威あると信じられていた学術分野の体たらくが露呈した、という文脈で紹介されることが多いが、SCIgenが、いったいどのようなものであるのか、どのような論文を生成するのか、その後はどのようになっているのか(論文が採択されたことが話題になってから、既に10年近くが経っている)、という周辺情報が少なくとも日本語では見当たらない。


そこで、調べてみた内容を以下にまとめてみる。


・SCIgenは図やグラフ、参考文献を含む、コンピュータサイエンス分野の論文の体裁をした文書を自動生成する。


・生成方法として「文脈自由文法」という形式文法を用い、ランダムな文章を作り出す。


・SCIgenが生成した「Rooter: A Methodology for the Typical Unification of Access Points and Redundancy」というタイトルの論文が2005 World Multiconference on Systemics, Cybernetics and Informaticsという国際会議に採択された。
(後に、この論文を採択した国際会議の運営責任者(科学者)は、その後3年間に渡って研究助成金を停止された)


・SCIgenが生成した論文は次のような体裁で4ページから構成される。外見だけでは、人間が書いたものと区別することが難しい。
PDFファイルが、次のURLからダウンロードできる:http://pdos.csail.mit.edu/scigen/rooter.pdf


・生成された論文は、個々の文章単独では問題のない文章であるように見えてしまう。全体でみると、統制の無いバラバラなものになっているが、「内容を理解できないのは私が無知なためではなくて、論文の方に問題がある」と断定するには、それなりの知識が要求される。査読の無い、フォーマットのチェックだけを行うような学会では到底見抜くことはできない。


・その後も、数多くの自動生成論文が、世界中の様々な学術会議、学会誌に採択され、2013年の時点では、少なくとも85の自動生成論文が、それなりに権威ある学会誌に採択されてしまっていることが示されている。


・研究者の能力を評価する基準の1つにh-indexという値がある(これは、ある研究者が世に出した論文が、どの程度、他の論文に引用されたか、という情報に基づく)。SCIgenによって自動生成された多数の論文間で互いに引用しあうことで、架空の研究者が相対性理論を発表したアルバート・アインシュタインよりも上位にランクインすることができた。


・SCIgenのWebページは次のURLで現在も公開されている。架空の著者名を入力するだけで、論文の自動生成を実験できる(数秒もかからず、あっという間に結果が見られる。ただしHTML形式)。
http://pdos.csail.mit.edu/scigen/


・SCIgenのプログラムコード(Perl)も公開されていて、誰でもダウンロードできる。


・公開されているSCIgenのプログラムコードはシンプルなもので、そのほとんどは論文でよく使われる単語のデータセットが占める。たとえば、単語は約8万、図の参照は3000程度。参考文献は実在しない文献を適当に生成している。



SCIgen のプログラムコード(データセットなど)を実際に見てみると、その一部分は他のプログラムで自動生成したもののように見える。
プログラムで自動生成したプログラムを使って文章を自動生成して、それを人間が読んでどうのこうの議論するというのは、なんだか奇妙な気分だ。


関連エントリ
[情報処理][人工知能]形式文法による文章生成 - 大人になってからの再学習
[人工知能]論文自動生成プログラムSCIgen(2) - 大人になってからの再学習


IBM 奇跡の“ワトソン”プロジェクト: 人工知能はクイズ王の夢をみる

IBM 奇跡の“ワトソン”プロジェクト: 人工知能はクイズ王の夢をみる

t検定

関連エントリ
統計的検定の考え方 - 大人になってからの再学習
カイ二乗検定 - 大人になってからの再学習


今回は、t検定の具体例を紹介してみる。

■ はじめに

何かの実験を2回おこなった場合、その結果がまったく同じになることはほとんどなくて、程度の差こそあれ違う結果が得られる。
この「程度の差」が重要で、あまり差が無いのであれば「偶然でしょう」と考えることができる。
差が大きければ「何か要因がある違い(有意である)」と考えられる(統計的検定の考え方 - 大人になってからの再学習)。


t検定では、2つの実験結果、2つのアンケート結果などの「平均値の差」に対して、その違いが偶然なのか(よくあるデータのバラつきなのか)、それとも何か本質的な違いがあるのか(有意水準5%または有意水準1%で差があると言えるのか)判断を下すことができる。


■ t検定でできること

t検定(2つの母平均の差に対するt検定とする)によって、次のような問に答えることができる。


(例1)システムAとシステムBの使いやすさを、5点満点で12人の被験者に評価してもらったところ、システムBの方が平均値が高いことがわかった。システムBの方がシステムAより使いやすいと言えるだろうか。(よくあるデータのばらつきの範囲だろうか。それとも、「違いがある」と言えるだろうか。)


(例2)40人の被験者から、3月分と4月分の携帯電話の通話料のデータを集め、4月分の平均値は3月分の平均値より大きいことがわかった。この結果から、3月と4月では携帯電話の通話料に差があると言えるだろうか。(よくあるデータのばらつきの範囲内だろうか。それとも、年度の変わり目で新しい友達が増えるため、などの何らかの要因によって「4月は通話料が増えた」と言ってよいだろうか。)


(例3)22人の被験者に対して、サッカー用シューズと、テニス用シューズをはいて100メートルを走った時のタイムを計測し、平均を求めた。この結果には、有意な差があると言えるだろうか。(注意:検定で判断できるのは「差があると言えるかどうか」であって、その差がシューズの違いによってもたらされたものであると判断するものではない。)


■ t検定を用いてはいけない例

次のような問にはt検定を使用すべきでないので注意が必要。


(ダメな例1)被験者の数が十分大きい場合(100を超えるくらい)。
→ t検定は少ないサンプル数を対象としている(z検定を用いる)


(ダメな例2)携帯電話の通話料の違いを20代の若者と60代のシニア層で比較したい。
→t検定では同一の被験者を用いることが前提となっている。異なる被験者を対象とできない。



■ t検定の手順

具体例として、(例1)の「2つのシステムの使いやすさの比較」を紹介する。

1. 次のような表を準備する(実験データ)


【システムAとシステムBに対して5点満点で、使いやすさを評価した結果】

被験者ID Aの評価( x_i) Bの評価( y_i)  x_i - y_i(=d)  d^2
1 3 2
2 2 3
3 3 5
...
12 3 3
合計 - -




2.表の空欄を埋める

被験者ID Aの評価( x_i) Bの評価( y_i)  x_i - y_i(=d)  d^2
1 3 2 1 1
2 2 3 -1 1
3 3 5 -2 4
...
12 3 3 0 0
合計 - - -9 17


3.値の差の標準偏差を求める

標本数: n = 12
データの差の合計: \sum{d} = -9
データの差の2乗の合計: \sum{d^2} = 17
データの差の平均:

データの差の分散:

データの差の標準偏差



4.検定統計量を計算する

t検定の統計量の式


5.t分布表を参照する

t分布表を参照し、上記の値を評価する。
http://www.koka.ac.jp/morigiwa/sjs/td.htm


t分布表表から参照する値は
「自由度(df):n-1=11, 有意確率: 両側5% (p=0.05)」
より
「2.2010」

6.比較

手順4で統計量(2.692)と手順5で求めた値(2.201)を比較する。
今回は、観測値から求めた値が分布表で求めた値よりも大きい。


7.結論
有意水準5%で「データの平均値に差は無い」という帰無仮説は棄却される。
つまり「2つのシステムの使いやすさには差がある」と結論される。


統計学がわかる (ファーストブック)

統計学がわかる (ファーストブック)



9割の人間は行動経済学のカモである ―非合理な心をつかみ、合理的に顧客を動かす

9割の人間は行動経済学のカモである ―非合理な心をつかみ、合理的に顧客を動かす