KyTeaの基本的なモデルを学習することはそれほど難しくありません。このページには簡単なモデルの学習や、より高精度なモデルを学習するコツを説明します。
KyTeaのモデルを学習するためにまずデータを用意する必要があります。 以下のようなフルアノテーションされたコーパス(train.txt)を作っておきます。
コーパス/名詞/こーぱす の/助詞/の 文/名詞/ぶん で/助動詞/で す/語尾/す 。/補助記号/。 もう/副詞/もう ひと/名詞/ひと つ/接尾辞/つ の/助詞/の 文/名詞/ぶん で/補助記号/で す/語尾/す 。/補助記号/。
このファイルは改行で区切られた文からなり、全ての文は単語とタグの組の列からなっています。ここでは品詞と読みのタグになっていますが、チャンクや固有表現など、他の種類のタグでも問題ありません。
次は学習プログラムを実行します:
train-kytea -full train.txt -model train.mod
学習プログラムがしばらく動き、終了したらモデルはtrain.modというファイルへ出力されます。簡単なモデルの学習は以上です!
以下の説明はより踏み込んだモデル作りで、さらに高い精度のモデルを作るためのコツです。
KyTea 0.3.2から、素性ファイルを利用したモデル学習が可能になりました。 以下の(大きな)素性ファイルを利用すればKyTea 0.3.2と一緒に配布されているモデルを自分で学習することができます。
学習時にこのファイルを-featで指定します。 KyTea 0.3.2と一緒に配布されているモデルと同等のモデルができるので、解析するだけなら学習する必要はありませんが、他の言語資源を追加する場合は再学習による精度向上は期待できます。 train.txtというフルアノテーションファイルがあれば、以下のように学習を行います:
train-kytea -feat kytea-0.3.2.feat -full train.txt -model train.mod
この素性ファイルは大きな言語資源を利用して作られたモデルであるため、学習時にメモリを多く消費します。 なるべく4GB以上のメモリのある計算機で学習してください。
以下の言語資源はKyTeaの学習に利用できます。他に利用可能な言語資源(特に99.9%以上などの高い精度のものや無料公開されているもの)があればkytea@へ一報いただければサイトに掲載します。
KyTeaのデフォルトモデルの中心となっている言語資源はBCCWJとUniDicです。
KyTeaのデフォルトモデルに入っているもの以外にも以下のような言語資源を実験等で利用したことがあります。
一般公開されている単語分割ようのデータとしてSIGHAN word segmentation bakeoffがあります。また、Lancaster Corpus of Mandarin Chineseはピンイン読みが振ってあり、簡単な読み推定に利用することができます。また、ピンインの振ってある辞書としてCC-CEDICTがあります。
辞書を利用することで、KyTeaの解析精度を向上させることができます。辞書は-dictオプションで指定します:
train-kytea -full train.txt -dict dict1.txt -dict dict2.txt -model train.mod
コーパスと同じように単語とタグの列をスラッシュで分けて、1行1単語にして辞書ファイルを作成します。
コーパス/名詞/こーぱす で/助動詞/で 。/補助記号/。
複数の辞書を指定することができます。異なるファイルに入っている単語はKyTeaの内部で異なる扱いとなるため、性質の異なった複数の辞書(例えばUniDicと専門分野の辞書)があれば、以上のように複数のファイルに入れて、別々でKyTeaに与える方が精度が高くなる場合が多いです。しかし、辞書に追加するだけより、コーパスを追加する方が良いモデルが学習できるため、コーパスが利用可能な場合は部分的アノテーション等を利用しモデルを学習することをおすすめします(参照)。
-fullまたは-partで指定するコーパスは明確な分割基準に基づいて分割する必要はありますが、-dict辞書は分割基準に沿わなくても利用することができます。最後に、コーパスに入っている単語を全て辞書に入れると過学習が起こり、解析精度が逆に下がりますので、コーパスの全単語から作った辞書を使用しないでください。
KyTeaは2種類のタグ付与モデルを学習することができます。
A/X A/Y B/Y B/Z C/Z個別モデルは単語Aに対して、XかYかを区別する分類器を学習し、単語Bに対して、YかZかを区別する分類器を学習します。単語CはZというタグとしか共起しないので、Zが自動的に振られます。個別モデルは各単語のタグの間に明らかな相関がない場合や、タグの数が大きい場合に有効です。個別モデルが有効なタスクの一例として読み推定があります。
KyTeaのデフォルト設定では個別モデルを学習します。-global nを指定すれば、n個目のタグに対して全体モデルを学習します。
train-kytea -full train.txt -global 1 -model train.mod
KyTeaに付いているモデルは読み推定に個別モデルを、品詞推定に全体モデルを利用しています。
前節で説明した個別モデルでは、学習コーパスや辞書に1回も現れない単語は未知語となり、タグ推定ができなくなります。しかし、読み推定に関してはKyTeaに未知語の読み推定機能が入っています。具体的には、未知語を文字やサブワードに分解し、サブワードの読みに基づいて単語の読みを推定します。この機能を利用するために、以下のようなサブワード辞書をKyTeaに与える必要があります。
コー/こー パ/ぱ 文/ぶん 文/ふみ
1つのサブワードが1行になっています。日本語や中国語のサブワードは基本1文字になりますが、2文字以上でも問題ありません。また、1つのサブワードに複数の読みがあっても良いです。-subwordオプションを指定することでサブワード辞書をKyTeaに与えます:
train-kytea -full train.txt -subword subword.txt -model train.mod
モデルを学習する時に、-solverと-costという2つの重要なパラメータがあります。-solverはKyTeaの学習に利用するアルゴリズムを指定します。詳しくはLIBLINEARのREADMEに書いてありますが、良く使う設定として以下のものがあります:
一般的には、SVMはロジスティック回帰より精度が少し高くなりますが、ロジスティック回帰で学習したモデルは確率的な信頼度を出力することができます。L2正則化されたモデルは精度が少し高くなりますが、L1正則化されたモデルはL2のものより簡潔になります。
-costパラメータは正則化の強さを指定します。SVMモデルではデフォルトの1は一般的に良い精度となりますが、ロジスティック回帰のモデルではこれを調整する必要があります。学習データの中で、少しのデータを精度評価のために取っておいて、そのヘルドアウトデータで精度が一番高くなるようなパラメータを選ぶことで調整することができます。
KyTeaは一部のタグや単語境界がアノテーションされていないデータでもモデルを学習することができます。単語境界が全てアノテーションされている場合は、以下のようなファイルを作成しておきます:
コーパス の/助詞 文//ぶん で す/語尾 。//。
ここで、「の」と「す」は単語境界+品詞、「文」と「。」は単語境界+読み、「コーパス」と「で」は単語境界のみがアノテーションされています。読みは第2のタグなので、品詞の欄は空にしておきます。単語境界が全てアノテーションされているコーパスは-fullオプションで指定できます。
単語境界の一部がアノテーションされていない場合は、KyTeaの部分的アノテーションファイル形式でデータを作成します:
コ-ー-パ-ス|の/P|文//buN|で す|。//.
ここで「で」と「す」の間の単語境界はアノテーションされていません。この形式のファイルは-partオプションで学習時に指定します。
KyTeaに戻る
Last Modified: 2011-4-23 by neubig