BERTはすごい!
というイメージしかなかったので、
この文を読んだときは、椅子から転げ落ちそうになった。
BERTは文章を前から順番に作成するという、自然言語処理でよくある文書生成は得意ではありません。
というのだ。
その理由は、
事前学習にRNNやGPTのように文章を前から予測する方法を使わず、文章のうちごく一部のトークンのみを[MASK]に置き換えて、周りの文脈からもとのトークンを予測するというタスクを用いているから。
だという。
じゃあ、なぜそんな方法を使っているのかというと、
精度を高めるために、前からだけではなく後ろからも学習できるように(双方向)、マスクをした部分の単語を予測する「Masked Language Model 」を使用している
からだ。
この方法で精度の高いNLPモデルになっているのだが、
苦手な分野も生み出したということだ。
で、このしくみは
Transformersでは、クラス「BertForMaskedLM」として提供されており、
以降、これを使って文章の穴埋めを行う。
作業は、
掲載されたコードに従って、
BertForMaskedLMの実装を行うだけなのだが、
のは、初耳だった(*1)。
*1 GELU関数の数式を書くために「LATEX2ε 美文書作成入門改訂第8版」を購入したのだが、それはまた後日。
最初、
Relu関数の誤植?
と失礼なことを思ったくらいだ。
本章を読み進めると、
最後に、不得意といわれた複数の[MASK]を埋めるタスクにトライしている。
まずは、
貪欲法(Greedy Prediction)というアルゴリズムで
前から順番にトライ(*2)
Wikipedia解説の最後にある通り、
一度選択した要素を再考することはないので
合計スコアが高いものが出力される保証はありません。
ということで、次に、
ビームサーチ
という手法が紹介されている。
この方法でも、
[MASK]が多い場合には自然な文章は出力されず、
セミナーで著者が指摘したように、
GPT-3との使い分けが必要
ということになる。(続く)