句子之间的连贯程度如何衡量?

Ways to analyze the local coherence of text

Featured image

上篇讨论了全局连贯性.今天跟大家聊聊语篇局部连贯度分析~
局部连贯是指语篇的句子级别的连贯度,比如前后连接的句子对之间是否连贯.有三种分析局部连贯的角度, 我们将介绍每一个研究角度下的成果.

本文要点

  1. 如何解析句子间的连贯关系(coherence relation)
  2. 如何追踪语篇当下的核心实体
  3. 如何使用纯神经网络给语篇的连贯度打分

如何解析句子间的连贯关系

这个角度的出发点是如果两个句子之间存在某种逻辑关系,那么这段话是连贯的.

理论框架

常用的理论框架是修辞结构理论(Rhetorical Structure Theory).接下来简称RST.
RST分析的最小单位是一对句子或一对词组,句子/词组称为基础语篇单位(Elementary Discourse Unit/EDU)或者语篇段(discourse segment).

RST定义的每一类关系中,都定义了一个核心角色与一个卫星角色.
核心(nucleus) 能够被独立理解,更接近作者的行文目的.
卫星(satellite) 的内容一般需要结合核心去理解. (好生动有没有!)

以下是一小部分RST定义的连贯关系:

RST树干: RST一根树干

RST理论通过给一对对的EDU标注连贯关系,形成像这样解析全文的RST树:
RST树

要注意到这种语篇级别的RST树的标注是很昂贵的,像PDTB这样的数据集就不包含树,只包含句子级别的关系标注.
所以也有只解析句子级别连贯度的解析器,这里简称为PDTB解析好了.

数据集

解析树

如何语篇解析成RST树?
第一步:基础语篇单位切分(EDU segmentation)
——把文本切成小块小块,或者叫语篇切分(discourse segmentation)
第二步: 对EDU们做RST解析 (RST Parsing)
——从下往上合并EDU,自动生成一棵树


如何把文本切成小块

使用RST Discourse Treebank数据集,训练一个序列标注(sequential labelling)模型.被标注为1的位置表示从这里切断句子,分成前后两个EDU.
模型的设计就是典型序列标注任务的套路了: BiLSTM-CRF.

今天以一篇EMNLP 2018的论文为例,看看常用的模型结构. 序列标注模型做文本切分 从下往上看:
a1. 拿到词嵌入向量
先把词过ELMO,得到向量表示r1,再跟另外一个向量表示e1粘起来,得到输入(黄色与绿色)

a2. 得到词语上下文信息
过个BiLSTM,然后把每个time step得到的两个hidden state向量粘起来

a3. 允许模型重视上下文中的特定位置
在一个限定长度的窗口里面算注意力an,也黏到bi-LSTM的输出上,输出

\(\tilde{h_{n}}\)

a4. 判断
最后每个位置的标签由CRF模型决定,求的是序列走到这一步时所有可能标签的条件概率

看到这里你肯定猜到了,没错又有人把词嵌入从ELMO换成了BERT然后刷了一下准确率… BERT做词嵌入 论文传送门
最右边一列就是BERT,BERT在中文数据集上表现平平,在其他语言上BERT的表现很好.
论文原话:BERT contextual embeddings beats all other systems on all datasets – except the Chinese RST treebank –, often by a large margin.


如何做修辞结构解析

理论框架

从1999年以来, RST解析都是用shift-reduce parsing模型框架

Shift-reduce Parser的基本设定

基本框架知道了,那么模型怎么知道选哪个action?

之前的parser是靠一些设定的规则选择shift和reduce.
近几年出现了神经网络风格的RST解析器,今天以论文Transition-based Neural RST Parsing with Implicit Syntax Features为例, 看如何先得到句子向量表示,然后有监督地训练序列分类模型选择action.


只解析句子对

通常被称为浅层语篇解析(shallow discourse parsing),因为任务只涉及span对子之间的联系.而不是像RST解析一样,目标是得到语篇的一整颗树.
使用PDTB这种不包含树结构标注的数据集.

四种不同的子任务

  1. 区分有连贯作用的关联词与没有连贯作用的词
    e.g1. Selling picked up as previous buyers bailed out of their positions and aggressive short sellers—anticipating further declines—moved in.
    and这个关联词有连贯作用, 它用elaboration的关系连接了两个句子
    e.g2. My favorite colors are blue and green
    and这个词在这只是两个词的连接, 没有连贯作用
    以前这个任务是语言学的路子做,今年有了序列分类的做法: 标签是IOB类标签,用CRF+Bi-LSTM
  2. 找到关联词连接的两个句子(span)
    还是序列标注模型
  3. 给任务2中找到的关联词联系起来的两个句子,打关系标签(Coherence Relation Assignment)
    很难的一个任务,已有的方法是使用提示词/提示短语(cue phrase):
    先将句子中的提示词找到; 将文本做语篇切分,得到一个个EDU; 对于相邻的两个EDU,对它俩的关系进行分类
  4. 给任意一对前后句子打关系标签(Implicit Relation Prediction)
    这个子领域目前的SOTA怎么做的呢?简单而有效的一个模型:
    用BERT得到两个span的表示,取 token对应的timestep的hidden state, 过一层tanh,再过一层softmax,得到sense分类的概率分布.

如何追踪语篇当下的核心实体

这个角度的出发点是,如果一些句子在讨论同一个实体,那么这些句子组成的语篇是连贯的.

Centering Theory

认为一个语篇的任意一个位置都有一个单独的实体是显著的(salient),被作为中心(center).
如果邻近的句子们的center是同一个实体,那么它们是CONTINUE的. 不然它们就是在不同的center之间来回SHIFT.

显然Centering Theory这种判断方式的缺点是,规则很死很僵硬,人并不会这样去得到一个文本是否连贯.

Entity grid

用机器学习推测使语篇更连贯的表达套路.听上去就比上面原始的rule-base风格好很多有没有.
使用一个二维矩阵,每一行是一个句子,每一列是一个实体,每一个格子代表某实体是否出现在某句子中,以及它在句子中的语法角色(grammatical role): 主语subject (S), 谓语object (O), 既不是主语也不是谓语neither (X), 实体没出现absent (–).
entity_grid
上图为实例文本d1 的Entity grid
矩阵中密集的列表示该实体被频繁提及,稀疏的列表示实体鲜少被提及.

如何得到这个Entity grid矩阵?

计算这个矩阵需要做命名实体识别任务NER,把句子中的实体都找到,然后还需要做共指消解(coreference resolution)任务,把取出来的实体表达聚类到现实实体上.

Entity grid如何利用这个矩阵衡量语篇的连贯性呢?

计算局部实体转移矩阵(local entity transition).也就是单独看每一列,相邻格子之间值的变化.
打个比方,长度为2的transition,因为每个格子可能的值有4个,就有4^2 = 16种可能.

实体转移矩阵里每个格子就是一种transition在Entity Grid中出现的频率.
比如看上面的文本d1 Entity grid例子,有75个格子
S->S的频率 1/75 = 0.013
S -> -的频率 6/75 = 0.08
local_entity_transition

模型


如何使用纯神经网络给语篇的连贯度打分

三种自监督学习的任务,难度递增

自监督实现打分模型

2019年的Local Coherence Discriminator(LCD)模型为例:
模型需要区别 原文中真正前后相邻的句子对(si, si+1) 和 随机与前边句子配对所生成的句子对(si, s’)
self_supervised 先学出来一个句嵌入模型,能将句子转化成表示向量,然后将相邻句子表示成向量之后,再用一个简单的前馈神经网络得到最后分类(是否是原始文本,即是否连贯).

假设整篇文本的连贯度等于文本中所有前后相邻的两个句子的连贯度的均值.
假设前一句话的句嵌入向量是S,后一句话的句嵌入向量是T.
(这边使用的句嵌入模型不限,可以是任何预训练的生成式模型的编码器部分,或者Glove, InferSent之类)
输入的特征由4个东西组成:
S, T, S - T, |S - T|, S·T

分类使用的就是个简单的Multi-layer Perceptron
一个强力的句嵌入模型被这篇论文证明是的确可以提高任务的准确率的,比如随机排列任务和随机加入任务的分类准确率都会变好.
论文原话 we do benefit from strong pre-trained encoders

衡量困惑度(Perplexity)的新指标

论文还提出可以训练一个预测下一个词的RNN语言模型, 以两种方式计算一个句子s的log likelihood:

  1. 包含上文计算条件log likelihood
  2. 不包含上文计算marginal log likelihood

然后1,2做差,得到上文对预测句子s的影响力度,也可以看做是上文与这个句子之间的连贯性强度.


总结

本文结合最新的论文, 介绍了局部连贯度的三个研究角度的理论和模型.
理论有修辞结构理论(Rhetorical Structure Theory)和中心理论(Centering Theory), 研究框架包括RST解析, PDTB解析, 基于Entity Grid分类,基于句嵌入向量用MLP分类.
由于标注数据昂贵,可以使用自监督方式建立数据集训练.


Reference