基于互信息的短语结构句法分析算法详解
好的,我们开始。这次我为你讲解一个将信息论与句法分析结合的算法:基于互信息的短语结构句法分析算法。它属于无监督或半监督句法分析范畴,核心思想是利用词与词之间的互信息来推测它们是否属于同一个句法成分(短语),进而构建出整个句子的短语结构树。
一、 问题背景与目标
-
什么是短语结构句法分析?
它的目标是为一个给定的句子,自动地分析出其内部的句法结构,并以一棵树的形式呈现。这棵树揭示了句子如何由词语组成短语(如名词短语NP、动词短语VP),短语又如何组成更大的短语,最终构成整个句子。例如,句子“The cat sat on the mat”的短语结构树会显示“[The cat]是一个NP,[on the mat]是一个介词短语,它们共同构成一个更大的VP [sat [on the mat]]”。 -
传统方法与新思路的挑战
传统的有监督方法(如基于PCFG的CKY算法)需要大量人工标注的树库进行训练。而无监督句法分析旨在不依赖树库,仅从纯文本中学习语法结构。核心挑战在于:如何定义和衡量“哪些词更倾向于组合在一起形成一个句法单元”? -
互信息的直觉
互信息衡量的是两个随机变量之间的相互依赖程度。在语言中,如果两个词在句法上属于同一个成分(如一个形容词和一个名词组成名词短语),那么它们一起出现的“实际可能性”应该远高于它们“偶然碰在一起”的预期可能性。这种“超预期”的共现强度,就可以用互信息来量化。
二、 核心概念:点间互信息
我们不直接使用词对互信息,而是使用一种更适合句法结构的变体——点间互信息。
-
定义“点”
对于一个包含n个词的句子w1 w2 ... wi ... wn,我们考虑的是词与词之间的间隙,或称“点”。总共有n+1个点(包括句子开头和结尾)。一个句法成分(短语)的边界就位于这些点上。 -
计算点间互信息
我们关注任意两个点i和j(0 ≤ i < j ≤ n)。- i点左侧的上下文: 从句子开头到点i为止的所有词序列(即
w1...wi),我们用一个特征来表示,例如i点前一个词的词wi。 - j点右侧的上下文: 从点j开始到句子结尾的所有词序列(即
w(j+1)...wn),我们用一个特征来表示,例如j点后一个词的词w(j+1)。 - 点间互信息PMI(i, j) 定义为:位于点
i左侧的上下文特征(如wi)与位于点j右侧的上下文特征(如w(j+1))之间的互信息。公式化表示为:
PMI(i, j) = log [ P(wi, w(j+1)) / (P(wi) * P(w(j+1))) ]
其中,P(wi, w(j+1))是wi和w(j+1)在语料库中跨越点i和j组成的片段(即w(i+1)...wj)共同出现的联合概率的估计;P(wi)和P(w(j+1))是它们的边缘概率。
- i点左侧的上下文: 从句子开头到点i为止的所有词序列(即
-
PMI的句法解释
- 高PMI值: 如果
PMI(i, j)值很高,意味着词wi和w(j+1)的共现远非偶然。在句法上,这通常表明点i和点j之间很可能是一个完整的句法成分的边界。也就是说,w(i+1)...wj这个片段构成了一个相对独立、完整的单元(短语),使得其左邻词wi和右邻词w(j+1)之间存在强烈的选择性依赖关系。 - 低PMI值: 意味着左右上下文关联性弱,这两点之间不太可能是一个完整的短语边界。
- 高PMI值: 如果
三、 算法步骤详解
假设我们有一个未标注的大规模语料库,以及一个待分析的句子S = w1 w2 ... wn。
步骤1: 语料库统计与概率估计
从大规模语料库中,统计所有词汇的单字出现频次Count(w),以及所有有序词对(a, b)的共现频次Count(a, b)。然后计算:
- 总词数
N = Σ Count(w) - 单字概率
P(w) = Count(w) / N - 词对联合概率
P(a, b) = Count(a, b) / N(这是一个简化的估计,实际中可能需考虑更复杂的上下文窗口)
步骤2: 为句子S计算所有点对的PMI矩阵
构造一个(n+1) x (n+1)的矩阵M,其中M[i][j]存储PMI(i, j)。
对于每一对点(i, j) (0 ≤ i < j ≤ n):
- 确定左上下文特征
L = wi(当i=0时,L可以是句子开始符号<S>)。 - 确定右上下文特征
R = w(j+1)(当j=n时,R可以是句子结束符号</S>)。 - 从步骤1的统计中获取
P(L),P(R),P(L, R)。 - 计算
PMI(i, j) = log ( P(L, R) / (P(L) * P(R)) )。
步骤3: 基于PMI矩阵进行自顶向下的递归二分分割
这是构建短语结构树的核心步骤。我们采用一种自顶向下、贪婪二分的策略:
- 初始化: 将整个句子
[0, n]视为当前待分割的片段(n是最后一个词的位置)。 - 寻找最佳分割点: 对于当前片段
[i, j](对应词序列w(i+1)...wj),我们遍历所有可能的分割点k(i < k < j)。最佳分割点k*是使得其左右两个子片段[i, k]和[k, j]的独立性最强,即与外部上下文关联性最弱的点。- 如何衡量?我们可以用内部PMI和外部PMI来定义。一个经典标准是:选择分割点
k,使得PMI(i, k) + PMI(k, j)最小。为什么?PMI(i, k)衡量了片段[i, k]的左边界i和右边界k与外部上下文的联系。PMI(k, j)同理。- 如果
k是一个好的短语边界,那么[i, k]和[k, j]各自内部应该是紧密的,而与外部(彼此)的连接应该较弱,所以它们的边界与外部上下文的互信息(PMI(i, k)和PMI(k, j))之和应该较小。
- 如何衡量?我们可以用内部PMI和外部PMI来定义。一个经典标准是:选择分割点
- 递归分割: 确定了最佳分割点
k*后,我们就将当前片段[i, j]分割为两个子片段[i, k*]和[k*, j]。然后,对每一个子片段,递归地重复步骤2和3,直到子片段长度达到预定的最小值(如1个词)或无法找到使PMI和显著减小的分割点为止。 - 构建句法树: 这个递归分割的过程,自然地形成了一棵二叉树。每个内部节点代表一个片段(即一个短语),其两个子节点代表该短语分割出的两个子短语。叶子节点就是单个的词。
四、 举例说明
让我们用句子“the old man the boat”这个经典例子(虽然歧义,但适合说明)来简化演示。
句子: the / old / man / the / boat
位置: 0 1 2 3 4 5
- 统计概率: 从语料库中,我们可能发现“the”和“boat”经常一起出现(如“on the boat”),所以
P(the, boat)较高。而“man”和“the”作为跨片段边界的共现可能模式特殊。 - 计算PMI矩阵: 我们计算
PMI(0,5),PMI(0,2),PMI(2,5)等。假设统计发现:PMI(0,2)(对应可能的片段“[the old]”)和PMI(2,5)(对应可能的片段“[man the boat]”)的值之和相对较小。- 而
PMI(0,3)和PMI(3,5)之和,或者PMI(0,4)和PMI(4,5)之和可能更大。
- 递归分割:
- 第一层分割: 算法遍历所有
k(1,2,3,4),发现当k*=2时,PMI(0,2) + PMI(2,5)最小。因此,在点2处将句子分割为[0,2](“the old”) 和[2,5](“man the boat”)。 - 第二层分割-左子树: 对片段
[0,2](“the old”),只有一个内部点k=1,将其分割为[0,1](“the”)和[1,2](“old”)。 - 第二层分割-右子树: 对片段
[2,5](“man the boat”),遍历k=3,4。可能发现PMI(2,4) + PMI(4,5)最小(因为“the boat”是强搭配,“man the”不是常见开头)。于是在点4处将其分割为[2,4](“man the”)和[4,5](“boat”)。然后继续分割[2,4]为[2,3](“man”)和[3,4](“the”)。
- 第一层分割: 算法遍历所有
- 最终树结构: 这样就得到了一棵二叉树,它可以解释为
( (the old) ( (man the) boat) ),虽然这不是唯一或最正确的分析,但展示了算法如何运作。
五、 算法特点与评价
- 优点:
- 无监督: 仅需纯文本,无需标注树库。
- 理论基础: 基于信息论,概念清晰。
- 揭示搭配强度: 能发现语言中稳定的搭配和组合模式。
- 局限性:
- 二义性处理: 最终得到的是严格的二叉树,而自然语言常有非二叉分支。
- 特征简单: 仅依赖于相邻词的共现,忽略了更复杂的句法、语义和形态信息。
- 数据稀疏: 对于低频词或稀有结构,PMI估计不可靠。
- 贪心策略: 自顶向下的贪心分割,可能无法得到全局最优的树结构。
- 与现代方法的关系: 这种基于互信息的无监督分割思想,是早期无监督句法分析的重要探索。它为后续基于深度学习(如RNN、Transformer)的无监督成分句法分析模型(如DIORA、PRPN)提供了一些灵感,但后者使用更强大的神经网络编码器和更复杂的优化目标。
总结来说,基于互信息的短语结构句法分析算法通过计算词边界点的互信息来量化短语的内聚性,并采用自顶向下的递归二分法构建句法树。它是一个连接信息论与句法结构的经典范例,虽然简单且有局限,但其核心思想在自然语言处理的发展史上占有一席之地。