単語の出現確率を求める(理論編)

これ、最近やっと概観がつかめてきた気がするので、頭の整理もかねて書きたいと思います。

さて、あまり抽象的な話だと何をやってるんだ? となってしまうので目的を定めました。

目的:単語の出現確率を求める

ということで以下の3ステップで行います。

  1. 現実に直面
  2. モデルの選択
  3. 推定

現実に直面

イメージ

現実は容赦がありません。 カイジ風に言うならば、圧倒的な現実! 我々は圧倒的な現実に直面すると、 「どんな確率だよ…」 とぼやいたりします。 これが今回の話の本質です。

さて、コーパスからどの単語が何回出現した、という標本が得られたとします。 これが現実です。そして先ほどの疑問をぶつけてみましょう。 「どんな確率だよ…」 言葉を変えると、

疑問:その現実、どんな確率で発生したものなのですか?

整理

コーパス中の総単語数をN、総異なり語数をKとします。
コーパス中で出現した単語集合をV=\{w_{1}, \ldots, w_{K}\}とし、 単語w_{i}の出現回数をn_{i}とします。 そうすると、
事象:Ei:単語wiが生起する(K個、総異なり語数)
試行:N回(総単語数のこと、総異なり語数ではない)
と整理できます。

つまりコーパスが構築されるまでにこの確率空間において、N回の試行が行われたと考えるわけです。 そして、この結果得られた標本を{\bf n}^{(sample)} = [n_{1}, \ldots, n_{K}]とします。 次に、この標本が従う確率分布を 仮定 します。

モデルの選択

イメージ

先ほど標本をベクトルで表現しましたが、 そもそもその標本はどうやって生成されたのでしょうか? 言い換えるとどんなモデルから生成されたのでしょうか? ここで、

得られた標本は、ある確率分布によって生成された

と解釈します。 この確率分布を生成モデルなんて呼んだりするのかなぁ?

整理

今回は多項分布を 仮定 します。 (この多項分布、非常に重要なので別記事にまとめます。この仮定というのが非常に重要です。なぜなら、何を仮定してもよいからです。ここ、大事です。) 確率変数{\bf n}が試行回数Nの多項分布Multi({\bf n};{\bf p})に従うとします。 ここで、{\bf p} = [p_{1}, \ldots, p_{K}]はパラメータであり、 piは事象Eiの発生確率とします。 多項分布の確率関数は以下です。

\displaystyle  Multi(n;{\bf p}) = \frac{N!}{\prod^{K}_{i=1}n_{i}!}\prod^{K}_{i=1}p^{n_{i}}_{i}

推定

最適化問題として定式化

さて、パラメータを適当に{\bf p} = [p_{1}, \ldots, p_{K}]と定めた時に、 {\bf n}^{(sample)} = [n_{1}, \ldots, n_{K}]が得られる確率(尤度)Likelihood({\bf p})はいくらでしょうか?

\displaystyle  Likelihood({\bf p}) = Multi(n^{(sample)};{\bf p}) \\ \phantom{Likelihood({\bf p})} = \frac{N!}{\prod^{K}_{i=1}n_{i}!}\prod^{K}_{i=1}p^{n_{i}}_{i}

これで我々の目的は達成されました。 疑問を再掲しておきます。

疑問:その現実、どんな確率で発生したものなのですか?

しかしながら、求めた確率はパラメータ{\bf p}に依存しています。(尤度は{\bf p}の関数とも見える) そこで、今ある標本が生起する確率を最大化するパラメータを決め、モデルを完成させます。 つまり尤度を最大化するパラメータ{\bf p}を求めます。 これは対数をとっても同じなので、対数尤度を最大化するパラメータをもとめることにします。 ここからは最適化の話です。以下の最適化問題を解きます。

\displaystyle  max. \hspace{0.5cm} \log{Likelihood({\bf p})} \\ s.t. \hspace{0.5cm} \sum^{K}_{i=1}p_{i} = 1 \\ \phantom{s.t. \hspace{0.5cm}} p_{i} \geq 0 \hspace{0.2cm} \forall i

最適化問題を解く

ラグランジュの未定乗数法(Lagrange Multipliers)で解きます。 ラグランジュ乗数α を導入し、ラグランジュ関数L(\bf{p}, \alpha)は以下のようになる。

\displaystyle  L({\bf p}, \alpha) = \log{Likelihood({\bf p})} + \alpha (\sum^{K}_{i=1}p_{i} - 1) \\ \phantom{L({\bf p}, \alpha)} = \log{\frac{N!}{\prod^{K}_{i=1}n_{i}!}\prod^{K}_{i=1}p^{n_{i}}_{i}} + \alpha (\sum^{K}_{i=1}p_{i} - 1) \\ \phantom{L({\bf p}, \alpha)} = \log{N!} - \sum^{k}_{i=1}\log{n_{i}!} + \sum^{K}_{i=1} n_{i} \log{p_{i}} + \alpha (\sum^{K}_{i=1}p_{i} - 1) \\

パラメータpi及びαで微分して、以下の連立方程式を得る。

\displaystyle  \frac{\partial L({\bf p}, \alpha)}{\partial p_{i}} = \frac{n_{i}}{p_{i}} + \alpha = 0 \\ \frac{\partial L({\bf p}, \alpha)}{\partial \alpha} = \sum^{K}_{i=1}p_{i} - 1 = 0

これを解いて、

\displaystyle  \alpha = - \sum^{K}_{i=1}n_{i}, \hspace{0.5cm} p_{i} = \frac{n_{i}}{\sum^{K}_{i=1}n_{i}}

まとめ

単語の出現確率を多項分布を仮定して最尤推定しました。 その結果は、単語の出現確率は単語の頻度と一致することが示せました。 大事なのは多項分布を仮定しているということ。 何を仮定しているか、というのは常に意識したいですね。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中