[連載]フリーソフトによるデータ解析・マイニング第59回

統計的テキスト解析(4)~統計モデルとツール~

1.テキストの統計モデル

 テキストについて、何らかの処理や統計分析を行うときには、まず単位を決めることが必要である。テキストについて機械的にスペルチェックを行う際には、文字と単語を単位とし、文体分析や意味論的に統計分析を行うときは、単語、文節などを単位とする。文字、音素、単語、品詞、文節、文などを単位とした場合、単位ごとに記号siで表すと、テキスト処理は記号列s1s2si-1sisi+1snの処理として見なすことができる。
 記号列を統計分析する最も基本となるのは、それぞれの記号がテキストの中に現れる度数(頻度)である。さらに拡張した統計モデルは、2つの記号、3つの記号、…、n個の記号が隣接して出現する共起度数である。1つの記号、隣接する2つの記号、3つの記号、…n個の記号の度数を統計分析する方法をn-gram(エヌグラム)モデルと呼ぶ。
 n-gram のnは、統計分析を行うために切り取った記号列の長さであり、nが1のときunigram(ユニグラム)、nが2のときbigram(バイグラム)、 nが3のときtrigram(トライグラム)、nが4のときにはfour-gram(フォーグラム)のように呼ぶ。
 大量のテキストから得られたn-gramの出現度数に関する統計データは、そのテキストの解析および処理に広く用いられている。例えば、英文ではqの後ろにはほとんどの場合、uが続くことから、qの後に続く文字が識別できない場合はuと断定しても間違う確率は非常に小さい。このような情報は、qのbigramの統計データから得られる。
 例文「きしゃのきしゃがきしゃできしゃする。」のunigram、 bigram、 trigramの集計結果を表1に、 例として示す。

1.1 JUMAN

 形態素解析システムJUMANは、元京都大学総長、長尾真氏の研究室を中心に、多くの研究機関の協力により開発され、1992年に公開された。現時点では、同大学の黒橋禎夫氏の研究室で改良が続いている。最新バージョンは、次のサイトからダウンロードできる。
  http://nlp.kuee.kyoto-u.ac.jp/nl-resource/top.html
 インストールなどに関しては、ソフトに同梱されているマニュアルに説明されている。
 JUMANの使用例を示すため、例文「テキストについて計量分析を行う。」をテキストエディタに入力し、exMP.txtというファイル名でC:\tempの中に保存したとする。また、コマンドプロンプトが作業フォルダにアクセスしたとする。コマンドプロンプト上で次のようにコマンドを入力し、

表1 例文のn-gram(n=1、2、3)
unigram
1文字 度数 相対度数
4 0.222
4 0.222
4 0.222
1 0.056
1 0.056
1 0.056
1 0.056
1 0.056
1 0.056
合計 18 1
bigram
2文字 度数 相対度数
きし 4 0.235
しゃ 4 0.235
がき 1 0.059
する 1 0.059
でき 1 0.059
のき 1 0.059
ゃが 1 0.059
ゃす 1 0.059
ゃで 1 0.059
ゃの 1 0.059
る。 1 0.059
合計 17 1
trigram
3文字 度数 相対度数
きしゃ 4 0.250
がきし 1 0.062
しゃが 1 0.062
しゃす 1 0.062
しゃで 1 0.062
しゃの 1 0.062
する。 1 0.062
できし 1 0.062
のきし 1 0.062
ゃがき 1 0.062
ゃする 1 0.062
ゃでき 1 0.062
ゃのき 1 0.062
合計 16 1

 表1の中の「相対度数」は、その項目の度数を合計の値で割ったものである。相対度数に100を乗じた百分率を用いてもよい。
 表1で分かるように、文字を単位としたn-gramの場合は、集計されたものには言語学的に意味を持たないものもある。
 n-gramは文字だけではなく、単語、品詞、文節などを単位としてもよい。また、研究対象となる項目以外を無視して、隣接している項目のn-gramを用いることも可能である。例えば、テキストの中の助詞について統計分析を行うときには、テキストの中に現れている助詞以外を取り除き、助詞のみのn-gramの統計データを用いると、助詞の組み合わせの特徴を分析することが可能である。
 n-gramモデルは欠点を持っているが、データの集計が便利であることからテキスト処理を含む自然言語処理に広く用いられている。

2.データ集計のツール

 テキストから表1のような文字単位のn-gramを抽出するプログラムがインターネット上にいくつか公開されている。しかし、複数のファイルを同時に、ファイル単位にデータの集計処理をする際には使い勝手がよくない。そこで、本稿では、筆者個人用として作成した簡易ソフト(MLTP: MultiLingual Text Processor)について簡潔に紹介する。MLTPは、複数のテキストを同時に処理することを前提としており、日本語、中国語、韓国語、英語を扱うことが可能である。
 MLTPはjava言語で書かれ、Windowsで検証が行われている。Java言語がインストールされているマシンであれば、ダウンロードして直接使用できる。

(1)ダウンロードと起動・終了

 現時点では筆者の次のサイトからダウンロードできる。
  http://mjin.doshisha.ac.jp/mltp/index.html
 ダウンロードしたファイルmltp.zipには、コンパイル済みのプログラムmltp.jarがある。mltp.jarを左ダブルクリックすると、図1のような画面が開く。あるいはmltp.jarを選択し、マウスの右ボタンを押し、「プログラムから開く」⇒「Java(TM) Platform SE binary」をクリックする。
 コマンドプロンプトから起動することも可能である。テキストの量が多いときには、コマンドプロンプト上で使用するメモリを指定する必要がある。mltp.jarが置かれているフォルダにアクセスし、次のようにコマンドを実行する。

> java -Xmx500m -jar mltp.jar


図1 MLTPの起動画面

図1 MLTPの起動画面

 コマンドの中の「-Xmx500m」は、使用するメモリを500MBに指定するオプションである。ファイルの量が多くない場合は「-Xmx500m」を省略してもよい。デフォルトは256MBが指定されている。
 MLTPの終了は「file」⇒「exit」をクリックする方法と画面の右上の閉じるボタン×の部分をクリックする方法がある。

(2)ファイルの読み込み

 MLTPでは、一般のテキストファイル(Plain Text)と品詞などのタグが付いているファイル(Tagged Text)についてデータの集計を行う。デフォルトはPlain Textになっている。ファイルの形式はtxt形式のみである。
 ファイルの操作を行うためには、まず操作画面の「File List」タブをクリックする。次にボタン[Add New Files…] をクリックし、ファイルが置かれているドライブとフォルダを指定し、解析するファイルを選択する(図2を参照)。選択が終わったら、[開く]ボタンを押すと、選択されたファイルが読み込まれる(図3を参照)。このように他のフォルダのファイルを読み込み、付け加えることが可能である。


図2 ファイルを読み込む画面

図2 ファイルを読み込む画面


図3 ファイルが読み込まれた画面

図3 ファイルが読み込まれた画面

 ファイルの読み込み作業が終わったら、操作画面の [Confirm…] ボタンを押し、確認作業を行うことが必要である。

(3)タブと機能

「Summary」タブ:「Summary」タブは、読み込んだファイルごとのサイズ、漢字の数、平仮名の数、片仮名の数、文の数などのデータを集計する。集計結果は、タブで区切られた形式とカンマで区切られた形式から選択できる。結果の保存は、「Output File」の窓でフォルダを指定し、さらにファイル名を付け[Save…]ボタンを押す。
「n-gram」タブ:「n-gram」タブをクリックすると図4に示す操作画面が開かれる。n-gramのタイプおよび出力ファイルの形式などは、操作画面の右上から順番に行う。まずn-gramのタイプを、「Ngram Type」の窓で指定する。UnigramからSix-gramまで集計可能である。次に、Cutoff窓で値を指定する。この値は、出現度数が非常に少ない項目をまとめるための閾値である。例えば、Cutoff値を100にすると、全てのテキストにおける総度数が100未満である項目はOTHERという項目にまとまる。データ表のサイズのコントロールに有効である。


図4 n-gramタブと集計の画面

図4 n-gramタブと集計の画面

 出力データの形式は、タブ区切りとカンマ区切りが選択できる。出力データの行をテキストにするときには[in row]、列をテキストにするには[in column]を指定する。指定を終えたら、 [Processing…] ボタンを押すと、集計が始まる。集計にかかる時間は、用いたテキストの量と集計するn-gramのタイプに依存する。図5のメッセージ画面が現れると、集計が成功している。[了解]ボタンを押して[Processing Success]画面を閉じ、結果を保存する作業に進む。データ解析は、データ解析の専用ソフトを用いることを前提としている。


図5 処理結果メッセージ

図5 処理結果メッセージ

「Length」タブ:「Length」タブでは、単語の長さ、文の長さを集計する。品詞タグが付いていないテキストの場合は、文の長さを集計することができる。文の長さを計るときに、何文字を1つの項目にするかは自由に設定できる。図6に5文字を1つの単位とした文の長さの分布を求める画面コピーを示す。


図6 文の長さの分布を求める画面

図6 文の長さの分布を求める画面

「Mark」タブ:「Mark」タブでは、個別の文字やマークを指定し、その前の文字、あるいはその後の文字に限定したbigramデータを集計する。図7に読点「、」がどの文字の後に打たれているかに関して集計したMarkタブの画面コピーを示す。


図7 Markタブの画面

図7 Markタブの画面

「KWIC」タブ:「KWIC」(クウィック、Keyword in Context)タブは、指定した文字列を検索し、その前後の一定の長さの文字列を切り取り、出力する。テキストサンプルを読み込み、「先生」をキーワードとし、その前後10文字(全角)を切り取った画面コピーを図8に示す。検索結果の表頭の"Left"あるいは"Right"をマウスで左クリックすると、三角マークが現れる。三角マークをクリックすると、結果を昇順・降順にソートする。検索結果は保存して、Excelなどに読み込んで用いることが可能である。


図8 KWICの画面

図8 KWICの画面

「Word List」タブ:「Word List」タブは、単語リストを作成し、各テキストにおける、その単語の度数を集計する。単語リストでは、論理演算が用いられる。この機能は、見かけ上、異なる単語を1つのグループにしたいときに有効である。
「Tools」タブ:「Tools」タブには、全てのテキストについて、文字列の置換、JUMANと茶筌の形態素解析結果をMLTPに用いる形式に変換する機能、文をランダムサンプリングするなどの機能を備えている。処理した結果は、指定したフォルダの中に、自動的に元のファイル名で保存される。

(4)タグ付きデータの集計

 MLTPでは、次に示すタグ付きtxt形式ファイルを前提としている。

だから<接続詞>、<読点>高松藩<人名>は<副助詞>、<読点>徳川宗家<人名>に<格助詞>とって<動詞>は<副助詞>御三家<普通名詞>に<格助詞>次ぐ<動詞>親しい<形容詞>間柄<普通名詞>である<判定詞>。<句点>

 単語、文節の後に付けるタグは、全角山括弧<>で囲む。MLTPの「Tools」タブには、JUMAN、茶筌の形態素解析結果を上記の形式に変換する機能を備えている。ただし、JUMANは図9、茶筌は図10に示すようなフォーマットのtxt形式ファイルを前提としている。


図9 MLTPで用いるJUMANのフォーマット

図9 MLTPで用いるJUMANのフォーマット


図10 MLTPが用いる茶筅のフォーマット

図10 MLTPが用いる茶筅のフォーマット

 JUMAN、茶筌の出力結果をMLTPに用いる形式に変換する手順を次に示す。
◇ MLTPのメニュー「Data Format」から「Targged Text」を指定する。
◇「File List」タブからJUMAN、茶筌の形態素解析結果のファイルを読み込む。
◇「Tools」タブをクリックし、アクティブにする(図11を参照)。「Tools」タブには、2つのサブタブ「Format Converter」と「Replacement」がある。


図11 Tagged TextのToolsタブの画面

図11 Tagged TextのToolsタブの画面

◇サブタブ「Format Converter」をアクティブにし、形態素解析ソフトの種類(Chasen Format, Juman Format)を指定し、 [Make Replacement List…] ボタンを押すと、図12(a)の品詞選択ダイアログボックスが返される。 [Select All…] ボタンを押すと図12(b)のように全ての品詞タグの前にチェック記号が付けられる。確認ボタン[Confirm…]を押すと、図13のような結果が返される。


図12 品詞選択のダイアログボックス

図12 品詞選択のダイアログボックス


図13 品詞のタグ形式の変換画面

図13 品詞のタグ形式の変換画面

◇形態素解析の品詞情報は、図13の左側に、詳細の品詞情報と略した品詞情報を縦棒「|」で区切り、返す。MLTPに用いる品詞の表記は、この窓上で、縦棒「|」の右の文字列を自由に修正・入力する。例えば、品詞「助詞-副助詞/並立助詞/終助詞」を「副並終助詞」にしたいときは、次のように記述する。

助詞-副助詞/並立助詞/終助詞|副助詞

◇品詞タグを修正した画面コピーを図14に示す。この品詞タグの表記は、後に用いるため、[Save Replacement List…]ボタンを用いて保存することが可能である。


図14 品詞タグの表記指定画面

図14 品詞タグの表記指定画面

◇図14の状態のままで、 [POS Replacing…] ボタンを押すと、MLTPで使用可能なタグ付きtxtファイルがc:\tempの中に保存される。ファイル名は、読み込んだファイルの名前と同じになる。ファイルの保存フォルダは、「Output Path」の窓で指定する。

 このように処理したファイルをタブ「File List」で読み込むと、MLTPのタブ「n-gram」で、品詞のn-gram、単語のn-gram、品詞を指定した単語のn-gramのデータを集計することが可能である。タブ「Length」では、単語の長さを集計することができる。
 テキストから統計データを集計するツールとして、徳島大学総合科学部の石田基広氏は、R言語上で日本語テキストを統計的に分析するパッケージRMeCabの作成に着手し、精力的にバージョンアップを行っている。
  http://cms.ias.tokushima-u.ac.jp/index.php?RMeCab

2.記述統計量

 このように、テキストから集計したデータを統計的に分析する際には、平均、分散などの統計量がよく用いられている。
 表1のunigramのデータを例として、いくつかの基本統計量を説明する。

(1)平均

データの合計をデータの個数で割った値を算術平均(略して平均)と呼ぶ。表1におけるunigramの平均度数は(4+4+4+1+1+1+1+1+1)/9=2となる。xiで項目iが対応する値(度数、何らかの量)を示すと、算術平均算術平均(エクスバーと呼ぶ)は次の式で示す。

算術平均(エクスバー)の式

 平均はデータの中心を表す1つの統計量である。中心を表すと統計量としては、平均以外に最頻値、中央値がある。
 最頻値は、データの中で最も頻繁に現れている値である。表1のunigramでの最頻値は1である。
 中央値は、データを小さいものから大きい順に並べたとき真中に位置する値のことである。データの個数が奇数である場合は、中央に位置する値は1つになるのでその値が中央値になり、データの個数が偶数である場合は、中央に位置する隣接する2つの値を足して2で割った値を中央値とする。

(2)分散・標準偏差

 分散は、データの平均を基準としたバラツキ(散らばり)を示す度合であり、次の式によって定義される。

分散の式

 表1のunigramのデータの分散は次のように求めることが可能である。

表1のunigramのデータの分散

 分散の平方根を標準偏差と呼ぶ。

標準偏差の式

 ただし、標本のデータから母集団の性質を推測する場合は、次の式を用いるのが一般的であり、データ解析のソフトには次の計算式が用いられていることに注意して欲しい。

標本のデータから母集団の性質を推測する場合の式

 また、バラツキに関する統計量として、データの範囲や分位数がある。
 データの範囲とは、データの最小値から最大値までのことである。表1のunigramの最小値は1、最大値は4であるので範囲は[1、4]になる。
 分位数はデータを小さいものから大きい順に並べ(その逆でもよい)、その範囲を同間隔で区切った境値である。10等分、4等分が多く用いられている。4等分したときに各等分の境となる値を四分位数(Quartile Points)と呼ぶ。表1のunigramのデータを4等分した結果を表2に示す。25%の点の値(1+1)/2=1を第1四分位数、50%の点(中央値)を第2四分位数、75%の点の値(4+4)/2=4を第3四分位数と呼ぶ。

表2 四分位数

表2 四分位数

 表2のようなデータの個数が少ないときには、四分位数の長所があまり見られないが、データの個数が非常に多いときには、四分位数を用いてデータの分布状況を考察すると全体像が見やすい。
 データサイエンスでは、四分位数を用いてデータを図示する箱ひげ図がよく用いられている。箱ひげ図とは、長方形(箱)の両端に直線(ひげ)をつなげた図1のようなグラフである。
 長方形の箱(ヒンジ)の両端は25%点と75%の点を示し、長方形の中の線は50%の点(中央値)を示す。通常両端のひげの長さは、箱の長さの1.5倍以内の最大と最小値を示す。ただし1.5 倍は絶対的なものではない。ひげの外に、はみ出されたものは、異常に大きい(あるいは異常に小さい)値であり、異常値(あるいは外れ値)と呼ぶ。


図15 箱ひげ図

図15 箱ひげ図

 基本統計量および箱ひげ図の例を示すため、菊池寛と夏目漱石のそれぞれ20作品における「は」の後に読点(、)を打つ、いわゆる読点の前の文字に限定したbigramの中の「は、」の比率を次に示す。

菊池寛
0.241, 0.229, 0.194, 0.198, 0.255, 0.149, 0.146, 0.150, 0.189, 0.222, 0.231, 0.214, 0.232, 0.179, 0.251, 0.151, 0.151, 0.194, 0.208, 0.258

夏目漱石
0.105, 0.035, 0.078, 0.039, 0.054, 0.049, 0.033, 0.033, 0.045, 0.063, 0.093, 0.039, 0.073, 0.110, 0.128, 0.127, 0.067, 0.093, 0.055, 0.089

 この2組のデータの平均、分散、範囲を表3に示す。表3から分かるように、明らかに菊池寛の平均値が大きく、両組のデータの範囲は重ならない。

表1 例文のn-gram(n=1、2、3)
  平均 分散 範囲
菊池寛 0.202 0.002 0.146 0.258
夏目漱石 0.065 0.001 0.033 0.128

 このようなデータの中心とばらつきに関しては、箱ひげ図を用いて視覚的に考察することができる。図2に上記のデータの箱ひげ図を示す。図の中の×印は各テキストを示す。点が重ならないようにするため、横軸にランダムで分散させている。縦軸は「は、」の比率である。図2から、菊池寛は夏目漱石より「は」の後に読点(、)を明らかに多く打っている。


図16 「は、」の比率の箱ひげ図

図16 「は、」の比率の箱ひげ図