(C, verbose=False, eps=1e-8)
| 3 | |
| 4 | |
| 5 | def ppmi(C, verbose=False, eps=1e-8): |
| 6 | M = np.zeros_like(C, dtype=np.float32) |
| 7 | N = np.sum(C) |
| 8 | S = np.sum(C, axis=0) |
| 9 | total = C.shape[0] * C.shape[1] |
| 10 | cnt = 0 |
| 11 | |
| 12 | for i in range(C.shape[0]): |
| 13 | for j in range(C.shape[1]): |
| 14 | pmi = np.log2(C[i, j] * N / (S[j]*S[i]) + eps) |
| 15 | M[i, j] = max(0, pmi) |
| 16 | |
| 17 | if verbose: |
| 18 | cnt += 1 |
| 19 | if cnt % (total//100+1) == 0: |
| 20 | print('%.1f%% done' % (100*cnt/total)) |
| 21 | return M |
| 22 | |
| 23 |