言語モデル

言語モデル#

文章が生成される確率を推定したい。 もっともらしい(確率的にありえる)文章を生成したい。

\[ P(昨日は雨が降りました) > P(昨日は飴が降りました) \]

文章をトークンに置き換えて考えると、文章の確率ではなくトークンの同時確率として扱うことができる

\[ P(昨日, は, 雨, が, 降り, ました) \]

記号にすると、ある文章\(S\)をトークン化したのを\((w_1, w_2, \cdots, w_n)\)とすると、

\[ P(S)=P(w_1, w_2, \cdots, w_n) \]

を求めたいということになる。これは条件付き確率の積として表せる

\[\begin{split} \begin{align} P(w_1, w_2, \cdots, w_n) &= P(w_1) \times P(w_2|w_1) \times P(w_3|w_1, w_2) \times \cdots\\ &= \prod_{i=1}^n p(w_i|\boldsymbol{c}_i) \end{align} \end{split}\]

ここで\(\boldsymbol{c}_i\)\(w_i\)より前のトークン列\(\boldsymbol{c}_i=(w_1,w_2,\cdots,w_n)\)で、文脈(context)と呼ばれる

言語モデルの位置づけと活用#

この言語モデルの考え方がNLPではベースとなっている。

この派生で、DNNを使うword2vecがあったり(word2vecはcontextが\(w_i\)の前後n個という感じでやや違うが)、

「contextは時系列的な関係がある」ということで系列性を扱えるRNNやLSTMを使う流れが生まれたり、

「RNNやLSTMは勾配消失の問題がある」ということでTransformerを使ってBERTやGPTを使ったり

「もっと大規模な表現力の高いモデルに」となりLLMに派生していった