【2019年版】自然言語処理の代表的なモデル・アルゴリズム時系列まとめ

# はじめに
これまでに提案されてきたNLPモデル一つ一つについて詳しく知りたかった＆改良の歴史を知りたかったため、特に有名だと思われるものをまとめました。MikolovらによるRNNLM以降を対象としています。

**注）提案年については主にarXivのSubmission historyを参照しています。詳細な日付まで分からなかったものもあります。**

# 代表的なNLPモデル・アルゴリズム一覧
## RNNLM
* 提案年：2010
* 提案者：Tomáš Mikolov<sup>1,2</sup>, Martin Karafiát<sup>1</sup>, Lukáš Burget<sup>1</sup>, Jan “Honza” Černocký<sup>1</sup>, Sanjeev Khudanpur<sup>2</sup>
* 提案者所属：  
* <sup>1</sup>Speech@FIT, Brno University of Technology, Czech Republic  
<sup>2</sup>Department of Electrical and Computer Engineering, Johns Hopkins University, USA
* 提案論文：[Recurrent neural network based language model](http://www.fit.vutbr.cz/research/groups/speech/publi/2010/mikolov_interspeech2010_IS100722.pdf)  
※RNNLM自体はもっと前からあったように取れるが、注目されはじめたのはこの論文から？  
※[参考文献](https://www.oreilly.co.jp/books/9784873118369/)には、RNNによる言語モデルは2010年にMikolovらに提案されたと書いてあった。

Recurent Neural Network based Language Model。RNN自体は1900年代からあったが、それをNLPの領域に活用したものを特にRNNLMと呼ぶ。


**参考文献**
[ゼロから作るDeep Learning ❷ ――自然言語処理編](https://www.oreilly.co.jp/books/9784873118369/)

## Word2Vec
* 提案年：2013/1/16
* 提案者：Tomas Mikolov<sup>1</sup>, Kai Chen<sup>1</sup>, Greg Corrado<sup>1</sup>, Jeffrey Dean<sup>1</sup>
* 提案者所属：<sup>1</sup>Google Inc., Mountain View, CA
* 提案論文：[Efficient Estimation of Word Representations in Vector Space](https://arxiv.org/abs/1301.3781)

単語ベクトルを獲得する隠れ層一層のモデルが提案されている。
Word2Vecの名前が有名だが、Word2VecというのはOSS実装のツール名であり実際にはCBOW（Continuous Bag-of-Words）モデルとSkip-gramモデルの二つ。

CBOWは周辺語からその間にある単語を推測するタスク、Skip-gramはある単語からその周辺の単語を推測するタスクを解かせることで、結果的に得られたニューラルネットワークの重みベクトルを単語ベクトルとしている（モデル自体を使うわけではない）。

経緯としては、上記のRNNLMで獲得できる単語ベクトルの質の改善として提案された。

**参考文献**
[Mikolovのword2vec論文3本(2013)まとめ - こんな夢を見た](http://hytae.hatenablog.com/entry/2015/05/15/Mikolov%E3%81%AEword2vec%E8%AB%96%E6%96%873%E6%9C%AC%E3%81%BE%E3%81%A8%E3%82%81)
[Google Code Archive - Long-term storage for Google Code Project Hosting.](https://code.google.com/archive/p/word2vec/)

## Doc2Vec
* 提案年：2014/5/16
* 提案者：Quoc V. Le<sup>1</sup>, Tomas Mikolov<sup>1</sup>
* 提案者所属：<sup>1</sup>Google Inc, 1600 Amphitheatre Parkway, Mountain View, CA 94043
* 提案論文：[Distributed Representations of Sentences and Documents](https://arxiv.org/abs/1405.4053)

Word2Vecは単語ベクトルしか獲得できなかったが、入力に文書IDを追加することでそれに加えて文書ベクトルを獲得可能にしたモデル。Doc2Vecというのもおそらくツール名。

CBOWの改良版であるPV-DM（Distributed Memory version of Paragraph Vector）とSkip-gramの改良版であるPV-DBOW（Distributed Bag of Words version of Paragraph Vector）が提案されている。

後述するSCDVの論文ではいくつかのタスクで性能が極めて低い結果となっている。

**参考文献**
[【論文紹介】Distributed Representations of Sentences and Documents](https://www.slideshare.net/TomofumiYoshida2/distributed-representations-of-sentences-and-documents-70011001?)

## Attention
* 提案年：2014/9/1
* 提案者：Dzmitry Bahdanau<sup>1</sup>, Kyunghyun Cho<sup>2</sup>, Yoshua Bengio<sup>2</sup>
* 提案者所属：<sup>1</sup>Jacobs University Bremen, Germany, <sup>2</sup>Université de Montréal 
* 提案論文：[Neural Machine Translation by Jointly Learning to Align and Translate](https://arxiv.org/abs/1409.0473)

従来のEncoder-Decoderモデルの弱点である、「Encode結果が固定長であるために、長文を入力すると情報量が圧縮されすぎる」という問題を解決するための機構。

これ以降に登場した様々なモデルに採用されることになる。

**参考文献**
[Seq2Seq+Attentionのその先へ - Qiita](https://qiita.com/ymym3412/items/c84e6254de89c9952c55)
[seq2seq で長い文の学習をうまくやるための Attention Mechanism について - Qiita](https://qiita.com/halhorn/items/614f8fe1ec7663e04bea)

## GloVe
* 提案年：2014/10
* 提案者：Jeffrey Pennington<sup>1</sup>, Richard Socher<sup>1</sup>, Christopher D. Manning<sup>1</sup>
* 提案者所属：<sup>1</sup>Computer Science Department, Stanford University, Stanford, CA 94305
* 提案論文：[GloVe: Global Vectors for Word Representation](https://nlp.stanford.edu/projects/glove/)

単語ベクトルを獲得する手法。共起行列を用いたカウントベースの手法と、Word2Vecのような推論ベースの手法を合わせた手法で、3つのタスクでWord2Vecを上回る結果になった。

**参考文献**
[論文メモ: GloVe: Global Vectors for Word Representation](https://ohke.hateblo.jp/entry/2018/11/03/230000)
[Pennington, Socher, and Manning. (2014) GloVe: Global vectors for word representation](https://www.slideshare.net/naoakiokazaki/glove-global-vectors-forword-representation)
[stanfordnlp/GloVe: GloVe model for distributed word representation](https://github.com/stanfordnlp/GloVe)

## seq2seq
* 提案年：2014/12
* 提案者：Ilya Sutskever<sup>1</sup>, Oriol Vinyals<sup>1</sup>, Quoc V. Le<sup>1</sup>
* 提案者所属：<sup>1</sup>Google
* 提案論文：[Sequence to Sequence Learning with Neural Networks](https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks)

系列（例えば、文章など）を系列に変換するモデル。
Encoder-Decoderモデルとも呼ばれる。入力→Encoder→Decoder→出力の流れで学習されるが、このときEncoderとDecoderは中間層のみを共有しており、Encoderは入力データの圧縮、Decoderは出力データの生成に特化していることが特徴。

この論文ではEncoder、Decoder共にLSTM（Long Short-Term Memory）が使用されている。
英語ーフランス語間の翻訳タスクで高精度を出した。

これがあってのAttentionだと思っていたが、こっちの方が世に出たのが遅い？？

**参考文献**
[今更ながらchainerでSeq2Seq（1） - Qiita](https://qiita.com/kenchin110100/items/b34f5106d5a211f4c004)
[ゼロから作るDeep Learning ❷ ――自然言語処理編](https://www.oreilly.co.jp/books/9784873118369/)

## fastText
* 提案年：2016/7/6
* 提案者：Piotr Bojanowski<sup>1</sup>, Edouard Grave<sup>1</sup>, Armand Joulin<sup>1</sup>, Tomas Mikolov<sup>1</sup>
* 提案者所属：<sup>1</sup>Facebook AI Research
* 提案論文：[Enriching Word Vectors with Subword Information](https://arxiv.org/abs/1607.04606)

Mikolov氏がFacebookに移って開発した単語ベクトル獲得モデル。その名の通り、Word2Vecより学習が早い。subwordという概念を取り入れており、未知語に強い。

Word2Vecと比較すると、対象の単語の一部が含まれる単語が高い類似度となるので、タスクによっては悪い影響を及ぼす可能性あり。
例）javascriptの類義語
Word2Vec: jquery, jsx, dom, ajax,...
fastText: javascripts, coffeescript, ecmascript, vimscript,...

**参考文献**
[facebookresearch/fastText: Library for fast text representation and classification.](https://github.com/facebookresearch/fastText)
[word2vec, fasttextの差と実践的な使い方 - にほんごのれんしゅう](https://catindog.hatenablog.com/entry/2017/03/31/221644)

## SCDV
* 提案年：2016/12/20
* 提案者：Dheeraj Mekala<sup>1</sup>, Vivek Gupta<sup>2</sup>, Bhargavi Paranjape<sup>2</sup>, Harish Karnick<sup>1</sup>
* 提案者所属：<sup>1</sup>IIT Kanpur, <sup>2</sup>Microsoft Research
* 提案論文：[SCDV : Sparse Composite Document Vectors using soft clustering over distributional representations](https://arxiv.org/abs/1612.06778)

文書ベクトルの獲得を目的としたモデル。これまでのモデルと比較してかなり高い精度を出している。
SCDVのアルゴリズムは大きく３ステップで成り、ざっくり説明すると以下の通り。

1. Skip-Gramで得られた単語ベクトルをGaussian Mixture Models(GMM)でソフトクラスタリング
2. 単語ベクトルを各クラスタに所属する確率を考慮し補正、結合して文書ベクトルに変換
3. 文書ベクトルの要素のうち0に近いものを0に変換（スパースにする）

単語ベクトル→文書ベクトル変換は、結局足しているだけっぽいのでGMMの箇所がキモなのだと思われる。

**参考文献**
[文書ベクトルをお手軽に高い精度で作れるSCDVって実際どうなのか日本語コーパスで実験した(EMNLP2017) - Qiita](https://qiita.com/fufufukakaka/items/a7316273908a7c400868)



## GNMT
* 提案年：2016/9/26
* 提案者：Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V. Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, Jeff Klingner, Apurva Shah, Melvin Johnson, Xiaobing Liu, Łukasz Kaiser, Stephan Gouws, Yoshikiyo Kato, Taku Kudo, Hideto Kazawa, Keith Stevens, George Kurian, Nishant Patil, Wei Wang, Cliff Young, Jason Smith, Jason Riesa, Alex Rudnick, Oriol Vinyals, Greg Corrado, Macduff Hughes, Jeffrey Dean
* 提案者所属：Google（おそらく全員）
* 提案論文：[Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation](https://arxiv.org/abs/1609.08144)

Google翻訳の中身（今も？）。
seq2seqのでかいバージョンだと思われる。


**参考文献**
[論文解説 Google&#39;s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation (GNMT) - ディープラーニングブログ](http://deeplearning.hatenablog.com/entry/gnmt)


## Transformer
* 提案年：2017/6/12
* 提案者：Ashish Vaswani<sup>1</sup>, Noam Shazeer<sup>1</sup>, Niki Parmar<sup>2</sup>, Jakob Uszkoreit<sup>2</sup>, Llion Jones<sup>2</sup>, Aidan N. Gomez<sup>3</sup>, Lukasz Kaiser<sup>1</sup>, Illia Polosukhin
* 提案者所属：<sup>1</sup>Google Brain, <sup>2</sup>Google Research, <sup>3</sup>University of Toronto
* 提案論文：[Attention Is All You Need](https://arxiv.org/abs/1706.03762)

「Attention Is All You Need」という挑戦的な論文タイトルが話題となった。
これまでは、Attention機構はRNNの一部として使用されることが一般的だったが、本論文で提案されるTransformerはAttentionのみを使用している。

**参考文献**
[論文解説 Attention Is All You Need (Transformer) - ディープラーニングブログ](http://deeplearning.hatenablog.com/entry/transformer)
[作って理解する Transformer / Attention - Qiita](view-source:https://qiita.com/halhorn/items/c91497522be27bde17ce)


## ELMo
* 提案年：2018/2/15
* 提案者：Matthew E. Peters<sup>1</sup>, Mark Neumann<sup>1</sup>, Mohit Iyyer<sup>1</sup>, Matt Gardner<sup>1</sup>, Christopher Clark<sup>2</sup>, Kenton Lee<sup>2</sup>, Luke Zettlemoyer<sup>2</sup>
* 提案者所属：<sup>1</sup>Allen Institute for Artificial Intelligence, <sup>2</sup>Paul G. Allen School of Computer Science & Engineering, University of Washington
* 提案論文：[Deep contextualized word representations](https://arxiv.org/abs/1802.05365)

Embeddings from Language Models。
単語ベクトルを獲得する手法。Word2Vecと異なり、文脈を考慮した単語ベクトルを獲得できる。
例えば「日」という単語は、文脈によって太陽を表したり日付を表したりする。Word2Vecはそこを一緒くたに「日」と学習させていたが、ELMoは文脈によって異なる単語として学習できる。

モデルはbidirectional LSTMが使われている。

これ以降、セサミストリートの登場キャラクター名を冠したモデルが少し流行した。

**参考文献**
[文脈を考慮した単語表現を獲得するELMo - Technical Hedgehog](https://kamujun.hatenablog.com/entry/2018/07/06/173931)

## GPT
* 提案年：2018/6/11
* 提案者：Alec Radford<sup>1</sup>, Karthik Narasimhan<sup>1</sup>, Tim Salimans<sup>1</sup>, Ilya Sutskever<sup>1</sup>
* 提案者所属：<sup>1</sup>OpenAI
* 提案論文：[Improving Language Understanding by Generative Pre-Training](https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)

Generative Pre-Training。
ラベルなしデータを学習させたモデルを転移学習させることで各タスクにおける性能が向上した。

**参考文献**
[Improving Language Understanding by Generative Pre-Training · Issue #790 · arXivTimes/arXivTimes · GitHub](https://github.com/arXivTimes/arXivTimes/issues/790)

## BERT
* 提案年：2018/10/11
* 提案者：Jacob Devlin<sup>1</sup>, Ming-Wei Chang<sup>1</sup>, Kenton Lee<sup>1</sup>, Kristina Toutanova<sup>1</sup>
* 提案者所属：<sup>1</sup>Google AI Language
* 提案論文：[BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://arxiv.org/abs/1810.04805)

近年の大きなブレイクスルーであり、非常に有名なモデル。
GPTと同じく、ラベルなしデータを転移学習させることでタスクを解くが、多くのタスクにおいてState-Of-The-Artを更新したため、汎用的に利用できる言語モデルとして注目されている。

モデルはbidirectional Transformerが使われている。

事前学習では、入力のうちいくつかの単語をマスクし、マスクした単語を予測するタスクを解かせる。

**参考文献**
[汎用言語表現モデルBERTを日本語で動かす(PyTorch) - Qiita](https://qiita.com/Kosuke-Szk/items/4b74b5cce84f423b7125)

## MT-DNN
* 提案年：2019/1/31
* 提案者：Xiaodong Liu<sup>1</sup>, Pengcheng He<sup>2</sup>, Weizhu Chen<sup>2</sup>, Jianfeng Gao<sup>1</sup>
* 提案者所属：<sup>1</sup>Microsoft Research, <sup>2</sup>Microsoft Dynamics 365 AI
* 提案論文：[Multi-Task Deep Neural Networks for Natural Language Understanding](https://arxiv.org/abs/1901.11504)

Multi-Task Deep Neural Network。
ロジック自体はBERTも参考にしており、性能はBERTを上回る。

BigBirdと呼ばれていたこともあるそう。

**参考文献**
[MT-DNN：BERTを凌駕するMicrosoftの新しいNLPモデル │ WebBigData](https://webbigdata.jp/ai/post-2967)

## GPT-2
* 提案年：2019/2/14
* 提案者：Alec Radford<sup>1</sup>, Jeffrey Wu<sup>1</sup>, Rewon Child<sup>1</sup>, David Luan<sup>1</sup>, Dario Amodei<sup>1</sup>
Ilya Sutskever
* 提案者所属：<sup>1</sup>OpenAI
* 提案論文：[Language Models are Unsupervised Multitask Learners](https://openai.com/blog/better-language-models/)

GPTの後継版。
あまりに自然な文章生成を行えるため、フェイクニュースなどへの悪用を懸念し、OSS化はされておらず大規模データで学習したモデルも公開されていない。
このことは各種ニュースサイトにも取り上げられ話題となった。

2019/8に中規模モデルが公開された。


**参考文献**
[GitHub - openai/gpt-2: Code for the paper "Language Models are Unsupervised Multitask Learners"](https://github.com/openai/gpt-2)
[「危険すぎる」と言われたAIの自動文章作成ツール「GPT-2」のモデルが新たに公開へ - GIGAZINE](https://gigazine.net/news/20190821-openai-releases-gpt-2-language-model/)

## ERNIE
* 提案年：2019/4/19
* 提案者：Yu Sun<sup>1</sup>, Shuohuan Wang<sup>1</sup>, Yukun Li<sup>1</sup>, Shikun Feng<sup>1</sup>, Xuyi Chen<sup>1</sup>, Han Zhang<sup>1</sup>, Xin Tian<sup>1</sup>, Danxiang Zhu<sup>1</sup>, Hao Tian<sup>1</sup>, Hua Wu<sup>1</sup>
* 提案者所属：<sup>1</sup>Baidu Inc.
* 提案論文：[ERNIE: Enhanced Representation through Knowledge Integration](https://arxiv.org/abs/1904.09223)

BERTを中国語に特化させたバージョン。

**参考文献**
[ERNIE/ERNIE at develop · PaddlePaddle/ERNIE · GitHub](https://github.com/PaddlePaddle/ERNIE/tree/develop/ERNIE)
[BERTに続け、バイドゥが発表した中国語における問題に対処したERNIEとは？ | AI-SCHOLAR](https://ai-scholar.tech/text-mining/ernie-baidu-ai-105/)

## XLNet
* 提案年：2019/6/19
* 提案者：Zhilin Yang<sup>1</sup>, Zihang Dai<sup>1,2</sup>, Yiming Yang<sup>1</sup>, Jaime Carbonell<sup>1</sup>, Ruslan Salakhutdinov<sup>1</sup>, Quoc V. Le<sup>2</sup>
* 提案者所属：<sup>1</sup>Carnegie Mellon University, <sup>2</sup>Google Brain
* 提案論文：[XLNet: Generalized Autoregressive Pretraining for Language Understanding](https://arxiv.org/abs/1906.08237)

BERTの事前学習方法を改良したモデル。
タスクの結果だけ見るとBERTの上位互換的な性能をしている。

**参考文献**
[GitHub - zihangdai/xlnet: XLNet: Generalized Autoregressive Pretraining for Language Understanding](https://github.com/zihangdai/xlnet)
[XLNet論文をサーベイしてみた - Qiita](https://qiita.com/Kaniikura/items/242988e96cd78148be60)

## RoBERTa
* 提案年：2019/7/26
* 提案者：Yinhan Liu<sup>2</sup>, Myle Ott<sup>2</sup>, Naman Goyal<sup>2</sup>, Jingfei Du<sup>2</sup>, Mandar Joshi<sup>1</sup>, Danqi Chen<sup>2</sup>, Omer Levy<sup>2</sup>, Mike Lewis<sup>2</sup>, Luke Zettlemoyer<sup>2</sup>, Veselin Stoyanov<sup>2</sup>
* 提案者所属：<sup>1</sup>Paul G. Allen School of Computer Science & Engineering,
University of Washington, Seattle, WA, <sup>2</sup>Facebook AI
* 提案論文：[RoBERTa: A Robustly Optimized BERT Pretraining Approach](https://arxiv.org/abs/1907.11692)

BERTの事前学習方法（パラメータチューニング）を改良したモデル。
XLNetより高い性能を出している。

読みはロベルタ？ロバート？

**参考文献**
[RoBERTa: A Robustly Optimized BERT Pretraining Approach · Issue #1329 · arXivTimes/arXivTimes](https://github.com/arXivTimes/arXivTimes/issues/1329)


## ALBERT
* 提案年：2019/9/26
* 提案者：Zhenzhong Lan<sup>1</sup>, Mingda Chen<sup>2</sup>, Sebastian Goodman<sup>1</sup>, Kevin Gimpel<sup>2</sup>, Piyush Sharma<sup>1</sup>, Radu Soricut<sup>1</sup>
* 提案者所属：<sup>1</sup>Google Research, <sup>2</sup>Toyota Technological Institute at Chicago
* 提案論文：[ALBERT: A Lite BERT for Self-supervised Learning of Language Representations](https://arxiv.org/abs/1909.11942)


~~[GLUE Benchmark](https://gluebenchmark.com/leaderboard/)における2019/10/10現在のSOTA。~~
BERTを改良して軽量化＆性能向上した。

## T5
* 提案年：2019/10/23
* 提案者：Colin Raffel<sup>1</sup>, Noam Shazeer<sup>1</sup>, Adam Roberts<sup>1</sup>, Katherine Lee<sup>1</sup>, Sharan Narang<sup>1</sup>, Michael Matena<sup>1</sup>, Yanqi Zhou<sup>1</sup>, Wei Li<sup>1</sup>, Peter J. Liu<sup>1</sup>
* 提案者所属：<sup>1</sup>Google
* 提案論文：[Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer](https://arxiv.org/abs/1910.10683)

Text-To-Text Transfer Transformer。
[GLUE Benchmark](https://gluebenchmark.com/leaderboard/)における2019/10/24現在のSOTA。

## MT-DNN-SMART

## ERNIE 2.0


# おわりに
新たに様々なモデルが登場し、高い性能を示しているのはわかりますが、「結局モデルがでかいだけじゃん」感が拭えない気もします。~~Word2Vec並みに軽量で、そこそこ高い性能を示すモデルが登場すれば爆発的に流行しそうですが、そっち方面の研究って無いんでしょうかね。~~とか言ってたらBERTの軽量版であるALBERTが出ました（それ以前にもBERTの軽量化や蒸留モデルはあったみたいです）。

まだそれぞれについてざっくりとしか理解できていないので、今後はそれぞれの論文をきちんと読み、記事に反映させていきたいと思います。
誤り、また他に押さえておくべきモデルがあればコメント頂けると幸いです。