KH Coderで文章のクラスター分析を行う

1.はじめに

・個人の考察になります。正確性については保証しかねます。
・特定の作品を誹謗中傷する意図はありません。
・リアルタイムで視聴していたのはエクシードラフトからになります。

2.KH Coderを使おう

環境の構築が容易で直感的に使える形態素解析ソフトは便利です。
更新・質問コーナーもあるのに「無料」。これを使わない手はありません。
http://khc.sourceforge.net/
詳しい機能を知りたい場合は本が出ているのでそれを参考に。

3.データの準備

メタルヒーローシリーズのオープニング歌詞、計17個を解析にかけたいと思います。
曲数の多いスーパー戦隊を最初考えていたのですが擬音(戦隊名)の処理に困ったので止めました。
『ガオラオ ガオラオ ガオレンジャー!』
『ガンガンギギーン ギンガマン!』
とかどう形態素解析するか分かりません。

●テキストファイルの作成

<h1>放送時期:番組名(作詞家)</h1>
歌詞

の形のテキストファイルを作成します。

●文章の正規化

多くの歌詞に番組名が含まれます。固有名詞が共起しないように共通の表現に変換します。
重甲ビーファイターの場合、
重甲→所属
ビーファイター→名称
重甲ビーファイター→番組
といったように置換を行いました。
ついでに必要のない半角記号(!など)を削除します。

4.解析結果

Mecabは調整(wikipediaデータの追加など)したものを使用しています。

●抽出語リスト

ツール>抽出語>抽出語リスト
で文章内の単語と使用回数の表が出力できます。

ヒーローものの歌詞は同フレーズを繰り返すタイプが多いです。そのため単語の使用回数は、単純な出現回数ではなく文章数で見たほうが感覚的に合っている気がします。
Optionは『品詞別』『文章数(DF) H1』『Excel』を選択しました。

どの単語が何個の文章(歌詞)に出現したかが分かります。
2以上のものをまとめましたが、ヒーローらしい言葉が並んでいます。
品詞別で上位の言葉を見ると『未来・希望・幸せ・守る・一番・強い・する・やさしい・すぐ・夢』と、優しい感じの言葉になりました。戦闘を鼓舞するイメージがあったので意外です。

●対応分析

文章は17個とそこまで多くないので対応分析を行って、各歌詞の特徴を見てみます。

ツール>抽出語>対応分析
布置される語を適当な量に調整。最小出現数を3に設定することで122になりました。

縦成分(10.01%)と横成分(10.5%)を合わせても20%しかいっていないですね。
この2変数で全体の1/5程度しか説明できていませんが…2つの歌詞がどうも異質のようです。
超人機メタルダー:曲調が明らかに異質。キャラクターの名前も入っていません。
特警ウインスペクター:計16回歌われる「MAY DAY」のフレーズが原因な気がします。

5.クラスター分析

超人機メタルダーと特警ウインスペクターをデータから除いてクラスター分析を行います。

●設定と調整

ツール>文章>クラスター分析
使用される語が200以下になるように、語の最小出現数は2に設定。
Optionの『方法:距離』は『Ward法:Jaccard』を選択します。

Jaccardは語が使用されたか否かで判断をします。
逆にEuclid・Cosineは何回使用されたかを重要視して計算します。
今回の様にスパースな文章(文章毎に含まれている単語が大きく異なる)の場合、Jaccardが有効かと。逆に似通った文章(アンケート結果・共通テーマの論文)・長めの文章の場合は、Euclid・Cosineを使用したほうが精度が上がるかもしれません。
まだ勉強不足なので上手く言えませんがそんな感じです。

[OK]を押すと結果が表示されます。

[クラスター併合の過程]の[プロット]をクリックして併合水準のチェック。
途中から傾きが0に近くなってくれるのが一番良いのですが、あまり変化がありません。
若干落ち着いている部分の7付近に見当を付けます。

●分析

[調整]を押して再計算を行います。クラスターを10から7に変更して実行。
[各クラスターに含まれる文章]の[プロット]を押すと結果が表示されます。

いい感じに分かれていますね。
各作品を知らない人はサッパリのような気もしますが。
コメディ寄りのカブタック・ロボタックはクラスター2。
宇宙刑事シリーズはクラスター4。
レスキューポリスシリーズはクラスター7に綺麗に分けられています。
『異世界からの侵略者との戦い』に原点回帰した重甲ビーファイターが、宇宙刑事シリーズ(原点)のクラスターにいるのは面白いです。

●特徴語

各クラスター毎の特徴語を見て終わりにしたいと思います。
[分類結果の保存]をクリックして適当な名前で保存をします。

変数リストから先ほど保存した名前をチェック。
ラベルは自分が分かりやすいモノを入力できます。
[単位]をH1に設定して、[▽特徴語]>一覧(Excel形式)で特徴語一覧が出力されます。
ちなみに、保存した結果は ツール>外部変数と見出し>リスト からも呼び出せます。

特徴語一覧は以下の通り。文章が短いせいか、ちょっとした単語の被りが大きな影響を与えているようです。

6.まとめ

特にこれといった調整はしませんでしたが、割と納得できる結果を出すことが出来ました。
改めてKH Coderの底力を感じます。100%の性能を引き出せるように勉強しないといけませんね。
「あした」と「明日」、「やさしい」と「優しい」といった表記のゆらぎが所々で見られました。
この部分を上手く修正できれば結果も向上しそうです。