All-Mpnet-Base-V2:用AI增强句子嵌入

2024-07-25

By Ruben Winastwan

All-Mpnet-Base-V2:用AI增强句子嵌入

自然语言处理(NLP)是一个快速发展的领域。鉴于文本表示在各种深度学习应用中是一个关键概念,例如文本分类、命名实体识别、文本生成、文档摘要、机器翻译、信息检索等,这并不令人惊讶。在深度学习的背景下,原始文本需要被转换为数字形式,以便深度学习模型能够理解。这种文本的数值表示通常被称为嵌入。

传统的嵌入方法通常依赖于词袋(BoW)或n-gram方法来表示文本。虽然这些方法在某种程度上是有效的,但它们常常无法捕捉文本的语义含义和上下文。随着深度学习技术的进步,句子嵌入作为解决这一局限性的革命性方法出现了。

在这篇文章中,我们将深入探讨在句子嵌入发展中发挥了重要作用的深度学习模型之一:MPNet。那么,不再多说,让我们开始吧!

一言以蔽之的句子嵌入

在NLP和AI的早期,基于词袋或n-gram的模型,如Word2Vec和GloVe,是将文本转换为嵌入的首选方法。虽然这些模型能够有效地捕捉单个词的语义含义,但它们常常无法捕捉整个文本的语义含义和上下文细微差别。

考虑在两个不同句子中使用“park”一词:“I park my car in the garage”(我把车停在车库里)和“I spend the whole day relaxing in a park”(我花了一整天时间在公园里放松)。使用Word2Vec或GloVe,这个词“park”在两个句子中的嵌入是相同的,尽管它在两个不同上下文中使用。这可能导致在推断文本含义时出现重大不准确,突出了对更准确模型的迫切需求。此外,这些模型在词级别上产生嵌入,当在句子级别处理文本时可能会有问题。

句子变换器的兴起

句子变换器的出现解决了这个问题。顾名思义,句子变换器使用流行的变换器架构作为其支柱。变换器模型的架构由多个编码器-解码器块组成,如下所示:

每个变换器编码器块中的特殊多头注意力层允许模型学习整个句子中每个词(或标记)的上下文。这就是为什么句子变换器在它们的架构中只使用变换器的编码器部分。借助变换器架构的帮助,“park”这个词在句子“我停车我的车在车库里”和“我花了一整天时间在公园里放松”中的嵌入将会不同。

然而,变换器本身的输出仍然是每个词(或标记)的嵌入。因此,句子变换器在最后一个变换器编码器块上使用一个额外的池化层来派生出代表整个输入文本的最终聚合嵌入。

句子变换器架构

有许多句子变换器的变体,但MPNet是最具影响力之一。MPNet利用了BERT和XLNet模型的优势,同时也解决了它们的主要缺点。因此,在深入研究这个模型之前,有必要在高层次上理解BERT和XLNet模型。

BERT和XLNet作为MPNet的前身

BERT是基于变换器编码器的模型,它在许多任务上都设定了最先进的性能,如情感分析、命名实体识别、问答等。BERT在预训练期间应用的一个关键技术是掩蔽语言建模(MLM)。在这种方法中,一定百分比的输入标记被随机替换为[MASK]标记。然后目标是根据整个输入序列的上下文预测这个[MASK]标记为最可能的标记。

BERT的主要缺点是预测的[MASK]标记是独立的。例如,如果我们在一个序列中有两个[MASK]标记,第一个[MASK]标记的预测不会影响第二个[MASK]标记的预测,即使第一个[MASK]标记的预测对于预测第二个[MASK]标记可能是有用的。

如果您看上面的可视化,第二个标记x2的预测不会影响第五个标记x5的预测,尽管x2在增强x5的预测中肯定有帮助。这有时会导致序列预测不太合理。XLNet则是为克服BERT的局限性而设计的一种自回归(AR)模型。通过AR方法,要预测的标记始终依赖于前面的标记。因此,第二个[MASK]标记的预测考虑了第一个[MASK]标记的预测,解决了BERT中标记预测独立的问题。

然而,AR方法也有其缺点。它仅在预测特定位置的标记时考虑前面的标记。如果待预测的标记位于序列的末尾,这不是问题。然而,如果它位于序列的开头,使用这种方法就变得有问题,突出了XLNet的潜在局限性。

为了解决这个问题,XLNet引入了排列语言建模(PLM)。这种方法随机排列整个输入序列,然后预测排列序列末尾的标记。

例如,给定输入序列(x1, x2, x3, x4, x5),它可能被排列成(x3, x2, x5, x1, x4)。然后,XLNet的任务是在给定(x3, x2, x5)和x4的情况下预测标记x1,以及在给定(x3, x2, x5, x1)的情况下预测x4。

然而,引入PLM并不意味着XLNet是一个完美的模型,因为它仍然是一个基于变换器编码器的模型。变换器编码器块的本质在于其双向特性,这意味着模型应该知道输入序列中所有标记的位置信息。这一概念在XLNet使用的AR方法中并未完全实现,它只考虑了前面标记的位置信息。

此外,XLNet中应用的AR概念在预训练和微调过程之间引入了不匹配。当使用XLNet进行文本分类等下游任务时,从一开始就可以获取整个输入序列的位置信息。

因此,为了利用BERT和XLNet的优势,同时避免它们局限性,引入了一个统一的模型,称为MPNet。

理解MPNet

MLM的优势在于其能够考虑整个输入序列的位置信息,而PLM的优势在于其能够通过自回归方法对掩蔽标记之间的依赖性进行建模。MPNet在其操作中结合了MLM和PLM的优势。那么,MPNet是如何精确地结合MLM和PLM的呢?

首先,MLM和PLM中的掩蔽标记被融合。考虑一个输入序列(x1, x2, x3, x4, x5)。然后该序列被随机排列,变成(x3, x2, x5, x1, x4)。

MPNet选择序列右端的标记(例如x1, x4)作为掩蔽标记。未掩蔽的标记然后被排列为(x3, x2, x5, [M], [M]),并附带它们相应的位置信息(p3, p2, p5, p1, p4)。

如上图所示,MPNet利用PLM的共同特征——双流自注意力。例如,在预测标记x4时,模型可以考虑(x3+p3, x2+p2, x5+p5)和之前预测的标记(x1+p1)。这种方法减轻了与MLM相关的局限性。

MPNet还结合了掩蔽标记的掩蔽符号和位置信息([M]+p1, [M]+p4),以确保每个标记都可以看到整个输入序列的上下文和位置信息。例如,在预测标记x1时,模型可以考虑(x3+p3, x2+p2, x5+p5),也可以通过([M]+p4)考虑紧随其后的掩蔽标记。这种方法减轻了与PLM相关的局限性。

MPNet在各种自然语言推理(NLI)任务中的性能优于先前的最先进的模型,如BERT、XLNet和RoBERTa。

MPNet在NLI任务中的性能与其他模型的比较

实现MPNet 由于在各种NLI任务中的性能,MPNet成为获取文本句子级嵌入的首选句子变换器模型,这并不奇怪。All-MPNet-Base-V2是一个流行的MPNet模型,用于句子嵌入,已在大约10亿对文本上训练。您可以使用一个名为sentence-transformers的流行库通过此模型生成句子嵌入。

在接下来的部分中,我们将提供一个示例,介绍如何使用All-MPNet-Base-V2模型从文本中生成句子嵌入来解决NLP中最流行的任务之一:信息检索。为此,我们将使用sentence-transformers库和PyTorch。

首先,让我们加载我们的模型。

假设我们的数据库中有若干文本,我们想使用All-MPNet-Base-V2模型将每个文本转换为句子嵌入。我们只需简单地调用model_encode()函数即可。

让我们考虑一个场景,我们有一个查询:“A man is sitting at the dinner table. What’s he doing?”。

在信息检索任务中,目标是从我们数据库中的文本集合中检索最可能的答案。

为此,我们可以计算查询与每段文本之间的相似度。我们可以使用sentence-transformers库中的cos_sim()方法或像scikit-learn这样的流行机器学习库来计算相似度。

这只是句子嵌入的许多用例之一。它们还可以用于解决文本分类、问答、文档摘要、文档聚类和聊天机器人等任务。

自从出现了像GPT-4和LLAMA这样的强大大型语言模型(LLM)以来,由句子变换器模型生成的句子嵌入通常被用来通过检索增强生成(RAG)技术补充LLM所做的预测。这确保了生成的响应与查询在上下文中相关。

MPNet的模型微调过程

尽管从预训练的MPNet获得的句子嵌入通常质量很高,但在某些情况下,我们有一组高度上下文化的文本或外语文本。在这种情况下,来自预训练模型的句子嵌入可能不够。

面对这种情况时,一种解决方案是我们自己微调模型。为此,我们需要准备我们的训练数据。All-MPNet-Base-V2的单个训练示例包括一对文本和它们之间的相似度作为标签。一对文本之间的相似度可以根据您的特定用例而变化。官方sentence-transformers库提供了全面的文档,详细介绍了如何准备您的训练数据进行微调。微调All-MPNet-Base-V2模型的主要目标是将不相似的文本对推得更远,同时保持相似文本对之间的距离接近。然而,根据用例和您对每对文本的标签方式,选择适当的成本函数至关重要。这确保了微调过程与您的特定目标一致。

如果您不确定哪种成本函数适合您的用例,可以参考sentence-transformers库的官方文档。在那里,您还会找到如何使用您的训练数据和选择的损失函数微调模型的指导。

结论

MPNet是一个结合了BERT和XLNet的优势同时解决它们局限性的模型。因此,它在许多自然语言推理(NLI)任务中通常优于BERT和XLNet,已成为从文本生成上下文句子嵌入的热门选择。

最初,句子嵌入主要用于各种NLP任务,如文本分类、问答、文档摘要、文本聚类、信息检索和聊天机器人。然而,自从引入了强大的大型语言模型(LLM),来自MPNet的句子嵌入也被用来补充LLM生成的预测。这使我们能够从LLM获得与查询在上下文中相关的响应。

我们希望这篇文章为MPNet提供了坚实的基础概述!

  • Ruben Winastwan

    Ruben Winastwan

    Freelance Technical Writer

    准备好开始了吗?

    立刻创建 Zilliz Cloud 集群,存储和检索您的向量。

    免费试用 Zilliz Cloud