成分句法分析

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

    TOP
    |
    IP-HLN
    ______|________________
    IP-TPC | |
    ___________|______ | |
    | VP | |
    | ______|_____ | |
    | PP-DIR | | |
    | ____|______ | | |
    NP-PN-SBJ | NP VP NP-SBJ VP
    | | | | | |
    NR P NN VV NN VV
    | | | | | |
    广西 对 外 开放 成绩 斐然
  • 自己写的:

反之通过小的成分慢慢递归到更高的层次(一句话),从而理解这句话的意思。

更详细的解释:

  1. Dependency structure shows which words depend on (modify or are arguments of) which other words.
  2. 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.
  3. 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
2
3
4
5
6
7
8
9
10
11
  (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)
(tags_embedding): Embedding(40, 64)
(span_mlp_l): MLP(n_in=320, n_out=500, dropout=0.33)
(span_mlp_r): MLP(n_in=320, n_out=500, dropout=0.33)
(label_mlp_l): MLP(n_in=320, n_out=100, dropout=0.33)
(label_mlp_r): MLP(n_in=320, n_out=100, dropout=0.33)
(span_attn): Biaffine(n_in=500, bias_x=True)
(label_attn): Biaffine(n_in=100, n_out=1222, bias_x=True, bias_y=True)
(crf): CRFConstituency()
(criterion): CrossEntropyLoss()
)

作者在这里使用了Two Stage的方式来预测最大概率上下文无关树。

  1. First Stage预测Span Scorer,即句子级的全局TreeCRF损失,目的是最大化无标签树的条件概率。
    TreeCRF使用inside算法获取关于句子W的概率P(W|G)。
  2. Two Stage为labeling阶段,这里损失函数使用交叉熵。

解码部分使用cky算法,来获取句子的最佳结构,然后使用totree将其还原成树结构。

其解码过程可参考宗成庆老师的示例,其示例过程如下。

总结

目前在这块的研究或者在工业界使用的没有像dependency parser那么成熟。
个人分析原因如下:

  1. 这个任务偏语言学化。这个任务是完成从词到句子的整个构建过程,从而解决歧义等问题,但是目前的预训练模型一般涵盖了语义这方面信息。
  2. 复杂度高。其中使用的insidecky算法复杂度太高。另外一方面是tree的层次太复杂。不像dependency parser线性结构更为直接。
  3. 任务难度高。 这个任务在宗成庆老师的书里历史悠久~。另外所涉及到的知识也多,比如PCFG,CKY,CNF。要理解这部分就已经非常困难。

再往最近基本就没啥成果出来了。

[扩展阅读]

  1. https://zhuanlan.zhihu.com/p/133462196
  2. https://www.cs.cornell.edu/courses/cs5740/2017sp/lectures/13-parsing-const.pdf
  3. 中文版论文
  4. Fast and Accurate Neural CRF Constituency Parsing
  5. yzhangcs毕业论文
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值