Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

逐点互信息(PMI)

原始 PDF

当向量维度对应的是词而非文档时,词项—词项矩阵可以使用 tf-idf 的一种替代加权函数:正逐点互信息(positive pointwise mutual information,PPMI)。PPMI 背后的直觉是,衡量两个词之间关联程度的最佳方式,是考察它们在语料库中的实际共现次数,比我们事先假定二者随机出现时的期望共现次数多多少。

逐点互信息(pointwise mutual information,PMI;Fano, 1961)是 NLP 中最重要的概念之一。它衡量事件 xxyy 实际共同出现的频率,相对于二者相互独立时的期望频率有多高:

I(x,y)=log2P(x,y)P(x)P(y)(J.2)I(x,y)=\log_2\frac{P(x,y)}{P(x)P(y)}\tag{J.2}

目标词 ww 与上下文词 cc 之间的逐点互信息(Church and Hanks, 1989, 1990)定义为:

PMI(w,c)=log2P(w,c)P(w)P(c)(J.3)\operatorname{PMI}(w,c)=\log_2\frac{P(w,c)}{P(w)P(c)}\tag{J.3}

若用最大似然估计计算概率,分子表示两个词共同出现的频率;分母则表示假定两个词各自独立出现时的期望共现频率。回想一下,两个独立事件同时发生的概率,就是各自概率的乘积。因此,该比值估计了两个词的实际共现程度比随机情况下的期望值高多少。凡是需要寻找强关联词语的任务,PMI 都是一种很有用的工具。

PMI 的取值范围从负无穷到正无穷。不过,除非语料库极其庞大,否则负 PMI 值——即实际共现少于随机期望——往往并不可靠。假设两个词各自的概率都是 10-6;若要断定它们共同出现的频率低于随机水平,就必须确信二者共同出现的概率显著小于 10-12,而达到这种统计粒度需要极大的语料库。此外,这种“无关联程度”分数是否能用人类判断来评估,也并不明确。因此,更常见的做法是使用正 PMI(即 PPMI),把所有负 PMI 值替换为零(Church and Hanks, 1989;Dagan et al., 1993;Niwa and Nitta, 1994):

PPMI(w,c)=max(log2P(w,c)P(w)P(c),0)(J.4)\operatorname{PPMI}(w,c)=\max\left(\log_2\frac{P(w,c)}{P(w)P(c)},0\right)\tag{J.4}

更形式化地说,假设我们有一个共现矩阵 FF,它包含 WW 行(词)和 CC 列(上下文),其中 fijf_{ij} 表示词 wiw_i 与上下文 cjc_j 共同出现的次数。可以把它转化为 PPMI 矩阵,其中 PPMIij\operatorname{PPMI}_{ij} 表示词 wiw_i 与上下文 cjc_j 的 PPMI 值;该值也可写作 PPMI(wi,cj)\operatorname{PPMI}(\boldsymbol{w}_i,\boldsymbol{c}_j)PPMI(w=i,c=j)\operatorname{PPMI}(w=i,c=j)。具体计算如下:

pij=fiji=1Wj=1Cfij,pi=j=1Cfiji=1Wj=1Cfij,pj=i=1Wfiji=1Wj=1Cfij.(J.5)\begin{aligned} p_{ij} &= \frac{f_{ij}}{\sum_{i'=1}^{W}\sum_{j'=1}^{C}f_{i'j'}},\\ p_{i*} &= \frac{\sum_{j=1}^{C}f_{ij}}{\sum_{i'=1}^{W}\sum_{j'=1}^{C}f_{i'j'}},\\ p_{*j} &= \frac{\sum_{i=1}^{W}f_{ij}}{\sum_{i'=1}^{W}\sum_{j'=1}^{C}f_{i'j'}}. \end{aligned}\tag{J.5}
PPMIij=max(log2pijpipj,0)(J.6)\operatorname{PPMI}_{ij}=\max\left(\log_2\frac{p_{ij}}{p_{i*}p_{*j}},0\right)\tag{J.6}

下面来看几个 PPMI 计算示例。为便于计算,我们使用图 J.2;它在图 J.1 的基础上增加了所有边际计数,并暂时假设图中所列的词和上下文就是需要考虑的全部内容。

原始矩阵如下:

aardvarkcomputerdataresultpiesugar
cherry028944225
strawberry00016019
digital0167016838554
information033253982378513

图 J.1 维基百科语料库中四个词的共现向量,这里展示其中六个维度(为教学目的而手工选取)。图中以红色框出 digital 的向量。真实向量会有多得多的维度,因而也稀疏得多,即绝大多数维度上的值都为零。

computerdataresultpiesugarcount(w)
cherry28944225486
strawberry001601980
digital1670168385543447
information332539823785137703
count(context)499756734735126111716

图 J.2 维基百科语料库中四个词在五种上下文中的共现计数及其边际计数。为便于本例计算,暂且假定不存在其他需要考虑的词或上下文。

例如,若假定图 J.1 已经涵盖所有相关的词、上下文和维度,就可以按下式计算 PPMI(information,data)\operatorname{PPMI}(\text{information},\text{data})

P(w=information,c=data)=398211716=0.3399,P(w=information)=770311716=0.6575,P(c=data)=567311716=0.4842,PPMI(information,data)=log2(0.33990.6575×0.4842)=0.0944.\begin{aligned} P(w=\text{information},c=\text{data}) &= \frac{3982}{11716}=0.3399,\\ P(w=\text{information}) &= \frac{7703}{11716}=0.6575,\\ P(c=\text{data}) &= \frac{5673}{11716}=0.4842,\\ \operatorname{PPMI}(\text{information},\text{data}) &= \log_2\left(\frac{0.3399}{0.6575\times0.4842}\right)=0.0944. \end{aligned}

图 J.3 展示了根据图 J.2 中的计数得到的联合概率,图 J.4 则展示相应的 PPMI 值。不出所料,cherrystrawberry 都与 piesugar 高度相关,而 datainformation 之间存在较弱的关联。

p(w, context)p(w)
computerdataresultpiesugarp(w)
cherry0.00020.00070.00080.03770.00210.0415
strawberry0.00000.00000.00010.00510.00160.0068
digital0.14250.14360.00730.00040.00030.2942
information0.28380.33990.03230.00040.00110.6575
p(context)0.42650.48420.04040.04370.0052

图 J.3 以联合概率替换图 J.1 中的计数;右侧一列和底部一行给出边际概率。

computerdataresultpiesugar
cherry0004.383.30
strawberry0004.105.51
digital0.180.01000
information0.020.090.2800

图 J.4 根据图 J.3 中的计数计算得到的 PPMI 矩阵,展示词与上下文词之间的关联。注意,大多数为零的 PPMI 值原本对应负 PMI。例如,PMI(cherry,computer)=6.7\operatorname{PMI}(\text{cherry},\text{computer})=-6.7,表示 cherrycomputer 在维基百科中的共现频率低于随机期望;PPMI 会把这一负值替换为零。

PMI 存在偏向低频事件的问题:非常罕见的词往往具有很高的 PMI 值。减弱这种偏差的一种方法,是稍微改变 P(c)P(c) 的计算,改用另一个函数 Pα(c)P_\alpha(c),把上下文词的概率提高到 α\alpha 次幂:

PPMIα(w,c)=max(log2P(w,c)P(w)Pα(c),0)(J.7)\operatorname{PPMI}_\alpha(w,c)=\max\left(\log_2\frac{P(w,c)}{P(w)P_\alpha(c)},0\right)\tag{J.7}
Pα(c)=count(c)αccount(c)α(J.8)P_\alpha(c)=\frac{\operatorname{count}(c)^\alpha}{\sum_c\operatorname{count}(c)^\alpha}\tag{J.8}

Levy 等人(2015)发现,设置 α=0.75\alpha=0.75 能改善嵌入在多种任务上的表现;这种做法借鉴了第 5 章介绍的 skip-gram 模型中的相似加权方式。其原因是,把计数提高到 0.75 次幂会增加分配给低频上下文的概率,进而降低它们的 PMI。当 cc 很罕见时,Pα(c)>P(c)P_\alpha(c)>P(c)

另一种可能的解决方案是拉普拉斯平滑:计算 PMI 之前,先给每个计数加上一个较小的常数 kk,常用值为 0.1 到 3,从而收缩(折扣)所有非零值。kk 越大,对非零计数的折扣就越强。

Church, K. W. and P. Hanks. 1989. Word association norms, mutual information, and lexicography. ACL.

Church, K. W. and P. Hanks. 1990. Word association norms, mutual information, and lexicography. Computational Linguistics, 16(1):22–29.

Dagan, I., S. Marcus, and S. Markovitch. 1993. Contextual word similarity and estimation from sparse data. ACL.

Fano, R. M. 1961. Transmission of Information: A Statistical Theory of Communications. MIT Press.

Levy, O., Y. Goldberg, and I. Dagan. 2015. Improving distributional similarity with lessons learned from word embeddings. TACL, 3:211–225.

Niwa, Y. and Y. Nitta. 1994. Co-occurrence vectors from corpora vs. distance vectors from dictionaries. COLING.