NLP中的树结构

来源:互联网 发布:旅游一次性用品 知乎 编辑:程序博客网 时间:2024/05/21 11:12

NLP中的树结构


树结构的分类

  NLP中常见的树结构有两种,一种是Dependency Tree即依存树,另一种是Constituency Tree(即短语结构树,为了提高准确率,Constituency Tree往往以二叉形式给出)。
  下面是几个简单的例子(图片来自网络):
  

Constituency Tree

  
  这里写图片描述
  

Constituency Tree(二叉形式)

  
  这里写图片描述
  

Dependency Tree

  这里写图片描述
  

树结构解析格式的分类

  树结构解析最常用的工具是Stanford Parser(Stanford NLP)。
  树结构解析的结果格式多样,但是万变不离其宗,大体有以下几种格式:

1.标注边

  多见于依存树,除了标注边之外,还可以对边标注关系。以上面例子中的句子为例,可以描述为:

(ROOT,喜欢)
(喜欢,猴子)
(喜欢,香蕉)
(喜欢,吃)
(吃,香蕉)

2.递归用括号语法给出树

  多见于短语结构树,除了给出树,还方便标注细粒度的信息和句子/短语成分,以Stanford Sentiment Treebank(SST)数据集某一个格式为例,可以描述为:

( ROOT
  ( S
    ( NP ( NNP bromwell ) ( NNP high ) )
    ( VP ( VBZ is )
       ( NP ( DT a ) ( NN cartoon ) ( NN comedy ) )
     )
    ( . .)
   )
)

3.父节点数组给出树

  这个做法类似并查集表示森林的格式。可以表示任何一种树机构。如果父节点数组中除了父节点编号还包含其他信息,相当于标注边的表示。

Dependency parsing

  依赖树的解析是一个很重要的任务,近年来NLP任务中依赖树应用越来越广泛,早年有很多句法结构树的树库,如何转化为依赖树也是一个值得研究的方向。
  

UAS/LAS

  这是依赖树解析的评价指标,把算法标的依赖树的边和标准答案对比,标对的边的百分比就是准确率。
  UAS:仅仅要求边的两个顶点标对。
  LAS:要求边的顶点和关系都标对。
  

Transition-based denpendency parsing

  Dependency tree parsing常见的方法是,把依赖树的建立算法看作一个自动机状态转化的过程,那么依赖树的建立算法可以看作在当前状态下做出最优决策算法。
  

初始状态 σ = [ROOT], β = w1, …, wn , A = ∅
转移操作:
1. Shift σ, wi|β, A 转移到 σ|wi, β, A
2. Left-Arcr σ|wi|wj, β, A 转移到 σ|wj, β, A∪{r(wj,wi)}
3. Right-Arcr σ|wi|wj, β, A 转移到 σ|wi, β, A∪{r(wi,wj)}
结束状态 σ = [ROOT], β = ∅

例如下图(来自Stanford)描述了一个依赖树的建立过程:

I ate fish,对应自动机Transition为[SSLSRR]

容易知道,长为n的句子,序列中有n个S(一共n+1个结点,[ROOT]初始已经在里面了),n个L/R(一共n条边)。

这里写图片描述

  注意,这样解析出来的依存树的投影结构没有边交叉(projectivity)。对于Non-projectivity的依存树,这种算法是解析不出来的。

Transition-based denpendency parsing的算法

  这样转化的的好处是,我们只要训练自动机某个状态下让算法给出转移就好了。

基于概率自动机(HMM)

  有一种直接的想法是,自动机可能无法确定转移,所以认为是概率转移的。那么这就是一个概率自动机,只要HMM找到路径概率最大的Finish状态就好了。概率自动机和马尔科夫过程是等价的,所以可以用HMM算法。
  

基于神经网络

  或者直接训练状态到转移的学习算法,而每个状态可以抽feature,再使用MLP之类的神经网络来预测转移。
  但是MLP只是单步转态决策单步,可能需要考虑多步。如果根据多步历史状态决策最优状态,可以用LSTM,决策多步最优状态,可以考虑beam-search,综合一下可以考虑Seq2Seq模型。

Constituency Tree转化为Dependency Tree

  早期有很多基于规则或者个概率转移的Constituency Parsing算法。
  也有很多Constituency Treebank,为了转化为Dependency Treebank,只需要把Constituency Tree的子树根节点上放这个子树span内的head word就可以了,这个过程可以递归完成。
  例如下图(图片来自网络):
  这里写图片描述


NLP中的树结构处理思路

CRF

  树结构上的概率图模型,可以应用CRF

Tree-LSTM

  树结构上可以应用LSTM

转化为feature-based

  例如上面讲到的Transition-based就是转化为feature-based的非树结构了。
  


NLP中的树结构数据集

conll数据集

conll格式介绍

  我们这里仅仅用conll数据集做dependency parsing,_表示不考虑标注的其他信息,数据集格式大致如下,以下为测试集第一句话的例子:
  

id word _ pos pos _ head label _ _
1 No _ ADV DT _ 7 discourse _ _
2 , _ PUNCT , _ 7 punct _ _
3 it _ PRON PRP _ 7 nsubj _ _
4 was _ VERB VBD _ 7 cop _ _
5 n’t _ PART RB _ 7 neg _ _
6 Black _ PROPN JJ _ 7 compound _ _
7 Monday _ PROPN NNP _ 0 root _ _
8 . _ PUNCT . _ 7 punct _ _

一种conll wrapper规范

 parser, embeddings, train_examples, dev_set, test_set = \        load_and_preprocess_data(debug)

  获得的train_examples是已经基于transtition-based的案例,是list,里面每一项对应一个tuple: (feature, x_one_hot_vector, x),feature格式由抽feature的函数接口决定。
  然后dev_set / test_set是list,每一项对应一个dict, dict内包含word,pos , head, label信息,head是计算UAS的信息,labal计算LAS的信息。pos标注词性,word单词内容,这些不用于计分。

SST数据集

SST数据集介绍

  斯坦福情感识别树库数据集(Stanford Ssentiment Treebank,简称为SST)。
  数据集train/dev/test分别有8544/1101/2210个句子,给出句子的文本以及二叉树形式的句子结构树(Constituency Tree)。
  给出239232(239k)个细粒度情感标签,标签是[0,1]间的实数, [0, 0.2], (0.2, 0.4], (0.4, 0.6], (0.6, 0.8], (0.8, 1.0]五个区间分别对应五分类情感。
  本数据集的评价指标是句子五分类情感正确率(Fine-grained)和非中性句子的正负情感分类正确率(Binary)。
  

一种SST wrapper规范

train, dev, test = get_data()

train/dev/test是list,里面每一项对应一棵树,这棵树class定义为:

class TreeType:    def __init__(self, score, word_list, child_list):        # 表示结点的信息        self.score = score        self.word_list = word_list        # 子树节点列表        self.child_list = child_list        # 辅助计算的变量        ...
原创粉丝点击