【初心者向け】自然言語処理界隈を盛り上げるアルゴリズム・モデルまとめ

# はじめに
最近の自然言語処理界の発展スピードがあまりにも早い。
Deep Learningの汎用化に伴い、自然言語処理界にもAIの波が押し寄せている。
直近で最も世間を騒がせたのはおそらくBERTという研究だと思われる。
・[【図解】BERTとは？Googleの新自然言語処理がどう影響するのか](https://satori.marketing/marketing-blog/seo/what-is-bert/)
・[Googleの検索エンジンに「過去5年で最大の飛躍」。新たな言語処理モデル「BERT」の秘密](https://wired.jp/2019/11/14/google-search-advancing-grade-reading/)
論文発表でもBERTを使ってこんなことができました、あんなことをやってみましたという内容が多いように思う。
しかし、すでにBERTを超える研究結果が報告されているのも事実で、BERTに負けるなと、世界中で盛んに研究が進んでいるようだ。
数多くの技術がでてきているが、一覧として紹介されている記事はあまり見られなかったので、ここに残す。

# BERT[2018年10月発表]
2018年にブレイクスルーをおこした最も有名な言語モデルの一つ。
Google AI Languageというチームが2018年に発表。単語や文字列を予測するという予測問題を解くことができるようになった。

* 論文：[BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding](https://research.google/pubs/pub47751/)
* Git：https://github.com/google-research/bert
* 何が凄いか：「マスクされた言語モデル」と「次文予測」が可能になった。
* 要するに：学校の穴埋め問題や、文脈を理解して次に来そうな文章を予測できるようになった。
* 公開されている日本語対応モデル
 * [BERT日本語Pretrainedモデル - KUROHASHI-CHU-MURAWAKI LAB](http://nlp.ist.i.kyoto-u.ac.jp/index.php?BERT%E6%97%A5%E6%9C%AC%E8%AA%9EPretrained%E3%83%A2%E3%83%87%E3%83%AB)
 * [Laboro.AI 日本語版BERTモデルを公開 | 株式会社Laboro.AI](https://github.com/laboroai/Laboro-BERT-Japanese)
 * [大規模日本語ビジネスニュースコーパスを学習したBERT事前学習済（MeCab利用）モデルの紹介](https://qiita.com/mkt3/items/3c1278339ff1bcc0187f)
 * [大規模日本語SNSコーパスによる文分散表現モデルの公開 : hottoSNS-BERTの配布](https://www.hottolink.co.jp/blog/20190311_101674/)
 * [BERT with SentencePiece を日本語 Wikipedia で学習してモデルを公開しました](https://yoheikikuta.github.io/bert-japanese/)

# Transformer-XL[2019年1月発表]
Transformer-XLのXLは「Extra Large」の略。その名のとおり、先行研究のTransformerと比較して長い文章を使用できる技術体系。
後述のXLNetはTransformer-XLを使っているので、大きい入力長にも対応できる。
BERTもTransformer-XLにより、より長文の依存関係理解ができるようになる可能性がある。

* 論文：[Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context](https://arxiv.org/abs/1901.02860)
* Git：https://github.com/kimiyoung/transformer-xl
* 何が凄いか：「セグメントレベルの再帰」と「相対位置符号化」
* 要するに：より長いコンテキストを扱えるようになった。
* * 参考
 * [RoBERTa（論文の詳細③ Training Procedure Analysis）｜言語処理へのDeepLearningの導入の研究トレンドを俯瞰する](https://lib-arts.hatenablog.com/entry/nlp_dl16)  

# XLNet[2019年6月]
BERTを超える新しい事前学習モデルとして話題を呼んだが、知名度的にはBERTのほうが上？
BERTの弱点として長文に対応していないのと、マスクした文字同士の依存関係を考えられないという弱点があった。
XL-NetはTransformer-XLを使用しているため、長文を扱えるようになっているのと、単語予測順序をランダムに入れ替え、マスクした文字同士の依存関係をも解決した。

* 論文：[XLNet: Generalized Autoregressive Pretraining for Language Understanding
](https://arxiv.org/abs/1906.08237)
* Git：https://github.com/zihangdai/xlnet
* 何が凄いか：BERTを超えるタスク処理能力
* 要するに：タスクと解く際、BERTよりも精度が上がり、長文にも対応できるようになった
* 参考
 * [Transformer-XL：Attentionモデルの可能性を解き放つ
](https://webbigdata.jp/ai/post-2729)

# RoBERTa[2019年7月]
BERTが発表されて以降、XLNetなど改良版が提案されています。
RoBERTaは本家BERTの潜在能力をさらに使うために学習方法を工夫した手法。
（ドラゴンボールの戦いみたいになってきた・・・）
XLNetもRoBERTaも長文を扱ったり、ランダムでマスクをおこなうため、言語モデルの学習に時間がかかるという弱点があります。（GPU1台で数か月）

* 論文：[RoBERTa: A Robustly Optimized BERT Pretraining Approach
](https://arxiv.org/abs/1907.11692)
* Git：https://github.com/pytorch/fairseq/tree/master/examples/roberta
* 何が凄いか：予測精度はBERTを超え、XLNetも超えた（ただし、そのあとXLNetがRoBERTaを参考に学習をした結果RoBERTaの精度を上回ったと報告）
* 要するに：BERTを改良したというより、学習方法を最適化した
* 公開されている日本語対応モデル
 * 見つけられず
* 参考
 * [RoBERTa（論文の詳細③ Training Procedure Analysis）｜言語処理へのDeepLearningの導入の研究トレンドを俯瞰する](https://lib-arts.hatenablog.com/entry/nlp_dl16)  
 
# ALBERT[2018年10月]
XLNetやRoBERTaで言われているように、事前学習時のモデルを大きくすればするほど、精度は上がるが、逆に精度が下がる場合もありうる。この論文のメインは精度向上ではなく、モデルサイズを圧縮するところにある。ただし、推論時の速度改善はあまり見られない？

* 論文：[BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
](https://arxiv.org/abs/1810.04805)
* Git：https://github.com/google-research/albert
* 何が凄いか：ALBERTではBERTを軽量し、さらに学習を高速化させた
* 要するに：軽量・高速・高精度というモデルを実現した
* 参考
 * [BERTの軽量版，ALBERTとは？
](https://qiita.com/IwasakiYuuki/items/01333a4e4766f5ebcd28)  

# T5(Text-to-Text Transfer Transformer)[2019年10月発表]
GoogleAIチームが発表した論文だが、新しい特別な手法を公開したわけではない。
T5という入力と出力のテキストフォーマットを統一して、転移学習をおこなうモデルのこと。C4というデータセットを使って、様々なアプローチの仕方をされている自然言語処理の研究を比較検討している。
結果的に自然言語処理モデルに関しては以下の方法が高精度であるとしている。
> モデル構造：一般的に、デコーダーのみのモデルよりもエンコーダー・デコーダーモデルのほうが性能が高い。
事前学習の目標：ブランクのある不完全な文章を用いた穴埋め形式の学習が、計算コストの面で最もパフォーマンスが高い。
未ラベルデータセット：小さなデータセットによる事前学習は有害な過剰適合につながる可能性がある。
学習戦略：マルチタスク学習はそれぞれのタスクを学習させる頻度を慎重に検討する必要がある。
規模：事前学習に使うモデルの大きさ、学習にかける時間、アンサンブル学習に利用するモデルの数を比較し、限られた計算リソースを最も効率よく使用する方法を決める。

* 論文：[Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
](https://arxiv.org/abs/1910.10683)
* GoogleAIチームによる解説（英語）：[Exploring Transfer Learning with T5: the Text-To-Text Transfer Transformer](https://ai.googleblog.com/2020/02/exploring-transfer-learning-with-t5.html)
* Git：https://github.com/google-research/text-to-text-transfer-transformer
* 何が凄いか：C4というGoogleが開発したデータセットを利用。（ノイズなどがない、高品質なデータセット）
* 要するに：T5を利用した結果、「未知の質問」に対する回答ができることと、単語ではなく、文章レベルでの穴埋め問題を解決できるようになったこと？
* 参考
 * [Googleが発表した自然言語処理モデルText-to-Text Transfer Transformer（T5）とは？
](https://www.acceluniverse.com/blog/developers/2020/03/Text-to-Text-Transfer-Transformer.html)  
 * [Googleの新たな自然言語処理AI「T5」の特徴とは？実際にAIとクイズで対決も可能
](https://gigazine.net/news/20200225-google-ai-t5/)  

# ERNIE[2019年11月]
中国の検索エンジンのBaidu（百度）が発表した自然言語処理フレームワーク。
BERTやXLNetで用いられる手法とは別のアプローチがされている。
これは中国語における言語処理の問題点を克服する意味で発表されたと思われる。

* 論文：[Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer
](https://arxiv.org/abs/1910.10683)
* 発表原文:[Baidu Open-Sources ERNIE 2.0, Beats BERT in Natural Language Processing Tasks
](https://www.infoq.com/news/2019/08/Baidu-OpenSources-ERNIE/)
* Git：https://github.com/PaddlePaddle/ERNIE
* 何が凄いか：BERTやXLNetで用いられた学習用フレームワークではなく、別手法（継続的事前トレーニングフレームワーク）を提案して、BERTやXLNetの精度を超えたこと。
* 要するに：BERTが中国語を処理する上で問題があったため、それを克服するためのアプローチを提案した。
* 参考
 * [BERTに続け、バイドゥが発表した中国語における問題に対処したERNIEとは？
](https://ai-scholar.tech/articles/text-mining/ernie-baidu-ai-105)  
 * [BaiduがERNIE 2.0をオープンソース公開、自然言語処理タスクでBERTを上回る
](https://www.infoq.com/jp/news/2019/09/Baidu-OpenSources-ERNIE/)  

# Reformer[2020年2月]
長文処理をおこなうTransformerの改良版。
BERTもXLNetもTransformerが使われているが長文の処理はどちらも時間がかかった。ReformerはTransformerに比べてメモリの使用量が少なく、精度への悪影響は見られないということ。

* 論文：[Reformer: The Efficient Transformer](https://arxiv.org/abs/2001.04451)
](https://www.infoq.com/news/2019/08/Baidu-OpenSources-ERNIE/)
* Git：https://github.com/lucidrains/reformer-pytorch
* 何が凄いか：Transformerモデルのメモリ消費量を減少させることができた。
* 要するに：BERTやXLNetの必要メモリ量の減少が見込まれる
* 参考
 * [Reformerを理解する](https://data-analytics.fun/2020/06/17/understanding-reformer/)  
 * [【論文】"Reformer: The Efficient Transformer"の解説](https://www.acceluniverse.com/blog/developers/2020/02/reformer-the-efficient-transformer.html)  

# 最後に
初心者向けとして書いていたが、まだまだ自分が論文を読み込めていないので簡単な言葉に言い直すことができなかった。今回はざっくりとして紹介になりましたが、参考資料としてリンクを貼らせてもらったサイトにより細かい論文の解説がなされているため、詳細を知りたい方はそちらをご参照いただければ。
自然言語処理の流れを見ていると、BERTで盛り上がっていた、「単語の穴埋め問題」や「文章予測」からすでに進んでおり、長文予測、文章レベルでの穴埋めに業界がシフトしていることがわかる。
現実問題メモリの使用量などの問題から、個人がおこなうにはまだまだ難しそうだと感じた。研究機関や巨大企業しか研究できないというのはAIの民主化、技術の民主化のためにも望まれるものではない。最後のReformerのような研究が今後増えてくるのではないかと予想される。