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

您所在的位置:网站首页 positive的 02、PMI点互信息 & PPMI(Positive PMI)

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

#02、PMI点互信息 & PPMI(Positive PMI)| 来源: 网络整理| 查看: 265

在词的向量化表示中,简单的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)



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3