自 8.0 和用于文本嵌入的第三方自然语言处理 (NLP) 模型发布以来,Elastic Stack 的用户可以访问各种模型来生成文本文档的embedding并使用向量量搜索执行基于查询的信息检索。
但考虑到各种组件及其参数,如何选择合适的设置以提供最佳搜索相关性,成为了让大多数开发者头疼的问题。
因此,在本系列博客文章中,我们将向您介绍如何使用 Elastic Stack 中的公开数据集和信息检索技术进行测试,并提供有关如何最佳使用这些技术的建议。让我们一起来探索吧!
为了开启这一系列博客,我们想要先描述我们正在解决的问题,并分享一些我们将在后续博客中深入探讨的方法,以此为基础。
Elasticsearch 根据文本查询对文档进行相关性排名的经典方式是使用 Okapi BM25 模型的 Lucene 实现。 尽管该模型可以通过超参数的微调以优化大多数情况下的结果,但该技术被认为是无监督的,因为不需要标记查询和文档来使用它:该模型在任何文本语料库上都表现得相当好,而不依赖于带注释的数据。 众所周知,BM25 是零样本检索设置中的强大基线。
在底层,这种模型构建了一个词频(term frequencies)矩阵(一个术语在每个文档中出现的次数)和逆文档频率(inverse document frequenccies,每个词出现于多少个文档的倒数)。 然后,它根据这些频率对每个索引的文档的每个查询词进行评分。 由于每个文档通常包含语料库中使用的所有单词的一小部分,因此矩阵包含很多零。 这就是为什么这种类型的表示被称为稀疏的。
此外,此模型对文档查询中每个单独的词的相关性分数求和,而不考虑任何语义知识(同义词、上下文等)。这称为词法搜索(与语义搜索相对)。它的缺点是所谓的词汇不匹配问题,即查询词汇表与文档词汇表略有不同。这激发了对其他评分模型的探索,通过结合语义知识以试图避免这个问题。
最近,基于 Transformer 的模型允许对文本进行密集的、上下文感知的表示,解决了上述主要缺点。
要构建此类模型,需要执行以下步骤:
我们首先需要训练一个神经网络来理解自然语言的基本语法。
该模型使用庞大的文本语料库,通过无监督任务(如掩码词预测或下一句预测)的训练来学习语义知识。
BERT 可能是这些模型中最著名的例子 —— 它使用 Masked Word Prediction 在 Wikipedia(2.5B 单词)和 BookCorpus(800M 单词)上进行训练。
这称为预训练。 该模型学习语言标记的向量表示,可以通过更少的训练来适应其他任务。
请注意,在此步骤中,模型在下游 NLP 任务上表现不佳。
并此步骤非常昂贵,但也存在许多可以现成使用的此类基础模型。
现在该模型已经构建了自然语言的表示,它将更有效地训练特定任务,例如允许问答的密集段落检索 (Dense Passage Retrival - DPR)。
为此,我们必须稍微调整模型的架构,然后在大量任务实例上对其进行训练,对于 DPR 来说,这包括匹配从相关文档中获取的相关段落。
所以这需要一个标记数据集,即三元组的集合:
MS MARCO 数据集是用于执行 DPR 训练的一个非常流行且公开的数据集。
该数据集是根据 Microsoft Bing 搜索引擎的查询和热门结果创建。因此,它包含的查询和文档属于一般知识语言领域,而不是特定的语言领域(比如研究论文或法律中使用的语言)。
语言领域的概念很重要,因为这些模型学习到的语义知识给它们带来了“领域内”的重要优势:当 BERT 出现时,它在 MS MARCO 数据集上。相对于之前最先进的模型获得了显著的增强。
3. 特定领域的训练
根据您的数据与用于特定任务训练的数据集的不同程度,您可能需要使用特定领域的 标记数据集来训练您的模型。此步骤也称为域适应微调或域适应。
好消息是,您不需要前面步骤所需的大数据集 - 几千或数万个任务实例就足够了。
坏消息是这些查询-文档对需要由领域专家构建,因此它通常是一个昂贵的选择。
领域适应大致类似于特定任务的训练。
介绍了这些不同的技术后,我们将测量它们在各种数据集上的表现。我们对这种通用信息检索任务特别感兴趣。我们希望为一系列用户提供工具和指导,包括那些不想自己训练模型以获得搜索带来的一些好处的用户。在本系列的下一篇博客文章中,我们将描述我们将使用的方法和基准套件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。