EDA(えだ)は単語係り受け解析器です。
日本語のように左から右に行く係り受けや、英語のように左や右に行く係り受けの両方を扱えます。
ちなみにEDAというのはEasily adaptable Dependency Analyzerの省略です。
最新版はこちらです。
過去のリリース: EDA 0.3.4, EDA 0.3.3, EDA 0.3.2, EDA 0.3.1, EDA 0.3.0, EDA 0.2.0, EDA 0.1.2, EDA 0.1.1, EDA 0.1.0
ソースコードをダウンロードしてから、解凍してmakeを実行します。
tar xzvf eda-x.y.z.tar.gz cd eda-x.y.z make
モデルのページからモデルファイルをダウンロードしてください。
edaコマンドは日本語テキストの係り受け解析及び係り受け関係のラベリングを行います。 解析するテキストは標準入力から受け取り、標準出力に解析結果を表示します。
eda 係り受け解析の入力形式はデフォルトでeda形式です(詳細は下にあります)。-iオプションで入力の形式を-oで出力の形式を変えることができます。
eda -m /path/to/model/file < sample.eda eda -m /path/to/model/file -i kytea -o conll < sample.kytea
edaでラベリングをする場合は--labelingをオプションに加えます。なお、ラベリングは入出力形式がconll形式で、すべての単語に係り先が付与されてないといけません。また、係り受け解析とラベリングは同時には実行できません。
eda -m /path/to/model/file --labeling -i conll -o conll < sample.conll
edaコマンドはKyTeaからの出力と独自のツリー形式の文を入力として扱えますが、出力はツリー形式のみです。学習データ及び解析するデータの文字コードは同じにしてください。日本語文法の扱いに関しては、単語係り受けのアノテーション基準をご参照下さい。
例
ID=000001 001 002 私 代名詞 0 002 005 は 助詞 0 003 004 リンゴ 名詞 0 004 005 を 助詞 0 005 006 食べ 動詞 0 006 007 る 語尾 0 007 0 。 補助記号 0
文の係り受け構造をツリーとして表現する形式です。edaコマンドの出力形式のデフォルトで、入力形式にも使えます。
文は空行を挟んで記述し、それぞれの文の先頭行はID=とID文字列から成り立ちます。先頭行以降の行は一単語ずつ記述し、下記の5つのフィールドを指定して下さい。
(添え字) (係り先の添え字) (単語の表記) (単語の品詞) (クラス番号)
単語の添え字は1から始まる正数字です。それぞれのフィールドを1文字以上の半角スペースで区切って記述します。予め各単語にクラスタ番号(クラス番号)も付与しなければなりませんが、このフィールドの情報がない時は0など適当な値を付与するとよいでしょう。
例
1 John john _ _ _ 2 _ 2 saw see _ _ _ 0 _ 3 Mary mary _ _ _ 2 _
CoNLL shared taskなどで使われる形式を少し修正したものです。以下のようにフィールドを設定します。各フィールドの意味についてはこちらをご覧ください。
(ID) (FORM) (LEMMA) (CPOSTAG) (POSTAG) (FEATS) (DEPREL)
conll形式はeda形式と違い、係り受けのラベルもアノテーションすることができます。
KyTeaからの標準出力を入力として扱います。
各辺のスコアを出力します。
例
src\dst ROOT 私 は リンゴ を 食べ る 。 ROOT -1 -1 -1 -1 -1 -1 -1 -1 私 0.0294744 -1 0.874182 0.0093758 0.0266966 0.0230189 0.0185205 0.0187319 は 0.0141018 0.0134082 -1 0.0170023 0.0170169 0.900706 0.0186684 0.0190964 リンゴ 0.0140031 0.00884833 0.034677 -1 0.88134 0.0241234 0.0192946 0.0177139 を 0.013209 0.00788253 0.013852 0.0165981 -1 0.917186 0.0153579 0.0159148 食べ 0.01813 0.0102478 0.0166862 0.0111063 0.0285039 -1 0.890498 0.0248276 る 0.0174093 0.0109009 0.0156702 0.0104221 0.0175333 0.0360792 -1 0.891985 。 0.862094 0.0285262 0.0252491 0.0109142 0.0182855 0.0265477 0.0283831 -1
1列目の各行は係り元の単語であり、1行目の各列は係り先の単語です。各スコア値はタブで区切られています。
たとえば、3行4列の値は0.874182となっています。これは「私」から「は」までの辺のスコアが0.874182であるということです。
-1となってるところは、係り受けが存在しないことを意味します。ROOTが係り元になる場合や係り元と係り先が同じ場合などはありえないため、スコアが-1となっています。
-1以外の行のスコアを足し合わせると1になります。
EDAはこのスコアを元に最大全域木を探索し、係り受け木を出力しています。
train-edaコマンドでeda用のモデルを学習できます。
下記のコマンドの例では、学習データtraining.treeからモデルを学習し、モデルファイルstruct.etmを作成します。
train-eda -c training.tree -m struct.etm
train-edaはデフォルトで左から右と右から左の両方の係り受けを扱えますが、日本語の係り受け解析など左から右の係り受けのみを扱う場合は--left-to-rightを追加します。
train-eda -c training.tree -m struct.etm --left-to-right
-aオプションでEDAのパラメータ推定のアルゴリズムを変更します。アルゴリズムは、llvm(L-BFGS)とllsgd(SGD)を使うことが出来ます。デフォルトではllvmです
train-eda -a llsgd -c training.tree
-Fオプションで素性頻度ファイルを出力できます。出力した素性頻度ファイルからの学習には-fオプションを使います。
train-eda -c training.tree -F feat.txt train-eda -f feat.text -m strcut.etm
ラベリングの学習には--labelingをオプションに追加します。入力の形式はconll形式のみで、係り受け解析のモデルとラベリングのモデルを同時に構築することはできません。
train-eda -c training.conll -i conll --labeling -m labeling.etm
train-edaコマンドを引数なしで実行すると、オプションについての説明が表示されます。数万文のテキストからモデルを学習するのに数十ギガのメモリが必要なのでご注意下さい。
単語単位の日本語係り受け解析
(スライド)
Daniel FLANNERY, 宮尾 祐介, Graham NEUBIG, 森 信介
言語処理学会第18年次大会, 2012
Training Dependency Parsers from Partially Annotated Corpora
Daniel Flannery, Yusuke Miyao, Graham Neubig, Shinsuke Mori
IJCNLP, pp.776-784, 2011.
A Pointwise Approach to Training Dependency Parsers from Partially Annotated Corpora
Daniel Flannery, Yusuke Miyao, Graham Neubig, Shinsuke Mori
Journal of the Association of Natural Language Processing, Vol. 19, No. 3, September 2012.
前田 浩邦 (プログラムの拡張など)
Daniel FLANNERY (プログラムの拡張など)
宮尾祐介 (プロトタイプの実装、指導)
森信介 (指導、パワーユーザー)