最終更新日:
Transformer以前に自然言語処理で使われていたモデルは、リカレントニューラルネットワーク(Recurrent Neural Network:RNN)でした。このモデルには長い文章を正しく処理するのが難しい、勾配消失問題の影響を受けやすい、そして処理の並列化が難しいためにモデルの大規模化が困難、というみっつの欠点があったため、自然言語処理では画像認識ほど大きな成果が上がっていませんでした。
こうしたなか、2017年に発表されたTransformerを論じた論文『必要なすべてはAttention』では、同モデルを使ってRNNの欠点を克服するアイデアが披露されました。そのアイデアは、以下のような3項目に要約できます。
- ポジショナル・エンコーディング:単語の位置を単語に情報として付加することによって、順次処理から脱却するアイデア。
- Attention(注意):順次処理を廃して考案された入力文字列と出力文字列の対応関係を学習する方法。
- Self-Attention(自己注意):入力文字列自体をAttentionの対象とすることによって、入力文字列の言語的構造を学習する方法。学習された言語的構造を使えば、さまざまな言語タスクが実行できるようになる。
2017年の前出論文の発表以降、Transformerを応用・発展させてGoogle検索にも使われているBERT、さらには音楽生成、テキストからの画像生成、タンパク質構造の予測といった言語タスク以外にも使われるさまざまなモデルが次々と開発されました。
最近では、画像認識においても「畳み込みニューラルネットワーク(Convolutional Neural Networks)」ではなく、Transformerを使う研究も進んでおり(AINOW翻訳記事『【GoogleAIリサーチブログ記事】大規模画像認識のためのTransformers』を参照)、TransformerはAIモデル全般の基礎的技術になりつつあります。
なお、以下の記事本文はDale Markowitz氏に直接コンタクトをとり、翻訳許可を頂いたうえで翻訳したものです。また、翻訳記事の内容は同氏の見解であり、特定の国や地域ならび組織や団体を代表するものではなく、翻訳者およびAINOW編集部の主義主張を表明したものでもありません。
目次
前書き
「ハンマーがあれば、すべてが釘のように見える」という表現を知っているだろうか(※訳註1)。機械学習の分野では、すべてが釘に見える魔法のハンマーが発見されたようだ。それはTransformerと呼ばれるものである。Transformerは、テキストを翻訳したり、詩やop ed(対論社説)を書いたり、コンピュータコードを生成したりするように設計されたモデルだ。実際、私が(自身が運営するブログである)daleonai.comで紹介している遺伝子配列からタンパク質の構造を予測するモデルであるAlphaFold 2や、GPT-3、BERT、T5、Switch、Meenaなどの強力な自然言語処理(NLP)モデルなど素晴らしい研究の多くは、Transformerの上に構築されている。Transformerベースのモデルはもっとたくさん…いや、この指摘は忘れてください。
機械学習、特にNLPの分野で流行に乗り遅れないようにするには、Transformerについて少なくとも少しは知っておく必要がある。そこでこの記事では、Transformerとは何か、どのように機能するのか、そしてなぜこれほどまでに影響力があるのかについて話したいと思う。
Transformerは、ニューラルネットワーク・アーキテクチャの一種だ。そして、ニューラルネットとは、画像、動画、音声、テキストなどの複雑なデータを分析するのに非常に有効なモデルである。しかし、データの種類によって使うのに最適なニューラルネットワークの種類は異なる。例えば、画像を分析する場合、一般的には「畳み込みニューラルネットワーク(Convolutional Neural Networks)」(CNN)を使用する。CNNは、人間の脳が視覚情報を処理する方法を漠然と模倣している。
こうしたなか2012年頃から、画像の中のオブジェクトを識別したり、顔を認識したり、手書きの数字を読み取ったりするような視覚的問題をCNNで解決することにかなり成功してきた。しかし、(翻訳、テキスト要約、テキスト生成、固有表現抽出(※訳註2)などの)言語的問題については、長い間、CNNの汎用性に匹敵するようなモデルが存在しなかった。言語は人間の主要なコミュニケーション手段であるため、汎用的モデルの不在は残念なことであった。
2017年にTransformerが登場する前は、ディープラーニングを使ってテキストを理解する方法として、リカレントニューラルネットワーク(Recurrent Neural Network:RNN)と呼ばれる、以下のようなタイプのモデルを使っていた。
例えば、文章を英語からフランス語に翻訳したいとしよう。RNNは、英語の文章を入力とし、単語を1つずつ処理して、順次、フランス語で対応する単語を吐き出す。こうした処理におけるキーワードは「順次(sequential:シーケンシャル)」という言葉だ。言語では、単語の順番が重要であり、安易に並べ替えられない。例えば、以下の文章の語順について考えてみよう。
「ジェーンはわざわざ危険を犯した。(Jane went looking for trouble.)」
は、語順を変えた以下の文章とは全く違う意味になる。
「トラブルがジェーンを探していた。(Trouble went looking for Jane.)」
そんなわけで言語を理解するためのモデルは、語順を把握しなければならない。リカレントニューラルネットワークは、1つの単語を順番に処理することで語順を考慮した処理を実現した。
しかし、RNNには問題があった。まず、長いパラグラフやエッセイなどのような大きなテキストの列を扱うのが苦手だった。RNNは、段落の最後まで行くと、最初に起こったことを忘れてしまう。例えば、RNNベースの翻訳モデルは、長いパラグラフの主語の性別を覚えておこうとすると問題が生じる。
さらに悪いことに、RNNを訓練するのは大変だった。RNNは、いわゆる「勾配消失問題」(※訳註3)の影響を受けやすいことで知られていた(時には訓練を再開したら、結果に関しては祈るしかない場合もあった)。さらに問題なのは、RNNは単語を順に処理するため、並列化が困難なのだ。それゆえ、GPUの数を増やすことで学習を高速化できず、大量のデータを使った学習もできなった。
Transformerの登場
RNNが行き詰っていたところで登場したTransformerがすべてを変えた。このモデルは2017年にGoogleとトロント大学の研究者によって開発されたもので、当初は翻訳のために設計されていた。しかし、Transformerはリカレントニューラルネットワークとは異なり、非常に効率的に並列化できた。つまり、適切なハードウェアがあれば、非常に大きなモデルを訓練できるのだ。
大きいと言っても、どのくらいまでなのか。
まさにもっと大きくだ。
GPT-3は、人間と同じように文章を書ける非常に印象的なテキスト生成モデルなのだが、公開されているほぼすべてのウェブの情報を含む約45TBのテキストデータで訓練した。
Transformerに関して覚えておくべきことがあるとすれば、それは「十分に大きなスケールのモデルと膨大なデータセットを組み合わせれば、そこから生じる結果には驚かされるでだろう」ということだ。
Transformerはどのように動くのか
Transformerを発表した元の論文に掲載された以上の図は少し怖いものだが、その革新性は3つの主要なコンセプトに集約される。
- ポジショナル・エンコーディング(位置情報のエンコーディング)
- Attention(アテンション:注意)
- Self-Attention(セルフアテンション:自己注意)
ポジショナル・エンコーディング(位置情報のエンコーディング)
最初に位置情報の符号化について説明しよう。例えば、英語のテキストをフランス語に翻訳しようとしているとする。旧来の翻訳方法であるRNNは、単語を順に処理することで語順を理解していたことを思い出そう。しかし、こうした順次処理が並列化しにくい原因にもなっていた。
Transformerでは、「ポジショナル・エンコーディング」と呼ばれる革新的な方法でRNNが超えられなかった障壁を回避している。その方法は、入力シーケンス(ここでは英語の文章)に含まれるすべての単語を取り上げ、各単語にその順番に応じた番号を付けるというものである。つまり、次のようなシーケンスをネットワークに渡すのだ。
[(“Dale”, 1), (“says”, 2), (“hello”, 3), (“world”, 4)]
概念的には、単語の順番を理解するための負担を、ニューラルネットワークの構造からデータそのものに移したと考えられる。
Transformerが何らかのデータで学習していない最初の段階では、以上のようなポジショナル・エンコーディングをどのように解釈してよいかわからない。しかし、文章とそのエンコーディングの例を数多く目にするほど、モデルはそれらを効果的に利用する方法を学ぶ。
ここまでの解説では、ポジショナル・エンコーディングを少し単純化し過ぎた。原著者は、位置の符号化にサイン関数を使用しており、単純な整数である1、2、3、4ではないのだが、概念を理解するためのポイントは同じである(※訳註4)。語順を構造ではなくデータとして保存することで、ニューラルネットワークの学習が容易になるのだ。
論文「Attention is All You Need」より数式を引用
Attention(アテンション:注意)
続いて解説するのは、Transformerの重要な箇所であるAttentionと呼ばれるものだ。
Attentionがそんなに重要なの?
Attentionは、最近の機械学習の研究においてあちこちで耳にするニューラルネットワークの構造である。実際、Transformerを発表した2017年の論文のタイトルは『We Present You the Transformer(Transformerを発表する)』ではなかった。その代わりに『Attention is All You Need(必要な全てはAttention)』というタイトルだった。
Attention自体は、Transformer発表の2年前の2015年における翻訳の文脈で発表されていた。そのアイデアを理解するために、原著論文が挙げている以下の例文を見てみよう。
The agreement on the European Economic Area was signed in August 1992.
(1992年8月、欧州経済領域に関する協定が締結された。)
さて、この文章をフランス語に訳してみよう。
L’accord sur la zone économique européenne a été signé en août 1992.
この文章を翻訳しようとする場合、英語の文章の中の単語を1つずつ調べて、それに相当するフランス語を吐き出そうとするのが上手くないやり方のひとつだ。英語では 「European Economic Area」だが、フランス語では 「la zone économique européenne 」というように、いくつかの単語が入れ替わっている。また、フランス語は性別を表す言葉がある言語だ。形容詞の 「économique」と 「européenne」は、女性の目的語である 「la zone」に合わせて、女性形にしなければならない(※訳註5)。
Attentionとは、テキストモデルが出力文中の単語をどのように翻訳するかを決定する際に、原文中のすべての単語を「見る」ことを可能にするメカニズムである。以下の図は、出典論文から引用したAttentionに関する素敵なビジュアライゼーションだ。
以上の図はヒートマップのようなもので、フランス語の文章中の各単語を出力する際に、モデルがどこに「注意(attending)」しているかを示している。ご想像のとおり、モデルが「européenne」という単語を出力したとき、英語の入力文における「European」と「Economic」の両方に大きく注目していることがわかる。
それではモデルはどのようにして、各タイムステップでどの単語を「注意」すべきかを知るのだろうか。その答えは、学習データから得るのだ。何千ものフランス語と英語の例文を見ることで、モデルはどのような種類の単語が相互に依存しているかを学習する。また、性別や複数形など、文法上のルールをどのように守るかも学習する。
Attentionメカニズムは、2015年に発見されて以来、自然言語処理にとって非常に有用なツールとなったが、その原形ではリカレントニューラルネットワークと一緒に使われていた。それゆえ、2017年のTransformer論文の革新性は、RNNを完全に捨て去ることにあった。だからこそ、2017年の論文は “Attention is all you need “と題されたのである。
Self-Attention(セルフアテンション:自己注意)
Transformerの最後の(そしておそらく最もインパクトのある)論点は、「Self-Attention(自己注意)」と呼ばれるAttentionの応用だ。
先述した(応用される本来的な)「バニラ」なAttention(※訳註6)は、英語とフランス語の文の間で単語の対応関係を揃えるのに役立ち、このメカニズムは翻訳にとって重要である。しかし、単語を翻訳するのではなく、その代わりに言語の意味や定型を理解するモデル、さらにはどんな言語的タスクの実行にも使えるようなモデルを構築しようとしたらどうなるだろうか。
一般的に、ニューラルネットワークがパワフルかつエキサイティングでクールでもある理由は、学習されたデータのなかに有意味な内部表現を自動的に構築することにある。例えば、視覚的ニューラルネットワークの層を調べてみると、エッジや形状、さらには目や口などの高レベルの構造を「認識」するニューロンのセットが見つかる。テキストデータで学習したモデルは、品詞や文法のルール、どの単語が同義語にあたるかを自動的に学習する。
ニューラルネットワークが学習する言語の内部表現が優れていればいるほど、どんな言語タスクもうまくこなせるようになる。そして、入力テキストそのものにAttention(注意)を向ければ、Attentionこそが入力テキストの内部構造を非常に効率的に学習する方法となる。
例えば、この2つの文章を見てみよう。
「給仕さん、お勘定をお願いします」(Server, can I have the check?)
「サーバをクラッシュさせてしまったようだ」(Looks like I just crashed the server.)
以上のServerという言葉は2つの全く異なる意味を持っているが、人間は周囲の言葉を見ることで簡単にその意味を判別できる。Self-Attentionにより、ニューラルネットワークは、ある単語をその周りにある単語の文脈に沿って理解できる。
つまり、モデルが最初の文の「Server」という単語を処理するとき、「check(お勘定)」という単語に「注意(attending)」することで、人間の給仕と金属のサーバを区別できるのだ。
2番目の文では、モデルは 「crashed 」という単語に注目して、この 「server」がマシンを指していると判断するかも知れない。
Self-Attentionは、ニューラルネットワークによる単語の曖昧さの解消、品詞のタグ付け、固有表現の解決、意味的な役割の学習などに役立つ。
以上の解説がTransformerを10,000フィートに要約して説明したものだ。
より深い技術的な説明が必要な場合は、Jay Alammar氏のブログ記事「Transformer図解」をチェックすることを強くおすすめする。
Transformerは何ができるのか
最も人気のあるTransformerベースのモデルのひとつに、「Bidirectional Encoder Representations from Transformers」の略であるBERTというものがある。これは、私がGoogleに入社した2018年頃に同社の研究者によって導入され、すぐにGoogle検索をはじめとするほぼすべてのNLPプロジェクトに使われるようになった(※訳註7)。
BERTはモデルのアーキテクチャではなく、学習済みのモデルそのものを指しており、こちらから無料でダウンロードして使用できる。このモデルは、Googleの研究者が膨大なテキストコーパスを使って学習したもので、NLPの汎用ポケットナイフのようなものになっている。BERTを拡張することで、以下のような様々なタスクを解決できる。
– テキストの要約
– 質疑応答
– 分類
– 固有表現の解決
– テキストの類似性
– 攻撃的/あるいは冒とく的なメッセージの検出
– ユーザークエリの理解
– その他いろいろ
BERTは、WikipediaやRedditから取得したテキストのようなラベルのないデータを使って、非常に優れた言語モデルを構築できることを証明した。また、これらの大規模な「ベース」モデルは、ドメイン固有のデータを使って多くのさまざまなユースケースに適合させられる。
さらに最近ではOpenAI社が開発したGPT-3というモデルが、リアルなテキストを生成する能力で人々の度肝を抜いた。Google Researchが昨年発表したMeenaは、Transformerをベースにしたチャットボット(つまりは「会話エージェント」)で、ほとんどすべてのトピックについて説得力のある会話ができる(筆者はかつて、Meenaと「人間とは何か」について20分ほど議論したことがある)。
TransformerはNLP以外にも、音楽の作曲、テキストの記述からの画像の生成、タンパク質の構造の予測など様々な分野で活躍している(※訳註8)。
Transformerはどのように使えるのか
Transformerの魅力がわかったところで、自分のアプリでTransformerを使うにはどうすればいいのか知りたいと思わないだろうか。大丈夫、問題ない。
BERTのような一般的なTransformerベースのモデルは、TensorFlow Hubからダウンロードできる。コードチュートリアルについては、セマンティック言語で動くアプリの構築について私が書いたものをご覧頂きたい(※訳註9)。
しかし、もしあなたが本当に最先端に触れたくてPythonでコーディングするのであれば、HuggingFace社が管理する人気の「Transformers」ライブラリを強くおすすめする。このプラットフォームでは、BERT、Roberta、T5、GPT-2など、現在人気のあるNLPモデルのほとんどを、開発者が使いやすい方法で学習・使用できる。
自然言語処理を応用したアプリ開発で重要になるのが、単語や文章を数値的に処理できる情報に変換するプロセスである。こうしたプロセスを実行する技法として有名なのが、単語をベクトルで表現する埋め込み(embedding)である。こうした埋め込みをGoogleスプレットシートを使って簡単に作成できるツールがSemantic Reactorである。同ツールを使って埋め込みを作成した後、その情報をTensorflow.jsによって読み込めば、簡単に言語タスクを実行するアプリのプロトタイプが開発できる。Markowitz氏は、開発事例としてプレイヤーがキツネと対話するゲームのシーンを紹介している。
以上、Transformerの解説でした。
この記事の初期のドラフトをレビューしてくださったLuiz/Gus Gustavo氏、Karl Weinmeister氏、Alex Ku氏に多大な感謝を表します。
・・・
原文は2021年5月6日にhttps://daleonai.comで公開されました。
原文
『Transformers, Explained: Understand the Model Behind GPT-3, BERT, and T5』
著者
Dale Markowitz
翻訳
吉本幸記(フリーライター、JDLA Deep Learning for GENERAL 2019 #1取得)
編集
おざけん