package
写了一个成分分析树的标注包:
https://github.com/geasyheart/constituency-tree-labeling-tool
欢迎Star!!!
本项目代码已privated,更多可直接参考
yzhangcs/parser
.
定义
成分句法分析(Constituency Parser)是将一个句子转换成由短语组成的树,为啥子要这样呢,因为人理解一句话是从这句话里面更小的成分来的,直到最小的成分(词)。
其中叶子节点表示词组和对应的词性,非叶子节点表示的是对应关系,简单看下图:
更多可以看宗成庆老师的《统计自然语言处理第二版》。
例子
NLTK tree:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
TOP
|
IP-HLN
______|________________
IP-TPC | |
___________|______ | |
| VP | |
| ______|_____ | |
| PP-DIR | | |
| ____|______ | | |
NP-PN-SBJ | NP VP NP-SBJ VP
| | | | | |
NR P NN VV NN VV
| | | | | |
广西 对 外 开放 成绩 斐然自己写的:
反之通过小的成分慢慢递归到更高的层次(一句话),从而理解这句话的意思。
更详细的解释:
- Dependency structure shows which words depend on (modify or are arguments of) which other words.
- A dependency parse connects words according to their relationships. Each vertex in the tree represents a word, child nodes are words that are dependent on the parent, and edges are labeled by the relationship.
- It is interested in the dependency relationships between words.
数据处理
1. left binarized
要使用CKY算法,首先要将标注的数据集转成满足乔姆斯基范式的二叉树。作者这里将original tree
通过left binarized
将其转换成符合乔姆斯基范式的CNF Tree
。
当然,这里你也可以使用right binarized,只要能转回原来的tree就行。
2. factorize
将CNF Tree
分解成序列结构,具体实现代码.
原来刷算法时有将binary tree转换成序列结构,没想到这里就有一个~。
随后将其赋值到一个上三角的临接矩阵,长度为seq_len + 1
,具体代码,需要预测的就是上三角。
模型
我在其中加入了tags_embedding
,即词性特征,在charts中[:, 0, 0]恒为-1,因为只需要预测上三角,所以tag[0] = 0,后面使用mask将其忽略掉。
整个任务的指标在开源数据集上提升至将近86%。
1 | (encoder): TransformerEmbedding(hfl/chinese-electra-180g-small-discriminator, n_layers=4, n_out=256, stride=256, pooling=mean, pad_index=0, dropout=0.33, requires_grad=True) |
作者在这里使用了Two Stage
的方式来预测最大概率上下文无关树。
First Stage
预测Span Scorer
,即句子级的全局TreeCRF损失,目的是最大化无标签树的条件概率。
TreeCRF使用inside算法获取关于句子W的概率P(W|G)。Two Stage
为labeling阶段,这里损失函数使用交叉熵。
解码部分使用cky算法,来获取句子的最佳结构,然后使用totree
将其还原成树结构。
其解码过程可参考宗成庆老师的示例,其示例过程如下。
总结
目前在这块的研究或者在工业界使用的没有像dependency parser那么成熟。
个人分析原因如下:
- 这个任务偏
语言学化
。这个任务是完成从词到句子的整个构建过程,从而解决歧义等问题,但是目前的预训练模型一般涵盖了语义这方面信息。 - 复杂度高。其中使用的
inside
和cky
算法复杂度太高。另外一方面是tree的层次太复杂。不像dependency parser线性结构更为直接。 - 任务难度高。 这个任务在宗成庆老师的书里历史悠久~。另外所涉及到的知识也多,比如PCFG,CKY,CNF。要理解这部分就已经非常困难。
再往最近基本就没啥成果出来了。
[扩展阅读]