言語モデル#
文章が生成される確率を推定したい。 もっともらしい(確率的にありえる)文章を生成したい。
\[
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に派生していった