PCFG

1.读入句子,记录 单词个数,非终结点到单词的映射,非终结点到非终结点的映射
2.根据得出的统计文件里确认不是RARE的单词
   1)替换原文件出现少于5次的单词,匹配patt = '"(\w+)"]',
       l = input.readline()
       words = re.findall(patt,l)
            for word in words:
                if word in self.notRareword:
                    pass
                else:
                    wordall = '"'+word+'"'+']'
                    l=l.replace(wordall,'"_RARE_"]')
                    print l
   2)计算非终结点到RARE单词的映射概率
3.动态规划求最大概率划分
   1)求pi(i,i,X) = X到第i个单词的概率
   2)pi(i,j,x), 1<=i<j<=n,i<=s<j
           pi(i,j,x) = pi(i,s,y1)*pi(s+1,j,y2)*p(x,y1,y2)的最大值
           bp(i,j,x) = (x,y1,y2,s)
4.输出
   def print(self,i,j,X,words):
        str =""
        if i!=j:
            newY1 = self.bp[(i,j,X)][1]
            newY2 = self.bp[(i,j,X)][2]
            news = self.bp[(i,j,X)][3]
            str = str+"["+'"'+X+'", '+self.print(i,news,newY1,words)+', '+self.print(news+1,j,newY2,words)+']'
        else:
            str = str+"["+'"'+X+'", '+'"'+words[i-1]+'"' +']'
        return str    
  






结果:


 Type       Total   Precision      Recall     F1-Score
===============================================================
      ADJP           7     0.000        0.000        0.000
      ADVP          12     0.333        0.167        0.222
        NP         571     0.629        0.676        0.651
        PP         188     0.774        0.803        0.789
       PRT           4     0.333        0.250        0.286
        QP           1     0.000        0.000        0.000
         S          26     0.333        0.231        0.273
      SBAR           9     0.167        0.222        0.190
     SBARQ         236     0.983        0.966        0.974
        SQ         236     0.897        0.881        0.889
        VP         168     0.634        0.351        0.452
    WHADJP          26     0.852        0.885        0.868
    WHADVP          60     0.952        0.983        0.967
      WHNP         178     0.879        0.860        0.869
      WHPP           5     1.000        0.800        0.889


     total        1727     0.767        0.742        0.754
### PCFG算法原理与实现 #### 1. 概述 概率上下文无关文法(Probabilistic Context-Free Grammar, PCFG)是一种扩展的上下文无关文法(CFG),它为每个产生式分配了一个概率值。PCFG的核心思想是通过引入概率模型,使得文法可以更好地描述自然语言中的不确定性[^3]。 #### 2. PCFG的基础定义 在PCFG中,一个文法通常由以下元素组成: - **N**:非终结符集合。 - **Σ**:终结符集合。 - **R**:产生式规则集合。 - **S**:起始符号。 - **P**:每个产生式的概率分布。 对于每个产生式 \( A \to \alpha \),其概率 \( p(A \to \alpha) \) 满足以下条件: \[ \sum_{\alpha} p(A \to \alpha) = 1 \] 这意味着从非终结符 \( A \) 出发的所有可能产生式的概率之和必须等于1[^3]。 #### 3. PCFG的训练过程 PCFG的参数训练通常基于语料库进行统计。具体步骤如下: - 统计语料库中所有非终结符 \( N \) 和终结符 \( \Sigma \) 的出现频率。 - 枚举语料库中所有的产生式规则,并将其作为 \( R \)。 - 对于每个产生式 \( A \to B \),计算其概率 \( p(A \to B) \) 为该规则在语料库中出现的次数除以所有从 \( A \) 出发的规则出现的总次数[^3]。 #### 4. PCFG的解码过程——CKY算法 CYK算法(Cocke–Younger–Kasami算法)是一种动态规划方法,用于解析符合乔姆斯基范式的上下文无关文法。以下是基于PCFG的CKY算法伪代码: ```python # 初始化回溯表和概率表 pi = {} # 回溯表 probs = {} # 概率表 # 遍历句子长度 for length in range(2, n+1): # 句子长度从2到n for i in range(n - length + 1): # 起点索引 j = i + length # 终点索引 for k in range(i+1, j): # 划分点 for A in N: # 遍历所有非终结符 for B in pi[i, k]: # 左子树 for C in pi[k, j]: # 右子树 if (A, B, C) in R: # 如果产生式存在 prob = P[A -> B, C] * probs[i, k, B] * probs[k, j, C] if prob > probs.get((i, j, A), 0): probs[i, j, A] = prob pi[i, j, A] = (B, C, k) ``` 上述算法中,`probs` 表存储了每个子树的概率,而 `pi` 表记录了构造这些子树所需的划分点和规则[^4]。 #### 5. Inside算法 Inside算法是一种用于计算给定句子生成概率的动态规划方法。其核心思想是通过递归地计算子树的概率来得到整个句子的概率。以下是Inside算法的基本步骤: - 定义 \( \beta(i, j, A) \) 表示从位置 \( i \) 到 \( j \) 的子树,且根节点为非终结符 \( A \) 的概率。 - 初始条件:对于单个单词的情况,\( \beta(i, i, A) = p(A \to w_i) \)。 - 递归更新:对于长度大于1的子树, \[ \beta(i, j, A) = \sum_{k=i+1}^{j} \sum_{B,C} p(A \to BC) \cdot \beta(i, k, B) \cdot \beta(k, j, C) \] 最终,整个句子的概率可以通过 \( \beta(1, n, S) \) 得到[^2]。 #### 6. Outside算法 Outside算法是对Inside算法的补充,用于计算每个子树对整体句子概率的贡献。其核心思想是通过递归地计算外部上下文的概率来得到每个子树的边际概率。 #### 7. 应用场景 PCFG广泛应用于自然语言处理领域,例如句法分析、机器翻译和语音识别等任务。通过结合概率模型,PCFG能够更准确地描述自然语言中的结构化信息[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值