语法分析 - ustcai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf ·...

30
语法分析 节汇, 2009.08.06

Upload: others

Post on 08-Oct-2020

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

语法分析

姜节汇, 2009.08.06

Page 2: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

ProgrammingCodingHacking

Page 3: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

语法分析就是parsing,语法分析器就是parser。其输入是语法规则表和单词串,输出是语法树。语法树的每个中间结点表示一个符合语法的词组,每个叶结点是一个单词。

Page 4: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

UPenn Treebank标准的词性标注符号

NN 名词VB 动词 NP 名词短语VP 动词短语S 句子

Page 5: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

CFG: Context-Free Grammar

上下文无关文法:由一组语法规则构成。每个语法规则有一个头部词性,若干个体部词性。例如:S = NP VPNP = NNVP = VBVP = VB NP

Page 6: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

preterminal的规则:头部是词性,体部唯一且是单词。例如:NN = manVBZ = movesVB = doAUX = do

Page 7: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

词性的标注由Tagger完成。这实际上完成了preterminal规则的功能。parser的输入从单词的串简化为单词词性的串。

例句:The/DT cat/NN chases/VBZ the/DT snake/NN ./.

Page 8: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

一个典型的任务是从 NN VB NN的串建立这样的语法树:(S (NP (NN)) (VP (VB) (NP (NN))))

Page 9: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

对上下文无关文法,典型的算法是自底向上的语法分析,其本质是广度优先搜索。

Page 10: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

广度优先搜索

1. 将闭结点表初始化为空,开结点表初始化为开始结点2. 开始循环3. 如果开结点表为空,跳出循环,结束4. 取出开结点表的队首结点,令它为当前结点5. 如果当前结点为目标结点,报告成功,输出解6. 展开当前结点,找到当前结点所导向的所有结点,做成新结

点表7. 在新结点表中删去已经存在于闭结点表和开结点表中的结点8. 把新结点表放入开结点表的队尾9. 把当前结点从开结点表删除,放入闭结点表的队尾

10. 跳转到2

Page 11: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

广度优先搜索的几个关键问题

1.什么是结点?2.什么是初始结点?3.什么是目标结点?4.如何展开?

Page 12: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

八皇后问题的广度优先求解

1. 结点是棋盘2. 初始结点是空棋盘3. 目标结点是有8个皇后的安全棋盘4. 展开:在一个有n列上放了皇后的安全棋盘上放上第n+1个皇后。只有安全棋盘才被承认为新结点。一个结点最多展开为8个结点,实际上总是少于这个数目。

Page 13: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

自底向上的语法分析作为广度优先求解

一些专用术语:agenda = 开结点表chart = 开结点表 + 闭结点表

这种语法分析的算法叫做chart parsing。

Page 14: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

第一,结点是边,即edge。一个edge连结两个“分界符”,自身有一个词性。分界符出现在句首、句尾、以及两个单词之间。一个有n个单词的句子,必有n+1个分界符。

Page 15: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

例如:0 NN 1 VB 2 NN 3 这里0、1、2、3是分界符。 edge[NP](0,1)表示NN这个串,它只有一个单词。edge[VP](1,3)表示VB NN 这个串,它有两个单词。

Page 16: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

简而言之:class edge{ String category; int start; int end;}; 但其实一个edge也是一个语法子树。

Page 17: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

第二,初始结点是所有的preterminal的语法标记。 例如:0 NN 1 VB 2 NN 3它几乎就是输入数据的格式,我们将它作为初始结点的集合。{ edge[NN](0,1), edge[VB](1,2), edge[NN](2,3) }

edge的表示方法使得它可以统一地表示一个单词或多个单词。 没有人规定初始结点只能有一个。

Page 18: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

第三,目标结点是edge[S](0,END)

Page 19: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

第四,展开的方式是使用给定语法规则。 对当前结点edge,1. 它本身是否与某个语法规则的体匹配2. 在chart中寻找所有能拼在它左边的edge,看是否与某个语法规则的体匹配3.在chart中寻找所有能拼在它左边的edge,看是否有某个语法规则的体匹配

Page 20: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

例句:0 NN 1 VB 2 NN 3

edge[NN](0,1) -> { edge[VB](1,2), edge[NN](2,3) } + { edge[NP](0,1) }edge[VB](1,2) -> { edge[NN](2,3), edge[NP](0,1) } + { } edge[NN](2,3) -> { edge[NP](0,1) } + { edge[NP](2,3) }edge[NP](0,1) -> { edge[NP](2,3) } + { }edge[NP](2,3) -> { } + { edge[VP](1,3) }edge[VP](1,3) -> { } + { edge[S](0,3) }edge[S](0,3) -> success

Page 21: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

二元规则:每个规则的体最多有2个项,至少有1个项。 带间接宾语的动词的直观规则:VP = VB NP NP改写为:VB_NP = VB NPVP = VB_NP NP 一般疑问句等情况也可以按照上述方法改写。这也就避免了“活动边非活动边”的讨论。

Page 22: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

chart parsing算法可以应用于各种语言的语法规则集,一个语法规则集可以应用于各种各样不同的句子。

Page 23: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

带概率的上下文无关文法的语法分析PCFG(Probabilistic Context-Free Grammar):给每个语法规则标上概率,使用A*算法。

例如:VP = VB (0.3)VP = VB NP (0.65)VP = VB_NP NP (0.05)

Page 24: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

A*算法与广度优先相比,多2行:1. 对每个新结点,在加入开结点表时,计算它的启发值2. 在取出当前结点前,对开结点表排序 粗略地讲,在语法分析中,一个结点的启发值与这个结点之下的所有的语法规则的概率的总体有关。

Page 25: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

在PCFG中,基本上不存在不合法的语法,任何的单词词性组合都有其语法规则。只不过比较离谱的语法搭配获得的概率较小而已。 所以,PCFG一般的算法不是求一个S结点,而是求一个概率(启发值)较高的S结点。

Page 26: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

PCFG的概率一般通过treebank训练得到

Page 27: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

歧义的例子:I saw the man with a telescope. 在home组的工作中遇到的歧义句:Put the bottle which is on the television on the table. 最可靠的方法将是把这个句子的不同解释分别拿去与当前知识库对照,找出最符合当前知识库的那个解释。

Page 28: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

如果要求广度优先算法给出所有的歧义解,则它必须穷举搜索。对于语法规则不多的语言,这是可行的。 PCFG可以有选择地给出一些歧义解。

Page 29: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

连接语法:Link Grammar

定义一组连接,可以用以连接两个单词。例如:主谓关系的连接,冠词与名词的连接。

语法分析的结果就是在一句话的各个单词间建立各种连接。

这些连接是不能交叉的。

Page 30: 语法分析 - USTCai.ustc.edu.cn/cn/seminar/files/nlp_1.pdf · 语法分析就是parsing,语法分析器就 是parser。其输入是语法规则表和单 词串,输出是语法树。

连接语法的语法分析算法

试图在单词L和R上建立连接如果成功,则对所有单词W:L<W<R

试图在L+1, W间建立连接 试图在W,R-1间建立连接

对i: 1<=i<=n,试图在单词0和单词i之间建立连接