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

統計的テキスト解析(12)~テキストの特徴分析~

1.テキストの特徴分析

 複数のテキストについて分析を行う際には、テキストの特徴について分析が必要である場合がある。
 テキストの特徴の分析例として、インターネットから次の2種類の論文の概要をダウンロードして用いることにする。
(1) 日本造船学会論文集 第193号の13編の論文の概要(http://nippon.zaidan. info/seikabutsu/2003/00320/mokuji.htm
(2) 情報処理学会平成19年度論文賞の9編の論文の概要(http://www.ipsj.or.jp/ 01kyotsu/award/ronbun_sho/h19_detail.html)
 各論文の概要を、それぞれ1つのテキストとした形態素解析済みのテキストファイルから、形式名詞を除いた出現頻度が高い上位50個の名詞を集計、処理したグラフを図1に示す。
 図1の中のラベルzousenは造船学会の論文概要、jyouhouは情報処理学会の論文概要である。図1の中の語(名詞)は、その周辺のテキストに相対的に多く用いられたものである。したがって、テキストの周辺の語がそのテキストの特徴を読み取る1つの情報源になる。
 図1から分かるように、おおむね縦軸の上の部分は情報処理学会の論文の概要であり、下の部分は造船学会の論文の概要である。情報処理学会の論文jyouhou07には「手法」「データ」「論文」という語が相対的に多く使用され、造船学会の論文zousen06,zousen07には、「嵐」「海域」「モデル」などが相対的に多く使用していることが読み取られる。


図1 論文の概要と用いられた語の散布図

図1 論文の概要と用いられた語の散布図

  このように、テキストに用いられた要素を分析することで、そのテキストの特徴を統計的に分析することができる。

2.データの形式

 テキストの特徴を分析するとき、一般的には文字列、形態素、文節、句およびこれらの共起関係などが用いられている。
 テキストが1つの場合は、そのテキストにおける要素を集計し、出現頻度が高い順に分析を行うのが一般的であるが、テキストが複数の場合は、テキスト毎に要素を集計した表1のようなデータ表を用いるのが一般的である。

表1 データ形式の例

 表1は表頭の語が表側のテキストの中に使用された度数である。表1の表側のテキストの名前は、識別可能な記号列である。自由回答文を含むアンケート調査結果の解析を行う際には、回答者の基本情報(性別、職業、年齢など)や回答の選択肢を選択した情報などを用いてファイル名前を作成すると、自由回答文と他の質問との関連性を分析する際に便利であろう。説明の便利のため表1の行を個体、列を変数と呼ぶことにする。
 表1のようなデータをそのまま用いて分析することも可能であるが、データ分析の方法によっては、テキストの長さに比例する相対頻度(比率、百分率など)に変換を施して分析を行うことが必要である場合もある。もちろん、tf-idfのような語の重みを計算して用いてもよい。

3.主な分析方法

 テキストの特徴を分析することは、表1のようなデータの個体と変数の関連性を分析することである。
 表1のようなデータの個体と変数を分析する方法として多く用いられているのは、主成分分析、対応分析、因子分析と呼ばれている多変量データ解析の方法である。
 これらの方法は、いずれも多くの変数のデータを何らかの方法で、情報の損失を抑えながら少ない変数に集約して分析する方法として用いることが可能である。これらの方法のデータ処理の共通な部分は、データに何らかの変換と処理を加え、固有値と固有ベクトルを求める技法を用いている。

(1)固有値と固有ベクトル

 固有値と固有ベクトルは、方程式の解として理解することが可能である。説明を簡潔にするため、ここでは正方形の行列を用いることにする。
 データ行列Aに対し、等式Ax=λxを満たすλ(ラムダと呼ぶ)をAの固有値、ゼロではないベクトルxを固有値λに対応する固有ベクトルと呼ぶ。
 例えば、データ行列detAに対し、λ=5、detxは等式Ax=λxを満たす。この等式の左辺と右辺の計算過程と結果を次に示す。等式の左辺は

等式の左辺

であり、右辺は

等式の右辺

であるので等式が成り立つ。行列 に対し、λ=1、detxも等式 を満たす。
 固有値が複数の場合は、値が大きいものから降順に並べ、最も大きい固有値を第1固有値、その次を第2固有値のように呼び、それぞれの固有値に対応する固有ベクトルを第1固有ベクトル、第2固有ベクトルと呼ぶ。
 通常、われわれが収集したデータ表は正方形とは限らないが、データの分散共分散行列、相関係数行列、距離行列などは正方形の行列であるので、上記の例と同じく固有値および固有ベクトルを求めることが可能である。
 表1のようなデータを、図1のような散布図で図示して分析する方法として主成分分析、対応分析、因子分析などの方法がある。その中でデータ処理のアルゴリズムが最もシンプルであるのが主成分分析である。

(2)主成分分析

 主成分分析は、データの分散共分散、あるいは相関の情報に基づいて多くの変数のデータの情報の損失を抑えながら少ない変数に集約する方法である。
 図1は、出現頻度が相対的に高い上位50個の名詞(変数)を2変数(第1,2主成分)に集約したデータの散布図である。
 主成分分析には、分散共分散と相関係数を用いる方法がある。データの分散の情報を用いる場合は、分散が最大になる方向の軸を第1主成分とし、これと直交し、かつ次に分散が大きい方向の軸を第2主成分とする。この方法は、データの分散共分散行列の固有値と固有ベクトルを求める問題に帰する。また、相関情報を用いる場合には、相関が最大になる方向の軸を第1主成分、これと直交し、かつ次に相関が大きい方向の軸を第2主成分とする。この方法は、データの相関係数行列の固有値と固有ベクトルを求める問題に帰する。
 読者が実際のデータを用いて体験するため、表1のデータをhttp://mjin.doshisha.ac.jp/data/index.htmlにgaiyouのファイル名で掲載している。データをダウンロードし、cドライブのフォルダtempの中にgaiyou.csvと保存したとする。
 Rのコマンドの例を次に示す。まずRを立ち上げ、次のようにデータを読み込む。

>gaiyou<-read.csv("c:/temp/gaiyou.csv",head=T,row.names=1)

 読み込んだデータgaiyouについて、次のように主成分分析の関数prcompを用いて解析を行い、関数biplotで作図すると図1が得られる。

> gaiyou.pc<-prcomp(gaiyou[,1:50], scale=TRUE)
> biplot(gaiyou.pc,var.axes = FALSE)

 上記の関数prcompに、用いたscale=TRUEは、データを標準化することを指定する引数である。引数をscale=TRUEに指定すると相関係数行列を用いた主成分分析に相当する。引数scaleを指定しないとデフォルトのscale=FALSEが実行されるので、分散共分散行列を用いた主成分分析の結果を返す。
 どの方法で主成分分析行うかの判断に関しては、経験が必要であるが、データセットの中に異なる単位のデータなどが混じり、標準化が必要とする場合は、相関係数行列を用いるべきである。
 主成分分析を行う際には、図1のように2変数に集約した場合、もともと50変数のデータの何パーセントの情報が、この2変数に含まれているかについて把握することが必要である。その情報は寄与率と累積寄与率から読み取られる。
 すでに説明したように、主成分分析は分散共分散行列、あるいは相関係数行列の固有値と固有ベクトルを求める問題である。
 m×mの正方形行列のゼロではない固有値λ12,…,λkが存在し、かつ であるとする。任意の固有値 が、固有値の合計(固有値の合計)の中に占める割合(λj/固有値の合計、あるいは百分率)を寄与率と呼ぶ。
 例えば、行列Aの固有値5, 1のそれぞれの寄与率は5/6=0.8333、1/6=0.1667である。第1固有値の寄与率が0.8333であることは、第1固有ベクトルに、行列Aの情報が約83.33%集約されていると解釈する。
 通常、固有値は大きいものから降順(λi>λi+1)に並べられている。第1固有値の寄与率から順番に累積したものを累積寄与率と呼ぶ。行列Aは2列のデータであるので、第2固有値までの累積寄与率は0.8333+0.1667=1(100%)である。
 主成分分析では、固有ベクトルを主成分と呼ぶ。第1固有ベクトルを第1主成分、第2固有ベクトルを第2主成分と呼ぶ。
 主成分分析を行う際に、第何主成分まで用いて分析を行うべきであるかは、一語でいいがたい。1つの目安としては、分散共分散行列を用いる場合は、累積寄与率が80%前後まで、相関係数行列を用いる場合は、固有値が1前後までであるといわれている。
 表1に示した、2種類の論文概要の50変数を用いた主成分分析の寄与率と累積寄与率の上位16位までを次に示す。

>summary(gaiyou.pc)
summary(gaiyou.pc)の結果

 上記の結果の第1行の標準偏差(Standard deviation)の2乗が固有値に等しい。第2行が寄与率、第3行が累積寄与率である。この主成分分析の結果は、相関係数を用いた主成分分析であるので、固有値1を目安にすると、第15主成分まで用いて分析を行うことになる。これは現実にあまりそぐわない。このような場合は、寄与率が高い上位幾つの主成分について分析することになる。
 関数prcompでは、$rotationに主成分が記録されている。上記の例では、コマンドgaiyou.pc$rotationで返すことができる。
 主成分は、データ行列の列のスコアである。データ行列の行のスコアを主成分得点と呼ぶ。主成分得点は、行のデータと固有ベクトルとの線形結合である。その関係を第1固有ベクトルとi行のデータを用いた例を示す。

第1固有ベクトルとi行のデータを用いた主成分得点の例

 関数prcompでは、$xに主成分得点が記録されている。本稿の例では、コマンドgaiyou.pc$xで返すことができる。
 図1は、第1、2主成分の散布図と第1,2主成分得点の散布図を1つの図に重ねて示したものである。このような図をバイプロット(Biplot)と呼ぶ。
 テキストの数と変数の数が多い場合は、バイプロットで考察がしにくい。その際には、個別の主成分と主成分得点の棒グラフなどで考察することを勧める。
 例として、第2主成分と主成分得点を用いた例を次に示す。まず主成分得点の棒グラフを作成するコマンドを次に示し、図2にその結果を示す。

> barplot(gaiyou.pc$x[,2],las=2)


図2 第2主成分得点の棒グラフ

図2 第2主成分得点の棒グラフ

 図2から第1主成分得点の正の値のほとんどが「情報」の論文概要であり、負の値のほとんどが「造船」の論文概要である。「情報」と「造船」双方の論文概要にはどのような名詞が多く使用されているかは、主成分の棒グラフで考察することができる。
 用いた名詞は50にものぼるので、主な名詞を抽出するために主成分の値をソートし、値が大きい上位10個と値が小さい下位10個を抽出するコマンドを次に示し、その結果を図3に示す。
 図3の正の値をとっている項目が、第2主成分得点での正の値をとっているテキストで用いられた項目である。その逆も言える。

> y<-gaiyou.pc$rotation[,2]
> y1<-y[sort.list(y,dec=TRUE)]
> barplot(y1[c(1:10,40:50)],las=2)


図3 第2主成分の主な項目の棒グラフ

図3 第2主成分の主な項目の棒グラフ

 また、主成分について考察を行う際には対散布図や3Dのような動的グラフを用いることも可能である。

(3)対応分析

 主成分分析と並んでテキスト分析には、対応分析が多く用いられている。対応分析(Correspondence Analysis)は、フランスのベンゼクリ(Benz?cri)によって1960 年代に提唱され、1970 年代から普及し始めたカテゴリカルデータの解析方法で、コレスポンデンス分析とも呼ばれている。
 類似の方法としては、1950 年代に林知己夫氏によって提案された数量化Ⅲ類、1980年代に西里静彦氏によって提案された双対尺度法(Dual Scaling)などがある。これらの方法のアルゴリズムの中核には大きな差がない。数量化Ⅲ類と対応分析は同等であることが数理的に証明されている。対応分析は、データの形式によって、そのアルゴリズムと名称が分かれている。通常対応分析と呼ばれているのは、データが表1のような度数データに適応した方法である。データが0、1、あるいは順序尺度のデータに適応する方法は多重対応分析と呼ぶ。
 対応分析は、表1のような度数データ度数データのカイ2自乗統計量を用いる。カイ2乗統計量の各セルの値の平方根を次に示す。

カイ2乗統計量の各セルの値の平方根

 対応分析では、データ表の列の効果はQ=ZtZ、行の効果はQt=ZZtの固有ベクトルU,VをそれぞれでDc-1/2UDr-1/2Vに基準化して用いる。ここのDcp+jを要素とした対角行列、Drpi+を要素とした対角行列である。
 Rには対応分析の関数がいくつかある。もっとも基本的なのはパッケージMASSの中に用意されている関数correspである。その使用例を次に示す。関数correspでは、いくつの因子(スコアとも呼ぶ。主成分分析の主成分に相当する)を返すかを引数nfで指定する必要がある。

> library(MASS)
> gaiyou.coa<-corresp(gaiyou[,1:50],nf=2)
> biplot(gaiyou.coa)


図4 対応分析のバイプロット

図4 対応分析のバイプロット

 行のスコアは$rscore、列のスコアは$cscoreに記録されている。分析の方法は基本的には主成分分析と同じである。

(4)その他の方法

 主成分分析および対応分析と類似な方法として因子分析と独立成分分析という方法がある。独立成分分析方法は、信号処理における信号とノイズを分離する方法として開発されたが、近年汎用のデータ解析方法として用いるようになった。また、人間の神経回路をモデル化したニューラルネットワークのアルゴリズムを用いた自己組織化マップという方法もテキストマイニングに用いられている。