PKU Paraphrase Bank文章解读:句级中文文本复述语料库

前两天查文本复述的资料的时候发现9月30号北大release了一批中文文本复述语料,就去看了一下,发现这篇文章用的方法都比较经典,易于理解,在这里做一个总结。

文章目录

  • 文本复述定义
  • 语料库概况
    • 数据来源
    • 数据规模
  • 无监督语料库生成方法
    • 流程概览
    • 数据预处理
    • 分数模型
      • 整体模型
      • SCORE函数之完全匹配得分
      • SCORE函数之语义得分
      • SCORE函数的线性组合
    • 计算的优化
      • 位置限定
      • 快速剪枝
  • 语料库质量分析
    • 语料库统计分析
    • 多语料库对比分析
  • 总结

文本复述定义

文本复述研究的主要对象是‘词语以上,句子以下’的语言单元,不涉及到段落级的改写问题。与文本相似相比,还需要考虑语义的相似性。比如:
S1: 我吃了晚饭
S2: 我吃了早饭
这两句话很像(文本相似),但意义却不一样,不能互为文本复述。

常见的文本复述类型有(来源某篇论文,不记得哪篇了):
PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第1张图片

语料库概况

PKU Paraphrase Bank: A Sentence-Level Paraphrase Corpus for Chinese
论文地址
语料库地址

数据来源

40部经典小说的95个译本,小说包括《基督山伯爵》《飘》《大卫科波菲尔》等。即每部小说选取2-3个译本。译本来源于网络。

这是很经典的枢轴(pivot)方法:采用同一文本(枢轴)的不同翻译作为文本复述模板的资源获取方法。

“由于每次翻译过程均要求源语言和目标语言中文本的语义保持一致,因此可以预期最后得到的文本在语义上能跟输入文本保持一致。”

举个文章中的例子(上面两句互为文本复述,下面两句互为文本复述):PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第2张图片

数据规模

509,832 (50w+) 组句对,大约是常见语料库(例如:Twitter News URL Corpus) 的10倍以上。平均每句23.05个词。

无监督语料库生成方法

流程概览

PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第3张图片

数据预处理

要点已经总结在上图中了。
首先,通过OCR工具将下载的pdf文件转换为plain text.
在格式清理的步骤中,需要将匹配用不到的头注,脚注,页码和注释等手动规则移除。
然后,通过。?!进行句子分割。少于6个单词的句子并入前句。
最后一步,利用Sun等人2011年提出的无监督方法Enhancing Chinese word segmentation using unlabeled data进行中文分词。

分数模型

这个语料库选取的数据来源有一个好处:由于原始翻译是按照句到句的方式进行的,所以理想情况下每一句都能够对应上。在这个前提下,我们就把问题转化成了两个文本T1和T2 中句子的对齐/匹配问题。

整体模型

对于T1中的每一个句子Ti1 和T2 中的每一个句子Tj2, 定义对齐矩阵C:
C i j = { 1 i f   T i 1   a n d   T j 2   m a t c h 0 o t h e r w i s e C_{ij}=\left\{ \begin{array}{rcl} 1 & & {if\ T_i^1\ and\ T_j^2\ match}\\ 0 & & {otherwise} \end{array} \right. Cij={10if Ti1 and Tj2 matchotherwise

我们优化的目标是:

max. ∑ i = 1 N 1 ∑ j = 1 N 2 C i j × SCORE ( T i 1 , T j 2 ) \textup{max.} \sum_{i=1}^{N^1}\sum_{j=1}^{N^2}C_{ij}\times \textup{SCORE}(T_i^1, T_j^2) max.i=1N1j=1N2Cij×SCORE(Ti1,Tj2)

其中,N1为文本T1中的句子数目,N1为文本T2中的句子数目。即,我们优化的目标是尽量使分(SCORE)高的句对Ti1 和Tj2得到Cij=1.

同时,我们有约束条件:
∑ i = 1 N 1 C i j = 1   f o r   a l l   1 ≤ i ≤ N 1 \sum_{i=1}^{N^1}C_{ij}=1\ for\ all\ 1 \leq i \leq N^1 i=1N1Cij=1 for all 1iN1

∑ j = 1 N 2 C i j = 1   f o r   a l l   1 ≤ j ≤ N 2 \sum_{j=1}^{N^2}C_{ij}=1\ for\ all\ 1 \leq j \leq N^2 j=1N2Cij=1 for all 1jN2

C i 1 j 2 + C i 2 j 1 ≤ 1   f o r   a l l   1 ≤ i 1 ≤ i 2 ≤ N 1 f o r   a l l   1 ≤ j 1 ≤ j 2 ≤ N 2 C_{i_1j_2}+C_{i_2j_1}\leq1\ for\ all\ 1 \leq i_1 \leq i_2 \leq N^1 for \ all\ 1 \leq j_1 \leq j_2 \leq N^2 Ci1j2+Ci2j11 for all 1i1i2N1for all 1j1j2N2

约束条件满足了我们的假设——T1每个句子有且只有一个T2中的对应句。同时,分越高,说明匹配越好。

下一步就是定义合理的SCORE函数。

SCORE函数之完全匹配得分

SCORE函数分为两部分。按照原文的说法,是high-dimensional sparse space(高维度稀疏空间)和low-dimensional dense space(低维度稠密空间). 按照我的理解,对应的就是embedding前后。

第一部分,high-dimensional sparse space scoring, AKA 完全匹配得分,起到了anchor的作用。如果两个句子重合的词越多,说明这两个句子越有可能匹配。

同时,文章引入了TF-IDF词频的概念,对不同的重合单词赋予了不同权重,越罕见的单词权重越高。单词频数和全重的关系如下:

W k = l o g ( N 1 + N 2 f w k ) W_k=log(\frac{N^1+N^2}{f_{w_k}}) Wk=log(fwkN1+N2)


单 词 权 重 = l o g ( 文 本 1 句 子 数 + 文 本 2 句 子 数 文 本 1 单 词 k 出 现 次 数 + 文 本 2 单 词 出 现 次 数 ) 单词权重=log(\frac{文本1句子数+文本2句子数}{文本1单词k出现次数+文本2单词出现次数}) =log(1k+21+2)

最终这一部分的得分为:句对Ti1 和Tj2 中所有重合的单词*该单词权重的和

S s p ( T i 1 , T j 2 ) = ∑ t = 1 ∣ Q i 1 ⋂ Q j 2 ∣ W t 2 ∑ t = 1 ∣ Q i 1 ∣ W t + ∑ t = 1 ∣ Q i 1 ⋂ Q j 2 ∣ W t 2 ∑ t = 1 ∣ Q j 2 ∣ W t , i ∈ ( 1 , . . . , N 1 ) , j ∈ ( 1 , . . . , N 2 ) S_{sp}(T_i^1, T_j^2)=\frac{\sum_{t=1}^{|Q_i^1\bigcap Q_j^2|}W_t}{2\sum_{t=1}^{|Q_i^1|}W_t}+\frac{\sum_{t=1}^{|Q_i^1\bigcap Q_j^2|}W_t}{2\sum_{t=1}^{|Q_j^2|}W_t}, i\in(1, ..., N^1), j\in(1, ..., N^2) Ssp(Ti1,Tj2)=2t=1Qi1Wtt=1Qi1Qj2Wt+2t=1Qj2Wtt=1Qi1Qj2Wt,i(1,...,N1),j(1,...,N2)

SCORE函数之语义得分

这一部分直接借用了pre-trained BERT的结果,计算每个句对中Ti1 和Tj2 的cosine相似度,反应了句对的语义相似度,是现在比较常见的做法。

S d e ( T i 1 , T j 2 ) = B e r t ( T i 1 ) ⋅ B e r t ( T j 2 ) ∥ B e r t ( T i 1 ) ∥ ⋅ ∥ B e r t ( T j 2 ) ∥ , i ∈ ( 1 , . . . , N 1 ) , j ∈ ( 1 , . . . , N 2 ) S_{de}(T_i^1, T_j^2)=\frac{Bert(T_i^1)\cdot Bert(T_j^2)}{\left \| Bert(T_i^1)\right \|\cdot\left \| Bert(T_j^2) \right \|}, i\in(1, ..., N^1), j\in(1, ..., N^2) Sde(Ti1,Tj2)=Bert(Ti1)Bert(Tj2)Bert(Ti1)Bert(Tj2),i(1,...,N1),j(1,...,N2)

SCORE函数的线性组合

通过超参数 λ \lambda λ( λ \lambda λ=0.8)把上面两个SCORE function结合起来:
S ( T i 1 , T j 2 ) = λ S s p ( T i 1 , T j 2 ) + ( 1 − λ ) S d e ( T i 1 , T j 2 ) S(T_i^1, T_j^2) = \lambda S_{sp}(T_i^1, T_j^2) + (1-\lambda) S_{de}(T_i^1, T_j^2) S(Ti1,Tj2)=λSsp(Ti1,Tj2)+(1λ)Sde(Ti1,Tj2)

计算的优化

Naive的情况下,做两个文本的匹配,需要算出两个文本中每一个句对的得分,复杂度O(N1*N2)。但在文本很大的情况下,计算较慢。本文采用两种贪心思想进行优化。

位置限定

基于翻译的前后连贯性、对应性与逻辑性,认为文本1中i位置出现的句子,在文本2中的位置ji-L<=j<=i+L. 因此,实际计算中只考虑在文本中位置相差不超过L(超参数)的句对间的匹配得分。

快速剪枝

语义相似度得分的计算较慢。观察后,作者添加了一条剪枝规则:移除高频词后,若两个句子间没有重叠词语,则不计算两个句子间的匹配得分。

语料库质量分析

语料库统计分析

所有实验用到的70w+句对分布见下图。
PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第4张图片
为了检查句对匹配的结果,作者将不同得分的句对分为了5组,每组抽取100组句对,人为对这些句对进行了检查。

结果显示,整体匹配结果的准确度达到了92%,匹配分值最高的前60%句对准确度达到了97%,表明了文章中方法的有效性。
PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第5张图片

多语料库对比分析

由于缺乏可比的中文语料库,原文中,作者借用三个英文语料库进行了简单对比。总体来看,本文产生的语料库规模更大。
PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第6张图片
另一方面,作者分析了这四个语料库的多样性得分。

多样性得分(PINC)是Chen等人2011年定义的,它的含义和BLEU相反:句对间n-gram的co-occurence/同时出现的次数越少,得分越高。这意味着,虽然这两个句子意思相同,但它们“看起来”更不一样。

PKU Paraphrase Bank文章解读:句级中文文本复述语料库_第7张图片
作者表明,由于Twitter等网络用户的表达习惯更随意,句子更短,所以PINC得分更高。而MSRP数据集由于使用了新闻类正式的文本,且句子较长,出现重复n-gram的几率就更高,PINC得分就相对偏低。但是,这篇文章产生的语料库,虽然也是从正式文本中生成,但是PINC得分相较MSRP更高,具有更好的实用价值。

总结

常见的文本复述方法多依赖于有孪生结构的深度神经网络,对label的要求较高,这篇文章使用了无监督的方法生成了大量的匹配label数据,对中文环境下的文本复述识别、生成很有帮助。

并且,像开始说到的,这篇文章用到的方法都比较popular, 并且可解释性很强,可以作为NLP/文本复述的前期入门理解文章,非常适合我。

但同时,这篇文章有一个局限性:要求文本内有且仅有一个匹配的句子。这一点可能会限制文章中方法的应用。

还是很希望看到这篇文章的源代码~

你可能感兴趣的:(NLP)