日本語係り受け解析

目次


はじめに

本課題では、機械学習の手法を用いて、自然言語処理における基礎技術の一つである日本語の文節間の係り受け解析を行うプログラムを作ってもらいます。日本語の文節間の係り受け解析とは、具体的には例えば、

私の高いワインを二宮さんに飲まれた。

という文に対して、私の、高い、ワインを、二宮さんに、飲まれた、という各文節間の係り受け関係「私の→ワインを」・「高い→ワインを」・「ワインを→飲まれた。」・「二宮さんに→飲まれた」を求めることです。

私の高いワインを二宮さんに飲まれた(怒)。

機械学習を用いた日本語係り受け解析は、ここ数年自然言語処理におけるホットトピックの一つとなっていて、我々のグループでも、最高精度の結果を出したことがあります(参考文献[1])。その当時より、研究室内で機械学習のためのライブラリが充実してきているので、演習の1ヶ月という短期間でも最新の研究に匹敵する結果(精度90%程度)を出すことができるかもしれません。

課題内容

本課題のメインテーマである機械学習とは、簡単に言えば、ある現象に関して既存のデータの振る舞いから未知のデータの振る舞いを推定する確率モデルを作るということです。この課題の文脈にこれを当てはめれば、日本語の係り受けという言語現象に関して、既知の文の係り受け関係から未知の文の係り受け関係を推定する確率モデルを作るということになります。

機械学習の手法自体は、広く様々な分野に適用可能で、例えば天気予報や競馬の結果の予測、機械翻訳における訳語の決定など、既知のデータが利用可能な現象なら何でも適用することが可能です。機械学習が行うことは、対象の現象を引き起こす様々な要因の依存関係の推定です。日本語係り受け解析では、「用言は名詞にはかからない」などのルールはある程度分かっているのですが、それらのルール同士の組み合わせや、ルールが衝突する時にどちらが優先されるのかなどのルール間の依存関係が複雑で、人手でこの依存関係を記述するのは困難です(これを頑張ってやるのがルールベースのアプローチ)。例えば次の文の係り受けを最初に出した文の係り受けと比べて下さい。

値段の高いワインを二宮さんに飲まれた。

この場合の係り受けは、以下のようになります。

値段の高いワインを二宮さんに飲まれた(涙)。

品詞列のレベルでは、この文は上の文と同じですが、第一文節の係り先が異なっています。これに対しては、例えば「値段」と「高い」という単語が共起が「私の」と「高い」の共起より起こりやすいというような、「語彙的な優先度の情報」で判別できるのではないか、と考えるかもしれません。しかし、このようなルールは構文的なルールのような絶対的なものではありません。従って、人手では他のルールとの依存関係を考慮しながらルールを書くのは非常に困難です。これに対して機械学習の手法では、例えば「係り元が形容詞で係り先が名詞のときに係り受け関係がある」というようなルールの候補(これを素性と言います)という形で表現し、この素性によって現象をモデル化することで、確率的な振る舞いとしてルール間の依存関係を学習することができます。

このように、機械学習の面白みは「一見分からない、現象を支配するルール」が統計的手法を用いることにより「自動的に抽出される」というところにあります。正確には、自動的に抽出されるといっても実際にルールがぽこぽこ出てくるわけではなく、各素性に対する確率パラメータとして得られるわけですが、「こんな素性は効くかな?」と直感に基づいて足した素性が機械学習の手法で有効に働くことも多く、ここに試行錯誤の余地が多くあります。例えば、どういう素性を選択するべきかという素性選択の問題やまた、係り受けのための確率モデル(幾つかの改良モデルは考案されていますが:参考文献[1][2][3][4])の考案など、自分のアイデアを持ち込む余地がまだまだ相当あります。また、評価基準も、

精度=モデルの出力する各文節間の係り受け関係の組のうち正しいものの数/各文節間の係り受け関係の組の数

とはっきりしており、既存の研究との比較も簡単に行うことができます。

実際の機械学習の手法としては、最大エントロピー法(ME法)(参考文献[5])と呼ばれる汎的な手法を推奨します。ME法は近年の自然言語処理において用いられる機械学習の手法の中で、タスクによらず最も高い精度を出す手法の一つであり、辻井研で開発した高効率なライブラリがあります。この他にも、近年特に幾つかの分野で注目されているサポートベクタマシン(SVM)(参考文献[6])や隠れマルコフモデル(HMM)等のライブラリも利用することができるので、もし他の手法を用いたい場合は、言ってもらえればある程度は希望に添えるかと思います。

機械学習のための学習データ・及びテストデータとしては,京大コーパスと呼ばれる毎日新聞に係り受け情報を付加したコーパスを使います。

演習の流れ

他の課題と同じく、一週間ごとに中間結果を2〜4枚程度のレポートにして発表してもらいます。

第一週目は、こちらから機械学習を係り受け解析に適用した研究の論文を2,3紹介しますので、それらの論文を読んでもらいます。それにより、機械学習に関する理解、及び、係り受け関係の学習にどのように適用すればいいかを掴んでもらい、それらの論文の内容をレポートにまとめて発表してもらいます。

第二週目以降は、実際に係り受け解析を行うプログラムを実装してもらって、改良点や精度などについて発表してもらいます。まず、第ニ週目は基本的な係り受け解析のプログラムを作って、ベースラインの精度(全ての文節が次の文節に係るとしたもの:60%程度)と比較してもらいます。第三週と第四週は基本的には精度向上を目的として、自分で手法を考えて試してもらいます。具体的には次の4つの方向性があると考えています。

意味素性の検討:
意味的な制約を素性として入れる。単純な字面の組を入れた場合にはデータの過疎性の問題にぶち当たる。クラスタリングした結果を入れるなどの工夫が必要。どのように素性を入れれば精度に寄与するか?
素性選択の問題:
素性を追加しすぎると、精度が下がってしまう場合がある。係り受けの推定に有効に働く素性を自動的に選択するにはどうすれば良いか?
確率モデルの検討:
現状の最先端モデルは、係り受け元と係り先候補以外の情報を考慮することで精度向上を達成している。例えば、後方文脈の利用や、係り先候補に係る他の文節の情報など。より高い精度を達成するためには、どのような確率モデルにすればよいか?
並列句の処理:
現状のほぼ全ての確率モデルは、「お爺さんは山へ芝刈りに、お婆さんは川へ洗濯に行きました」のような並列句の解析に失敗するということが知られており,このために精度が頭打ちになっている。このような並列句をうまく取り扱うにはどうすれば良いだろうか?

これ以外にも何かアイデアがあれば,どんどん試してみてください。

参考文献


質問・疑問点がありましたら、吉澤(M2) tomonari at is.s.u-tokyo.ac.jp まで気軽にどうぞ。

TOPに戻る