勉強の記録

機械学習、情報処理について勉強した事柄など

【論文メモ】Linguistically-Informed Self-Attention for Semantic Role Labeling

qiita.com EMNLP2018のベストペーパー4本のうちの1本です。 上記の日本語解説が詳しいのですが、マルチタスクなのと自然言語処理系の一見よく似たタスクがいろいろ出てくるので自分を含む自然言語処理初心者には全体像が掴みづらい(掴みづらかった)のです。というわけで、Intoroductionと論文の意義を理解することを目指します。

対象としては「Transformerはなんとなく分かるが、構文解析とか品詞タグ付けとか言われてもよくわからないんだよね」という方を想定しています。   

Semantic role labelling

ある文章を与えたときに、その文章内の単語に「誰が、誰に、何をした(who did what to whom)」という関係をラベリングするタスクです。日本語では「意味役割付与」と呼ばれることが多いようです。

具体的には、文中の述語(predicate)に対して、それに関連する語もしくは語群を意味関係とともに提示します。あくまで述語に対してなので、重文や複文など複数の述語が含まれていれば、それぞれに対して行われます。

f:id:tmitani-tky:20181222153759p:plain f:id:tmitani-tky:20181222153825p:plain f:id:tmitani-tky:20181222153854p:plain

上記は下で紹介しているAllenNLPの出力結果ですが、The boy threw the ball that he bought yesterday.であれば、threwに対しては"the boy"が主語で、"the ball that he bought yesterday"が目的語、boughtに対してはheが主語でthe ballが目的語、yesterdayが修飾語、といった具合です(たぶん)。

この論文のメインタスクは、このSemantic Role Labeling (SRL)です。 (タイトルから当然なんですが)。CoNLL-2005とCoNLL-12というアノテーション済みのSRL datasetがターゲットです。

Semantic role labelingを精度良く行うことによって、対話応答や情報抽出、翻訳などの応用的自然言語処理タスクの精度上昇に寄与すると言われています。

下記のAllenNLPのサイトでBiLSTMで学習させたSRL modelのdemoを試すことができるので、いくつか文章を入れてみるとSRLのイメージを掴みやすいかもしれません。 https://demo.allennlp.org/semantic-role-labeling/NTMyNzQw

今までのSRL

deep learning時代までのSRLは構文解析をその背景としていました。まずは単語分割(日本語の場合は形態素解析)を行った後に、単語の品詞タグ付け(Part-of-Speech Tagging, POS tagging)が行われ、その品詞列に対して構文解析(syntax analysis)もしくは係り受け解析(Dependency parcing)を行うという個々の要素技術の積み重ねです。述語はSRLはもちろんこういった係り受け解析の軸になるので、述語を特定するタスクはPredicate detectionと呼ばれます。

なお、構文解析係り受け解析については、以下の記事が分かりやすいです。 ニューラルネットによる構文解析 ー Dependency Parsingについて - scouty AI LAB

これが、さきほどのAllenNLPによるbiLSTM modelもそうですが、Deep neural networkによってend-to-endに学習したモデルの成績が上回るような場面もでてきた、というのが過去数年の流れのようです。

この論文の目指すSRL

さらに、deep neural networkでも入力としてただ単語列を用いるのではなく、品詞情報や係り受け情報を活用することで精度向上が図れるということが言われてきました。この論文では、ネットワークの一部をPOS taggingやsyntax analysisを行うモジュールとしてmulti-task learningを行うことで、高精度なend-to-endのSRLを実現することを目指しました。

Linguistically-informedとは?

論文のタイトルは"Linguistically-informed self-attention"ですが、モデル内には"syntactically-informed self-attention"も登場します。何がなんだかよくわかりません!

Sytacticは文法、Lingusiticsは言語学です。ネットワーク構造の中で、multi-head self-attentionのうち一つのヘッドを、単語動詞の係り受け関係をattentionに反映するヘッドとして学習させ、下流の解析ではそのヘッドにアノテーション済みの係り受け関係を入力して学習させました。この結果、この学習済みのself-attention netwrokに単語列を入力すると、単語間の係り受け関係を加味した出力が得られる、というロジックです。これが"syntactically-informed self-attention"と呼ばれる部分です。

f:id:tmitani-tky:20181222163042p:plain

モデル全体では、token列は最初のtransformer blockで変換された後、上記のsyntactically-informed self-attentionを含んだ層構造と、POS-tagging+述語解析(Predicate detection)を行う層構造の大きく2本に分岐します。

f:id:tmitani-tky:20181222164331p:plain

最後は述語解析モジュールから得られたf token目の分散表現s_fと、syntactically-informed self-attentionモジュールから得られたt token目の分散表現s_tとから、双線形変換Uによって述語fに対するtの関係ラベルを示唆するscore s_ftを得ます。このscoreから、Begin-Inside-Out TagをViterbiアルゴリズムで求めて最終的なSRLが完成します。

このようにいくつかの"言語学的な"タスクを組み合わせたmulti-task learningを行うことで、最終的なSRLを行うモデルを包括的に"Linguistically-informed self-attention"と呼んで、syntactically-informed self-attentionと使い分けているようです。

学習

学習に際しては、一部のPOS-taggingや、係り受け解析を行う部分のネットワークを別で学習させた後に、そのパラメータを固定して残りを学習させるなどの方法が用いられたようです。

まとめ

概ね全体像がつかめたんじゃないかと思います。最初はsyntacticとかPOS taggingとかsemantic labelとか良く分からない何となく似たようなイメージで捉えていたので、「構文の情報を入れると構文解析の成績が向上した??なんのこっちゃ?」と思っていましたが、個々のタスクの中身を見てみると何となくイメージできるような気がします。

下記のように固有表現認識と関係抽出を組み合わせたものもありますし、自然言語処理にもmulti-task learningの波が来てるみたいですね! github.com