Open yos1up opened 5 years ago
(Qiita の Markdown 形式です.整形してなくてすいません)
様々な自然言語処理タスクで BERT を上回る XLNet が 2019年6月に発表されました(論文).本記事では XLNet の技術的な解説を行います.
今回提案された XLNet は,与えられた文の各単語や文全体に対して良いベクトル化を与える「エンコーダ」を学習する,いわゆる「事前学習」の新しい手法にあたります.
事前学習のアプローチとしては,これまで主に「自己回帰型」と「自己符号化型」がありました.
「自己回帰的言語モデル」は,文(トークンの列) $[x_1, x_2, \ldots, x_T]$ が与えられた時「それがどの程度文らしいか」 $p([x_1, x_2, \ldots, x_T])$ を,以下のようにモデル化したものです.このモデルは,次のような確率分布の分解を考えます[^1]:
$$ p_\theta(x_1, x_2, \ldots, xT) = p\theta(x1)\cdot p\theta(x_2|x1)\cdot p\theta(x_3|x_1, x2)\cdot \cdots \cdot p\theta(x_T|x1, \ldots, x{T-1}). $$
上式の $\theta$ はモデルのパラメータです.実際の訓練データに対して,上式右辺の値がなるべく大きくなるように, $\theta$ を学習します.もう少しフォーマルに書くと,
$$ p{\theta}(\boldsymbol{x}) = \prod{t=1}^T p_{\theta}(xt | \boldsymbol{x}{< t}) $$
あるいは,その対数をとった
$$ \log p{\theta}(\boldsymbol{x}) = \sum{t=1}^T \log p_{\theta}(xt | \boldsymbol{x}{< t}) $$
を最適化(最大化)するような $\theta$ を見つけます.
一方, 自己符号化型の手法では,文の一部が任意にマスキングされたものが与えられた時に,マスクされた単語に関する事後確率をモデル化します.例えば, $[x_1, x_2, x_3, x_4, x_5]$ という文の $x_2$ と $x_4$ がマスキングされている場合,「マスク言語モデル」では,マスクされた $x_2, x_4$ に関する事後確率を以下のようにモデル化します[^2].
$$ p_\theta(x_2, x_4|x_1, x_3, x5) = p\theta(x_2 | x_1, x_3, x5) \cdot p\theta(x_4 | x_1, x_3, x_5). $$
マスクの位置を様々に変えた実際の訓練データに対して,上式右辺の値がなるべく大きくなるように,$\theta$ を学習します.
それぞれの方式には,一長一短があります.
自己回帰型のデメリット:
自己符号化型のデメリット:
著者らは,それらの両者を克服したモデルとして XLNet を提案しています.
著者らは,自己回帰型モデルの弱点である「決まった順番での依存関係」しか捉えづらい点を克服するため,「考えうる全ての順列に従った依存関係」を組み込んだ目的関数を提案しています:
$$ \text{maximize} \quad \mathbb{E}_{\boldsymbol{z} \sim \mathcal{Z}_T} [\sum{t=1}^T \log p{\theta}(x_{zt} | \boldsymbol{x}{\boldsymbol{z}_{< t}})]. $$
ただし $\mathcal{Z}_T$ は $[1, 2, \ldots, T]$ の要素を並べ替えて得られる $T!$ 通りのベクトルを含む集合です. $\mathbb{E}_{\boldsymbol{z} \sim \mathcal{Z}_T} [\cdots]$ というのは「$\mathcal{Z}_T$ に含まれる全ての順列 $\boldsymbol{z}$ にわたって $[\cdots]$ 内の値を考えたとき,それらの平均値」という意味です.(ただし,実際に $T!$ 通りの値の平均値を学習の毎ステップで計算するのは計算量的に非現実的なので,サンプリングで近似します.)
これだけ見ると,各単語が「自身が文の中のどのあたりに存在しているのか」という情報がシャッフルによって抜け落ちてしまうような気がしますが,実は心配ありません.なぜなら,各単語ベクトルにはあらかじめ「その単語の文中での位置」を表すベクトルがあらかじめ付与されるようになっているためです.つまり, Transformer や BERT でも用いられていた「位置符号化」(positional encoding) が最初に行われます.
つまり,Permutation Language Modeling の学習は,「自己回帰型モデルの学習を行うときに,毎入力ごとに,(各単語ベクトルに位置符号化を付与した直後に)順番をランダムシャッフルする」ことと等価になっているように思います.
ここからは,XLNet で用いられている「言語モデル」 $p{\theta}(x{zt} | \boldsymbol{x}{\boldsymbol{z}_{< t}})$ の内部構成に関する話です.
著者らは,多数の自然言語処理タスクにおいて,BERT よりも性能が改善したことを報告しています(詳細は論文を参照ください). ただし,ablation study の結果を見る限り,XLNet の一番の特徴である Permutation Language Modeling の寄与がどの程度かは,議論があるようです.(参考:Reddit)
著者実装が GitHub に公開されています.学習済みモデル "XLNet-Large" も公開されていますが,GPUやTPUが潤沢に存在する環境でないと動作させるのは厳しいかもしれません.近日中に,比較的触りやすいサイズの "XLNet-Base" モデルも公開予定と書かれています.
[^1]: この式は,いつでも成り立ちます.(モデルが同時分布に何か仮定を課している訳ではありません.)ただし,実際に最適化するときには「過去何単語見れるか」を有限にとって学習を行うので,例えば $p(x_1, x_2, x_3, x_4, x_5) = p(x_1)p(x_2 | x_1)p(x_3 | x_1, x_2)p(x_4 | x_2, x_3)p(x_5 | x_3, x_4)$ のようなモデル化をすることになります.この式はいつでも成り立つものではありません.すなわち,同時分布 $p(x_1, x_2, x_3, x_4, x_5)$ に「長さ 3 以上の依存関係がない」という仮定をおいていることになります.
[^2]: こちらの式は,いつでも成り立つものではありません. これは,一般に $p(x, y | z) = p(x | z) p(y | z)$ がいつでも成り立つとは限らないのと同じです.
[^4]: 正確には,BERT の学習で行われる「マスク単語予測タスク」「隣接文判定タスク」のうち,「マスク単語予測タスク」において最適化される loss(損失関数)が,マスク言語モデルの学習の loss と一致します.
(Qiita の Markdown 形式です.整形してなくてすいません)
様々な自然言語処理タスクで BERT を上回る XLNet が 2019年6月に発表されました(論文).本記事では XLNet の技術的な解説を行います.
背景
今回提案された XLNet は,与えられた文の各単語や文全体に対して良いベクトル化を与える「エンコーダ」を学習する,いわゆる「事前学習」の新しい手法にあたります.
事前学習のアプローチとしては,これまで主に「自己回帰型」と「自己符号化型」がありました.
「自己回帰的言語モデル」は,文(トークンの列) $[x_1, x_2, \ldots, x_T]$ が与えられた時「それがどの程度文らしいか」 $p([x_1, x_2, \ldots, x_T])$ を,以下のようにモデル化したものです.このモデルは,次のような確率分布の分解を考えます[^1]:
$$ p_\theta(x_1, x_2, \ldots, xT) = p\theta(x1)\cdot p\theta(x_2|x1)\cdot p\theta(x_3|x_1, x2)\cdot \cdots \cdot p\theta(x_T|x1, \ldots, x{T-1}). $$
上式の $\theta$ はモデルのパラメータです.実際の訓練データに対して,上式右辺の値がなるべく大きくなるように, $\theta$ を学習します.もう少しフォーマルに書くと,
$$ p{\theta}(\boldsymbol{x}) = \prod{t=1}^T p_{\theta}(xt | \boldsymbol{x}{< t}) $$
あるいは,その対数をとった
$$ \log p{\theta}(\boldsymbol{x}) = \sum{t=1}^T \log p_{\theta}(xt | \boldsymbol{x}{< t}) $$
を最適化(最大化)するような $\theta$ を見つけます.
一方, 自己符号化型の手法では,文の一部が任意にマスキングされたものが与えられた時に,マスクされた単語に関する事後確率をモデル化します.例えば, $[x_1, x_2, x_3, x_4, x_5]$ という文の $x_2$ と $x_4$ がマスキングされている場合,「マスク言語モデル」では,マスクされた $x_2, x_4$ に関する事後確率を以下のようにモデル化します[^2].
$$ p_\theta(x_2, x_4|x_1, x_3, x5) = p\theta(x_2 | x_1, x_3, x5) \cdot p\theta(x_4 | x_1, x_3, x_5). $$
マスクの位置を様々に変えた実際の訓練データに対して,上式右辺の値がなるべく大きくなるように,$\theta$ を学習します.
それぞれの方式には,一長一短があります.
自己回帰型のデメリット:
自己符号化型のデメリット:
著者らは,それらの両者を克服したモデルとして XLNet を提案しています.
モデル
Permutation Language Modeling
著者らは,自己回帰型モデルの弱点である「決まった順番での依存関係」しか捉えづらい点を克服するため,「考えうる全ての順列に従った依存関係」を組み込んだ目的関数を提案しています:
$$ \text{maximize} \quad \mathbb{E}_{\boldsymbol{z} \sim \mathcal{Z}_T} [\sum{t=1}^T \log p{\theta}(x_{zt} | \boldsymbol{x}{\boldsymbol{z}_{< t}})]. $$
ただし $\mathcal{Z}_T$ は $[1, 2, \ldots, T]$ の要素を並べ替えて得られる $T!$ 通りのベクトルを含む集合です. $\mathbb{E}_{\boldsymbol{z} \sim \mathcal{Z}_T} [\cdots]$ というのは「$\mathcal{Z}_T$ に含まれる全ての順列 $\boldsymbol{z}$ にわたって $[\cdots]$ 内の値を考えたとき,それらの平均値」という意味です.(ただし,実際に $T!$ 通りの値の平均値を学習の毎ステップで計算するのは計算量的に非現実的なので,サンプリングで近似します.)
これだけ見ると,各単語が「自身が文の中のどのあたりに存在しているのか」という情報がシャッフルによって抜け落ちてしまうような気がしますが,実は心配ありません.なぜなら,各単語ベクトルにはあらかじめ「その単語の文中での位置」を表すベクトルがあらかじめ付与されるようになっているためです.つまり, Transformer や BERT でも用いられていた「位置符号化」(positional encoding) が最初に行われます.
つまり,Permutation Language Modeling の学習は,「自己回帰型モデルの学習を行うときに,毎入力ごとに,(各単語ベクトルに位置符号化を付与した直後に)順番をランダムシャッフルする」ことと等価になっているように思います.
ここからは,XLNet で用いられている「言語モデル」 $p{\theta}(x{zt} | \boldsymbol{x}{\boldsymbol{z}_{< t}})$ の内部構成に関する話です.
Transformer-XL
Two-Stream Self-Attention
Transformer-XL のテクニックの利用
実験
著者らは,多数の自然言語処理タスクにおいて,BERT よりも性能が改善したことを報告しています(詳細は論文を参照ください). ただし,ablation study の結果を見る限り,XLNet の一番の特徴である Permutation Language Modeling の寄与がどの程度かは,議論があるようです.(参考:Reddit)
実装
著者実装が GitHub に公開されています.学習済みモデル "XLNet-Large" も公開されていますが,GPUやTPUが潤沢に存在する環境でないと動作させるのは厳しいかもしれません.近日中に,比較的触りやすいサイズの "XLNet-Base" モデルも公開予定と書かれています.
[^1]: この式は,いつでも成り立ちます.(モデルが同時分布に何か仮定を課している訳ではありません.)ただし,実際に最適化するときには「過去何単語見れるか」を有限にとって学習を行うので,例えば $p(x_1, x_2, x_3, x_4, x_5) = p(x_1)p(x_2 | x_1)p(x_3 | x_1, x_2)p(x_4 | x_2, x_3)p(x_5 | x_3, x_4)$ のようなモデル化をすることになります.この式はいつでも成り立つものではありません.すなわち,同時分布 $p(x_1, x_2, x_3, x_4, x_5)$ に「長さ 3 以上の依存関係がない」という仮定をおいていることになります.
[^2]: こちらの式は,いつでも成り立つものではありません. これは,一般に $p(x, y | z) = p(x | z) p(y | z)$ がいつでも成り立つとは限らないのと同じです.
[^4]: 正確には,BERT の学習で行われる「マスク単語予測タスク」「隣接文判定タスク」のうち,「マスク単語予測タスク」において最適化される loss(損失関数)が,マスク言語モデルの学習の loss と一致します.
ざっくり言うと
キーワード
1. 情報
論文リンク
著者
投稿日付
2. 先行研究と比べてどこがすごい?
3. 技術や手法のキモはどこ?
4. どうやって有効だと検証した?
5. 議論はある?
6. 次に読むべき論文は?
7. 実装の詳細
8. データセット
9. 結果の詳細
雑感&メモ