深度学习应用篇 - 自然语言处理 [10]:N-Gram、SimCSE 介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等
深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE 介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等
1.N-Gram
N-Gram 是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为 N 的滑动窗口操作,形成了长度是 N 的字节片段序列。每一个字节片段称为 gram,对所有 gram 的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键 gram 列表,也就是这个文本的向量特征空间,列表中的每一种 gram 就是一个特征向量维度。
该模型基于这样一种假设,第 N 个词的出现只与前面 N-1 个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计 N 个词同时出现的次数得到。常用的是二元的 Bi-Gram 和三元的 Tri-Gram。
N-gram 的用途很广,比如搜索引擎或者输入法提示,词性标注,垃圾短信分类,分词,机器翻译,语音识别能等等等。
概率计算
假设我们有一个由 n nn 个词组成的句子,如何衡量它的概率呢?让我们假设,每一个单词都要依赖于从第一个单词到到它之前一个单词的影响:
这个衡量方法有两个缺陷:
参数空间大: 概率的参数有 O(n)个。
数据稀疏,词同时出现的情况可能没有,组合阶数高时尤其明显。
为了解决第一个问题,引入马尔科夫假设(Markov Assumption):一个词的出现仅与它之前的若干个词有关。
如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为 Bi-gram:
如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为 Tri-gram:
N-gram 的 N NN 可以取很高,然而现实中一般 bi-gram 和 tri-gram 就够用了.
用极大似然估计来计算每一项的条件概率,即频数:
具体地,以 Bi-gram 为例,我们有这样一个由三句话组成的语料库:
容易统计,“I”出现了 3 次,“I am”出现了 2 次,因此能计算概率:
同理,还能计算出如下概率:
等等
2.SimCSE
句向量表征技术一直都是 NLP 领域的热门话题,在 BERT 前时代,一般都采用 word2vec 训练出的 word-embedding 结合 pooling 策略进行句向量表征,或者在有训练数据情况下,采用 TextCNN/BiLSTM 结合 Siamese network 策略进行句向量表征。在 BERT 时代,人们借助预训练语言模型的固有优势,一般采用 BERT 模型的[CLS]向量(即句子的起始字符向量)作为句向量表征;SimCSE 采用对比学习的方法,进行句向量表征,在 BERT 模型上获取更好的句向量表征,详细介绍如下:
2.1.介绍
SimCSE(simple contrastivesentence embedding framework),即简单的对比句向量表征框架。SimCSE 共包含了无监督和有监督的两种方法。无监督方法,采用dropout技术,对原始文本进行数据增强,从而构造出正样本,用于后续对比学习训练;监督学习方法,借助于文本蕴含(自然语言推理)数据集,将蕴涵-pair 作为正例,矛盾-pair 作为难负例,用于后续对比学习训练。并且通过对比学习解决了预训练 Embedding 的各向异性问题,使其空间分布更均匀,当有监督数据可用时,可以使正样本直接更紧密。模型结构如下图所示:
其中,图 a 为无监督 SimCSE,图 b 为有监督 SimCSE,详细模型介绍见第 3 节和第 4 节。下面将从对比学习背景、无监督 SimCSE、有监督 SimCSE、各向异性问题、实验细节五个方面进行详细介绍。
2.2.对比学习背景
2.2.1 定义
对比学习就是以拉近相似数据,推开不相似数据为目标,有效地学习数据表征。给定一个 pair 对样本集合 $D={(x_{i}, x_{i}^{+})}^{m}{i=1}x{i}x_{i}^{+}l_{i}=-\log\frac{e^{sim(h_{i},h_{i}^{+})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i},h_{j}^{+})/\tau}}h_{i}h_{i}^{+}x_{i}x_{i}^{+}Nsim(h_{i},h_{i}^{+})h_{i}h_{i}^{+}\tau$为温度超参。
在 SimCSE 论文中,采用 BERT 模型对句子进行句向量表征,即,其中,为 BERT 模型参数,并通过对比学习损失优化网络全部参数。
2.2.2 构造正样本
对比学习中的一个关键问题是如何构建数据对。在计算机视觉中,通过对一张图片进行简单地裁剪,翻转,扭曲和旋转就可以获取质量很高的;而在自然语言处理中,构造的方法与图像类似,一般对原始句子进行转译、重排,或对部分词语删除、插入、替换等;但是由于离散性,导致 NLP 中的数据扩充往往会引入大量的负面噪声,使得的质量难以保证。
在 SimCSE 论文中,提出**使用标准 dropout 操作构造高质量**,并达到比上述数据扩充更好的效果。
2.2.3 对齐性和均匀性
在对比学习中,通常使用对齐性(alignment)和均匀性(uniformity)来衡量表征质量的好坏。
alignment 是计算数据对向量表征之间的距离,表示数据之前的紧密程度,uniformity 是计算向量表征在整体特征分布上的均匀程度,其中,表示数据分布。
这两个指标与对比学习的目标是一致的:正例之间应该保持紧密,而任意向量的语义特征应该尽可能地分散在超球体上。
2.3.无监督 SimCSE
无监督 SimCSE 的思想非常简单,给定一个句子集合 ${x_i}{i=1}^{m}x{i}z_{i}z_{i}^{’}z_{i}^{’}z_{i}l_{i}=-\log\frac{e^{sim(h_{i}^{z_i},h_{i}^{^{z_i^{’}}})/\tau}}{\sum_{j=1}^{N} e^{sim(h_{i}^{z_i},h_{j}^{z_j^{’}})/\tau}}z$为 Transformers 中的标准 dropout mask,在无监督 SimCSE 没有额外增加任何 dropout。
2.3.1Dropout 数据增强与其他的比较
通过 dropout masks 机制进行数据增强构造正例的方法,可以视为一种最小形式的数据扩充,正例与原始样本之间采用完全相同的句子,只有在向量表征过程中的 dropout mask 有所不同。
在 STS-B 的开发集上,比较该方法与其他数据增强方法的差异。在英文维基上随机抽取个句子进行训练,学习速率=3e-5,批次大小为 64。并训练过程中没有使用 STS 训练集。
裁剪,删除和替换等数据增强方法,效果均不如 dropout masks 机制,即使删除一个词也会损害性能,详细如下表所示,
使用下一句作为目标训练,或者采用两个独立的编码器进行编码的效果,不如采用一个编码器的 dropout masks 机制,详细如下表所示,
3.2 为什么该方法可以 work?
为了进一步理解 dropout 噪声在无监督 SimCSE 中的作用,论文尝试了不同的 dropout 率,如下表所示,
可以发现仅在默认 dropout 概率 p=0.1 时效果最优,并且当 dropout 概率 p=0,或者相同输入有同样的 dropout mask 时,效果显著下降。
在训练过程中,每隔 10 步检查一次模型,并可视化 alignment 和 uniformity 在训练过程中的变化,如下图所示,
可以发现,在训练过程中,所有模型的均匀性都在提高,但是对于 no-dropout 和 fixed-0.1 模型来说对齐性急剧下降,而无监督 SimCSE 和 delete-one-word 模型进本持平。虽然 delete-one-word 模型的对齐性好于无监督 SimCSE,但是均匀性相差较多,因此在整体效果上,无监督 SimCSE 更胜一筹。
2.4.有监督 SimCSE
对比学习的关键是如何构建数据对,在无监督 SimCSE 中,借助 dropout mask 机制,构造高质量数据,已经获得了较好的句向量表征;在有监督 SimCSE 中,如何通过监督数据,进一步提高句向量表征,具体如下:
2.4.1 监督数据的选择
共存在四种数据集,适合构造对比学习数据对,分别是:
QQP:Quora 问题对;
相似的问题对为正样本,如下:
不相似的问题对为负样本,如下:
Flickr30k:每个图像都有 5 个人进行描述,可以认为同一图像的任意两个描述为一对数据对;以下图为例:
对图片中的人物的 5 段描述,如下:
ParaNMT:大规模的回译数据集;
针对原数据进行机器翻译,获得回译数据,如下:
NLI datasets:自然语言推理数据集,包括:SNLI 和 MNLI。
自然语言推理数据集,包含蕴含、矛盾和中立;蕴含表示第二句话可以推理出第一句话;矛盾表示第二句话不能推理出第一句话;中立表示两句话无关;举例如下:
在四种数据集上,直接使用数据对进行训练的结果如下表所示,
可以发现,NLI 数据集上,采用语义蕴含对作为数据对的效果最好;并且统计发现,语义蕴含对(SNLI + MNLI)的词汇重叠仅占比 39%,而 QQP 和 ParaNMT 数据集占比 60%和 55%。最终,选择 NLI 数据集进行监督学习。
2.4.2 难负例的使用
NLI 数据集中,一个前提假设文本,具有对应的蕴含文本和矛盾文本,将矛盾文本作为难负例;即,数据对变成数据组,其中,为蕴含文本,为矛盾文本;监督学习 SimCSE 的训练目标变成:通过上表可以发现,增加矛盾文本作为难负例后,效果有所提高。直观上,区分难负例(矛盾文本)和 Batch 内其他负例可能是有益的,将监督学习 SimCSE 的训练目标变成:用不同的α值训练 SimCSE 模型,并在 STS-B 开发集上对训练的模型进行评价,发现当α为 1 时效果最优,并且中性数据不会带来更多的收益,如下表所示,
2.5.各向异性问题
最近的研究发现了语言表征中的各向异性问题,即训练后的 embeddings 仅占据在向量空间中狭窄的部分,严重限制了向量的表现力。缓解这个问题的一个简单方法是后处理,可以消除主要的主成分或将 embeddings 映射到各向同性分布。另一种常见的解决方案是在训练过程中添加正则项。而对比学习的优化目标可以改善缓解各向异性问题,当负例数趋近于无穷大时,对比学习目标的渐近表示为:其中,第一项使正例之间更相似,第二项使将负例之间分开。而第二项在优化过程中,会压平向量空间的奇异谱,因此对比学习有望缓解表征退化问题,提高句向量表征的均匀性。并通过下图,可以发现,
虽然预训练 embeddings 具有良好的对齐性,但其均匀性较差;
后处理方法,大大改善均匀性,但也使其对齐性变差;
无监督 SimCSE 有效地提高了预训练 embeddings 的均匀性,同时保持了良好的对齐性;
有监督 SimCSE,可以进一步提高对齐性。
2.6.实验细节
对 7 个语义文本相似度(STS)任务进行了实验,将无监督和有监督的 SimCSE 与 STS 任务中的最先进的句子嵌入方法进行了比较,可以发现,无监督和有监督的 SimCSE 均取得了 sota 的效果,具体如下表所示,
2.6.1 训练参数
对于有监督的 SimCSE,对模型进行 3 个轮的训练,在 STS-B 的开发集上每训练 250 步进行一次模型验证,并保存测试集上最优效果的节点。对于无监督的 SimCSE 与有监督的 SimCSE 操作一致,但仅训练一个 epoch。并对批次大小和学习率进行网格搜索,找寻最优参数,如下图所示,
实验发现,只要相应地调整学习速率,SimCSE 对批量大小并不敏感,这与对比学习需要大批次的发现相矛盾。可能原因为所有 SimCSE 模型都是在原有预训练模型基础上继续训练的,已经提供了较好的初始化参数。
2.6.2MLP Layer
对于无监督和有监督的 SimCSE,训练过程均采用在带有一个 MLP 层的[CLS]向量作为句向量表征。但,对于无监督的 SimCSE,在测试中丢弃了 MLP 层,仅使用[CLS]向量作为句向量表征,详细实验如下表所示,
2.6.3MLM
在训练过程中引入 masked language modeling 变量,可以提到模型的迁移效果,如下表所示,
但值得注意的是,迁移性的提高,会造成原始任务上的效果下降。
2.6.4 温度
温度主要用于调整 softmax 函数的平滑程度,在训练过程中,温度为 0.05 时,效果最佳。
SimCSE 论文,在无监督句向量表征上,通过简单的 dropout 方式,构造了对比学习的正例,达到堪比监督学习效果,堪称大道至简。并且在监督学习上,对比学习框架效果也取得了 SOTA。
参考文献
更多文章请关注公重号:汀丶人工智能
3.NLP 更多详细介绍:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
前人栽树后人乘凉,本专栏提供资料:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等项目代码整合,省去你大把时间,效率提升。 帮助你快速完成任务落地,以及科研 baseline。
NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
版权声明: 本文为 InfoQ 作者【汀丶人工智能】的原创文章。
原文链接:【http://xie.infoq.cn/article/cc4b163e2ae4065170edca046】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论