02、PMI点互信息 & PPMI(Positive PMI)

在词的向量化表示中,简单的One-Hot会遇到数据稀疏和无法计算词之间距离的问题;分布式频次表示会遇到高频词误导计算结果的问题。基于点互信息的词向量表示方式恰好可以解决上述问题。

PMI点互信息

1. 概念和公式

点互信息(Pointwise Mutual Information,PMI)是信息轮中用来衡量两个事物之间的相关性的一个指标。例如对于词A和词B的点互信息为:

PMI(A, B) = log_2{\frac{P(A,B)}{P(A)*P(B)}}

其中,P(A,B)表示词A和词B共同出现的频率,P(A)表示词A出现的频率,P(B)表示词B出现的频率。

2. 示例

上下文

我 喜欢 游泳。

我 爱 游泳。

共现矩阵

相同词计为0,所有词一共出现6次数。

喜欢游泳
0112
喜欢1001
1001
游泳2110

PMI计算

设(公式无法输入中文,汗):w1表示“我”,w2表示“喜欢”,w3表示“爱”,w4表示“游泳”

P(w1) = \frac{2}{6}=\frac{1}{3}; P(w2) = \frac{1}{6}; P(w1,w2) = \frac{1}{6}

PMI(w1,w2) = log_2{\frac{P(w1,w2)}{P(w1)*P(w2)}} = log_2{\frac{\frac{1}{6}}{\frac{2}{6}*\frac{1}{6}}} = log_2{3}

共现矩阵中所以值替换为对应的PMI值便可以得到使用PMI方法表示的词向量了——每一行对应该词的词向量。

PPMI(Positive PMI)

当词A和词B的共现次数过低时,对于的PMI值很可能为负数(理论可到负无穷),这通常会造成PMI的不稳定。为了解决这个问题,可以采用对负PMI转换为0的方式解决——PPMI(Positive PMI):

PPMI(A,B) = max(PMI(A,B), 0)

PMI表示词向量代码

import numpy as np

# 单词共现矩阵
M = np.array([[0, 2, 1, 1, 1, 1, 1, 2, 1, 3],
              [2, 0, 1, 1, 1, 0, 0, 1, 1, 2],
              [1, 1, 0, 1, 1, 0, 0, 0, 0, 1],
              [1, 1, 1, 0, 1, 0, 0, 0, 0, 1],
              [1, 1, 1, 1, 0, 0, 0, 0, 0, 1],
              [1, 0, 0, 0, 0, 0, 1, 1, 0, 1],
              [1, 0, 0, 0, 0, 1, 0, 1, 0, 1],
              [2, 1, 0, 0, 0, 1, 1, 0, 1, 2],
              [1, 1, 0, 0, 0, 0, 0, 1, 0, 1],
              [3, 2, 1, 1, 1, 1, 1, 2, 1, 0]])

# 点互信息函数
def pmi(M, positive=True):
    col_totals = M.sum(axis=0)
    row_totals = M.sum(axis=1)
    expected = np.outer(col_totals, row_totals) / M.sum()
    with np.errstate(divide="ignore"):
        res_log = np.log(M / expected)
    # 将inf转换为0.0
    res_log[np.isinf(res_log)] = 0.0
    # 转换负数,PPMI
    if positive:
        res_log[res_log < 0] = 0.0
    return res_log

M_pmi = pmi(M)
np.set_printoptions(precision=2)
print(M_pmi)

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值