ブログではないです

読んだ論文と実験・研究のメモ書き

A Joint Many-Task Model: Growing a Neural Network for Multiple NLP Tasks [Hashimoto+, arXiv'16]

概要

元論文

鶴岡研の橋本さんの論文。単一のモデルで複数タスクを同時に解く事で全体性能を向上させる話。 対象とするタスクは基礎的なものから順に POS Tagging, Word Chunking, Dependency Parsing, Semantic Relatedness, Textual Entailment.

モデルの構造としてはある文中のcharacter-n-gram-embeddingとpre-trainingされたword-embeddingを入力として取り, 複数タスクのうち基礎的なものから順に解いていき,各タスクの内部状態が後段へとフォワードされる事で品詞を考慮して係り受けを解析する、とか係り受けを考慮してRTEを解く、といったような効果を狙っている。詳細は論文の図参照。結果,全部繋げたモデルがどのタスクでもsotaかそれに近い精度を出している。

訓練時はそれぞれタスクごとに異なるデータを使って基礎的なものから順に訓練していき,あるタスクを訓練・テストするときにはその前段のタスクについては正解ラベルを必要としない。また、後段のタスクを訓練した事による前段のパラメータの変化の大きさを損失関数の中にペナルティとして加える事で,例えばDependencyタスクの訓練をすることで前段のChunkingタスクに関するパラメータが大きく変わってしまい性能が悪化する、というようなことを防ぐようにデザインされている。

雑感

マルチタスクを単一のモデルで解くことでそれぞれのタスクの性能向上が見込める、という説には直観的にも非常に同意。特にデータが少ないタスク(本論文で使っていたSICKデータセット(RTE)は全部合わせて10,000行程度しかない)では不可欠になると思う。 微妙に気になったのは最適化の方法。あるタスクの学習による他タスクのパラメータの変化をペナルティとするのは、単一モデルで複数タスクを実行する事で相補的に知識を学習しよう、という目的と矛盾していないだろうか?(そうすることで少し抑えた方が結果的に良かった、ということなのだと思うが) これは1タスクずつ最適化を行っていることに起因する問題だと思うので、それぞれのタスクの損失を重み付け和するなどの方法で同時最適化する事でどうにかならないだろうか?

ちなみに語彙の構築時は単一コーパスだと頻度上位◯◯語、という方法を取るのが普通だと思うのだが、 こういうサイズの異なる複数のコーパスを単一モデルで使う場合はどう定めているのだろう?