前两天查文本复述的资料的时候发现9月30号北大release了一批中文文本复述语料,就去看了一下,发现这篇文章用的方法都比较经典,易于理解,在这里做一个总结。
文本复述研究的主要对象是‘词语以上,句子以下’的语言单元,不涉及到段落级的改写问题。与文本相似相比,还需要考虑语义的相似性。比如:
S1: 我吃了晚饭
S2: 我吃了早饭
这两句话很像(文本相似),但意义却不一样,不能互为文本复述。
PKU Paraphrase Bank: A Sentence-Level Paraphrase Corpus for Chinese
论文地址
语料库地址
40部经典小说的95个译本,小说包括《基督山伯爵》《飘》《大卫科波菲尔》等。即每部小说选取2-3个译本。译本来源于网络。
这是很经典的枢轴(pivot)方法:采用同一文本(枢轴)的不同翻译作为文本复述模板的资源获取方法。
“由于每次翻译过程均要求源语言和目标语言中文本的语义保持一致,因此可以预期最后得到的文本在语义上能跟输入文本保持一致。”
举个文章中的例子(上面两句互为文本复述,下面两句互为文本复述):
509,832 (50w+) 组句对,大约是常见语料库(例如:Twitter News URL Corpus) 的10倍以上。平均每句23.05个词。
要点已经总结在上图中了。
首先,通过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=1∑N1j=1∑N2Cij×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=1∑N1Cij=1 for all 1≤i≤N1
∑ 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=1∑N2Cij=1 for all 1≤j≤N2
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+Ci2j1≤1 for all 1≤i1≤i2≤N1for all 1≤j1≤j2≤N2
约束条件满足了我们的假设——T1每个句子有且只有一个T2中的对应句。同时,分越高,说明匹配越好。
下一步就是定义合理的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(文本1单词k出现次数+文本2单词出现次数文本1句子数+文本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)=2∑t=1∣Qi1∣Wt∑t=1∣Qi1⋂Qj2∣Wt+2∑t=1∣Qj2∣Wt∑t=1∣Qi1⋂Qj2∣Wt,i∈(1,...,N1),j∈(1,...,N2)
这一部分直接借用了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)
通过超参数 λ \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中的位置j
为i-L<=j<=i+L
. 因此,实际计算中只考虑在文本中位置相差不超过L
(超参数)的句对间的匹配得分。
语义相似度得分的计算较慢。观察后,作者添加了一条剪枝规则:移除高频词后,若两个句子间没有重叠词语,则不计算两个句子间的匹配得分。
所有实验用到的70w+句对分布见下图。
为了检查句对匹配的结果,作者将不同得分的句对分为了5组,每组抽取100组句对,人为对这些句对进行了检查。
结果显示,整体匹配结果的准确度达到了92%,匹配分值最高的前60%句对准确度达到了97%,表明了文章中方法的有效性。
由于缺乏可比的中文语料库,原文中,作者借用三个英文语料库进行了简单对比。总体来看,本文产生的语料库规模更大。
另一方面,作者分析了这四个语料库的多样性得分。
多样性得分(PINC)是Chen等人2011年定义的,它的含义和BLEU相反:句对间n-gram的co-occurence/同时出现的次数越少,得分越高。这意味着,虽然这两个句子意思相同,但它们“看起来”更不一样。
作者表明,由于Twitter等网络用户的表达习惯更随意,句子更短,所以PINC得分更高。而MSRP数据集由于使用了新闻类正式的文本,且句子较长,出现重复n-gram的几率就更高,PINC得分就相对偏低。但是,这篇文章产生的语料库,虽然也是从正式文本中生成,但是PINC得分相较MSRP更高,具有更好的实用价值。
常见的文本复述方法多依赖于有孪生结构的深度神经网络,对label的要求较高,这篇文章使用了无监督的方法生成了大量的匹配label数据,对中文环境下的文本复述识别、生成很有帮助。
并且,像开始说到的,这篇文章用到的方法都比较popular, 并且可解释性很强,可以作为NLP/文本复述的前期入门理解文章,非常适合我。
但同时,这篇文章有一个局限性:要求文本内有且仅有一个匹配的句子。这一点可能会限制文章中方法的应用。
还是很希望看到这篇文章的源代码~