句子与文档嵌入:InferSent、Universal Sentence Encoder与对比学习方法

张开发
2026/4/10 5:43:08 15 分钟阅读

分享文章

句子与文档嵌入:InferSent、Universal Sentence Encoder与对比学习方法
点击“AladdinEdu你的AI学习实践工作坊”注册即送-H卡级别算力沉浸式云原生集成开发环境80G大显存多卡并行按量弹性计费教育用户更享超低价。1. 引言超越词汇——变长文本的固定表示之道在词嵌入Word Embedding技术成熟之后自然语言处理面临的下一个关键挑战是如何为长度可变的短语、句子乃至整篇文档生成高质量的固定维度向量表示这一问题的解决直接关系到文本相似度计算、语义搜索、聚类分析、并行语料挖掘等众多下游任务的效果上限。早期解决方案朴素而直接对句子中所有词向量取平均或加权平均。尽管这类方法简单高效且在特定任务如主题分类中表现尚可但其对词序、句法结构、否定词和长距离依赖的忽视使得它们在需要精细语义区分的任务如语义文本相似度STS、自然语言推理NLI中性能捉襟见肘。自2017年起随着深度学习和迁移学习在NLP领域的渗透句子嵌入的研究进入爆发期。以InferSent、Universal Sentence EncoderUSE为代表的工作率先证明了通过有监督迁移任务如NLI或大规模多任务学习训练句子编码器能够产出远超词向量平均的高质量句表示。随后SimCSE等对比学习方法进一步降低了标注数据依赖甚至仅凭无监督语料即可训练出与有监督模型相媲美的句向量。本文将沿技术演进脉络深入剖析以下核心内容InferSent如何利用NLI任务中的蕴含/矛盾关系训练句子编码器Universal Sentence Encoder双塔架构Transformer与DAN与多任务学习如何兼顾精度与速度对比学习句向量SimCSE如何通过Dropout噪声和批次内负样本实现简单而强大的无监督训练我们将不仅呈现算法框架更通过数学推导揭示训练目标与表示质量的内在关联并结合实际代码展示各模型的部署与调优。最后我们将讨论当前句子嵌入面临的挑战如各向异性、语义漂移与未来发展方向。2. 句子嵌入的朴素方法与评价基线2.1 词向量平均与SIF加权给定句子 (S (w_1, w_2, \dots, w_n)) 及其对应的词向量 (\mathbf{v}_{w_i})最直接的句子嵌入为算术平均[\mathbf{s}{\text{avg}} \frac{1}{n} \sum{i1}^{n} \mathbf{v}_{w_i}]尽管此法完全忽略词序但在文本分类和主题相似度任务中却出人意料地有效。其改进版本平滑逆频率加权Smooth Inverse Frequency, SIF由Arora等人2017提出通过词频调整权重并移除第一主成分显著提升了无监督句子相似度性能[\mathbf{s}{\text{SIF}} \frac{1}{n} \sum{i1}^{n} \frac{a}{a p(w_i)} \mathbf{v}_{w_i}]其中 (p(w_i)) 为词频(a) 为平滑参数。最终向量减去其在语料集主成分上的投影。这些朴素方法为我们提供了重要的基线参照任何更复杂的句子编码器首先应当在主要评测基准上显著超越SIF加权平均。2.2 评价任务与数据集句子嵌入的质量通常在下述任务上评估任务类型代表性数据集评价指标语义文本相似度STSSTS-BenchmarkSTS-B皮尔逊相关系数自然语言推理NLISNLI, MultiNLI分类准确率释义识别MRPC, QQPF1/准确率情感分类SST-2, SST-5准确率聚类与语义搜索CQA, Quora Question Pairs召回率/MRRSentEval工具包是句子嵌入评估的事实标准本文后续引用的性能数据主要源自该基准。3. InferSent从自然语言推理中迁移句子表征3.1 动机NLI任务作为语义理解试金石自然语言推理Natural Language Inference要求模型判断两个句子之间的逻辑关系蕴含Entailment、矛盾Contradiction或中立Neutral。例如前提A man is playing a guitar.假设A musician is performing on stage.关系蕴含Conneau等人2017敏锐地洞察到要在NLI任务中取得成功模型必须对句子的语义内容进行深层编码捕获词语、句法乃至常识推理的细微差异。因此NLI任务的监督信号天然适合训练通用的句子编码器。InferSent由此诞生。3.2 模型架构InferSent的核心是一个共享权重的句子编码器将前提 (u) 和假设 (v) 分别编码为定长向量 (\mathbf{u}) 和 (\mathbf{v})。随后通过拼接、差值和点积等操作构造关系特征向量[\mathbf{f} [\mathbf{u}; \mathbf{v}; |\mathbf{u} - \mathbf{v}|; \mathbf{u} \odot \mathbf{v}]]该特征向量输入一个三层全连接网络最后通过Softmax输出三分类概率。整个模型在SNLI570k句对和MultiNLI433k句对数据集上端到端训练。论文探索了多种句子编码器架构包括BiLSTM with max pooling双向LSTM取所有时间步隐藏状态的最大值。BiLSTM with mean pooling双向LSTM取所有时间步隐藏状态的平均值。Self-Attentive Network使用自注意力机制加权池化。Hierarchical ConvNet多层卷积网络。最终BiLSTM Max Pooling在验证集上表现最优成为InferSent的默认编码器。3.3 训练目标与迁移InferSent的训练损失为标准交叉熵[\mathcal{L}{\text{NLI}} -\frac{1}{N} \sum{i1}^{N} \log P(y_i \mid \mathbf{f}_i)]训练收敛后句子编码器被剥离出来作为通用的句子表示提取器。对于任意句子InferSent输出一个4096维向量双向LSTM隐藏层维度2048×2方向。该向量可直接用于下游任务的分类器训练如逻辑回归无需进一步微调编码器。3.4 性能与影响在SentEval的12项迁移任务上InferSent大幅超越了当时的所有无监督方法如Skip-thought、FastSent甚至在某些任务上接近有监督SOTA。特别在STS基准上InferSent的Spearman相关系数达到0.71GloVe平均仅0.48证明了NLI任务训练的句子编码器具有极强的语义判别能力。InferSent的成功揭示了两个重要事实有监督迁移的有效性一个在大规模标注数据上训练的句子编码器其内部表示可以泛化至未见过的任务和领域。NLI数据的通用语义价值蕴含与矛盾判断所要求的精细语义理解恰好是句子嵌入所需的核心能力。然而InferSent也存在局限编码器依赖特定有监督数据SNLI对非英语语言支持有限LSTM编码器在长序列上存在梯度衰减问题4096维向量维度偏高存储与计算成本较大。4. Universal Sentence Encoder谷歌的多任务双塔架构4.1 设计哲学一个模型两种编码器Google Research于2018年推出Universal Sentence EncoderUSE旨在提供一个通用、高效、易用的句子嵌入解决方案。与InferSent专注于单一迁移任务不同USE采用多任务学习框架同时在SNLI、问答论坛、维基百科检索等多种数据源上进行训练以期编码器捕获更全面的语义属性。USE最显著的特征是发布了两种编码器以应对不同的应用场景Transformer编码器基于Transformer结构的深度模型精度高但推理速度较慢适合服务器端应用。深度平均网络DAN编码器轻量级前馈网络速度极快适合移动端或大规模实时检索。4.2 Transformer编码器架构USE的Transformer编码器与BERT的句子编码模式相似输入句子以[CLS]标记开始经多层Transformer编码后取[CLS]对应的输出向量作为句子嵌入。但与BERT不同的是USE的Transformer是专门为句子级表示优化的预训练任务也非掩码语言模型而是多任务组合。主要改进包括层数较浅仅使用6层TransformerBERT-base为12层在精度与速度间折衷。多任务预训练结合SNLI蕴含分类、Skip-thought相邻句子预测、对话响应排序等任务。数据增强利用维基百科、新闻、论坛问答等多样化语料。4.3 深度平均网络DAN编码器DANDeep Averaging Network是一种极端高效的架构。其处理流程极其简洁对句子中所有词向量取平均得到初始句子向量。将该平均向量依次通过多个全连接层如3层每层后接ReLU激活。最后一层输出即为句子嵌入。尽管DAN完全忽略词序但由于其深度非线性变换它能够学习到比简单平均更丰富的语义组合。更重要的是DAN的推理速度比Transformer快数百倍且模型尺寸极小适合部署在资源受限环境。4.4 多任务训练目标USE的训练数据与任务组合是其成功的关键。主要包括SNLI分类任务与InferSent类似训练编码器区分蕴含/矛盾/中立。Skip-Thought任务预测给定句子的前一句和后一句从维基百科抽取连续句子对。对话响应排序从Reddit等论坛数据中给定对话上文排序候选回复。无监督语言模型损失作为辅助正则项。多任务损失函数为各项任务的加权和[\mathcal{L}{\text{total}} \sum{k} \alpha_k \mathcal{L}_k]通过联合优化编码器被迫学习能够支持多种语言现象的通用表示。4.5 USE的应用与影响USE凭借其易用性通过TensorFlow Hub一键调用和优秀的零样本迁移能力迅速在工业界普及。典型应用包括语义搜索将查询和文档编码为向量用余弦相似度快速检索。文本聚类对新闻、评论等短文本进行高效聚类。异常检测计算文本向量与正常样本中心的距离。在STS-Benchmark上USE Transformer的皮尔逊相关系数约为0.78显著超越InferSent0.71接近后来的BERT-base0.84。USE DAN则以约0.72的精度提供了当时最快的句子编码方案之一。USE证明了多任务学习在构建通用句子嵌入中的巨大潜力其双塔架构设计思想也被后来的SBERT等模型继承。5. 对比学习句向量从SimCSE到前沿变体5.1 对比学习的核心思想有监督方法如InferSent、USE虽然性能卓越但依赖大规模人工标注数据限制了其在低资源语言和特定领域的应用。对比学习Contrastive Learning的兴起为无监督句向量学习开辟了新路径。对比学习的基本框架是通过构造正例对语义相似的句子和负例对语义无关的句子训练编码器使得正例对在向量空间中相互靠近负例对相互远离。其核心损失函数为InfoNCE又称NT-Xent[\mathcal{L} -\log \frac{e^{\text{sim}(\mathbf{h}_i, \mathbf{h}i^) / \tau}}{\sum{j1}^{N} e^{\text{sim}(\mathbf{h}_i, \mathbf{h}_j^) / \tau}}]其中 (\mathbf{h}_i) 为锚点句子的嵌入(\mathbf{h}_i^) 为其正例(\mathbf{h}_j^) 为同一批次内其他句子的嵌入作为负例(\tau) 为温度超参数(\text{sim}) 通常为余弦相似度。对比学习的关键在于如何在不依赖标注的情况下构造高质量的正例对5.2 SimCSE简洁而强大的对比学习框架Gao等人于2021年提出的SimCSESimple Contrastive Learning of Sentence Embeddings给出了一个令人惊讶的简单答案使用不同的Dropout掩码。无监督SimCSE的流程极简将一个句子 (x) 两次输入同一个编码器如BERT由于Dropout层的随机性两次输出略有差异记作 (\mathbf{h}) 和 (\mathbf{h}^)。将 ((\mathbf{h}, \mathbf{h}^)) 视为正例对。同一批次内的其他句子作为负例。使用InfoNCE损失训练编码器。这一方法无需任何数据增强策略如同义词替换、回译仅凭Transformer自带的Dropout噪声就能在STS-Benchmark上取得与有监督方法相当的性能Spearman相关系数约0.76。其背后的原理是Dropout迫使编码器学习对输入微小扰动不敏感的鲁棒表示本质上起到了隐式数据增强的作用。有监督SimCSE则利用NLI数据集将蕴含对作为正例矛盾对作为负例进一步提升了性能STS-Benchmark相关系数达到0.81以上。5.3 对比学习的改进与变体SimCSE的成功催生了大量后续工作从不同角度改进对比学习句向量ConSERT在嵌入层或中间层注入多种数据增强如token混洗、截断、特征遮盖增强正例多样性。ESimCSE通过动量对比Momentum Contrast维护负例队列扩大负例数量稳定训练。DiffCSE结合对比学习与生成任务使模型学习句子间差异的细粒度表示。PromptBERT利用提示模板Prompt构造语义等价的句子变体作为正例如“I love this movie.”与“I said: I love this movie.”。这些方法在保持训练简洁性的同时逐步将无监督句向量性能推向新高度甚至在多项基准上超越了有监督的USE和InferSent。5.4 各向异性问题与后处理无论是InferSent、USE还是SimCSE直接输出的句向量普遍存在各向异性Anisotropy问题向量在空间中分布不均集中于狭窄锥形区域导致任意两个向量的余弦相似度普遍偏高削弱了区分能力。为缓解此问题研究者提出了后处理技术标准化流Normalizing Flow如BERT-flow学习可逆变换将BERT表示映射到高斯分布。白化Whitening对语料库中的句向量集合进行PCA减去均值并除以标准差使协方差矩阵成为单位阵。BERT-whitening简单有效无需训练可显著提升STS任务上的Spearman系数。在实际应用中对句向量进行白化后处理已成为提升无监督相似度性能的标准步骤。6. 模型对比与选择指南模型训练方式编码器架构向量维度STS-B Spearman推理速度适用场景InferSent有监督NLIBiLSTM Max4096~0.71中等通用语义表示研究基线USE Transformer多任务有监督6层Transformer512~0.78较慢高精度语义搜索、服务器端USE DAN多任务有监督3层全连接512~0.72极快移动端、大规模实时检索SBERT有监督NLI/STSBERT/RoBERTa768~0.84中等当前SOTA工业标准SimCSE无监督对比学习BERT/RoBERTa768~0.76中等无标注数据场景领域适应SimCSE有监督对比学习NLIBERT/RoBERTa768~0.81中等追求精度有少量标注数据选择建议追求极致精度使用有监督SBERT或SimCSE在NLI/STS数据上微调。无标注数据或领域适应使用无监督SimCSE在目标领域语料上训练。推理速度优先选择USE DAN或蒸馏后的轻量SBERT模型如MiniLM。资源受限环境USE DAN模型文件仅数十MB可嵌入移动应用。7. 实践代码示例7.1 使用Sentence-Transformers库加载预训练模型fromsentence_transformersimportSentenceTransformer,util# 加载预训练SBERT模型相当于有监督SimCSEmodelSentenceTransformer(all-MiniLM-L6-v2)sentences[A man is playing a guitar.,A musician is performing on stage.,The weather is nice today.]embeddingsmodel.encode(sentences)# 计算余弦相似度sim_01util.cos_sim(embeddings[0],embeddings[1])sim_02util.cos_sim(embeddings[0],embeddings[2])print(fS1 vs S2:{sim_01.item():.4f})# 期望高相似度print(fS1 vs S3:{sim_02.item():.4f})# 期望低相似度7.2 使用无监督SimCSE训练自定义句向量fromtransformersimportAutoModel,AutoTokenizerimporttorchimporttorch.nn.functionalasF tokenizerAutoTokenizer.from_pretrained(princeton-nlp/unsup-simcse-bert-base-uncased)modelAutoModel.from_pretrained(princeton-nlp/unsup-simcse-bert-base-uncased)defencode_sentence(sent):inputstokenizer(sent,paddingTrue,truncationTrue,return_tensorspt)withtorch.no_grad():outputsmodel(**inputs)returnoutputs.last_hidden_state[:,0,:]# [CLS]向量sent1I like apples.sent2I enjoy fruits.emb1encode_sentence(sent1)emb2encode_sentence(sent2)simF.cosine_similarity(emb1,emb2)print(fSimilarity:{sim.item():.4f})7.3 使用USETensorFlow Hubimporttensorflow_hubashubimportnumpyasnp# 加载USE DAN模型embedhub.load(https://tfhub.dev/google/universal-sentence-encoder/4)sentences[How are you?,What is your age?]embeddingsembed(sentences)# 计算相似度矩阵sim_matrixnp.inner(embeddings,embeddings)print(sim_matrix)7.4 白化后处理示例fromsklearn.decompositionimportPCAimportnumpyasnpdefwhitening(embeddings):munp.mean(embeddings,axis0,keepdimsTrue)covnp.cov(embeddings.T)u,s,vhnp.linalg.svd(cov)W(u/np.sqrt(s)).T whitened(embeddings-mu) Wreturnwhitened# 假设有一批从BERT提取的句向量 raw_embeddings# raw_embeddings model.encode(corpus_sentences)# whitened_embeddings whitening(raw_embeddings)8. 前沿展望与开放挑战8.1 长文档嵌入本文讨论的句子嵌入方法多数针对短文本≤512 token设计。对于整篇文档如新闻文章、学术论文直接截断会丢失信息简单平均句向量则忽略篇章结构。近期工作如Hi-transformer、Longformer通过分层编码或稀疏注意力扩展上下文长度但如何高效生成高质量文档级嵌入仍是活跃研究课题。8.2 跨语言句子嵌入全球化应用要求句子嵌入在多语言空间中保持一致。LASER、LaBSE、mUSE等模型通过多语言BERT或翻译对偶训练实现了跨语言句子对齐。未来如何在低资源语言上构建高质量跨语言嵌入是重要方向。8.3 可解释性与公平性句子嵌入向量是黑箱表示其编码的信息维度难以直观解释。部分研究尝试通过探针任务如探测嵌入是否包含情感、时态信息来“解剖”向量空间。此外嵌入中的社会偏见如性别、种族刻板印象也是亟待解决的伦理问题。8.4 大语言模型时代的句子嵌入GPT-4、Claude等大模型虽然强大但调用API生成嵌入成本高昂且延迟高。如何将大模型的语义理解能力蒸馏到轻量级编码器中或在prompt中直接引导模型输出高质量嵌入是新兴的研究热点。例如PromptEOL利用思维链让LLM输出句子摘要作为嵌入代理。9. 结语从词语到篇章的表示学习之路句子与文档嵌入是连接词汇语义与篇章理解的桥梁。从InferSent的NLI迁移到USE的多任务双塔再到SimCSE的对比学习我们见证了句向量技术从依赖昂贵标注走向自我监督从深度LSTM走向Transformer从单一任务走向通用表征的演进历程。这些模型不仅在学术基准上屡创新高更已渗透到搜索、推荐、对话、风控等工业系统的血脉之中。理解它们的设计原理与适用边界是每一位NLP从业者的必修课。未来随着多模态、跨语言、长文本等需求的日益增长句子嵌入技术将继续向着更高效、更通用、更可信的方向进化。而对于我们而言掌握当前的经典方法正是开启下一段表示学习旅程的最佳起点。点击“AladdinEdu你的AI学习实践工作坊”注册即送-H卡级别算力沉浸式云原生集成开发环境80G大显存多卡并行按量弹性计费教育用户更享超低价。

更多文章