PKU Paraphrase Bank文章解读:句级中文文本复述语料库
前两天查文本复述的资料的时候发现9月30号北大release了一批中文文本复述语料,就去看了一下,发现这篇文章用的方法都比较经典,易于理解,在这里做一个总结。
文章目录
- 文本复述定义
- 语料库概况
- 数据来源
- 数据规模
- 无监督语料库生成方法
- 流程概览
- 数据预处理
- 分数模型
- 整体模型
- SCORE函数之完全匹配得分
- SCORE函数之语义得分
- SCORE函数的线性组合
- 计算的优化
- 位置限定
- 快速剪枝
- 语料库质量分析
- 语料库统计分析
- 多语料库对比分析
- 总结
文本复述定义
文本复述研究的主要对象是‘词语以上,句子以下’的语言单元,不涉及到段落级的改写问题。与文本相似相比,还需要考虑语义的相似性。比如:
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:
Cij={1ifTi1andTj2match0otherwiseC_{ij}=\left\{ \begin{array}{rcl} 1 & & {if\ T_i^1\ and\ T_j^2\ match}\\ 0 & & {otherwise} \end{array} \right. Cij={10ifTi1andTj2matchotherwise
我们优化的目标是:
max.∑i=1N1∑j=1N2Cij×SCORE(Ti1,Tj2)\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=1N1Cij=1forall1≤i≤N1\sum_{i=1}^{N^1}C_{ij}=1\ for\ all\ 1 \leq i \leq N^1i=1∑N1Cij=1forall1≤i≤N1
∑j=1N2Cij=1forall1≤j≤N2\sum_{j=1}^{N^2}C_{ij}=1\ for\ all\ 1 \leq j \leq N^2j=1∑N2Cij=1forall1≤j≤N2
Ci1j2+Ci2j1≤1forall1≤i1≤i2≤N1forall1≤j1≤j2≤N2C_{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^2Ci1j2+Ci2j1≤1forall1≤i1≤i2≤N1forall1≤j1≤j2≤N2
约束条件满足了我们的假设——T1每个句子有且只有一个T2中的对应句。同时,分越高,说明匹配越好。
下一步就是定义合理的SCORE函数。
SCORE函数之完全匹配得分
SCORE函数分为两部分。按照原文的说法,是high-dimensional sparse space(高维度稀疏空间)和low-dimensional dense space(低维度稠密空间). 按照我的理解,对应的就是embedding前后。
第一部分,high-dimensional sparse space scoring, AKA 完全匹配得分,起到了anchor的作用。如果两个句子重合的词越多,说明这两个句子越有可能匹配。
同时,文章引入了TF-IDF词频的概念,对不同的重合单词赋予了不同权重,越罕见的单词权重越高。单词频数和全重的关系如下:
Wk=log(N1+N2fwk)W_k=log(\frac{N^1+N^2}{f_{w_k}})Wk=log(fwkN1+N2)
即
单词权重=log(文本1句子数+文本2句子数文本1单词k出现次数+文本2单词出现次数)单词权重=log(\frac{文本1句子数+文本2句子数}{文本1单词k出现次数+文本2单词出现次数})单词权重=log(文本1单词k出现次数+文本2单词出现次数文本1句子数+文本2句子数)
最终这一部分的得分为:句对Ti1 和Tj2 中所有重合的单词*该单词权重的和
Ssp(Ti1,Tj2)=∑t=1∣Qi1⋂Qj2∣Wt2∑t=1∣Qi1∣Wt+∑t=1∣Qi1⋂Qj2∣Wt2∑t=1∣Qj2∣Wt,i∈(1,...,N1),j∈(1,...,N2)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)
SCORE函数之语义得分
这一部分直接借用了pre-trained BERT的结果,计算每个句对中Ti1 和Tj2 的cosine相似度,反应了句对的语义相似度,是现在比较常见的做法。
Sde(Ti1,Tj2)=Bert(Ti1)⋅Bert(Tj2)∥Bert(Ti1)∥⋅∥Bert(Tj2)∥,i∈(1,...,N1),j∈(1,...,N2)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(Ti1,Tj2)=λSsp(Ti1,Tj2)+(1−λ)Sde(Ti1,Tj2)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/文本复述的前期入门理解文章,非常适合我。
但同时,这篇文章有一个局限性:要求文本内有且仅有一个匹配的句子。这一点可能会限制文章中方法的应用。
还是很希望看到这篇文章的源代码~
PKU Paraphrase Bank文章解读:句级中文文本复述语料库相关推荐
- 中文文本分类语料库-TanCorpV1.0
转自 http://www.360doc.com/content/12/0216/21/3430376_187198503.shtml 中文文本分类语料库-TanCorpV1.0 谭松波,王月粉 1 ...
- 字符级中文文本分类-CNN基于TensorFlow实现
向AI转型的程序员都关注了这个号
- 顶刊IJCV 2022!PageNet:面向端到端弱监督篇幅级手写中文文本识别
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->CV微信技术交流群 转载自:CSIG文档图像分析与识别专委会 本文简要介绍2022年8月发 ...
- 文本复述,中文文本数据增强
向AI转型的程序员都关注了这个号???????????? 人工智能大数据与深度学习 公众号:datayx 一.概述 文本复述任务是指把一句/段文本A改写成文本B,要求文本B采用与文本A略有差异的表述 ...
- python 中文文本分类
写这篇博文用了很多时间和精力,如果这篇博文对你有帮助,希望您可以打赏给博主相国大人.哪怕只捐1毛钱,也是一种心意.通过这样的方式,也可以培养整个行业的知识产权意识.我可以和您建立更多的联系,并且在相关 ...
- GitHub开源:17M超轻量级中文OCR模型、支持NCNN推理
目录 1.项目简介 2.项目配置 3.问题解决 1.项目简介 近期GitHub上一位大神开源了一个叫做chineseocr_lite的OCR的项目,这是一个超轻量级中文OCR,支持竖排文字识别.NCN ...
- css表格文字超数量就竖排_绝了,超轻量级中文 OCR,你值得拥有
大家好,我是章鱼猫.今天给大家分享的开源项目是一个今后大数据时代以及图像识别时代非常常用的一个技术. 随着人工智能的发展,图像识别越来越常用,所以,今天推荐的开源项目就是:OCR 相关的. 这个开源项 ...
- 周获 4700 Star 全球疫情数据可视化系统,超轻量级中文 OCR……GitHub 一周热点速览...
作者 | HelloGitHub-小鱼干 来源 | HelloGitHub 摘要:连着两周成绩平平的 GitHub Trending 榜,终于和三月的天气一样进入全面变暖的模式,无论是本周刚开源搭乘 ...
- 牛逼,超轻量级中文 OCR,你值得拥有
[公众号回复 "1024",免费领取程序员赚钱实操经验] 大家好,我是章鱼猫.今天给大家分享的开源项目是一个今后大数据时代以及图像识别时代非常常用的一个技术. 随着人工智能的发展, ...
- 超轻量级中文 OCR,你值得拥有!
小伙伴们,大家好,今天给大家分享的开源项目是一个超轻量级中文 OCR. 随着人工智能的发展,图像识别越来越常用,生活中应用场景比如:发票,火车票,验证码识别,搜题 App 用来识别书本上的试题等等更多 ...
最新文章
- 线性回归和逻辑回归的区别_线性回归
- Systemd 入门及常用命令
- 【整理】SAP货币汇率转换
- 信息系统项目管理师-信息化与信息系统考点笔记(下)
- TCPview 介绍
- 清晰!我们从来都反对“大中台,小前台”的架构设计!
- 从Servlet到JSP,从Model1到Model2
- 图像存在hadoop比在mysql中_比较SQL数据库和Hadoop
- Apsara Stack 技术百科 | 浅谈阿里云混合云新一代运维平台演进与实践
- node.js api接口_如何在Node.js API客户端中正常处理故障
- 华为已经升级鸿蒙系统的机型,鸿蒙系统名单已确认!覆盖55款机型,这些手机将被淘汰!...
- 搜索引擎特征码(转)
- JasperReport+iReport进行java报表开发
- Js批量下载花瓣网及堆糖网专辑图片
- shopex 网店系统 v4.8.5 安装图文教
- 蓝屏总结(二)——系统蓝屏及转储方法
- 【Axure高保真原型】用户详细画像可视化原型模板
- 《资管新规》深度解读
- Python正则表达式中的‘r‘
- 关于stm32ADC采集分压电阻取值
热门文章
- Hyperion神器之SmartView产品(上篇)
- 淦!看了 B 站上的这些 Python 视频,我站起来了!
- CUHK Occlusion Dataset(行人检测数据集)转换为YOLO+VOC数据集
- 三分钟解决Matlab中文乱码问题
- Java显示smart3d数据_[转][smart3d]Smart3D之手动配置 S3C 索引加载全部的OSGB瓦片数据...
- SQL Server 2008R2密钥
- sql删除重复数据只保留一条的操作方法
- rv1126 固件编译规则
- 发那科机器人点位编辑_分步详解 | 发那科机器人如何进行零点标定
- windows如何安装pycharm2022版本?pycharm如何安装汉化语言包{www.423zy.com}