NLP中的树结构

释放双眼,带上耳机,听听看~!

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规范


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

获得的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规范


1
2
3
1train, dev, test = get_data()
2
3

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


1
2
3
4
5
6
7
8
9
10
11
12
1class TreeType:
2    def __init__(self, score, word_list, child_list):
3        # 表示结点的信息
4        self.score = score
5        self.word_list = word_list
6
7        # 子树节点列表
8        self.child_list = child_list
9
10        # 辅助计算的变量
11        ...
12

给TA打赏
共{{data.count}}人
人已打赏
安全运维

MongoDB数据建模小案例:物联网时序数据库建模

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索