ブログではないです

ブログでなくはないです

An Overview of Multi-Task Learning in Deep Neural Networks [Ruder, arXiv'17]

https://arxiv.org/pdf/1706.05098.pdf

マルチタスク学習 (MTL) についてのサーベイ論文。マルチタスクの利点や考え方、これまでの手法などがニューラル・非ニューラル共に列挙されていて勉強になった。

自分がこれまで読んできたニューラルベースのMTL論文だとネットワーク間で陽にパラメータを共有するhard-sharingな手法が主で、パラメータは独立に持つけれども共有されていて欲しい2つのレイヤ間の類似度を損失として加えるなどするsoft-sharingな手法はあまり見てこなかったので新鮮。 その違いについて、MTLを行うタスクの性質次第では片方のタスクにしか役にたたないような特徴量がそれぞれあったりするような場合などの場合には, hard-sharingなモデルを用いてそれらを1つのベクトルに押し込めるとあるタスクにおいては使われない特徴量がノイズとして働くので、soft-sharingな形を取るほうが有望なのではないか、とのこと。
とは言っても [Liu+, ACL'17] のようにhard-sharingではあるがprivate/shared それぞれに空間を用意してやってそれらがきちんと分離されるような学習を行う形もあるわけで、結局どちらがいいのか?というところはやってみなきゃ分からないのかな。

NLPのNC2組のタスクについてM通りの設定でMTLしてみました、という論文あったりしないだろうか。結局どういう設定でどの手法がどれだけいいのか、そしてそれがタスクごとにどの程度異なるのか、というところを網羅的に知りたい。

他には private/sharedなレイヤを交互に配置する Cross-stitch Networkや、パラメタ行列をmatrix factorizationして private/sharedなものに分解するという手法 (どういう意味があるんだろう・・・?) あたりが見たこと無いタイプで面白かった。

Relation Extraction まとめ

関係抽出タスクについて読んだものをメモ。新しいの読むたび更新。


Global Relation Embedding for Relation Extraction[Su+, NAACL'18]

関係抽出タスクにおいては下図のような2つのエンティティ間のラベル付き係り受け関係(shortest dependency path)を主要な特徴量として分類を行う。 その際にある係り受け関係 (nsubjpass, born, mod:in) と、関係抽出タスクにおける出力である知識グラフ上に定義される関係ラベル (place_of_birth) とのコーパス全体における共起関係を再現するように係り受け関係の埋め込み (textual relation embedding) を学習した上で関係抽出モデルで活用するという話。

肝としてはtextual relation embeddingの学習の際にコーパス全体における統計量を用いていることから、distant supervisionに基づき構築されたデータセットにおけるノイズに対して頑健になるとのこと。

f:id:jack_and_rozz:20180902162632p:plain:w600

Riedel+, ECML-PKDD'10 によるNew York Times Corpus (NYT)からDistant supervisionで構築された関係抽出データセットを使用。

疑問点: fig3の係り受け関係から関係ラベルの確率分布への写像、なんでわざわざ系列長1の系列としてGRUでデコードしているんだろう?


Neural Relation Extraction with Selective Attention over Instances[Lin+, ACL'16]

Distant-supervisionで構築されたデータセットでは関係を持つエンティティの組が登場する文であっても、必ずしもその関係について言及しているとは限らないにも関わらずそれを無条件に正例とみなしているという問題がある。[Zeng+, EMNLP'15] ではあるエンティティの組を含む複数の文のうち少なくとも1つは推定対象の関係について言及しているとの仮定のもと、もっとも信用のおける文のみを使うことでそれを解決しようとしていた。それに対してこの論文ではそれぞれの文をCNNでエンコードしたベクトルに対するアテンションを張ることで動的な重み付けを可能にしている。データセットはNYT。


End-to-End Relation Extraction using LSTMs on Sequences and Tree Structures [Miwa+, ACL'16]

上述した2つの研究をはじめとして、NYTなどのデータセットを用いた関係抽出タスクは登場するエンティティがgivenである設定のもと行われていた。 それに対してエンティティのスパン(とそのタイプ)の抽出をSequence labelingタスクとして解いた上で、特定したエンティティのそれぞれの組に対して関係分類を行うend-to-endな関係抽出モデルを提案。関係分類にあたっては係り受け関係をbidirectional tree LSTMでエンコードし、エンティティのスパン抽出に用いたエンコーダの出力(該当の2つのエンティティの箇所)と組み合わせて用いる。係り受け関係についてはエンティティ間の最短のものや文全体のものなどablation testで試していたが、少なくとも最短のものがないと駄目とのこと。 データセットは ACE2004, ACE2005。

f:id:jack_and_rozz:20180904155353p:plain:w400


Constructing Datasets for Multi-hop Reading Comprehension Across Documents [Welbl+, arXiv'17]

https://arxiv.org/pdf/1710.06481.pdf

概要

WIKIHOPというReading comprehensionのデータセットの作成・分析についての話。データセットの分析や関連研究との比較,RCデータセットの構築で起こりがちなバイアスについてなどしっかり気を使っていて勉強になった。

タスクとしてはWikipedia中の記事を読んで,Wikidata上に登録されている他エンティティの関係性を表すトリプル (subject, relation, object) のobjectを当てる。 *1 WikiReading に似ているが大きな違いはタイトルにもmulti-hopとあるように,subjectとなるエンティティの記事だけではなくそこに含まれるリンクを辿って,関係のある他の記事も用いた上でobjectを当てる形式にしていること。 またWikiReadingはobjectの名前を記事中からの抽出,あるいはモデル自身の語彙から生成する必要があるテキスト生成タスクであるのに対し,WIKIHOPは候補objectが与えられた上での選択タスクになっている.*2

どういうことかというと例えばfig.1 のような例では ("Hanging gardens of Munbai", "country", ?) というクエリの回答として "India" を推定する上で必要な情報は"Hanging gardens of Munbai"には書かれておらず,リンクを辿って "India"までの全ての記事を見てようやく推定が可能になる.このように推定のためには複数記事の情報を統合する必要があるような関係トリプルを集めたデータセットとなっている。

fig1  fig2

具体的にデータセットをどう作っているかというとfig.2のようにsubjectとなる記事からスタートして,記事中に登場した全ての他エンティティについての記事も辿る,というのをtype-consistent entityに当たるまで繰り返す。 type-consistent entityの定義はwikidata中に登録されている他の全トリプル中で,クエリのrelationを伴って登場したことのあるobject。今回の例だと (*, "country", object) というトリプルがwikidataに存在していれば object はtype-consistent entity であり,その記事にたどり着けばそれを回答候補に加え探索を打ち切る。*3

ここでは省略するが実験においては簡単なベースラインやneural-basedなモデルなどいろいろ試した上で,登場する回答候補エンティティを[Hermann+, NIPS'15]のようにマスクすることで表層を手がかりとして使わせない(=文脈をちゃんと理解するように強制させる)場合や関係のない記事を抜いた場合どう変わるのかなど,実験結果の分析についてもなかなか興味深い事が色々。

*1:ここでは省略するがWikipedia/Wikidata以外にも薬剤に特化した知識ベースを使ってMEDHOPというデータセットも作っている

*2:WikiReadingのような設定の場合,エンティティ名って結構低頻度語であることが多いと思うんだけどその結果必要以上に生成が難しくなっちゃったりしないんだろうか?

*3:この際タスクの趣旨のためにsubjectの記事にobjectが登場するようなものは除外している

UNSUPERVISED NEURAL MACHINE TRANSLATION [Artetxe+, ICLR'18]

URL: https://arxiv.org/pdf/1710.11041.pdf

概要

各言語の単言語コーパス+ cross-lingual embeddingsを使うことでパラレルコーパス無しで機械翻訳をしよう、という論文。 具体的にどうやるかというと下図のように言語共通のencoderと言語独立のattention付きdecoderを用意して, 訓練時はそれぞれの単言語コーパスを使ってautoencoder (入力文をそのまま復元するモデル)を学習することでencoderが言語非依存の中間表現を出力してくれることを期待する。そしてテスト時に入力の言語と異なるdecoderを用いると復元された入力文は目的言語のものになり、結果的に翻訳が行われているという仕組み。(例えば訓練を仏→仏、独→独で行ってテストは仏→独みたいな)

f:id:jack_and_rozz:20180422082536p:plain:w400

しかし問題となるのが普通にやると中間表現に入力文の言語非依存な情報が上手いこと圧縮されてそれを元に復元・・・という風にはならず、 (自分の理解ではattentionに頼りすぎて、という事だと思う)入力文の単語を盲目的に一つずつコピーしていくようなモデルになってしまい、結果的に違う言語では上手くいかなくなってしまう事らしい。

それを解決するために著者らが提案しているのが(1) denoising (2) On-the-fly backtranslation と呼ばれる2つの工夫で、前者は入力文がN単語なら N/2回隣り合う単語をランダムに入れ替えて順番をめちゃくちゃにして、単純に左からコピーしていっても復元できないようにしてやる、という方法。 また後者の具体的な内容としては、まず訓練の各ステップで現在のモデルを使って翻訳を行う。そうして得られた (言語Aの入力文, 言語Bの出力文) のペアをひっくり返してそのステップの訓練データに加えてやることで,モデルが出力したちょっと変な言語Bの文から言語Aの文を復元できるようにする、という方法。
どちらの方法もautoencoder関連で過去に提案された、入力をわざと崩してやることでencoderが出力する中間表現をロバストにしてやろうという発想に近いものだと思うけど、 On-the-fly backtranslationについてはモデルが途中のステップで出力する文って恐らくかなりおかしい感じになっている訳で、そんなの訓練中に突っ込んで学習がぶっ壊れないのかよ、という感想。元ネタらしい (Sennrich+, '16) をちゃんと読んだほうがいいのかな。

実験と結果

いくつかの言語対に対して unsupervised, semi-supervised (訓練にパラレルコーパスをちょっとだけ使う), supervised (普通のニューラル翻訳) を条件を変えて比較。denoising, on-the-fly backtranslation単体だと微妙だが、両方合わせると (semi-)supervised に勝てないまでもそこそこいい線行くらしい。*1

また、semi-supervisedの結果が示すように単体ではモデルの学習が困難な小さいデータでもunsupervisedにちょっと加えてやると大分性能が良くなるというのはかなり面白い。自分の感覚では他のタスクでもよくある整ったデータセットのサイズって 10k~100kくらいで、この量だと何かモデル学習するには(特にニューラルだと)タスクによっては微妙に心もとないしどうも使いにくいよなーと思っていたのでこういう大規模な単言語コーパス + 小規模の高品質 (task-orientedな) コーパスを組み合わせるみたいな話は有望だと思う。

f:id:jack_and_rozz:20180422084540p:plain

雑感

面白かったけどメインの提案である中間表現の質を上げる話、入力を盲目的にコピーする問題はattention使ってるせいじゃねえのという感が否めない。そもそもattentionという手法が入力文全体の情報を一つの中間表現に全部負担させるのではなく、各ステップのencoderの出力に分散させてやろうという発想なわけで、autoencoderのようなuniversalな中間表現を作りたいという話と相反しているように感じる。attention無しバージョンは試さなかったんだろうか? (上記の問題を差し置いても自分で文のautoencoder作ってみた時、attentionを入れないほうが普通に性能良かった気がするんだけど・・・)

*1:byte pair encodering (BPE) はslightly beneficialだとか言っていたけど2. ->4. の変化は十分大きくない?それとも4. って proposed + BPE じゃなくて proposed + backtranslation + BPE ってこと?

Learning with Noise: Enhance Distantly Supervised Relation Extraction with Dynamic Transition Matrix [Luo+, ACL'17]

https://arxiv.org/pdf/1705.03995.pdf

概要

Relation Extractionと呼ばれる2つのエンティティ間の関係抽出タスクの論文。 具体的には(subj, rel, obj) の形式で表される知識ベースを仮定して,(subj, obj) を含む文(文の集合)からrelを当てるといった形式。 彼らのモデルではニューラルネットを用いてエンコードしたベクトルをsoftmaxに掛けて,R (= relの種類) 択の分類問題を解いている.

一方で,訓練データ中のどの文が (subj, obj)に対する関係relの根拠となっているかということをアノテーションすることは現実的に困難なため, この学習の際には(subj, obj)が出てきた文は全部relに関係しているとみなして学習する,いわゆるdistant supervisionによる学習が基本的なやり方となるため, あるサンプルが実際には全然relと関係ない文であった場合それは学習におけるノイズとなってしまうことが問題となる。

彼らの貢献は主に以下の3つ。
1. Curriculum Learning(訓練データのそれぞれに信頼度あるいは難しさを計算できる時に,信頼できる/簡単なものから学習していく)の導入
2. Sentence-level Modeling / Bag-level Modeling (文の集合) の比較に加えて,Bag-level Modelingにおけるaggregation (それぞれの文ベクトルからどう全体のベクトルを作るか)についてaverageとattentionの2種類の比較
3. Transition Matrixによるノイズモデリングの提案

以下の図がモデルの概要図。 入力をエンコードした後,関係ラベルの確率分布{ \displaystyle \bf p}を計算する部分と,タイトルにもあるDynamic translation matrix { \displaystyle \bf T} を計算する部分に分けられる.この{ \displaystyle \bf T}{ \displaystyle R * R}の正方行列の形を持ったある種の混同行列になっていて,各要素{ \displaystyle t_{ij}}は関係{ \displaystyle r_i}{ \displaystyle r_j} と間違える確率になっている。

f:id:jack_and_rozz:20180223164156p:plain:w400

この行列{ \displaystyle \bf T}と推定した確率分布{ \displaystyle \bf p}から新たな確率分布{ \displaystyle \bf o = T^{\mathrm T} \cdot p}を計算して,訓練時は{ \displaystyle \bf o }{ \displaystyle \bf p}を重み付けしたものを使い,テスト時の推定には{ \displaystyle \bf p}を用いる. これがどういうことかというと自分の理解では,{ \displaystyle \bf p}は真の確率分布をモデリングしているのに対し,それをノイズが含まれうる訓練データで直接最適化すると訓練データのノイズもそのまま学習されてしまう。それに対して,真の確率分布+ノイズである{ \displaystyle \bf o}をノイズ入りの訓練データで学習すると,結果的に真の確率分布{ \displaystyle \bf p}とノイズをモデリングした部分{ \displaystyle \bf T}に分かれて,結果的にモデルの推定の質が良くなる,ということをやりたいんだと思う.
ただ,実際の学習データは「必ずしも正しいとは限らないデータ(=~o)」だけで,「確実に正しいデータ (=~p)」も「何をどう間違えたかのデータ (=~T)」も無いので真の確率分布とノイズの部分の分離を促す力は単にネットワークを分けただけでは得られないんじゃないか?という気がするがそこはどう考えてるんだろう。自分が読み込めていないだけの可能性もあるかも・・・。*1

結果としては1. のCurriculum Learningによる寄与が大きく,2. はそこまで変わんないかなあ・・・?という印象。また3.はbag-levelではそこまで大きな効果がある感じではなかったが,sent-levelでは結構差があるように見える.sent-levelでは一度に1つしか見ない分,あるサンプルがノイズかどうかの分散が大きいから効果が大きいということなんだろうか?

*1:Culicullum Learningにおけるスコアが高いものだけをpの学習に使い,全部混ぜたやつをoに使うとかはどうなんだろう?

Improving Coreference Resolution by Learning Entity-Level Distributed Representations [Clark and Manning, ACL'16]

https://nlp.stanford.edu/pubs/clark2016improving.pdf

概要

C.Manningの研究室から出た共参照解析の論文で、[Lee+, EMNLP'17] に抜かれるまでCoNLL 2012 shared taskのSOTAモデル。概要としては従来のメンション間のスコアを算出して同一クラスタに属するかどうかを判断し、最後にリンクを辿ってクラスタを構築するモデルだと既に同一クラスタであると判断した他のメンションの情報が使えないことが問題となる。例えばテキスト中にClintonさんが2人居た時に "Bill Clinton" と "Clinton"が同一エンティティを指すかどうかは判断が難しいが、{Bill Clinton} と {Clinton, she} が同一であるかどうかの判断はすでに"Clinton" と "she" が同一であるという情報を使えば比較的容易である、という話。 そのためにタイトルにもEntity-Levelとあるように,個々のメンションを要素が1つのクラスタとみなしてスタートして,モデルが推定した結果をインクリメンタルに取り込んだ上で、entity-levelの(言い換えるとcluster-levelの)representationを計算しつつクラスタ同士をマージし続けるような形で共参照解析を行えるモデルにしようと言う話。

モデル

f:id:jack_and_rozz:20171228142917p:plain:w200
まず前提として、個々のメンションの抽出は別モジュールで既に行われているとする。その上で、モデルのコンポーネントは大きく分けて (1) Mention-Pair Encoder (2) Mention-Ranking Model (3) Cluster-Pair Encoder (4) Cluster-Ranking Model の4つ。 (1)のエンコーダは特筆することもなく2つのメンションのembeddingと周囲の単語、メンション間の距離などの特徴量を使ってFFNNに通して新たなrepresetantionを計算する。(2)でそれを使って、あるメンションmとある先行詞aの間のスコアを算出する。 (3)はクラスタのペアについてのエンコーダなので2つのクラスタに属するメンションの全通りの組み合わせに対してあれこれしてrepresentationを計算。詳しくは論文の図参照。

冒頭でメンションではなくクラスタとの比較をしよう、という趣旨を述べていたにも関わらずどうして(1), (2)が必要になるかというと、具体的には(4)での枝刈り&実行順序決め(簡単なものから実行するため)に用いる。モデルの実際の訓練・推定の流れはまず(1), (2)を事前訓練して従来のモデルと同じようにメンション単位でのスコアを算出できるようにした上で、(3), (4)の訓練時にMention-Ranking Modelでのスコアが高いメンションが属するそれぞれのクラスタどうしに対してCluster-Ranking Modelを適用して実際の共参照解析を行っている。

また,学習データとして持っているのは最終的に得られたクラスタだけで途中にどのような順番でクラスタクラスタのマージを行ったか、というラベルは陽に存在しないため,通常のneural-basedなモデルと違って最終的なクラスタ同士を比較するだけでは最適化が難しく、ここについてはDaumeのlearning-to-searchというアルゴリズムを使って解決している。

具体的にはまずモデルの現在のパラメータによって定まる方策 { \displaystyle \pi}を用いて最終状態までの状態の軌跡 {{ \displaystyle x_1, x_2, ... , x_N}} を得る。その上で、ある状態{ \displaystyle x_i}において取れる行動全て({ \displaystyle u \in \mathrm U(x_i) })に対して、その行動をした後最適(に近い)な行動をし続けた時の最終状態{ \displaystyle e}とその時の損失{ \displaystyle l(u) = L(e, y)}を損失関数{ \displaystyle L}と, reference policyと呼ばれる{ \displaystyle \pi_{ref}} を用いて獲得する。このreference policyについては,訓練時は当然正解とスコアの計算式を知っているのでそれが最も増えるような行動を選ぶようにする、と言ったように人工的に作る。その上で全ての{ \displaystyle \pi(u| x) l(u) } *1 の和を取って最適化を行うという流れ。

f:id:jack_and_rozz:20180329122223p:plain:w400

自分の理解をまとめると,まずある状態{ \displaystyle s}において次の行動{ \displaystyle u}がどれだけ有望かを計算する関数{ \displaystyle \pi (u, s)}を最適化するのが目的。ただ学習データとして存在するのは最終状態だけで行動の軌跡は無いため、状態{ \displaystyle s}で行動{ \displaystyle u}を取りその後ベストに近い行動を取り続けたら最終的なスコアがどうなるか、ということをreference policyを元に計算して,それを用いて各状態における行動選択のための方策を最適化しているのだと思う。*2 ゲームAIを学習する時にある一手分だけモデルの方策に従ってそこからモンテカルロ木探索をして最終スコアを元に最適化するのに近いような気がした。

*1:ここxじゃなくて{ \displaystyle x_i} では?

*2:とはいえreference policyに従って選ばれるある状態からの擬似的な最適行動の軌跡を使うのと、最終状態から遡って作られる擬似的な初期状態までの軌跡を使ってteacher-forcingするのってそこまで差があるだろうか?例えば共参照解析だったら同クラスタに所属するものの内、文書内で距離が近いものから順にやるとかでそう悪くない軌跡が作れると思うんだけど・・・。

Learning Distributed Representations of Texts and Entities from Knowledge Base [Yamada+, TACL'17]

https://transacl.org/ojs/index.php/tacl/article/view/1065/257

概要

ざっくり言うとword embeddingと同時にentity embeddingを学習するモデル (NTEE) を提案して、実際に学習したembeddingを色々なタスクで用いて評価したよ、という論文。

どう学習するかというとWikipediaのテキスト中のリンクをエンティティとみなして、あるテキストtにエンティティeが登場するか否かのモデルを最適化することによって モデルは具体的には以下の式の{ \displaystyle P(e|t)}を最適化する。{ \displaystyle v_e}がエンティティemb, { \displaystyle v_s}が文のベクトルで,文のベクトルをどう作るかというと文中の単語ベクトルの平均を取って変換を掛けるだけ。*1


実験

(1) Semantic Textual Similarity Semantic(2つの文の意味的な類似度のスコア計算), (2) Entity Linking, (3) Question Answering の3つのタスクによって提案モデルによって学習されたWord/Entity embeddingの評価を行う。具体的にはそれぞれのタスクのモデルにおけるembeddingの初期化をする際に、提案手法で学習したものを用いる場合と通常のskip-gramなどによるものを比較。 *2

(1) のタスクについては2つの文のベクトルさえ得られれば良いのでembeddingの学習の際のモデルと同様の構造でOK。
(2), (3)のタスクについてはどちらもテキストに対して回答となるエンティティを指定するタスクであり、 下図のような事前にテキストの表層などの手がかりから絞り込んだ回答候補(今回は100候補)のentity embeddingと、前述した方法で計算する文のベクトルからスコア付けをするモデルで解いている。 よくある分類問題のように全エンティティ数次元の確率分布を出力するようなモデルにしていないのはエンティティ数が膨大なのでソフトマックス計算のコストが大きいからということだろうか?

結果は以下の表の通り。どのタスクについても提案手法(NTEE)による改善が見られる。EL,QAタスクでは回答候補は文中に出現する単語とは違いエンティティなので別個にベクトルを用意すると改善するよ、というのは分かり易いが、一方で驚きなのがSTSタスクでは使うのは2つの文のベクトルだけ、つまりEL, QAタスクのようにentity embeddingは使うことはなく,entityを推定するタスクの中で学習したword embeddingを使うだけでこれだけの改善が得られているという事になる。 他タスクで学習したword embeddingを初期化に使うというのはある種のシーケンシャルに行うマルチタスクであるような気もするので、その際のサブタスクとしてエンティティ推定タスクは良さそうという話なのだろうか。


*1:2番めの式, 文のベクトルの計算について、活性化関数を挟む記述が無かったがこれだと無駄に線形変換してるだけにならないだろうか・・・?省略しただけ?

*2:learned representationを使う、ともNTEEを使う、とも記述があり、単語ベクトルの平均取った後の変換部分も共有しているかどうかは不明。