Pretrained language modelsを理解する
はじめに
少し前に「A Review of the Neural History of Natural Language Processing」というまとめ記事を見ました。
blog.aylien.com
自然言語処理の発展の歴史みたいなもので、近年のブレイクスルーをまとめてくれています。
2018年の注目はELMo
に代表される「Pretrained language models」の発展であり、これによりSOTAを達成したとの論文が挙がっています。
ELMoはこちらで分かりやすく解説されています。
kamujun.hatenablog.com
ここでは、自分なりに「Pretrained language models」をまとめようと思います。
Language Model(言語モデル)
言語モデルは文章(単語の並び)に関する確率分布を評価するものです。
ある単語の並びが自然であればその文章の確率は高くなり、不自然であれば低くなります。
言語モデルが学習するのは「自然な単語の並び」です。
数式を使って言語モデルを書いてみます。ここでは、という個の単語からなる文章について考えます。このとき、という並びで単語が出現する確率は同時確率で表されます。これは条件付き確率で書くと、
となります。
これは後述する言語モデルと区別するため、「forward LM」(前向き言語モデル)と呼ばれることが多いです。
最近の言語モデルでは、前向き・後ろ向きの両方の言語モデルを利用することが一般的です。
後ろ向き言語モデルは「backward LM」と呼ばれ、下記のような式で表されます。
イメージとしてはこんな感じです。
2つ合わせて「biLMs」(双方向言語モデル)と呼びます。
「are」という単語の出現確率の計算に「前の単語の並び」だけではなく、「後ろの単語の並び」も利用します。
双方向の並びを学習することで、中間層の重みが言語モデルを最適化するように調整されます。
最終的にはその重みを結合させます。
※上の2つはThe Bidirectional Language Model – Motoki Wu – Mediumより引用
「word2vec
」などの事前学習で獲得した分散表現を入力層の初期パラメータとすることで自然言語処理のタスクの精度が向上することが知られています。
ただし、入力層に渡される文章の分散表現は単語を順番に並べただけであり、当然ですが文脈情報は含まれていません。
一方、双方向の言語モデルで学習された分散表現の場合、文脈情報が考慮されております。
このあたりが「文脈情報を考慮した分散表現」としてSOTAに貢献しているのかなとも思いました。
ELMo
ELMoで学習した単語の分散表現は以下のように目的のタスクに結合させます。
※http://ai2-website.s3.amazonaws.com/publications/semi-supervised-sequence.pdfより引用
通常の単語の分散表現は、文章中の単語を分散表現に変換したものの集まりです。
一方、biLMsの分散表現は、文章を言語モデルに通して得られたものです。
上記の例だと、単語「York」の分散表現は、forward LMを通して、「New」の単語ベクトルの情報も含んでいます。また、backward LMを通して、「is located ...」の単語ベクトルの情報も含んでいます。