自然言語処理(NLP)は、人間の言語をコンピュータが理解・生成するための技術です。Transformerはその分野において画期的なアーキテクチャとして登場し、多くのNLPタスクで大きな成功を収めています。今回はTransformerの自然言語処理における仕組みについて解説していきたいと思います。
Contents
Transformer概要
言語処理の歴史
以前の言語処理モデルはCNNやRNNを利用したものが多く、文章を頭から順に処理していく逐次実行形式をとっているため、文章量に応じてかなりの処理時間がかかる上に離れた単語同士の依存関係を把握できないという問題がありました。
Attention
近年の自然言語処理(NLP)にはAttentionという仕組みが使われています。
Attentionは重要な情報にのみ注目する手法です。
例を用いて説明します。図は日本語の文章を英語に変換する場合を想定しています。
Attentionでは文全体やその並び順に注目するのではなく、重要な単語に対して注目して処理することで上記の問題を解決しています。文章がどれほど長くても重要な部分に注目することで処理しているため、必要な時間が短く、依存関係を適切に把握できるわけです。
Transformerの仕組み
Transformerは図のように入力を解析するエンコーダ部分と出力を生成するデコーダ部分から成ります。
図では簡略化して書いていますがエンコーダやデコーダは通常複数積み重ねて使用されます。
入力
トークン化
Transformer入力された文章はattention機構でも説明したようにトークンに分解されます。
エンベディング
各トークンは数値的に処理できるように高次元のベクトルに変換されます。
例 king=[0.8,0.2,0.1,0.4,…] queen=[0.7,0.3,0.2,0.5,…] man=[0.5,0.1,0.6,0.7,…] woman=[0.6,0.2,0.5,0.8,…]
位置エンコーディング
位置エンコーディングは各トークンの位置を表すベクトルを計算することで文章のトークンの順番に関する情報をベクトルとして表します。
エンコーダに入力されるもの
エンコーダにはエンコーディングと位置エンコーディングの和が入力されます。そうすることで単語や文章での位置を表現したベクトルが生成できるわけです。
エンコーダ仕組み
TransformerのエンコーダはMulti-head-attention機構とPosition-wise Feed-Forward Networks(FFNN)という2層から成ります。
Multi-head-attention機構とは
Multi-head-attention機構はSingle-head-attention機構と呼ばれる機能を並列に複数積んだものです。
まずはSingle-head-attention機構について説明します。
Single-head-attention機構
Single-head-attention機構ではSelf-attentionと呼ばれる手法で単語間の関連性を計算します。
Self-attentionは1つの単語に対して他のすべての単語との関連度を計算する手法のことです。
図の例では私というトークンに対して各トークンの関連度を数値化しています。数値が大きい程関連度が高いことを表します。
これらの計算は、クエリとよばれる探したいもしくは関連性を調べたい単語のベクトルと検索元である文章から生成されるキーとバリューの内積によって求めることができます。
Single-head-attention機構では各トークンに対してこの処理を行いすべてのトークン間の関連度を明らかにします。
Multi-head-attention機構は複数のSingle-head-attention機構を組み合わせることによりより正確に文章における単語間の関連性を把握できるようになります。各Single-head-attentionは異なる重みを使用するため、さまざまな観点からトークン間の関係を分析できるためより正確に処理できるわけです。
Position-wise Feed-Forward Networks(FFNN)
入力として各トークンに関する関連度を受け取りMLPと同様に順伝搬を行います。この処理によってより複雑な関係が学習可能になります。
デコーダの仕組み
Transformerのデコーダはself-attention機構とEncder-Decoder attention機構とPosition-wise Feed-Forward Networks(FFNN)から成ります。
Masked-Multi-head-attention機構
デコーダにおけるMasked-Multi-head-attention機構はデコーダが今までに生成したシーケンスとの単語の関連性を計算します。ここでもエンコーダ同様に複数のSingle-head-attention機構を組み合わせて使用しています。
図のように過去に生成したトークンと先ほど生成したトークンの関連度を計算します。
この計算にもキューとキーとバリューが使用されています。
Encoder-Decoder Attention機構
エンコーダから受け取った入力とデコーダのMasked-Multi-head-attention機構からの出力を組み合わせて生成すべき次の単語を予想します。エンコーダの入力は各トークン間の関連性でした。デコーダは現在の出力状態を表しています。入力の単語間の関係と現在の出力の状態から次に生成すべき単語を予想します。
ここでもキューとキーとバリューを設定することで次に生成すべき単語を計算しています。
Position-wise Feed-Forward Networks(FFNN)(デコーダ用)
デコーダのFFNNは生成されたベクトルを入力すると次に生成すべき単語に関する確率分布が出力されます。基本的には最も確率の高い単語が選択され生成されます。生成後はまたMasked-Multi-head-attention機構から始まります。
まとめ
今回はTransformerの仕組みについて生成過程にフォーカスを当て解説しました。この仕組みは言語処理だけでなく画像処理にも応用されています。気になる方は是非調べてみてください。