写点什么

深度学习应用篇 - 自然语言处理 [10]:N-Gram、SimCSE 介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

  • 2023-06-12
    浙江
  • 本文字数:6063 字

    阅读完需:约 20 分钟

深度学习应用篇-自然语言处理[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 个词组成的句子,如何衡量它的概率呢?让我们假设,每一个单词都要依赖于从第一个单词到到它之前一个单词的影响:



这个衡量方法有两个缺陷:


  1. 参数空间大: 概率的参数有 O(n)个。

  2. 数据稀疏,词同时出现的情况可能没有,组合阶数高时尤其明显。


为了解决第一个问题,引入马尔科夫假设(Markov Assumption):一个词的出现仅与它之前的若干个词有关。



如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为 Bi-gram:



如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为 Tri-gram:



N-gram 的 N NN 可以取很高,然而现实中一般 bi-gram 和 tri-gram 就够用了.


用极大似然估计来计算每一项的条件概率,即频数:





具体地,以 Bi-gram 为例,我们有这样一个由三句话组成的语料库:


I am SamSam I amI do not like apple
复制代码


容易统计,“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 问题对;


相似的问题对为正样本,如下:


正样本How can I improve my communication and verbal skills? What should we do to improve communication skills?
复制代码


不相似的问题对为负样本,如下:


负样本Why are you so sexy? How sexy are you?
复制代码


  • Flickr30k:每个图像都有 5 个人进行描述,可以认为同一图像的任意两个描述为一对数据对;以下图为例:



对图片中的人物的 5 段描述,如下:


人物描述Gray haired man in black suit and yellow tie working in a financial environment.A graying man in a suit is perplexed at a business meeting.A businessman in a yellow tie gives a frustrated look.A man in a yellow tie is rubbing the back of his neck.A man with a yellow tie looks concerned.
复制代码


  • ParaNMT:大规模的回译数据集;


针对原数据进行机器翻译,获得回译数据,如下:


原数据:so, what’s half an hour?回译数据:half an hour won’t kill you.
复制代码


  • NLI datasets:自然语言推理数据集,包括:SNLI 和 MNLI。


自然语言推理数据集,包含蕴含、矛盾和中立;蕴含表示第二句话可以推理出第一句话;矛盾表示第二句话不能推理出第一句话;中立表示两句话无关;举例如下:


蕴含样本well you see that on television also You can see that on television, as well.
复制代码


矛盾样本but that takes too much planning It doesn't take much planning.
复制代码


中立样本Conceptually cream skimming has two basic dimensions - product and geography. Product and geography are what make cream skimming work.
复制代码


在四种数据集上,直接使用数据对进行训练的结果如下表所示,



可以发现,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专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等


发布于: 刚刚阅读数: 3
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等_人工智能_汀丶人工智能_InfoQ写作社区