Position-Aware Tagging for Aspect Sentiment Triplet Extractionを読む

概要

レビューの様な自然文からtarget, opinion, sentimentのtriplet( 例=(“salmon”, “fresh”, positive))をEnd-to-Endで抽出する手法を提案。BERTで各TokenをEmbeddingした後に、Tokenの単語ベクトルとToken間の単語ベクトルの差分を特徴量としてCRFによってタギングを行う。SemEvalのデータセットをもとに構築したデータセットで評価を実施し、既存手法より高い精度が得られた。

arxiv.org

github.com

accepted by EMNLP 2020

著者

  • Lu Xu (StatNLP Research Group, Singapore University of Technology and Design; DAMO Academy, Alibaba Group)
  • Hao Li (StatNLP Research Group, Singapore University of Technology and Design; ByteDance)
  • Wei Lu (StatNLP Research Group, Singapore University of Technology and Design)
  • Lidong Bing (DAMO Academy, Alibaba Group)

問題設定

target、opinion、sentiment(polarity)のtripletを抽出するタスク。

Figure 1の例だと以下になる。

  • target: food, vegan options
  • opinion: so so, excited
  • sentiment(polarity): 0 = neutral, + = positive, - = negative

target、opinionのspan、targetとopinionの組み合わせ、polarityの全てが合っている時のみ正解。

ASTE = Aspect Sentiment Triplet Extraction

f:id:wwacky:20201015210434p:plain
※Figure 1. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

提案手法

JET(= Jointly Extract the Triplets)を提案。
JETはEnd-to-Endでtripletの抽出を行う。JETには JET^ tJET^ oの2種類がある。上付き文字のtとoはそれぞれtargetとopinion。

先に JET^ t を説明する。JET^ tの出力はFigure 2の○で囲まれたSやOやBの文字の部分。これをtoken毎に出力する。
JETはNERの様なタグ付けを行っており、BIOESを使っている(common tagging schemeらしい)。B=Begin, I=Inside, O=Outside, E=End, S=Single。Entityが1tokenの場合、Bを1つではなくSを使う(そのためfoodがSで、vegan optionsはBとE)。
JET^ tではtargetのentityにBIESでspanが表現される。その際、BとSのみ上付き文字と下付き文字があるが、下付き文字はopinionの開始位置と終了位置のtargetからのoffset、上付き文字はopinionに基づくpolarityを示している(0 = neutral, + = positive, - = negative)。

f:id:wwacky:20201015210531p:plain
※Figure 2. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

JET^ oはBIESを付けるentityをtargetではなくopinionにしたもの。offsetで指す先もopinionではなくtargetになる。それ以外は全て同じ。JET^ tを表すFigure 2とJET^ oを表すFigure 4を見比べるとわかりやすい。

f:id:wwacky:20201015211118p:plain
※Figure4. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

既存手法では"The salad is cheap with fresh salmon"という文で (“salad”, “cheap with fresh salmon”, positive)と (“salmon”, “fresh”, positive)という重複するtripletが存在する時に対応できないが、提案手法では対応できる(このケースは JET^ tなら可能だがJET^ oでは無理。しかし、"salmon is cheap and fresh"みたいな文では逆にJET^ oでは可能だが、 JET^ tでは無理ということになると思われる)。


余談

複数のtargetやopinionが考慮されているのは良いが、"サラダの値段も味も良い"(英語だと"Good prices and taste for salads."になる?)から("サラダの値段", "良い", +)、("サラダの味", "良い", +)の2つのtripletを抽出することは難しそう。恐らくこの手法では("サラダの味と値段", "良い", +)が正解になると思われる。2つのtripletにしたい場合は、("サラダの味と値段", "良い", +)を後から分割した方が良いのかもしれない。

Architecture

以下のFigure 3に示すネットワークで、Token毎にVectorを出力する。出力したVectorを入力としてCRFとSemi-Markov CRFでタギングする。

e_iはi番目のTokenをEmbeddingして得られたVector
h_iはBiLSTMの隠れ層のVector(後の実験ではBERTに置き換えて最終層のVectorを使ったパターンもある)。
g_{a,b}=[\vec{h}_b - \vec{h}_{a-1};\overleftarrow{h}_a - \overleftarrow{h}_{b+1}]で表され、ベクトルの差分のconcatnateになっている。

これらを入力に、まずは f_tが5つのベクトルを出力するので、これを用いてBIOESのタギングを行う。
このタグがBかSの時は更に追加で  f_s (offsetがj,kの時の極性用に3つのベクトルを出力)、f_of_rがそれぞれ1つずつベクトルを出力するのでopinion spanのoffsetを決定する(と思われる)。f_oはopinion spanに該当するsegmentの特徴量で、f_rはoffsetのposition embeddingのようなもの。
最終的にToken毎に B^{\epsilon}_{j,k}, I, O, E, S^{\epsilon}_{j,k}を出力することになる( \epsilonは極性、 j,kはoffset)。


 B^{\epsilon}_{j,k}, I, O, E, S^{\epsilon}_{j,k}はCRFとSemi-CRFで一気に出すようだがよく分からない。
Mがoffsetを最大幾つまでするかを表している。
Mは[2,6]でしか動かしておらず、計算オーダーはToken毎に O(M^2)、文のToken数がnの時は全体の計算オーダーが O(nM^2)と書いてある。従って、例えばM=2の時はToken毎に [B^{-}_{1,1}, B^{0}_{1,1}, B^{+}_{1,1},...B^{-}_{2,2}, B^{0}_{2,2}, B^{+}_{2,2}, I, O, E, S^{-}_{1,1}, S^{0}_{1,1}, S^{+}_{1,1},...S^{-}_{2,2}, S^{0}_{2,2}, S^{+}_{2,2}] みたいなマルチクラス分類のタスクをCRFで解いていると思われる。

f:id:wwacky:20201015211208p:plain
※Figure 3. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

実験

データセット

Rest=Restaurant, Lap=Laptop

f:id:wwacky:20201015211329p:plain
※Table 1. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

学習時にtripletのoffsetがMを超えるデータは削除する。

既存手法との比較

精度の傾向としては 既存手法 < JET^ t < JET^ o
論文中には書いていないが、 JET^ o の方が精度が高いのは「サーモンは安くて新鮮」といったtarget(サーモン)が複数のopinion(安い, 新鮮)を持つデータセットが多いのではないかと思われる。

JET^ tJET^ oはBiLSTMを使っているが、BERTに置き換えると精度が上がっている。ただし、上がり幅はデータセットによってまちまち(JET^ o (M=6)のF1で14Lapだと9.7ポイントも上がるが、16Restだと0.6ポイントしか上がらない)

f:id:wwacky:20201015211455p:plain
※Table 2. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

ロバストネスの評価

Figure 5はtarget, opinion span, offsetが長さに応じてF値がどう変化するかを表している。特定のパターンだけ当たっているのかどうかの評価?
offset(targetとopinionの間隔)は広がるほどF値が下がる。
targetはentityの数が増えるほどF値が下がるが、JET^ tの時だけentity数=6で一気に上る(理由の記載なし。長さ6のtargetがデータセットに多いだけ?)
opinion spanもentity数が増えるほどF値が下がるが、entity数=4で一度上がる(理由の記載なし。長さ4のopinionがデータセットに多いだけ?)

f:id:wwacky:20201015211608p:plain
※Figure 5. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用


Figure 5を見てentityの境界を当てるのが難しいのでは?ということで、targetとopinion spanの境界の先端か終端のどちらかがあっていれば正解として評価したのがFigure 6。
T=target, O=opinion, S=Sentiment。先端か終端のどちらかが合っていれば正解としたものはT_pO_p

JET^tはややopinionの部分一致が多く、JET^oはtargetの部分一致が多い。即ち、offsetで抽出しにいく対象が正しくspanを当てることが難しいと思われる。

f:id:wwacky:20201015211844p:plain
※Figure 6. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

予測結果のサンプル

f:id:wwacky:20201015211713p:plain
※Table 3. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

Ablation Study

offset feature(f_r(j,k))が最も効いている。
character embeddingを追加すると、ノイズになり逆に精度が下がるケースが多い。

f:id:wwacky:20201015212001p:plain
※Table 4. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用

アンサンブルの効果検証

JET^ tJET^ o単体だとそれぞれ抽出できないパターンがあるので結果をマージして評価する。
JET^{t \rightarrow o}JET^ oをベースにJET^ tを足す。JET^{o \rightarrow t}はその逆。
Recallは上がっているのでマージする効果は出ているが、Precisionは下がってしまうのでF値は微増という状況。

f:id:wwacky:20201015212110p:plain
※Table 5. Position-Aware Tagging for Aspect Sentiment Triplet Extractionより引用