ganger1208
@ganger1208 (ganger)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ゼロから作るDeep Learning②のPMIの計算方法について

ゼロから作るDeep Learning②のPMIの計算方法について

本書79p. にて定義されるPMIの計算方法について納得いかず意見・ご指摘を求めるべく投稿します。

コーパス(You say goodbye and I say hello.)の共起行列Cを基にPMIを計算するところで、
全単語数に相当するNを共起行列の全合計で以って数えている部分、
元のコーパスの単語数は8なのに対して、
np.sum(C)は14となりこの時点で倍近い値を取っています。

YouとsayについてPMIを求めると、本来ならば

PMI = log2(1 * 8 / 1 * 2) = 2

になると思うのですが、本書では

PMI = log2(1 * 14 / 1 * 4) = 1.807

となっています。

細かいことは気にしないと言うことで近似解をとっているのかとも思いましたが、言及がないためモヤモヤしています。
ご存知の方、ご教示いただけると幸いです。

ソースコード

def ppmi(C, verbose=False, eps=1e-8): 
    M = np.zeros_like(C, dtype=np.float32)
    N = np.sum(C)
    S = np.sum(C, axis=0)
    total = C.shape[0] * C.shape[1]

    for i in range(C.shape[0]):
        for j in range(C.shape[1]):
            pmi = np.log2(C[i,j] * N / (S[i]*S[j]) + eps)
            M[i, j] = max(0, pmi)

    return M
0

No Answers yet.

Your answer might help someone💌