定義
分布pに従って生成されるデータxがある。xの分布をqでモデリングする。このとき確率モデルqのperplexityは、
と表される。
ただし、xiはpから生成したデータで、Nはxiの個数である。
直感的な説明
- 指数部はクロスエントロピーになっている
- モデルにデータを見せたときに、どれくらい"驚く"かを表す
- いいモデルほどperplexityは小さい
サンプル
サイコロの目の分布をモデリングしてみて、そのモデルのperplexityを計算してみます。まずサイコロを用意します。サイコロは六面で各面が出る確率は一様とします。
真の分布はわからないので、30回サイコロを振ってみて観測化された結果から分布を推定してみます。このモデルのperplexityをテストデータ1,000個を使って計算してみると、6.358となります。
import numpy as np from collections import Counter np.random.seed(1234) N = 1000 # test data size M = 30 # train data size test_data = np.random.randint(6, size=N) train_data = np.random.randint(6, size=M) p = Counter(test_data) # test distribution q = Counter(train_data) # proposed distribution exponent = 0 for i in range(6): exponent -= p[i] / N * np.log2(q[i] / M) print (2 ** exponent)
次に訓練データを増やしてモデリングしてみます。サイコロを1,000回振ってみます(上記のコードのMを1000に変更してプログラムを実行)。
perplexityは5.998となり、モデルの良さが改善されたことがわかります。
0 件のコメント:
コメントを投稿