機械学習・自然言語処理の勉強メモ

学んだことのメモやまとめ

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(言語モデル



言語モデルは文章(単語の並び)に関する確率分布を評価するものです。
ある単語の並びが自然であればその文章の確率は高くなり、不自然であれば低くなります。
言語モデルが学習するのは「自然な単語の並び」です。

数式を使って言語モデルを書いてみます。ここでは、w_1,...,w_nというn個の単語からなる文章について考えます。このとき、w_1,...,w_nという並びで単語が出現する確率は同時確率P(w_1,...,w_n)で表されます。これは条件付き確率で書くと、

\begin{eqnarray}
P(w_1,...,w_n)=\prod_{t=1}^nP(w_t|w_1,...,w_{t-1})
\end{eqnarray}
となります。
これは後述する言語モデルと区別するため、「forward LM」(前向き言語モデル)と呼ばれることが多いです。

最近の言語モデルでは、前向き・後ろ向きの両方の言語モデルを利用することが一般的です。
後ろ向き言語モデルは「backward LM」と呼ばれ、下記のような式で表されます。

\begin{eqnarray}
P(w_1,...,w_n)=\prod_{t=1}^nP(w_t|w_{t+1},...,w_n)
\end{eqnarray}

イメージとしてはこんな感じです。
f:id:kento1109:20181008110529p:plain

2つ合わせて「biLMs」(双方向言語モデル)と呼びます。

「are」という単語の出現確率の計算に「前の単語の並び」だけではなく、「後ろの単語の並び」も利用します。

双方向の並びを学習することで、中間層の重みが言語モデルを最適化するように調整されます。
最終的にはその重みを結合させます。

f:id:kento1109:20181025164901p:plain

※上の2つはThe Bidirectional Language Model – Motoki Wu – Mediumより引用

word2vec」などの事前学習で獲得した分散表現を入力層の初期パラメータとすることで自然言語処理のタスクの精度が向上することが知られています。
ただし、入力層に渡される文章の分散表現は単語を順番に並べただけであり、当然ですが文脈情報は含まれていません。
一方、双方向の言語モデルで学習された分散表現の場合、文脈情報が考慮されております。

このあたりが「文脈情報を考慮した分散表現」としてSOTAに貢献しているのかなとも思いました。

ELMo



ELMoで学習した単語の分散表現は以下のように目的のタスクに結合させます。
f:id:kento1109:20181025174941p:plain
http://ai2-website.s3.amazonaws.com/publications/semi-supervised-sequence.pdfより引用

通常の単語の分散表現は、文章中の単語を分散表現に変換したものの集まりです。
一方、biLMsの分散表現は、文章を言語モデルに通して得られたものです。
上記の例だと、単語「York」の分散表現は、forward LMを通して、「New」の単語ベクトルの情報も含んでいます。また、backward LMを通して、「is located ...」の単語ベクトルの情報も含んでいます。

ELMoの応用



まず、タスクの対象言語が日本語の場合は日本語の言語モデルを使う必要があります。そのため、ELMoなどの既存の学習済のモデルをそのまま使うことは出来ません。
また、タスクがドメイン依存する場合、Wikipedia等のコーパスで学習した言語モデルがどの程度有効かは分かりません。
次回はドメインに依存するタスクでの言語モデルについてまとめたいと思います。