yoheikikuta / paper-reading

Notes about papers I read (in Japanese)
156 stars 4 forks source link

[2020] Don't Stop Pretraining: Adapt Language Models to Domains and Tasks #53

Open yoheikikuta opened 3 years ago

yoheikikuta commented 3 years ago

論文リンク

https://arxiv.org/abs/2004.10964

公開日(yyyy/mm/dd)

2020/04/23

概要

大量の wiki などから学習したモデルを用いてNLP タスクを解く際に、タスクに特化させるための pre-training 手法について整理して実験しましたという論文。 タスクに特化させるための pre-training として同じ domain のデータを大量に準備して unsupervised に学習させる方法を domain-adaptive pretraining (DAPT) と呼び、タスクデータそのものもしくはその分布に近いデータを準備して unsupervised に学習させる方法を task-adaptive pre-training (TAPT) と読んでいる。 前者は典型的な大量データでの pre-training を、次に domain のデータを大量に準備してさらに続けようというパワーな感じで、後者はデータが限られてるときに domain の中でも特定のタスクというより狭い範囲の少数のデータを活用しようという感じ。 ROBERTA を用いて 4 つの domain のデータで実験をしていて、やはり大量のデータを使う DAPT によって性能が向上すること(特に専門用語が多いようなアカデミックな domain において)、TAPT はデータが少なくて計算コストが低い割に性能向上に効くこと(たまに DAPT に勝ったりもする)、一番いいのは併用すること、が示されている。

GitHub repository: https://github.com/allenai/dont-stop-pretraining

yoheikikuta commented 3 years ago

ACL で面白そうな論文ないかな〜と思って探した中で見つけた第二弾。 pre-training が NLP タスクでも広く使われるようになって久しいが、domain specific な状況で使う時の学習に関して何か新しい知見があるかなと思って読んでみることにした。

ちなみにこの論文は Honorable Mention Papers – Main Conference に選ばれている。

yoheikikuta commented 3 years ago

BERT あたりから一気に NLP の pre-training も進んだが、その後継の ROBERTA では圧縮なしのテキスト 160[GB] で pre-training していて、そこで得られた分散表現は様々な source で様々なデータサイズで様々なタスクに高い性能を発揮している。

大体のタスクだともうこういう pre-trained モデル使えばええんや!となりそうだが、特定のドメインに特化させた別個の pre-trained model がまだ有効なのか?というのは十分には明らかになっていない。

例えば https://arxiv.org/abs/1901.08746 の論文では BERT を生物医学系の corpus に特化させたもので、PubMed などの domain specific なデータで pre-training してさらに fine-tuning したものは、ドメイン特化してない wiki + book corpus で学習した BERT よりも性能が高かったという結果を出している(チラ見しただけでちゃんと読んではいない)。

それはそう、という感じもするが、このような domain 特化の pre-training が(単なるデータ量増加などと比べて)有効性があるのかを真面目に調べましたというのがこの論文である。domain 特化で pre-training を続けることをこの論文では domain-adaptive pretraining (DAPT) と呼ぶ。

このような方法の他に、解きたい教師有り学習のタスクのデータを教師なしの pre-training に使うことによってドメイン情報をモデルに学習させようという方法もあり得る。これをこの論文では task-adaptive pre-training (TAPT) と呼ぶ。

これらの効果が以下ほどのものか、ROBERTA と domain が異なる複数のデータセットを使って試そうという論文である。 ちなみに ROBERTA については過去の paper-reading でやってたので忘れてたらこれを見て思い出す: https://github.com/yoheikikuta/paper-reading/issues/31

yoheikikuta commented 3 years ago

2018 以降、NLP のモデルはまず言語モデル(BERT 系譜なら Masked Language Model)として教師なし学習をして、その後 downstream タスクのために教師ありで fine-tuning する、という二段構えで学習される。

この論文では ROBERTA をベースラインに使う。 ROBERTA は大量のデータで学習してるが、それでも英語で現れる様々なバリエーションを一般化するほどの多様性があるかは不明(というよりきっとないだろうと思っている)なので、この論文では BIOMED, CS, NEWS, REVIEWS (amazon) の 4 つの domain データを使って DAPT や TAPT を試す。 これらのデータは先行研究でもよく使われているのと、それぞれ classification タスクとして利用可能なのでこの論文でやりたいことと合っているから。

DAPT と書いてあるのは、これらのデータを使ってさらに masked LM の事前学習を続けた結果。 評価は random に sample した 50K held-out データで、loss はちゃんと下がっていることをが分かる(まあこれはデータがブッ壊れ てるとかじゃなきゃそれはまあそうでしょうという結果)。

yoheikikuta commented 3 years ago

実験に入る前に、domain 間の類似度に関して定量的に評価しておく。 とはいえこれはかなりシンプルな定義で、各 domain の corpus の中で、uniqram の上位 10K 個(ストップワードを除く)の overlap を測ったというものになっている。結果は以下。

PT は ROBERTA の pre-training で使ったデータセットで、これは wikipedia などが含まれていて News データセットとの類似度が高いことが分かる。10K まで見たらそれぞれの類似度はもっと高くなるかなと思ったけど、思ったより overlap 低いなと思った。domain 的に結構専門用語とかも多そうなものがあるしこんなもんなのかね。

yoheikikuta commented 3 years ago

ということで実験。まずは DAPT の方から。

結果は以下のようになる。 domain を適切に合わせて pre-training した DAPT は良い性能を示している。一方で異なる domain データで pre-training をした ¬DAPT は多くの場合悪影響がある。追加で学習された domain に影響を受けすぎて本来解きたいタスクの domain に適応できてないことが伺える。一方でたまに素の ROBERTA よりよくなることもあったりして、まあ関係が薄いデータでも pre-training 続けるといいことあることもあると(理由がなぜとか全然分からんし、まあこんなこともあるよねくらいでとりあえず無視しておく)。

異なる randomly selected seed で 5 回ずつ実験していて、右下の数字が 1σ のズレである。 真面目に考えるとタスクによっては全然有意さあるとは言えないじゃんというものも出てくるが、こういう統計誤差が書いてないものも機械学習の論文では山ほどあるので、みんなちゃんと書いていってくれるようになるといいね(実験をする際にはマシンパワーの依存度が大きくなるという観点もあるのだが...)。

全部の cross-domain の組み合わせの結果はなさそうだけど、類似度が高い NEWS-REVIEWS では少なくとも DAPT が harmful ではなくちょっと素の ROBERTA より良くなったという結果も軽く言及されている。

yoheikikuta commented 3 years ago

次は TAPT について。 task に使えるデータは少ないが、これはこれが属する domain の部分集合であるのでこいつを unlabeled pre-training に使うことによって性能が向上するだろうという戦略である。データ量が少ないけど task-relevant なので、うまくいくなら学習コストは抑えつつ精度を引き上げられる。

結果は以下のテーブルのようになる。

素の REBERTA よりは良い。 DAPT と比べてもまあまあよいけど domain 依存で、BIOMED や CS は負けることがあって NEWS や REVIEWS は勝っている、という感じ。これだけ見ると BIOMED や CS のような専門用語が多い文章では語彙に慣れるために多めの pre-training が必要だったりするんだろうかと思ったりするが、特にそういう話や分析がなされているわけではない。 また、DAPT と TAPT は併用ができるので、併用するのがやはり一番良いという結果。まあそれはそうという感じはするのと、単独でやった場合と比べて大きく性能が上がるということはなさそう。

それと TAPT は transfer (同じ domain で違うタスクのデータで TAPT したものを使用) すると harmful だという結果も出ている。 task 内でのデータ分布が task-specific になっていて他のタスクとは異なるものになってことを示唆しているとのことだが、これはほんまかって思った。流石に同じ domain だったら悪さはしないと思ったんだけど、データ数も少なくて本当に単語分布とかが特徴的なんだろうね(個別のデータを詳しく見ることはしてない)。ちなみに結果は以下。

yoheikikuta commented 3 years ago

TAPT が使用データ量の割に良い結果を出してるので、これをもうちょっと効率的にやりたいという欲が出てくる。 解きたいタスクのデータに近いデータを持ってくるということをしたいわけだ。

論文の進め方としては以下のようになっている。

yoheikikuta commented 3 years ago

最初の方は Human Curated-TAPT と呼んでいる。 Human Curated と出てくるので「おっ、人力でデータ選別するのか?」と思ったが、これはタスクを作る時にデータソースが決まっていて、annotation cost の観点からその中の一部だけに label が付与されたというデータを使うという話だった。unlabled data も同じデータソースなので label がついたデータと分布は似ているだろうという仮定。

ちょっと分かりづらいが、例えば BIOMED の RCT の場合、元々 18040 件あった labled データのうち 500 件だけを取り出してそれを classification task として使い、それ以外のデータを unlabled のデータとして pre-training に使うというものである。評価も 500 件の macro-F1 とかを使ってるってことだな。 これは labeled data が 3% だけという状態になっていると思ったら、論文では 0.3% とか書いてある。元データが 180K と書いてあってて、現論文を見ると 200K のデータがと書いてあるので table 2 が間違ってたりするのかな?まあサンプリングしてたりする可能性もあるし、この辺は気になったら実験のコードを見に行くのが良さそう。

細かいセットアップは置いておいて、結果は以下の表。 curated TAPT は DAPT + TAPT と同等以上の性能を発揮している。curated TAPT は TAPT よりも多いデータを使うことになるだろうが、典型的には DAPT よりはかなり少ないというものになると思われるので、これは確かに効果があるだろうという主張。 DAPT と併用したらさらに良くなるってことで、task のデータ分布と近いデータを効率的に集める方法があれば、大量の corpus を準備して電気代いっぱい使って学習しなくても良いかもしれないという期待は持てる。

yoheikikuta commented 3 years ago

curated TAPT がうまくいってそうなので、次はデータがたくさんあるけどどれがタスク分布に近いデータかが分からない時にそれを抽出する方法を考案して試す。

と言ってもこれはそんなに複雑なことをしない。

簡単なのであまり絵を描く意味もないと思うが、イメージ図は以下。

実験結果が以下の表。 単なる TAPT よりは使えるデータが多いので良くなっていて、random よりも適切に task のデータ分布に近いデータを抽出できているので良くなっている。一方で DAPT の力技には敵わない、という感じかな。 BIOMED と CS でだけ試してるけど、これは TAPT やったときに DAPT より悪かった domain で実験してみましたってことなのかね。

最後に計算量の要求について書いていて、DAPT は O(10M) とかの document 使ってるのでかなり大量だけど、TAPT は O(100) とかでも結構効果あるし、kNN-TAPT は O(100K) とかで結構性能が上がるのでオススメという感じらしい(場合によっては DAPT よりも良い)。ただし最高性能を目指すならやはり DAPT+TAPT をするのが確率的には一番高そう。

yoheikikuta commented 3 years ago

What is a domain? というセクションがあってオッと思うが、これはみんななんとなくの意味で使っててちゃんとこのことについて考えてる研究は少ないぞって言ってる。 この論文では DAPT と TAPT が補完的であることから、様々な粒度でスペクトルを成してる( (e.g., Amazon reviews for a specific product, all Amazon reviews, all reviews on the web, the web) )んじゃないですかと投げかけてる。とりあえず言っときます、興味ある読者は研究トピックにしてくれ的な書き方かな。

yoheikikuta commented 3 years ago

ということで一通り読んだ。 ACL の Honorable Mention Papers – Main Conference に選ばれたので面白いのかと思ったけど、pre-training について DAPT と TAPT を明確に区別していくつかの domain でそれをきっちり実験しましたという堅実な実験論文という感じだった。

データが少ない domain では TAPT のような方法が有効そう、というのは実戦でも使えそうだね。