FridayCaboChaでKNBコーパスを使うまたまたCaboChaの続きで、今回は京都コーパスではなくKNBコーパス(KNBC)を使う。KNBコーパスは京都コーパスと異なり、タグ情報だけでなく本文情報も含まれているので、この記事の通りのオペレーションを行えば、(途中までは)毎日新聞データを持たない読者も実際にCaboChaの学習や評価を試すことができる。KNBコーパスにはさまざまな特徴があるが、ここで注目するのは京都コーパスと比較しての下記の点である:データ量が少ない。(大学生が書いた)ブログ記事である。各種アノテーションを付加した解析済みコーパスである。毎日新聞の記事データにアノテーションを付加した京都コーパスに比べデータ量が約一桁少ない(京都コーパス38400文に対し、KNBコーパスは4184文)。多様な形態素」というCGM的な特徴を有する。KNBコーパスの一部を学習して他の部分のKNBコーパスで評価を行う。KNBコーパスの全部を学習して京都コーパス(毎日新聞記事)を解析してみる。京都コーパスを学習してKNBコーパス(ブログ記事)を解析してみる。1.はKNBコーパス内部の学習・評価を行うものである。グルメの全合計3662文を学習することにした。モデルファイルでのテスト(3200文;エラー率0.2116)に近い量である。2.と3.はブログ記事と新聞記事のクロス的・相互的な学習・評価のテストであり、ブログ記事を学習してモデルファイルを作成し新聞記事を解析した場合やその逆を行ってみて、解析性能がどの程度になるか見るものである。前の記事と比較のため、また、自作したツール類が再利用できることなどから、同様にCaboChaのchunkを対象に評価を行った。0.1259KNBC-KNBCテストでは、ブログ記事の3662文を学習したモデルが、量的にはそれよりも少ない京都コーパス3200文を学習したモデルよりもエラー率が高くなった。KNBC-KCテストは全ブログ記事のコーパスを学習したモデルで新聞記事を解析するテストだが、やはりエラー率はさらに上がった。KC-KNBCテストはKNBC-KCテストとは逆に、新聞記事である京都コーパスを学習したモデルでブログ記事を解析するテストであるが、同様にエラー率は高かった。KNBコーパスをCaboCha形式に変形しつつ、4つのカテゴリごとのファイルに分ける。前の記事の習慣に合わせリネーム。モデルのソースを作成。cabochaの実行。正解データとcabochaの出力を比較用に正規化。モデルのソースを作成。cabochaの実行。cabochaの出力を比較用に正規化。cabochaの実行。cabochaの出力を比較用に正規化。Wednesdayモデルとなる京都コーパスの量を変えたときのCaboChaの性能を見るCaboCha+京都コーパスの続きである。ディレクトリにある拡張子が.KNPのファイル28個を上から6個、6個、6個、5個、5個ずつまとめて交差検定を行った。すると、学習データの量に偏りが出たせいか、エラー率は12%から18%とばらつきがあった。そこで今度は学習データのファイルを文の個数で正確に分割し、学習データの量とchunkの正解率の変化を見てみることにした。増やしていったときのエラー率に注目する。0.1259ここで、chunk.juman.10.1は3200文、chunk.juman.10.2は6400文と学習データ量が増えていき、chunk.juman.10.10は32000文である。いうプログラムを作成した。SaturdayCaboChaと京都コーパスで交差検定ロンドンオリンピック真っ最中で仕事がはかどらない中、日本語係り受け解析器CaboChaと京都コーパスで交差検定を行ったのでメモを残す。この作業の目的は、本件交差検定というよりはどちらかというとこの作業を通じてCaboChaの学習や評価のツールを正しく使えるように私自身が練習し、作業記録を残すことである。必要に応じてテキスト処理のためのツールを整備することも行う。以下の作業では京都コーパスの方は毎日新聞のCD-ROMを用意し、付属のauto_convを実行した後のデータがあることを前提とする。この方法で作成したモデルファイルは(そしてCaboChaが現在デフォルトで内包しているモデルファイルも)学術研究用に利用が限定されることをここで念のため書き添えておく。CaboChaのツールで共通して使えるmode(-eオプション)はchunk,dep,neのうち、chunkを用いることにした。depは学習(cabocha-learnの実行)に4時間かけても終わらなかったため、残念ながら時間的な制約から今回は作業対象からはずした。入手できたデータにneタグがついていなかったため、neも同様に対象外とした。文字コードはコーパスに合わせてEUCを選択。ディレクトリにある拡張子が.KNPの全ファイルをファイル単位で5分割して交差検定を行う。ファイル数は28個なのでこれを上から6個、6個、6個、5個、5個ずつまとめて各グループとし(下表)、5グループのCaboCha形式の学習データを得る。5分割の5の根拠は特にない。9512ED.KNPまたG5N.datのCaboCha形式の学習データから、1カラム目の単語情報を抜き出して原文テキストを逆再生し、それをS5N-x.txtというテキストファイルにする。ここで"-x"の部分は"-01"から"-20"程度の値をとるように分割する(G5N.datを対応するひとつの原文テキストファイルにするとcabochaコマンドで解析するには大きすぎるため、複数個のS5N-x.txtファイルに分割している)。評価時のことも考慮すると、G5N.datはS5N-x.txtと対応する正解データのファイルG5N-eval-x.datに分けておく(ただし、評価は後述するようにCaboCha付属の評価ツールが使えなかったので、結果としてG5N-eval-x.datは不要になった)。これらのファイルを出力するプログラムmake_source.rbは別途自作した。上記のCaboCha形式の学習データを1つ残して4つずつまとめて学習させ、下表の5通りのモデルファイルと正解データのペアを得る。differentというエラーになる)。至らない形容詞,*,イ形容詞アウオ段,基本形,至らない,いたらない,代表表記:至らないこの問題に対応するため、形態素を文節ごとにまとめて文節番号とともに出力し、1文で1行に出力するプログラムnorm_chunk.rbを自作した。(9)離党問題に(10)ついて(11)「政権に(12)影響を(13)及ぼす(14)ことには(15)ならない。(16)離党者が(17)いても、(18)その(19)範囲に(20)とどまると(21)思う」と(22)述べ、(23)大量離党には(24)至らないとの(25)見通しを(26)示した。:そして評価は、CaboChaの出力と正解データの出力をともにnorm_chunk.rbにかけ、それらをdiffで比較することで異なる文の数(異なる行数)をカウントすることで評価することにした。(0)世界が(1)アッと(2)驚く(3)若い(4)首相が(5)誕生し、(6)がんじがらめの(7)規制が(8)たった(9)一本の(10)法律で(11)撤廃された(12)——新春の(13)初夢であり、(14)期待です。(0)世界が(1)アッと(2)驚く(3)若い(4)首相が(5)誕生し、(6)がんじがらめの(7)規制が(8)たった(9)一本の(10)法律で(11)撤廃された——(12)新春の(13)初夢であり、(14)期待です。:ただ、正解データとcabochaの出力の異なる文を表示するにはdiffコマンドは便利だが、両方のテキストファイルを比べて正解率(文節がすべて一致する文の割合)を見るには不便なので、別途この目的だけに使える簡易diffプログラムdiff_chunk.rbを作成した。0.1254エラー率は12%から18%となった。28個のKNPファイルから5グループのモデルファイルを作成したわけだが、学習データを「多く」使えたchunk.juman.4とchunk.juman.5(6x3+5=23個のKNPファイル)はエラー率が12%程度と低く、学習データが「少ない」それ以外のモデル(6x2+5x2=22個のKNPファイル)ではエラー率が15%から18%程度となった(ただし、学習データ量の「多い」「少ない」は、KNPファイルの個数なので正確ではない)。10.04.3にCaboChaのインストールから本件交差検定を行ったときのオペレーションを示す。/usr/local/lib/mecab/dic/jumandicオリンピックがいよいよロンドンで開幕した。5つのCaboCha形式の学習データを、4つと1つの組に分ける、次フェーズのモデルのソースを5通り作成。同時に対応する正解データG5N-eval-x.datを作成する。同じことを、前フェーズで作成したモデルファイルに切り替えてやってみる。上記の結果をCaboCha付属の評価ツールにかけようとすると、前述のエラーが出てしまう。第3引数に"on"(なんでもよい)を指定すると、以下のように異なる文を表示する。on:(0)旧満州・奉天生まれ。(0)旧満州・奉(1)天(2)生まれ。nジップは英語の場合、c=0.1であると推定している。単語の出現頻度などはLucene/Solrのインデックスを調べれば簡単にわかるので、早速手元のインデックス(歴代の内閣総理大臣の所信表明演説が登録されている)でやってみたところ、下図のように見事に直線上に並んだ。c=0.162とした:プログラムは以下の通り。試すときは、INDEXとFのString定数に、それぞれインデックスの絶対パスと、調べる対象のフィールド名を指定する。}}実行すると、標準出力に次のように2列の数値が表示されるので、これをExcelに貼り付けグラフを表示すると、上手のようになる(はず)。2列の数値の1列目は単語の出現頻度の順位で、2列目は出現回数である。比較のポイント商用検索エンジンを購入した企業担当者は読まないでください。McCandlessFastVectorHighlighterについて解説記事を寄稿しました。