Transformer model
attention
https://www.youtube.com/watch?v=iYC8eZL2kKw&t=117s&ab_channel=Qwiklabs-Courses
AttentionとRNNとの違い
翻訳を例に。
Encoding stageで、
RNNは1単語づつ処理して最後のhidden stateをDecoding stageに渡す。
Attention modelはHidden stateを全部渡す。
Decoder stage(次単語予測)で追加措置がある
hidden stateが複数来てるので、それぞれにscoreをつけて、softmaxだけhidden stateに重みを書けて 最終的になscore vectorにする。
それが attention score?
それを使って、encoder側に(単語?)対応するものに、context vectorとして与える?
decoder側で文の終わりトークンが出力されたら終わり。
さて、ここでTransformer/Attentionについて理解を深める上で重要な主辞(しゅじ、Head: ヘッド)という概念にふれておきたいと思います。
「文の一部(=句)において、代表となる語」に付加情報として修飾語句の情報を加えていき(空きスロットに値を埋めていく)、そしてそれを再帰的に入れ子にしていく、という感じで「主語と述語をリッチに,,,主辞駆動句構造文法... このときの文の各部分の句における「代表となる語」のことを「主辞(Head)」と呼びます
この主辞と呼ばれるデータ構造、あたかもデータベースのレコードに設けられたスロットに値を埋めていくように用いるこの構造のことを「素性構造(そせいこうぞう)」と呼びます。
RNNは順次にデータを入力し処理するが長い文章を入力すると最初の方の文章について”忘れてしまい”、文章全体の理解は難しい。
目はあるパーツを見ている時に共に周囲の関連する画像部位を"低解像度"で見ることで、画像全体の理解を図る。
RNNをベースとした構造からTransformerではAttention(正確にはSelf-Attention)をベースとした構造に進化した
Self-Attentionは入力ベクトルのみから出力を並列計算で導出可能で計算依存性がなく
そこで収集した文章にわざと穴あきを作り、その穴あきに何が入るかモデルを当てさせモデルを学習する
このような学習方法(教師なし学習)により、文章データさえあれば 学習データをほぼ無尽蔵に生成できる 。
Transformerは各語に、すべてのほかの語との関連性をスコア(得点)で与える
以下のYoutubeでの解説がわかりやすい
https://www.youtube.com/watch?v=BcNZRiO0_AE
transformerは、
複数のencoder, decorderから成る
self attention
入力文字列の中の単語同士の関係性(出現位置, 他にも?), 最後に線形変換して、行列として表現
単語ではなく、入力文字列を別系列の出力文字列に変換してる。
利用例
日本語で利用可能なライブラリ