KyTeaを使った単語分割の分野適応

KyTeaホームに戻る

はじめに

KyTea の最も大きな利点の1つは分野適応が簡単であることです。特に、部分的アノテーション(後述)を使った分野適応は有用です。従来手法では、辞書に単語を追加する以外には、フルアノテーションコーパスを準備する必要がありました。フルアノテーションコーパスは、

この 時期 の 中心 人物 は 、 風穴 延昭 で あ る 。

のように、全ての単語境界に空白を入れ、単語境界のないところに空白を入れないことで、すべての文字間の境界情報をアノテーションします。しかし、この文の中で、「風穴」以外、ほとんどの単語境界は自明であり、アノテーションする必要はないため、時間の無駄が生じます。その代わり、部分的アノテーションでは、以下のように「風穴」のところだけをアノテーションすることができます。

こ の 時 期 の 中 心 人 物 は 、|風-穴|延 昭 で あ る 。

ここで、縦棒「|」は「単語境界あり」、横棒「-」は「単語境界なし」を意味し、空白は「単語境界の有無はアノテーションされていない」ことを意味します。これにより、アノテーションが分野適応に有用な箇所のみに集中することがでます。KyTea はこのような言語資源から学習することができるので、効率的なアノテーションを実現することができます。

ダウンロード

KyTeaの分野適応を行うためにまず、利用するスクリプトの最新版を以下のリンクからダウンロードしてください。

最新のバージョン: KyTeaの分野適応ツールキット v. 1.1

準備

アノテーション作業を開始する前に以下の準備をしてください。テキストファイルのエンコードはすべて UTF-8 にしてください。

  1. KyTea が動作することを確認し、必要があれば makemodel.sh を編集する。
    KYTEA=$PATH_TO_KYTEA_BIN/kytea
    TRAIN=$PATH_TO_KYTEA_BIN/train-kytea
    
    なお、kytea [Enter] で動作する場合には、デフォルトのままでよいです。
  2. 単語分割の基準を決めます。様々な基準はありますが、KyTea に付属しているモデルは、このページに説明している基準を利用しています。
  3. まず、一般分野のフルアノテーションコーパスを data/ フォルダに移します。次に、makemodel.sh を編集して GEN_CORPORA にこのコーパスのパスを追加します。例えばコーパスが BCCWJ.word の場合以下のようになります。
    GEN_CORPORA="-full data/BCCWJ.word"
    
    配布時には Creative Commons License の基に再配布可能なWikipedia データを入れていますが、非常に少量であり、自動解析結果を人手で簡単に修正しただけなので、単語の分割境界情報は100%信頼できるとは言えなません。このため、手元に利用可能な言語資源があれば、それで置き換えることをおすすめします。特に、日本語書き言葉均衡コーパス(BCCWJ) は様々な分野のテキストに対して非常に精度の高いアノテーションを行ってあるため、KyTea の学習に適しています。
  4. アノテーションしたい生コーパスを data/target-train.raw に移します。
  5. 辞書(複数可)がある場合は、それらの辞書ファイル(ここでは dict-1.txtと dict-2.txt とする) を data/ フォルダに移し、makemodel.sh を編集して DICTS 変数にこの辞書のパスを追加します。この例では、以下のようになります。
    GEN_DICTS="-dict data/dict-1.txt -dict data/dict-2.txt"
    
    ここで 注意すべき点はいくつかあります。1つ目は、UniDic などの単語コーパスの単語分割基準に合った網羅的な辞書があれば、単語分割の精度がない場合に比べて非常に高くなります。手に入れば利用をおすすめします。また、従来の形態素解析と違って、辞書は必ずしもコーパスの単語分割基準に沿っていなくても精度は落ちません。分野内の複合語の辞書を利用すればさらなる精度向上が実現可能となります。ただし、2つの異なる辞書を利用する場合、1つのファイルとしてではなく、以上の例のように個別に読み込むほうが精度が高くなります。

アノテーション

準備ができたら実際のアノテーションに移ります。以下の3ステップを数十回繰り返すと、適応分野における分割精度はかなり上がります。

  1. 現在持っている言語資源(コーパスと辞書)でモデルを作成し、アノテーションすべき箇所を選択します。
    [user@machine]$ ./makemodel.sh
    
    この結果得られる work/XXX.mod (XXX は数字)が、各繰り返し時点でのKyTea のモデルファイルです。つまり、最も大きい数字のファイルが最良のモデルです。言語資源の量によりますが、おおよそ5分ぐらいかかります。
  2. work/XXX.annotにできるファイルの中の「!」を「|」や「-」 に書き換え、「!」の周りに間違った単語境界があればそれも直します。ここで XXX は数字であり、最も大きい数字のファイルをアノテーションして下さい。アノテーションが困難な箇所があれば、 「|」と「-」の代わりに「?」を入れてアノテーションされていないままにすることもできます。
  3. 新しいファイルを保存します。
    [user@machine]$ ./saveannot.sh
    
    「Double boundary ' |' at XXX」のようなエラーが起こった場合は XXX 行目にアノテーションの形式が誤っている(具体的には、空白を消さずに単語境界「|」を入れている)ので、 アノテーションファイルを直して、もう一度./saveannot.shを直してください。この後 1) に戻ります。

アノテーションが終わったら、部分的アノテーションされたコーパスはsave/XXX.wannとして保存されます。新たにKyTeaを学習する場合、"-part save/XXX.wann"のオプションを指定すると、部分的アノテーションされた資源を利用してモデルを学習することができます。

注意すべきこと

KyTeaホームに戻る
Last Modified: 2011-2-16 by neubig