1.N-Gram

N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设定好的阈值进行过滤,形成关键gram列表,也就是这个文本的向量特征空间,列表中的每一种gram就是一个特征向量维度。

该模型基于这样一种假设,第N个词的出现只与前面N-1个词相关,而与其它任何词都不相关,整句的概率就是各个词出现概率的乘积。这些概率可以通过直接从语料中统计N个词同时出现的次数得到。常用的是二元的Bi-Gram和三元的Tri-Gram。

N-gram的用途很广,比如搜索引擎或者输入法提示,词性标注,垃圾短信分类,分词,机器翻译,语音识别能等等等。

  • 概率计算

假设我们有一个由n nn个词组成的句子深度学习自然语言处理:N-Gram、SimCSE介绍_ai,如何衡量它的概率呢?让我们假设,每一个单词深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_02都要依赖于从第一个单词深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_03到到它之前一个单词深度学习自然语言处理:N-Gram、SimCSE介绍_ai_04的影响:

深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_05

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

  1. 参数空间大: 概率深度学习自然语言处理:N-Gram、SimCSE介绍_ai_06的参数有O(n)个。
  2. 数据稀疏,词同时出现的情况可能没有,组合阶数高时尤其明显。

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

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_07

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

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_08

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

深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_09
N-gram的 N NN 可以取很高,然而现实中一般 bi-gram 和 tri-gram 就够用了.

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

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_10

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_11

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_12

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

I am Sam
Sam I am
I do not like apple
  • 1.
  • 2.
  • 3.

容易统计,“I”出现了3次,“I am”出现了2次,因此能计算概率:

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_13

同理,还能计算出如下概率:

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_14

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_15
等等

2.SimCSE

句向量表征技术一直都是NLP领域的热门话题,在BERT前时代,一般都采用word2vec训练出的word-embedding结合pooling策略进行句向量表征,或者在有训练数据情况下,采用TextCNN/BiLSTM结合Siamese network策略进行句向量表征。在BERT时代,人们借助预训练语言模型的固有优势,一般采用BERT模型的[CLS]向量(即句子的起始字符向量)作为句向量表征;SimCSE采用对比学习的方法,进行句向量表征,在BERT模型上获取更好的句向量表征,详细介绍如下:

2.1.介绍

SimCSE(simple contrastive
sentence embedding framework),即简单的对比句向量表征框架。SimCSE共包含了无监督和有监督的两种方法。无监督方法,采用 dropout技术,对原始文本进行数据增强,从而构造出正样本,用于后续对比学习训练;监督学习方法,借助于文本蕴含(自然语言推理)数据集,将蕴涵-pair作为正例,矛盾-pair作为难负例,用于后续对比学习训练。并且通过对比学习解决了预训练Embedding的各向异性问题,使其空间分布更均匀,当有监督数据可用时,可以使正样本直接更紧密。模型结构如下图所示:

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_16

其中,图a为无监督SimCSE,图b为有监督SimCSE,详细模型介绍见第3节和第4节。
下面将从对比学习背景、无监督SimCSE、有监督SimCSE、各向异性问题、实验细节五个方面进行详细介绍。

2.2.对比学习背景

2.2.1定义

对比学习就是以拉近相似数据,推开不相似数据为目标,有效地学习数据表征。给定一个pair对样本集合深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_17,其中KaTeX parse error: Expected group after '_' at position 2: x_̲和深度学习自然语言处理:N-Gram、SimCSE介绍_ai_18为相似样本,优化目标一般采用通过批内负样本(in-batch negatives)交叉熵损失函数,如下,
深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_19
其中,深度学习自然语言处理:N-Gram、SimCSE介绍_ai_20深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_21深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22的句向量表示,深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_24为训练过程中batch的大小,深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_25为向量深度学习自然语言处理:N-Gram、SimCSE介绍_ai_20深度学习自然语言处理:N-Gram、SimCSE介绍_ai_20余弦相似度,深度学习自然语言处理:N-Gram、SimCSE介绍_ai_28为温度超参。

在SimCSE论文中,采用BERT模型对句子进行句向量表征,即深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_29,其中,深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_30为BERT模型参数,并通过对比学习损失优化网络全部参数。

2.2.2构造正样本

对比学习中的一个关键问题是**如何构建深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_31数据对**。在计算机视觉中,通过对一张图片进行简单地裁剪,翻转,扭曲和旋转就可以获取质量很高的深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22;而在自然语言处理中,构造深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_33的方法与图像类似,一般对原始句子进行转译、重排,或对部分词语删除、插入、替换等;但是由于离散性,导致NLP中的数据扩充往往会引入大量的负面噪声,使得深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22的质量难以保证。

在SimCSE论文中,提出使用标准dropout操作构造高质量深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_35,并达到比上述数据扩充更好的效果。

2.2.3对齐性和均匀性

在对比学习中,通常使用对齐性(alignment)和均匀性(uniformity)来衡量表征质量的好坏。

alignment是计算深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对向量表征之间的距离,表示数据之前的紧密程度,
深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_37
uniformity是计算深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22向量表征在整体特征分布上的均匀程度,
深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_39
其中,深度学习自然语言处理:N-Gram、SimCSE介绍_ai_40表示数据分布。

这两个指标与对比学习的目标是一致的:正例之间应该保持紧密,而任意向量的语义特征应该尽可能地分散在超球体上。

2.3.无监督SimCSE

无监督SimCSE的思想非常简单,给定一个句子集合深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_41,将深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22分别输入到编码器中两次,分别得到向量深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_43的正例和深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_43;由于随机dropout masks机制存在于模型的fully-connected layers和attention probabilities上,因此相同的输入,经过模型后会得到不同的结果;将KaTeX parse error: Expected group after '_' at position 2: z_̲^{’}向量作为深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_43的正例,其他向量作为负例,SimCSE的训练目标变成:
深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_46
注意:深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_47为Transformers中的标准dropout mask,在无监督SimCSE没有额外增加任何dropout。

2.3.1Dropout数据增强与其他的比较

通过dropout masks机制进行数据增强构造正例的方法,可以视为一种最小形式的数据扩充,正例与原始样本之间采用完全相同的句子,只有在向量表征过程中的dropout mask有所不同。

在STS-B的开发集上,比较该方法与其他数据增强方法的差异。在英文维基上随机抽取深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_48个句子进行训练,学习速率=3e-5,批次大小为64。并训练过程中没有使用STS训练集。

  • 裁剪,删除和替换等数据增强方法,效果均不如dropout masks机制,即使删除一个词也会损害性能,详细如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_49

  • 使用下一句作为目标训练,或者采用两个独立的编码器进行编码的效果,不如采用一个编码器的dropout masks机制,详细如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_50

3.2为什么该方法可以work?
  • 为了进一步理解dropout噪声在无监督SimCSE中的作用,论文尝试了不同的dropout率,如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_51

可以发现仅在默认dropout概率p=0.1时效果最优,并且当dropout概率p=0,或者相同输入有同样的dropout mask时,效果显著下降。

  • 在训练过程中,每隔10步检查一次模型,并可视化alignment和uniformity在训练过程中的变化,如下图所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_52

可以发现,在训练过程中,所有模型的均匀性都在提高,但是对于no-dropout和fixed-0.1模型来说对齐性急剧下降,而无监督SimCSE和delete-one-word模型进本持平。虽然delete-one-word模型的对齐性好于无监督SimCSE,但是均匀性相差较多,因此在整体效果上,无监督SimCSE更胜一筹。

2.4.有监督SimCSE

对比学习的关键是如何构建深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对,在无监督SimCSE中,借助dropout mask机制,构造高质量深度学习自然语言处理:N-Gram、SimCSE介绍_ai_18数据,已经获得了较好的句向量表征;在有监督SimCSE中,如何通过监督数据,进一步提高句向量表征,具体如下:

2.4.1监督数据的选择

共存在四种数据集,适合构造对比学习深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对,分别是:

  • QQP:Quora问题对;

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

正样本
How can I improve my communication and verbal skills? 
What should we do to improve communication skills?
  • 1.
  • 2.
  • 3.

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

负样本
Why are you so sexy? 
How sexy are you?
  • 1.
  • 2.
  • 3.
  • Flickr30k:每个图像都有5个人进行描述,可以认为同一图像的任意两个描述为一对深度学习自然语言处理:N-Gram、SimCSE介绍_ai_56数据对;
    以下图为例:

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_57

对图片中的人物的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.
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • ParaNMT:大规模的回译数据集;

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

原数据:so, what’s half an hour?
回译数据:half an hour won’t kill you.
  • 1.
  • 2.
  • NLI datasets:自然语言推理数据集,包括:SNLI和MNLI。

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

蕴含样本
well you see that on television also 
You can see that on television, as well.
  • 1.
  • 2.
  • 3.
矛盾样本
but that takes too much planning 
It doesn't take much planning.
  • 1.
  • 2.
  • 3.
中立样本
Conceptually cream skimming has two basic dimensions - product and geography. 
Product and geography are what make cream skimming work.
  • 1.
  • 2.
  • 3.

在四种数据集上,直接使用深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对进行训练的结果如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_59

可以发现,NLI数据集上,采用语义蕴含对作为深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对的效果最好;并且统计发现,语义蕴含对(SNLI + MNLI)的词汇重叠仅占比39%,而QQP和ParaNMT数据集占比60%和55%。最终,选择NLI数据集进行监督学习。

2.4.2难负例的使用

NLI数据集中,一个前提假设文本,具有对应的蕴含文本和矛盾文本,将矛盾文本作为难负例;即,深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_36数据对变成深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_62数据组,其中,深度学习自然语言处理:N-Gram、SimCSE介绍_语言模型_22为蕴含文本,深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_64为矛盾文本;监督学习SimCSE的训练目标变成:
深度学习自然语言处理:N-Gram、SimCSE介绍_人工智能_65
通过上表可以发现,增加矛盾文本作为难负例后,效果有所提高。
直观上,区分难负例(矛盾文本)和Batch内其他负例可能是有益的,将监督学习SimCSE的训练目标变成:
深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_66
用不同的α值训练SimCSE模型,并在STS-B开发集上对训练的模型进行评价,发现当α为1时效果最优,并且中性数据不会带来更多的收益,如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_67

2.5.各向异性问题

最近的研究发现了语言表征中的各向异性问题,即训练后的embeddings仅占据在向量空间中狭窄的部分,严重限制了向量的表现力。
缓解这个问题的一个简单方法是后处理,可以消除主要的主成分或将embeddings映射到各向同性分布。另一种常见的解决方案是在训练过程中添加正则项。
而对比学习的优化目标可以改善缓解各向异性问题,当负例数趋近于无穷大时,对比学习目标的渐近表示为:
KaTeX parse error: Undefined control sequence: \[ at position 77: …\\sim p\_{pos}}\̲[̲f(x){T}f(x+)\] …
其中,第一项使正例之间更相似,第二项使将负例之间分开。而第二项在优化过程中,会压平向量空间的奇异谱,因此对比学习有望缓解表征退化问题,提高句向量表征的均匀性。并通过下图,可以发现,

  • 虽然预训练embeddings具有良好的对齐性,但其均匀性较差;
  • 后处理方法,大大改善均匀性,但也使其对齐性变差;
  • 无监督SimCSE有效地提高了预训练embeddings的均匀性,同时保持了良好的对齐性;
  • 有监督SimCSE,可以进一步提高对齐性。

深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_68

2.6.实验细节

对7个语义文本相似度(STS)任务进行了实验,将无监督和有监督的SimCSE与STS任务中的最先进的句子嵌入方法进行了比较,可以发现,无监督和有监督的SimCSE均取得了sota的效果,具体如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_69

2.6.1训练参数

对于有监督的SimCSE,对模型进行3个轮的训练,在STS-B的开发集上每训练250步进行一次模型验证,并保存测试集上最优效果的节点。对于无监督的SimCSE与有监督的SimCSE操作一致,但仅训练一个epoch。并对批次大小和学习率进行网格搜索,找寻最优参数,如下图所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_深度学习_70

实验发现,只要相应地调整学习速率,SimCSE对批量大小并不敏感,这与对比学习需要大批次的发现相矛盾。可能原因为所有SimCSE模型都是在原有预训练模型基础上继续训练的,已经提供了较好的初始化参数。

2.6.2MLP Layer

对于无监督和有监督的SimCSE,训练过程均采用在带有一个MLP层的[CLS]向量作为句向量表征。但,对于无监督的SimCSE,在测试中丢弃了MLP层,仅使用[CLS]向量作为句向量表征,详细实验如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_71

2.6.3MLM

在训练过程中引入masked language modeling变量,可以提到模型的迁移效果,如下表所示,

深度学习自然语言处理:N-Gram、SimCSE介绍_ai_72

但值得注意的是,迁移性的提高,会造成原始任务上的效果下降。

2.6.4温度

温度主要用于调整softmax函数的平滑程度,在训练过程中,温度为0.05时,效果最佳。

深度学习自然语言处理:N-Gram、SimCSE介绍_自然语言处理_73

SimCSE论文,在无监督句向量表征上,通过简单的dropout方式,构造了对比学习的正例,达到堪比监督学习效果,堪称大道至简。并且在监督学习上,对比学习框架效果也取得了SOTA。