PCFG -- 基于统计方法生成语法树

语法树的作用


  一棵语法树不仅包括了词性(part of speech), 还包括了短语(如名词短语, 动词短语)和结构化的信息(如主语, 谓语和宾语).
这些信息是进行机器翻译所必须的, 例如机器翻译中就需要使用到结构化信息, 来根据不同的语言规定调整主谓宾的顺序.

上下文无关语法

  上下文无关语法(CFG)定义了描述语法树的要素. CFG 是一个四元组, 即(S, sigma, R, N), 其中 S 表示开始符号, sigma
表示词汇表, R 表示语法规则, N 表示非终端词.

CFG 的问题

  CFG 的一个明显的问题是不能解决有歧义句子的语法树解析问题. 从统计上看, 一个语法树解析正不正确, 主要是跟出现概率相关的. 一般的,
正确的语法树出现的概率要大点, 而错误的语法树出现的概率相对较少. 由此可知, 要解决 CFG不能解决的歧义问题, 需要引入语法树出现的鲜艳概率, PCFG
就是这样的一个语法树模型.

基于概率的上下文无关语法

  PCFG 是一个五元组, 其定义为(S, sigma, R, N, p). 可以看到, 这基本上与 CFG 类似, 只是多出来一个元素 p,
表示在语料中规则出现的概率. 使用p 可以定义一棵语法树出现的概率为树中所有规则出现概率之积. 这样, 当一个句子在可选的范围内有多棵可能的语法树时,
我们选择先验概率大的那棵树, 这样能最大程度避免解析错误.

PCFG 的训练

  对于 PCFG 中的 CFG 部分, 一般是由领域相关的专家给出的, 例如英语专家规定英语的 CFG. 而PCFG 中的 p 是从语料中统计而来.
运用最大似然估计, 可以有:

      P(X -> Y) = count(X->Y)/count(X)

注意到, 规则中包括终端词与非终端词两种元素. 在一个适当规模的语料中, 我们可以认为所有的非终端词都会出现,
但是认为所有的终端词都会出现却是不现实的(想一下我们常听到的那个美国农民日常使用的英语单词只有数千个, 而所有的英语单词却有数万个的情况). 当语料中没有出现,
而在我们的测试样本中却出现了少见的单词时, PCFG 会对所有的语法树都给出概率为0的估计, 这对 PCFG 的模型是一个致命的问题.

  通常的补救措施是, 对语料中所有单词出现次数进行统计, 然后将出现频率少于 t 的所有单词都换成同一个 symbol. 在进行测试时,
先查找测试句子中的所有单词是否在句子中出现, 若没有出现, 则使用 symbol 代替. 通过这种方法, 可以避免 PCFG 模型给出概率为0 的估计,
同时也不会损失太多的信息.

使用 PCFG 进行语法树解析

  在使用 CFG 产生语法树时, 通常采用左递归的方法, 从 S 开始, 每次使用一条规则的右部替换左部中第一个非终端词,
直到左部中全部为待解析句子的单词序列为止, 即得到该句子的一棵语法树. 使用这种 brute force 的方法, 预测时间按照句子长度的指数增长.
而使用所谓的 CKY 算法, 可以降低为多项式量级.

  CKY 是一种 DP 算法, 其要求PCFG 中的R 必须符合 Chromsky Normal Form, 即:

      X -> Y1  Y2 , 其中 Y1和 Y2属于 N  

      X -> Y , 其中 Y 属于 sigma

满足了这种形式后, 可以定义CKY的最优子结构为 Pi(i, j, X), 其表示以 X 为根部非终端词, 涵盖句子中第 i 个到第 j
个单词的语法树的概率. 在这样的定义下, 我们的目标就是寻找到一棵语法树 t, 使得 Pi(1, n, S)最大. DP 算法的一个特点是问题的解是贪婪的,
一个较大问题的解必然依赖于一个较小问题的解, DP 算法按照 bottom-up 的方式, 从解决较小规模的问题开始, 逐渐构建对于目标问题的解. CKY
所定义的递归式如下:

      basic case: Pi(i, i, X) = q(X -> wi)

      recursive case: Pi(i, j, X) = max (q(X->YZ) * Pi(i, s, Y) * Pi(s+1,
j, Z)),

其中括号中的项为在所有的 X 的规则, 以及一切可能的分裂点 s的情况下得到的最大值.

PCFG -- 基于统计方法生成语法树,布布扣,bubuko.com

时间: 2024-10-10 12:46:46

PCFG -- 基于统计方法生成语法树的相关文章

关于机器学习中规则与统计方法的思考

最近工作了一段时间,今天跟大家讨论一下关于“规则与模型”的问题. 大家肯定都知道,机器学习方法主要分两类,一类是基于统计的方法,比如贝叶斯.KNN等,都是对数据的某种特征进行归类计算得到数据划分的依据的:另一类是基于规则的方法,比如,语义规则,语法规则或者业务规则等等,这些规则主要是根据数据本身的特征人为地对分类细节进行限定,没有什么太高深的理论,但是实用性很强.当然,我觉得还有第三种方法,就是基于统计与基于规则相结合的方法,比如关联规则,apriori方法,或者决策树方法.这些方法在分类或者求

基于统计的中文实体识别方法简述

命名实体识别(NER)是自然语言处理的一个基础任务,其目的是识别出语料中的人名.地名.组织机构名等命名实体,一般包括三大类(实体类.时间类和数字类)和七小类(人名.地名.机构名.时间.日期.货币和百分比).NER是信息抽取.机器翻译.知识图谱等多种自然语言处理任务必不可少的组成部分. NER方法大致可分为两类:基于规则的方法和基于统计的方法.基于规则的方法多采用语言学家手工构造规则模板,这类系统大多依赖于知识库和词典,需要人工建立实体识别规则,成本高且可移植性差.基于统计的方法一般需要语料库来进

Shell 中常见的日志统计方法

前面我发布过"Hadoop兮,杀鸡别用牛刀,python+shell实现一般日志文件的查询.统计", 需要结合python, 可能还是有一定的门槛, 现将shell部分剥离出来. 举例一些最基本的日志统计方法. (1)查看文件 more crawler.log 查看crawler.log日志 tail -n 100 crawler.log 查看crawler.log的最后100行 (2)匹配统计 cat *.log | grep "ERROR" |wc -l 统计在

基于SCRUM方法实践的西油计科党建设计与实现-个人实践流程清单

基于SCRUM方法实践的西油计科党建设计与实现 个人实践流程清单 一.Alpha版本冲刺个人在SCRUM团队任务清单: 时间 我这个三天做了什么 实际解决燃尽图项目数量 我遇到了什么问题 我下一个三天要做什么 预计下三天完成燃尽图项目数量 2019.10.9 将大家在国庆完成的组织管理.党员管理小程序前端代码与自己本地微擎小程序后带代码整合,并做单元测试,搭建本地微擎后台.认证个人小程序号.购买认证域名.域名解析绑定服务器 8 SSL证书一直审核出现问题.整合前端组织管理的小程序代码一直显示一直

基于lanzcos方法的特征值分解算法原理及C++实现(一):lanzcos方法原理以及简单实现

假设m阶实对称阵X的低秩特征值分解为 , 其中U是列正交矩阵,即 ,每一列为一个特征向量,S是对角阵,对角线上每个元素为特征值.r为分解的秩 lanzcos方法的大致思路 1) 对X进行正交变换得到一个三对角阵T:,其中 \alpha_0 & \beta_1 & 0 & 0 & \dots \\ \beta_1 & \alpha_1 & \beta_2 & 0 & \dots \\ 0 & \beta_2 &\alpha_3

pandas 常用统计方法

统计方法 pandas 对象有一些统计方法.它们大部分都属于约简和汇总统计,用于从 Series 中提取单个值,或从 DataFrame 的行或列中提取一个 Series. 比如 DataFrame.mean(axis=0,skipna=True) 方法,当数据集中存在 NA 值时,这些值会被简单跳过,除非整个切片(行或列)全是 NA,如果不想这样,则可以通过 skipna=False 来禁用此功能: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

语音通信系统网络资源分析统计方法

语音通信系统网络资源分析统计方法 针对语音通信中资源占用情况,本文档数据统计从两方面分析,磁盘读写和网络资源带宽分配, 磁盘读写 磁盘读写分析统计是通过iostat(linux系统自带工具)进行的. 用法:iostat 环境:20服务器两个号码4901和4902 结论:单路视频情况下,对磁盘读写影响非常小,近乎不占用磁盘 网络资源带宽分配 网络资源带宽分析统计是通过iftraf工具(linux系统自带工具)进行的. 用法:iptraf -deth6  #eth6是监控的网口 按"q"退

ASP.net中网站访问量统计方法代码(在线人数,本月访问,本日访问,访问流量,累计访问)

一.建立一个数据表IPStat用于存放用户信息 我在IPStat表中存放的用户信息只包括登录用户的IP(IP_Address),IP来源(IP_Src)和登录时间 (IP_DateTime),些表的信息本人只保存一天的信息,如果要统计每个月的信息则要保存一个月.因为我不太懂对数据日志的操作,所以创建此表,所 以说我笨吧,哈哈. 二.在Global.asax中获取用户信息 在Global.asax的Session_Start即新会话启用时获取有关的信息,同时在这里实现在线人数.访问总人数的增量统计

基于Boost方法的人脸检测(1):整体思路

先推荐大家看着两篇: [2] Viola P, Jones M J. Robust Real-Time Face Detection[J]. International Journal of Computer Vision, 2004, 57(2):137-154. [3] http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html [4] http://blog.csdn.net/xiaowei_cqu/article/details