simCSE:论文解读

image.png
论文地址:https://arxiv.org/pdf/2104.08821.pdf
论文标题:
  • SimCSE: Simple Contrastive Learning of Sentence Embeddings
  • 基于对比学习的简单句子嵌入
GitHub地址:https://github.com/princeton-nlp/SimCSE

0、Abstract:

本文介绍了一个简单的对比学习框架SimCSE,它极大地促进了最先进的句子嵌入。首先描述了一种无监督的方法,它接受一个输入句子,然后在对比目标中预测自己,并只有标准的dropout用作噪声

这个简单的方法令人惊讶。发现,dropout充当了最小的数据扩充,移除它会导致数据表示不好。然后,我们提出了一种有监督的方法,它将自然语言推理数据集中的注释对纳入我们的对比学习框架中,使用“蕴涵”对作为正例,使用“矛盾”对作为硬负例。

在标准语义文本相似性(STS)任务中评估SimCSE,以及使用BERT-base的无监督和监督模型分别实现了76.3%和81.6%的斯皮尔曼相关性,与之前的最佳结果相比,分别提高了4.2%和2.2%。我们也展示了两者从理论和经验上来看,对比学习目标将预先训练好的嵌入的各向异性空间规整得更加均匀,并且在有监督信号的情况下更好地对齐正对

1、介绍:

学习通用句子嵌入是自然语言处理中的一个基本问题,在文献中得到了广泛的研究。在这项工作中,我们提出了最先进的句子嵌入方法,并证明了对比目标在以下情况下是非常有效的:再加上预先训练过的语言模型,如BERT或RoBERTa
。我们介绍了SimCSE,一种简单的对比语言句子嵌入框架,可以从未标记或标记的数据中生成更好的句子嵌入

image.png

○ 1、无监督SimCSE:

  • (1)无监督SimCSE简单地预测输入句子本身,只使用dropout作为噪声(图1(a))。换句话说,将同一个句子传递给预先训练好的编码器两次:通过两次应用标准的dropout,可以获得两个不同的嵌入“正例”。

  • (2)然后在同一小批中选取其他句子作为“负例”,模型预测负例中的一个正例。尽管这种方法看起来非常简单,但它比预测下一个句子和离散训练目标要大量的数据增强(例如,单词删除和替换),甚至与以前的监督方法相匹配。

  • (3)通过仔细分析,发现dropout充当隐表示的最小“数据扩充”,而移除它会导致表示崩溃。

○ 2、有监督SimCSE:

  • (1)有监督SimCSE建立在最近成功使用自然语言推理(NLI)数据集进行句子嵌入的基础上,并将带注释的句子对纳入对比学习(图1(b))。与之前的工作不同作为一项三向分类任务(蕴涵、中性和矛盾),我们利用了蕴涵对可以自然地用作正例

  • (2)还发现,添加相应的矛盾对作为硬负例进一步提高了性能。与以前使用相同数据集的方法相比,NLI数据集的这种简单使用实现了实质性的改进。我们还比较了其他标记句子对数据集,发现NLI数据集对于学习句子嵌入特别有效。

○ 衡量SimCSE学习嵌入的质量:
  • (1)alignment:正例对齐性。

  • (2)uniformity:整个表示空间的一致性。

  • ○ 通过实证分析,我们发现我们的无监督SimCSE在本质上提高了一致性uniformity,同时避免了通过衰减噪声导致的退化对齐,从而提高了表示的表达能力。同样的分析表明,NLI训练信号可以进一步改善正例之间的对齐性alignment,并产生更好的句子嵌入。

  • ○ 还发现,即预训练的单词嵌入存在各向异性,并证明通过频谱视角,对比学习目标“均匀”了句子嵌入空间的奇异值分布,从而提高了一致性uniformity。

我们对七项标准语义文本相似性(STS)任务和七项转移任务中对SimCSE进行了综合评估。在STS任务中,我们的无监督模型和监督模型分别达到76.3%和81.6%的平均斯皮尔曼相关,与之前的最佳结果相比,分别提高了4.2%和2.2%。在转移任务上也取得了有竞争力的表现。

最后,我们在文献和研究中发现了一个不连贯的评估问题整合不同设置的结果,以便将来评估句子嵌入。

2、背景:对比学习

对比学习的目的是通过将语义上相近的邻居聚在一起,将非邻居分开来学习有效的表征。它假设了一组成对的例子:
image.png

其中xi 和x+i是语义相关的。我们遵循对比框架,采用一个具有批量负例的叉熵目标:让 hi 和 hi+ 表示 xi 和 xi + 的表示,即训练目标。对于(xi,xi+)和小批量的N对是:

where xi and x+i are semantically related. We follow the contrastive framework
in Chen et al. (2020) and take a cross-entropy objective with in-batch negatives (Chen et al., 2017;Henderson et al., 2017): let hi and h + i denote the representations of xi and x + i, the training objective
for (xi, x+i) with a mini-batch of N pairs is:

image.png

其中τ是一个温度超参数sim(h1,h2)是余弦相似性

image.png

在这项工作中,我们使用预训练的语言模型,如BERT或RoBERTa:h=fθ(x),然后微调所有参数使用对比学习目标(等式1)。

○ Positive instances:

对比学习中的一个关键问题是如何构建 (xi, xi+)对。在视觉表现中,一个有效的解决方案是对同一幅图像进行两次随机变换(例如,裁剪、翻转、变形和旋转)如xi 和 xi+。最近,在语言表达中也采用了类似的方法,方法是应用增广技术,如单词删除、重新排序和替换。然而,由于NLP的离散性,NLP中的数据扩充本质上是困难的。我们将在§3中看到。简单地在中间表示上使用标准Dropout比这些离散操作符表现得更好。

在NLP中,类似的对比学习目标在不同的背景下进行了探索。 在这些情况下, (xi, xi+)收集自有监督的数据集,如问题-段落对。由于xi和xi+的明显性质,这些方法总是使用双编码器框架, 例如,对于xi和xi+使用两个独立的编码器fθ1和fθ2。

对于句子嵌入,Logeswaran和Lee(2018)也使用了对比学习和双编码器方法,将当前句子和下一个句子组成为(xi,xi+)。

image.png
○ Alignment 和 uniformity:

最近,Wang和Isola(2020)确定了与对比学习的对齐性alignment和一致性uniformity——并建议使用它们来衡量表达的质量。给出了一个正例对分布ppos,alignment计算成对实例的嵌入之间的预期距离(假设表示已经规范化):

image.png

另一方面,一致性uniformity衡量的是嵌入物均匀分布效果:

image.png

其中pdata表示数据分布。这两个指标与对比学习的目标非常一致:正例之间应该保持紧密,而随机实例的嵌入应该分散在超球体上。在接下来的部分中,我们还将使用这两个指标来证明我们的方法的内部工作原理。

3、 Unsupervised SimCSE:

无监督的SimCSE的想法非常简单:我们收集一组句子:
image.png

使用 xi+=xi。关键的成分是让这个通过使用独立取样的dropout masks 对 xi 和 xi+进行相同的正例对操作。

Transformers标准的训练:dropout masks 全连接层以及注意力概率(默认p=0.1)。我们表示:
image.png

其中z是dropout的随机掩码。我们只是将相同的输入进行编码器两次,并获得两个具有不同dropout masksz、z0的嵌入,SimCSE的训练目标是:

image.png
  • 一小批N个句子。注意z只是Transformers中的标准dropout mask不要添加任何额外的dropout。
○ Dropout noise 作为数据增强:

我们将其视为数据扩充的一种最小形式:正例对的句子完全相同它们的嵌入只在Dropout mask上有所不同。我们将这种方法与STS-B开发集上的其他训练目标进行比较。

表1将我们的数据增强技术方法与普通方法进行了比较:如crop、word删除和替换,可以看作是 h = fθ(g(x),z),而g是x上的(随机)离散算子。注意到,即使删除一个单词会影响性能,但没有任何影响到增强效果优于dropout噪声。

我们还将self-prediction训练目标与使用的next-sentence目标进行了比较,选择其中一个或者两个独立的编码器。如表2所示,发现SimCSE比next-sentence目标的表现要好得多,并且使用一个编码器而不是两个编码器在我们的方法中有显著差异。

○ Why does it work? 为什么有效?

为了进一步了解dropout noise在无监督SimCSE中的作用,我们在表3中尝试了不同的 dropout rates,并观察到所有变体都低于Transformers的默认dropout概率p=0.1。

我们发现两个极端情况特别有趣:

  • “no dropout” (p = 0)和“固定0.1”(dropout p = 0.1,但样本对是相同dropout mask)。在这两种情况下,产生的嵌入结果完全一样,这导致戏剧性的性能下降。

在测试过程中,我们每10步对这些模型进行一次检查训练并可视化对齐alignment和一致性uniformity度量在Figure 2中,还有一个简单的数据扩充模型“删除一个单词”。如图所示,从预先训练好的检查点开始,所有模型都大大提高了一致性uniformity。

然而,这两种特殊变体的排列也会退化由于使用了dropout噪声,我们的无监督SimCSE保持了稳定的对齐alignment。它还表明,从预训练的检查点开始是至关重要的,因为它提供了良好的初始对齐alignment。最后,“删除一个单词”改善了对齐,但在一致性度量上获得了较小的增益,最终表现不如无监督SimCSE。

image.png

4 、Supervised SimCSE:

我们已经证明,添加dropout 噪声能够保持正例对的良好对齐(x,x+)~Ppos。

在本节中,将研究是否可以利用有监督的数据集来提供更好的训练信号,以改进方法的一致性。

之前的研究表明,有监督的自然语言推理(NLI)数据集通过预测两个句子之间的关系是包含关系、中性关系还是矛盾关系,有效地学习句子嵌入。在我们的对比学习框架中,直接从监督数据集中提取(xi,xi+)对,并使用它们优化等式1。

○ 标签数据的选择:

我们首先探索哪些监督数据集特别适合于构造正例对(xi,xi+)。我们用大量数据集和句子对样例进行了实验,包括:

  • (1)QQP4:Quora问题对;

  • (2) Flickr30k:每张图片都是用5个人类文字注释,我们考虑任何两个标题相同的图像作为正例对;

  • (3)ParaNMT:大规模回译释义数据集。

  • (4)NLI数据集:SNLI和MNLI。

  • 用不同的数据集训练对比学习模型(等式1),并比较表4中的结果。为了进行公平比较,我们还对相同的训练对进行了实验。在所有选项中,使用NLI(SNLI+MNLI)数据集中的蕴涵对表现最好

  • 我们认为这是合理的,因为NLI数据集由高质量和众包数据对组成。此外,人类注释员还需要编写基于前提和两句话的假设往往词汇重叠较少。

  • 例如,我们发现蕴涵对(SNLI+MNLI)的词汇重叠(两袋单词之间的F1测量)为39%,而QQP和ParaNMT分别为60%和55%。
image.png
○ Contradiction as hard negatives:矛盾对作为负例对

最后,我们进一步利用NLI数据集,将其矛盾对作为负例对。

在NLI数据集中,给定一个前提,注释者需要手动编写一个绝对正确(蕴涵)、一个可能正确(中立)和一个绝对错误(矛盾)的句子。因此,对于每个前提及其蕴涵假设,都有一个伴随的矛盾假设(示例见图1)。

形式上我们扩展(xi,xi+)为(xi,xi+,xi-),其中xi是前提,xi+ 和 xi−是蕴涵假设和矛盾假设。然后,通过(N是最小批量)定义训练目标Li。

image.png

如表4所示,添加负例对可以进一步提高性能(84.9→ 86.2)这是最终有监督SimCSE。也试过了添加ANLI数据集或将其与无监督SimCSE方法相结合,但没有发现有意义的改进。我们也在有监督的SimCSE中考虑了双编码器框架,它损害了性能(86.2→ 84.2)。

5、与各向异性的联系:

最近的研究发现了一个各向异性问题语言表达,即学习到的嵌入占据了向量空间中的窄锥限制了他们的表达能力。

证明语言模型经过了捆绑训练输入/输出嵌入导致单词各向异性嵌入,在预先训练的上下文表示中进一步观察到了这一点。证明奇异值语言模型中单词嵌入矩阵的构造急剧衰减:除了少数占主导地位的奇异值,所有其他值都接近于零。

(1)缓解问题的一个简单方法是后处理,要么消除主要主成分,要么将嵌入映射到各向同性分布

(2)另一个常见的解决方案是在训练期间增加正则化。在这项工作中,我们从理论和经验上证明,对比目标也可以缓解各向异性问题。

各向异性问题自然与均匀性有关,两者都强调了嵌入应均匀分布在空间中。直观地说,随着目标的推进,优化对比学习目标可以提高一致性(或缓解各向异性问题)把负例分开。在这里,我们采用单一光谱的观点,这是一种常见的做法。在这里,我们从单数光谱的角度来分析单词嵌入,以及表明对比目标可以“压平”目标句子嵌入的奇异值分布并使表示更加各向同性

继Wang和Isola,对比学习目标(等式1)的渐近性可以用以下等式表示:负例的数量接近无穷大(假设 f(x) 被归一化):

image.png
其中,第一项保持正例相似,第二项将负例分开。当pdata在有限样本上是一致的
image.png
○ 通过 hi = f(xi),我们可以从詹森不等式的第二个术语得出以下公式:
image.png
因此,对比学习有望缓解表征退化的问题,并有助于提高学习效率提高句子嵌入的一致性uniformity。

与后处理方法相比。其目的仅在于鼓励各向同性表征,对比学习还优化了通过方程式6中的第一个term,这是SimCSE成功的关键。第7节给出了定量分析。

6、实验:

6.1 评估设置:

我们在7个语义文本上进行了实验相似性(STS)任务。请注意,所有的STS实验都是完全无监督的,没有使用STS训练集。

即使对于有监督的SimCSE,也只是说,在之前的工作之后,需要额外的标记数据集进行训练。还评估了7项迁移学习任务,并在附录E中提供了详细结果。我们与Reimers和Gurevych(2019)持有类似的观点,即句子嵌入的主要目标是对语义相似的句子进行聚类,因此将STS作为主要结果。

○ 语义文本相似性任务:

我们评估了7项STS任务:2012-2016年STS,STS基准(Cer等人,2017年)和疾病相关性(Marelli等人,2014年)。当与之前的工作进行比较时,我们在评估设置中确定了已发表论文中的无效比较模式,包括(a)是否使用额外的回归系数,(b)斯皮尔曼与皮尔逊的相关性,以及(c)如何汇总结果(表B.1)。

○ 训练细节:
  • 我们从BERT或RoBERTa预训练的检查点开始,并将[CLS]表示作为句子嵌入。

  • 我们从英文维基百科中随机抽取106个句子,对无监督的SimCSE进行训练,并对有监督的SimCSE进行训练MNLI和SNLI数据集的组合(314k)。

  • 更多训练细节见附录A语义文本相似性任务。我们评估了7项STS任务:STS 2012-2016(Agirre等人,2012、2013、2014、2015、2016)、STS基准(Cer等人,2017)和疾病相关性(Marelli等人,2014)。

image.png
6.2 主要结果:

我们比较了无监督和有监督的SimCSE与以前SOTA的STS任务句子嵌入方法。无监督基线包括平均GloVe嵌入、平均BERT或RoBERTa嵌入,以及后处理方法,如BERT - flow和BERT-whitening。

我们还比较了最近使用对比目标的几种方法,包括:
(1)IS-BERT),它最大限度地实现了global和local features 之间的一致性;
(2) DeCLUTR,将同一文档中的不同spans作为正例对;
(3) CT,它将来自两个不同的编码器的同一句子进行嵌入对齐。

  • 其他监督方法包括推断法、通用句子编码器和SBERT/SRoBERTa采用后处理方法。我们将提供更多细节附录C中的baselines。

表5显示了7项STS任务的评估结果。无论是否有额外的NLI监督,SimCSE都能显著改善所有数据集的结果,大大优于之前最先进的模型。具体而言,我们的无监督SimCSE-BERT-base将之前的SOTA平均Spearman相关性从72.05%提高到76.25%,甚至与有监督baselines相当。

在使用NLI数据集时,SimCSE-BERTbase进一步将SOTA结果提高到81.57%。RoBERTa编码器的收获更为明显,我们的有监督SimCSE通过RoBERT-alarge实现了83.76%

在附录E中,我们展示了SimCSE与现有工作相比达到PAR或更好的传输任务性能,还有一个辅助MLM目标可以进一步提高性能。

image.png
6.3 消融研究:

我们调查了不同的pooling方法和硬负例的影响。本节中所有报告的结果均基于STS-B开发集。我们在附录D中提供了更多的消融研究(标准化、温度和MLM目标)。

○ Pooling methods:

Reimers和Gurevych等人表明,采用预训练模型的平均嵌入(尤其是从第一层和最后一层)比[CLS]具有更好的性能

表6显示了无监督和有监督SimCSE中不同池化方法之间的比较。对于[CLS]表示,原始的BERT实现需要在其上附加一个MLP层。

在这里,我们考虑[CLS]有三种不同的设置:

(1)保持MLP层;
(2) 无MLP层;
(3) 在训练期间保留MLP,但在测试时移除。

  • 发现,对于无监督的SimCSE,仅在训练期间接受MLP的[CLS]代表最有效;
  • 对于有监督的SimCSE,不同的池方法并不重要。
  • 默认情况下,我们将[CLS]与MLP(训练)一起用于无监督SimCSE,将[CLS]与MLP一起用于有监督SimCSE
○ Hard negatives:

硬负例。直觉上,这可能是有益的区分硬负例(矛盾示例)和其他批量负例。因此,我们扩展等式5中定义的训练目标,以纳入不同负例的权重:

image.png

我们用不同的α值对SimCSE进行训练,并对训练后的模型进行评估STS-B的开发集,也考虑中性假设作为硬负例。如表7所示,α=1表现最好,且中性假设不会带来进一步的收益。

7、分析:

在本节中,我们将进一步分析,以了解SimCSE的内部工作原理。

Uniformity 和 Alignment :

图3显示了不同句子嵌入模型的一致性uniformity和对齐性alignment,以及它们的平均STS结果。总的来说,具有更好的对齐和一致性的模型可以获得更好的性能

也观察到:
  • (1)虽然预训练的嵌入具有良好的对齐alignment,但其均匀性uniformity较差(即嵌入高度各向异性);
  • (2)后处理方法,如BERT-flow和BERT-whitening大大提高了均匀性uniformity,但在alignment对齐性也会退化;
  • (3)无监督的SimCSE有效提高了一致性pre-trained的嵌入,同时保持良好的对齐性alignment。
  • (4) 合并有监督数据到SimCSE进一步修正了alignment对齐性。

在附录F中,进一步证明了SimCSE可以有效地均匀预训练嵌入的奇异值分布。
在附录G中,我们展示了SimCSE在不同的句子对之间提供了更可区分的余弦相似性。

○ 定性比较:

我们使用SBERTbase和SimCSE-BERTbase进行了小规模检索实验。使用来自Flickr30k数据集,并将任意随机句子作为检索类似句子的查询(基于余弦)相似性)。如表8所示的几个例子,SimCSE检索到的句子与SBERT检索到的质量进行比较具有较高的识别率。

image.png
image.png

8 、相关工作:

句子嵌入早期建立在分布假设的基础上,通过预测给定句子的周围句子。表明,简单地用n-gram嵌入来增强word2vec的概念会产生很好的结果。最近的几种方法从数据扩充或同一句话的不同版本或文件采用了对比目标。与这些工作相比,

SimCSE通过对同一句话的标准dropout获取不同的输出的最简单的想法,却在STS任务中表现最佳。
  • 有监督的句子嵌入比无监督的句子嵌入具有更强的性能。Conneau等人提议对NLI数据集上的Siamese模型进行微调,并进一步扩展到其他编码器或预训练的模型。

  • 此外,证明,双语和回译语料库为学习语义相似性提供了有用的监督。另一个工作重点是正则化嵌入以缓解表示退化问题,并对预训练的语言模型的改进产生实质性影响。

9、结论:

  • 在这项工作中,我们提出了一个简单的对比学习框架SimCSE,它极大地改进了语义-文本相似任务中的SOTA句子嵌入。我们提出了一种无监督的方法和一种有监督的方法,该方法利用NLI数据集可以预测输入句子本身,其中输入句子本身带有dropout噪声。

  • 我们进一步证明了内部工作原理通过分析对齐,我们的方法是通过分析SimCSE与其他基线模型的对齐性alignment以及一致性uniformity

  • 我们的对比目标,尤其是无监督的目标在NLP中有更广泛的应用。它为通过文本输入增强数据提供了一个新的视角可以扩展到其他连续表示并整合到语言模型预训练中。

致谢:

我们感谢Tao Lei, Jason Lee, Zhengyan Zhang, Jinhyuk Lee, Alexander Wettig, Zexuan Zhong,普林斯顿NLP小组的成员有益的讨论和宝贵的反馈。这项研究得到了哈佛大学研究生奖学金的支持普林斯顿大学和苹果公司的礼物奖。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容