日本語 English(old version)

EDA係り受け解析器

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からの出力と独自のツリー形式の文を入力として扱えますが、出力はツリー形式のみです。学習データ及び解析するデータの文字コードは同じにしてください。日本語文法の扱いに関しては、単語係り受けのアノテーション基準をご参照下さい。

EDA形式(-i/-o edaオプション)

  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など適当な値を付与するとよいでしょう。

CoNLL形式(-i/-o conllオプション)

  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からの入力(-i kyteaオプション)

KyTeaからの標準出力を入力として扱います。

スコアの出力(-o scoreオプション)

各辺のスコアを出力します。

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 (プログラムの拡張など)
宮尾祐介 (プロトタイプの実装、指導)
森信介 (指導、パワーユーザー)

更新履歴

新モデル (2014年7月XX日)

0.3.5 (2017年2月17日)

0.3.4 (2015年6月5日)

0.3.3 (2014年2月24日)

0.3.2 (2013年10月14日)

0.3.1 (2013年8月31日)

0.3.0 (2013年8月22日)

0.2.0 (2013年3月29日)

0.1.2 (2012年7月4日)

0.1.1 (2012年5月24日)

0.1.0 (2012年3月16日)