自然语言处理中的上下文无关文法(CFG)

来源:互联网 发布:tester软件 编辑:程序博客网 时间:2024/05/22 15:57

一、引言


回忆一下HMM在自然语言处理中的应用,我们所采用的例子主要是词性标注(POS tagging, part-of-speech tagging)。例如我们现在有一个句子:

time flies like an arrow.

然后我们可以为每个标注词性,则有“time/Noun flies/Verb like/Prep an/Art arrow/Noun/”。显然,当我们单独来看单词 flies,它可能是一个Noun,也可能是一个Verb,但是如果它前面那个词是形容词,那么它显然是名词的概率更高,而如果它前面的那个词是名词,则它是动词的可能性更高。所以我们就可以建立一个HMM模型,来根据观测到的状态序列(及历史)来预测具体某个词到底是什么词性。其中,单词的词性就是HMM中的隐状态,而我们所看到的具体的每个词就是观测状态。


HMM在做POS tagging时,由于考虑了一些历史的因素(就是当前词的前几个词),所以它确实是相当有效的。但是HMM这种序列模型其实是把句子看成了一个平的结构,而忽略了自然语言中的层次结构。例如,下面这个句子:

[A man] [saw [a dog] [in [the park]]]

显然,句子是有层级结构的。一些单词组合在一起就会构成句法成分(syntactic constituents),例如主语、谓语、宾语等都是句法成分。句法成分可以作为一个单元,来被替换或者移动。例如上面句子中,A man 是主语,我们可以用另外一个同样可以用作主语的短语来替换它,例如 [John] [saw [a dog] [in [the park]]],这仍然是一个合法的句子。语法就是与句法成分相对应的规则,它可以让我们对上述句法成分的认识形式化、正式化。


二、上下文无关文法(CFG,Context-Free Grammars)


最常被用来对英语(或其他自然语言)之成分结构进行建模的数学系统就是上下文无关文法(CFG),又称为词组结构文法(PSG,Phrase-Structure Grammars)。一个CFG由一系列rules(或productions)组成,每个rule给出了 语言中的符号(symbols)可以被组织或排列在一起的规则,以及符号和单词构成的字典(lexicon)。

其中,符号(symbols)被分成两类:

  • Terminals:就是指单词,例如 book
  • Non-terminals:句法标签,例如 NP 或者 NN

Rules(或productions)则是由一个 “→” 连接的表达式:

  • 左侧(LHS,left-hand side)只有一个 non-terminal;
  • 右侧(RHSright-hand side)是一个由 symbols 组成的有序的list。

例如,下面就给出了一个简单的CFG示例

Terminal symbols: rat, the, ate, cheese
Non-terminal symbols: S, NP, VP, DT, VBD, NN

Productions:
S → NP VP
NP → DT NN
VP → VBD NP
DT → the
NN → rat
NN → cheese
VBD → ate


下面我们试着利用上面这个CFGs来产生句子。我们总是以S做为开始,S表示句子(sentence),也有说表示开始符(start symbol)。

S

应用规则S → NP VP,则有

NP VP

应用规则NP → DT,则有

DT NN VP

应用规则DT → the, NN→ rat, 则有

the rat VP

应用规则VP → VBD NP,则有

the rat VBD NP

应用规则VBD → ate,则有

the rat ate NP

应用规则NP → DT NN,则有

the rat ate DT NN

应用规则DT → the, NN→ cheese, 则有

the rat ate the cheese


上述推演过程,用树来表示非常方便。其中,terminals都是位于叶子节点,而non-terminals则都是非叶子节点,如下图所示,这个树形的结果刚好也很好地体现出了本文最开始所说层次结构。

或者,也可以采用下面这样的一种更加紧凑的形式来表示上面这棵syntactic tree(或称parse tree)。

一个CFG的正式定义通常由四元组N, ∑, R, S 来表示:


三、语法解析


与CFG相关的一个操作就是语法解析(Parsing)。语法解析就是指在给定词串的情况下,例如the rat ate the cheese,来识别其可能的语法结构。

常用的语法解析算法有

  • 自下向上(从单词开始,工作朝向S进行):CKY算法(另见http://blog.csdn.net/baimafujinji/article/details/6476776)
  • 自上向下(从S开始,工作朝向单词进行):Earley算法


(全文完)



原创粉丝点击