Elastic 向量搜索实战指南——向量与嵌入简介

0 阅读31分钟

在本章中,我们将深入探索嵌入(embeddings)或向量的奇妙世界,以及它们在多个领域中的广泛应用。我们将介绍“嵌入”这一概念,它能够对复杂数据进行有效表示,从而使强大的机器学习(ML)模型能够分析和处理这些数据。你将了解有监督学习和无监督学习在构建嵌入中的作用,以及向量所解决的诸多挑战。此外,我们还将通过示例展示向量表示在不同领域中的广泛应用。

我们还将带你认识提升开发者使用向量搜索体验的生态工具与平台,包括 Hugging Face,以及与后端实现相关的各种技术考量。

随着本章深入展开,你将了解向量搜索市场的快速演进趋势,以及相关平台如何助力其落地应用。我们将探讨多个实际场景与应用领域,如命名实体识别、情感分析、文本分类、问答系统和文本摘要等。最后,我们还将介绍 Elastic 在该领域的作用,特别是它如何将向量集成到 Elasticsearch 中,在搜索与网络安全等领域中发挥作用。

通过本章内容,你将全面理解向量表示的基础及其应用场景,为后续章节深入探讨如何基于 Elasticsearch 实现向量搜索打下坚实基础。

本章将涵盖以下主题:

  • 有监督学习与无监督学习的区别与作用
  • 向量的典型应用场景与领域
  • Elastic 在向量搜索领域的角色
  • 本书将如何帮助你掌握相关技能

探索有监督学习与无监督学习在向量搜索中的作用

有监督学习是一种机器学习方法,模型通过带标签的数据进行训练,以学习输入特征与输出标签之间的映射关系。在训练过程中,模型不断调整自身参数,以最小化预测结果与真实标签之间的误差。有监督学习广泛应用于图像分类、语音识别、自然语言处理(NLP)等领域。其关键挑战之一在于必须提供一个精心整理的、带标签的数据集来训练模型。

而无监督学习则不依赖于带标签的数据,它关注于从原始输入数据中发现隐藏的模式和结构。常见的技术包括聚类、降维、密度估计等。无监督学习通常用于异常检测、数据压缩和特征提取等任务。

在向量搜索与自然语言处理的场景中,有监督学习可以用于生成词或句子的嵌入表示。例如,通过训练模型预测一个词周围的上下文,或将文档分类到预定义的类别中,从而捕捉文本中的语义和句法关系,使得生成的嵌入向量更适用于多种 NLP 任务。而无监督学习则通过识别文本数据中的共现关系或潜在模式来生成嵌入。例如,word2vec 和 GloVe 模型就采用无监督学习方式,生成高密度的词向量表示,用于向量搜索和其他 NLP 应用中。

什么是嵌入 / 向量?

嵌入(embedding)或向量(vector)在向量搜索和自然语言处理任务中发挥着关键作用,它们能将复杂的数据转化为可处理的数值表示。这些向量是对词语、短语、文档、图像、视频或音频等在连续向量空间中的数学表示,能够捕捉元素之间的语义和句法关系,从而使机器学习算法能够高效地处理和分析这些数据。

这些向量表示的应用领域非常广泛,包括:

  • 情感分析
  • 机器翻译
  • 文本分类
  • 图像识别
  • 目标检测
  • 图像检索

下图展示了一个从原始数据到机器学习处理,再到应用领域的整体流程示意图:

image.png

在自然语言处理(NLP)中,词嵌入、句子嵌入和文档嵌入作为文本信息的向量表示,使算法能够更有效地处理和理解文本。类似地,计算机视觉应用中,图像被表示为高维向量,每个像素值对应一个特定维度。其他领域如社交网络、生物系统和推荐系统也同样受益于向量表示。例如,社交网络中的用户及其关系可以编码为图嵌入,捕捉网络的结构和动态;在推荐系统中,用户和物品均可表示为向量,从而计算相似度和偏好。

用向量表示世界的能力,使得强大的机器学习模型和应用得以开发,为各个领域提供有价值的洞察和预测。

向量解决了哪些挑战?

BM25 是一种基于概率信息检索理论的广泛使用的文本检索算法。它根据查询词在文档中的出现频率对文档进行排序,考虑了词频、逆文档频率和文档长度归一化等因素。虽然 BM25 在传统搜索应用中效果不错,但也存在一些局限。例如,BM25 强烈依赖精确的词项匹配,面对同义词、拼写错误或细微语义变化时,可能导致结果相关性下降。此外,BM25 无法捕捉词语之间的上下文关系,因此在理解短语或句子的含义上表现有限。

向量搜索(包括精确匹配和近似最近邻(ANN)搜索)通过利用现代嵌入模型生成的高维向量,解决了 BM25 的部分不足。这些向量捕捉了词语、短语乃至整个文档之间的语义和上下文关系。向量搜索利用查询与文档向量之间的相似度来判断相关性,突破了精确词项匹配的局限,因此能更好地处理同义词、拼写错误或不同表达方式的查询。精确匹配向量搜索保证返回最相似的向量,而 ANN 搜索则以准确率与速度的权衡实现更高的可扩展性。通过关注语义和上下文,向量搜索提供了更细腻的信息检索方法,能够更好地理解和应对自然语言的复杂性。

向量搜索的应用示例:

  • 电商产品搜索:即使用户使用不同的术语或拼写错误,也能找到相关产品,提升购物体验。
  • 文档检索:用户能找到内容、上下文或主题相似的文档,即使查询词未在文档中出现,增强搜索引擎和知识管理系统的效果。
  • 问答系统:向量搜索能将用户查询匹配到大规模数据集中的潜在答案,实现聊天机器人或 AI 客服更准确、更具上下文相关的回复。
  • 图像识别与检索:图像被表示为高维向量,简化图像识别和检索过程。向量搜索可在大规模数据集中找到视觉相似的图像,支持反向图像搜索、重复检测和视觉推荐系统等应用。
  • 音乐推荐:音频同样可转为向量,向量搜索帮助识别相似特征或风格的曲目,助力用户根据喜好和听歌习惯发现新音乐。
  • 安全与用户行为分析(UEBA) :在安全和运维领域,向量搜索被用于分析网络流量、日志、用户行为等大数据,帮助识别模式和关联。通过将用户表示为向量,分析师能够高效发现隐藏的关联,检测潜在威胁、异常或恶意行为,这些是传统检索方法难以发现的,从而提升组织整体安全态势。

鉴于开发向量搜索项目的多种方式,接下来我们将了解必须掌握的主要组件及开发者的使用体验。

开发者体验

为向量搜索项目选择合适的向量模型是开发者迈出的关键第一步。模型的选择(例如预训练的 BERT 模型或自定义训练的模型)取决于项目的具体需求和限制。开发者需要考虑数据集的规模和性质、期望的搜索性能,以及用于训练和微调模型的资源。应对不同模型进行全面评估,以确保所选模型在与 k 近邻(kNN)搜索结合使用时能够提供相关的检索结果。在 kNN 中,“k”代表算法在特征空间中考虑的最近邻数量——这是一个用户可定义的参数,用于调整搜索或分类过程的粒度。

确定合适的向量模型后,开发者需将模型加载到向量数据库(如 Elasticsearch)中。这包括配置数据库以适配所选模型,并指定必要的设置和参数,使模型能够被存储和部署。下图展示了工作流程,模型从模型注册中心(如 Hugging Face)获取后,加载进向量数据库:

image.png

该图还展示了输入数据经过已加载的模型生成嵌入向量,用户基于这些向量进行向量搜索查询。

准备数据库以存储向量,需要创建一个带有适当映射和设置的索引,定义向量的存储和查询方式。以 Elasticsearch 为例,这意味着需要配置一个 dense_vector 类型的字段。开发者必须指定向量维度、相似度度量以及其他与使用场景相关的参数,确保数据库能够高效处理向量搜索操作。

如前图所示,数据库设置完成后,开发者可以通过对新入库数据或已有数据应用模型,生成对应的向量。此过程是将文本数据传入模型,获得能够捕捉词语和短语之间语义及句法关系的稠密向量表示。

此外,开发者还需准备一个系统或流程,用于为新的查询生成向量。通常这涉及创建一个 API 或服务,接受用户查询作为输入,使用相同的向量模型进行处理,生成对应的向量表示。该向量随后可用于在数据库上执行 kNN 或精确匹配搜索,以检索最相关的结果。在 Elasticsearch 中,用户可以向 _infer 接口发送字符串,指定相应模型,获得作为响应部分返回的向量。

模型部署并完成向量生成后,进行环境的负载测试至关重要,以确保向量搜索系统能够承载预期的查询负载。必须考虑系统资源,如内存(RAM)和 CPU 线程等。开发者应模拟真实用户流量和查询模式,评估系统在各种条件下的性能,帮助发现潜在瓶颈及优化点,确保系统高效且响应迅速。

检验搜索结果的相关性对于满足最终用户需求至关重要。开发者应与领域专家或用户密切合作,评估搜索结果质量,并根据需要对模型或搜索参数进行微调。这种迭代过程有助于提升向量搜索系统的整体效果。

当向量搜索系统投入生产后,持续监控必不可少,以保证查询性能最优。开发者和运维人员应定期关注系统性能、资源使用和潜在错误,根据用户反馈和需求变化调整搜索参数、更新模型或重新训练系统。此持续维护过程有助于保持系统的时效性和用户适用性。

Hugging Face

Hugging Face 是一家领先的人工智能研究机构,在现代嵌入和自然语言处理(NLP)模型的发展与广泛应用中发挥了关键作用。通过其在 NLP 领域的开创性工作,Hugging Face 大力推动了最先进模型、资源和工具的普及,为开发者、研究人员和企业提供了平等访问机会。以下是 Hugging Face 社区首页的预览图:

image.png

Hugging Face 的核心产品之一是 Model Hub,这是一个集中的预训练模型仓库,涵盖各种自然语言处理(NLP)任务。Model Hub 使开发者能够轻松发现、下载并针对特定应用场景微调模型。通过提供从 BERT、GPT 到 T5、RoBERTa 等丰富的模型,Hugging Face 让开发者更方便地实验并将先进的 NLP 功能(包括向量搜索)集成到应用中。Model Hub 还为研究人员和开发者提供了共享自定义模型的平台,促进社区内部的协作与知识交流。

Hugging Face 在 Transformers 库的开发中发挥了关键作用。Transformers 是一个流行的开源 Python 库,用于训练和使用基于 Transformer 的模型。该库提供简洁易用的 API,屏蔽了复杂细节,使开发者能够专注于特定任务。凭借丰富的预构建模型、分词器和工具集,Transformers 库极大加速了现代 NLP 技术在各类应用中的开发和普及。

Hugging Face 还提供了 Datasets 库,这是一个涵盖千余个 NLP 和机器学习任务数据集的资源库,便于开发者和研究者获取并处理高质量数据。Datasets 库包含数据预处理、操作和评估工具,简化了模型训练和微调的数据准备流程。

此外,Hugging Face 设计了一个全面且免费的培训课程,涵盖 NLP 基础,结合生态系统中的库和资源。课程包含社区模型使用示例及针对特定任务和数据集的微调指导,是开发者和爱好者的宝贵资源。

市场格局及其如何加速开发者体验

近年来,针对向量搜索场景,出现了大量部分或全托管的数据库平台。这种多样化使开发者无论个人还是组织层面,都能方便地探索、试验并实施向量搜索项目。以下精选的几个平台,展示了如今实现向量搜索的便捷性。需注意,这些公司并非市场上唯一参与者,且实现向量搜索的方式远不止这些。它们仅为您提供当前市场的一个概览。

Pinecone

Pinecone 是一个专门为大规模向量搜索和相似度应用设计的托管向量数据库服务。作为托管服务,它简化了部署与维护,开发者无需关注基础设施管理,专注于应用开发。Pinecone 支持多种距离度量(如余弦相似度、欧氏距离),并内置去重与过滤功能。但作为托管方案,Pinecone 的定制化能力有限,且定价结构可能对预算有限或工作负载不稳定的用户构成限制。

Vespa.ai

Vespa.ai 是一个开源、可扩展的实时搜索引擎,支持向量搜索、文本搜索和结构化数据搜索。它功能多样,可应用于推荐系统、新闻搜索等多种场景。提供丰富的查询语言,支持自定义排名函数及实时索引。其功能丰富带来配置和部署的复杂性,可能使部分用户相比专为向量搜索设计的数据库感到门槛较高。

Milvus

Milvus 是一个基于流行开源技术如 FAISS 和 NMSLIB 构建的开源向量相似度搜索引擎。设计注重高性能和可扩展性,支持多种相似度算法和距离度量,能处理数十亿向量,且易于与 TensorFlow、PyTorch 等机器学习框架集成。部分用户可能会觉得 Milvus 学习曲线较陡,特别是对底层技术不熟悉者。此外,Milvus 专注于向量搜索,不支持文本和结构化数据混合搜索,限制了其在部分混合搜索场景中的适用性。

Weaviate

Weaviate 是一个基于 GraphQL 的开源向量搜索引擎,支持自然语言查询。其优势在于聚焦语义搜索,适合对理解查询含义要求较高的应用场景。支持基于模式(schema)的数据建模,允许用户定义数据结构及实体间关系。对不熟悉语义搜索和 GraphQL 的用户而言,使用过程中可能面临一定复杂性。

Elasticsearch

Elastic.co 的 Elasticsearch 8 版本及以上支持稠密向量存储,能够进行近似最近邻(ANN)和精确匹配搜索,为大规模数据集提供可扩展的向量搜索方案。ANN 在牺牲一定准确率的前提下提升搜索速度,特别适合高维向量。Elasticsearch 采用层次可导航小世界图(HNSW)算法,性能优异且业界广泛应用。基于 Apache Lucene,向量搜索功能与过滤和 BM25 混合搜索无缝集成。但 Elasticsearch 的复杂性可能给部分用户带来配置挑战。Lucene 的 dense_vector 类型存在一定限制,虽然可处理数十亿规模的向量数据,但内存需求较高,可能导致大规模 ANN 使用受限。

每款向量数据库各有优劣,适用场景和需求不同。Pinecone 以易用性和维护便利著称,Vespa 功能多样支持多种搜索模式,Milvus 聚焦高性能和可扩展性,Weaviate 专注语义搜索和自然语言能力,Elasticsearch 提供稠密向量与 ANN 搜索支持并集成丰富搜索功能。

开发者在选择向量数据库时,应结合自身需求,综合评估各方案的功能、性能与易用性,做出最合适的决策。

应用场景与领域

基于 AI 的搜索对于大多数用户来说往往让人望而生畏,主要原因在于缺乏标准化——市面上有太多入门选择。在本书中,我们认为帮助实践者了解从哪些更成熟、更被广泛采用的技术、用例和应用领域入手会更有价值。

我们将直接探讨搜索的可能范围,梳理机器学习(ML)、自然语言处理(NLP)和深度学习领域复杂术语背后的实质。

此外,开始项目之前需要牢记一点:在复杂度、投入和成本之间保持平衡。考虑到该领域研究技术日新月异,初期投入可能很快就需要调整或升级。本节将介绍什么是基于 AI 的搜索,并探讨包括命名实体识别(NER)、情感分析、文本分类、问答(QA)和文本摘要等不同技术,配以可运行的实际案例。

基于 AI 的搜索

过去三年,各行各业纷纷寻求将客户面向的搜索体验从关键词搜索升级为语义搜索。除了让用户以自然思考方式搜索外,企业还希望根据用户浏览行为实现个性化客户体验。

如前所述,全面成熟的解决方案较少,且该领域变化迅速,因此客户通常青睐 Elastic 等具备高度灵活性的成熟平台。

整体来看,构建基于 AI 的搜索体验涉及技能、投入和成本等潜在挑战。一般而言,项目包含以下五个高层步骤,后续章节将详细讲解:

  1. 数据收集
  2. 数据表示
  3. 应用机器学习
  4. 集成个性化
  5. 推向生产环境

下面开始详细介绍。

数据收集

这是最具挑战的第一步,因为它决定了模型学习的边界——即模型能从哪些已知且有价值的事件中汲取知识。收集并处理足够大的数据量,适应应用领域的需求,是关键。企业会利用产品描述、用户相关数据、评论甚至客服数据来训练模型,以支持比较和检索。

数据表示

训练数据是一回事,如何用对用户有益的方式表示数据又是另一回事。当前最有效的方法是利用词嵌入或其他向量化技术,将数据表示为高维向量空间中的向量。向量不仅捕捉语义,还包括上下文,极大提升用户体验。

举例来说,电商客户搜索“无线耳机”时,企业会将用户查询转成高维向量,采用预训练模型(如 word2vec)将查询中的每个词转换为向量表示,再将其合成为整个查询的向量。这就能将查询向量与产品向量空间做比对。下面是一个 10 维向量示例,帮助理解表示方式:

[0.213, -0.178, 0.425, -0.067, 0.321, 0.195, -0.267, 0.132, -0.455, -0.033]

有趣的是,查询被转化到一个可能性的空间,这让我们能基于向量空间(而非关键词)判断相似度——判断产品是否存在,用户搜索的是哪类产品,从查询中提取的语义信息令人着迷。

应用机器学习

更高层次的 AI 搜索体验是用卷积神经网络(CNN)、循环神经网络(RNN)或 Transformer 等模型对先前向量化的数据进行训练,以学习和理解数据间的模式和关联。此阶段目标是让搜索应用支持 NLP。

继续无线耳机例子,使用 CNN 或 RNN 模型可以探索这款商品潜在的相关属性,比如降噪效果、电池寿命、防水性,甚至运动时是否稳固等。

集成个性化

无个性化,即使搜索比关键词智能,也会显得冷冰冰。个性化能基于用户过往搜索及相似用户搜索引入上下文,分别称为网络画像和用户画像。

CNN/RNN/Transformer 的优势不仅于此——还能根据用户历史搜索行为,提供个性化推荐。

推向生产环境

我们很想说基于 AI 的搜索能自动平衡相关性和响应速度的优化,但现实往往并非如此。

拥有正确数据的关键在于做出正确决策并控制优化成本,这不仅要求全面监控用户体验,还需要“有趣事件”帮助理解搜索质量。

你需要一定程度的 A/B 测试,将现有搜索状态与新状态(如模型调优后)进行比较。同时,也需建立反馈机制,判断结果的相关性。

当你完成以上高层步骤搭建了基于 AI 的搜索系统后,可进一步通过引入 NER、情感分析、文本分类、问答及文本摘要等技术,持续提升系统能力。接下来我们将详细学习这些技术。

命名实体识别(NER)

NER 是自然语言处理(NLP)的一个组成部分,用于检测和分类非结构化文本中的命名实体。实体可以是人名、品牌、地名或组织,这些都具有唯一的名称或标识符。
通过该技术,进入系统的非结构化数据会被分类,这通常是通过在带注释的数据上进行预训练的机器学习模型实现的。训练过程中,数据被标注对应的类型。训练完成后,模型利用这些标签学习文本中的模式和关系,从而能够准确识别和分类新文本中的命名实体。

一个典型的应用场景是个人身份信息(PII)的检测,这些敏感信息在未经控制的情况下流入系统。PII 可能包括姓名、地址、社会保障号码和财务信息等。
对于银行来说,无法检测流入的数据中的 PII 会带来严重后果。例如,如果黑客获取了银行数据并窃取了 PII,他们可能进行欺诈和身份盗窃,给客户带来财务损失,同时银行也可能因法规问题受到处罚。
因此,金融服务公司利用 NER 来降低 PII 泄露风险,可能是在静态数据或处理中的数据上应用。最终措施包括涂黑、加密、掩码处理或设置合理权限,以避免法律和声誉风险。

情感分析

情感分析是 NLP 另一项技术,旨在识别和提取非结构化文本中的情绪倾向。它常用于社交网络,如从推文中提取情感信息。组织常用它来了解用户对品牌的情绪反馈。
尽管情感分析应用广泛,但它对更具体的场景也很有用,比如实时分析产品评论或监测市场对新投资的情绪,有助于金融分析师做出更明智的投资决策。
现代企业最害怕的是未能及时发现客户对产品或服务的负面情绪,这可能导致声誉受损和客户流失。

Python 自然语言工具包(NLTK,www.nltk.org/)在情感分析领域非常受欢迎。以下示例代码演示了如何进行简单的情感分析及可能的结果:

import nltk
nltk.download('vader_lexicon')
from nltk.sentiment import SentimentIntensityAnalyzer
sia = SentimentIntensityAnalyzer()
text = "I really enjoyed the new movie. The acting was great and the plot was engaging."
scores = sia.polarity_scores(text)
print(scores)

你可以在这个笔记本运行代码:github.com/PacktPublis…
该代码使用 SentimentIntensityAnalyzer 进行情感分析,返回每种情绪(负面、中性、正面)的得分,以及一个综合得分,范围从 -1(极负面)到 +1(极正面)。运行后可能得到如下结果:

{'neg': 0.0, 'neu': 0.522, 'pos': 0.478, 'compound': 0.8777}

结果表明文本表达了非常积极的情绪!

文本分类

文本分类是 NLP 的另一项技术,旨在将非结构化数据分配到预定义的类别。一个常见的实际例子是垃圾邮件管理,即过滤和标记电子邮件为垃圾邮件或非垃圾邮件。
垃圾邮件通常带有多种可疑信号,如特定关键词、拼写错误、链接等。训练好的模型可以自动将邮件分类为垃圾或非垃圾,从而提升整体邮件体验和生产效率。

以下示例使用在线数据源进行分类,并展示结果和准确率:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score

# 加载数据集
newsgroups_train = fetch_20newsgroups(subset='train')
newsgroups_test = fetch_20newsgroups(subset='test')

# 文本向量化
vectorizer = CountVectorizer()
X_train = vectorizer.fit_transform(newsgroups_train.data)
X_test = vectorizer.transform(newsgroups_test.data)

# 训练朴素贝叶斯分类器
clf = MultinomialNB()
clf.fit(X_train, newsgroups_train.target)

# 测试预测
y_pred = clf.predict(X_test)

# 输出准确率和预测类别
print(f"Accuracy: {accuracy_score(newsgroups_test.target, y_pred)}")
print(f"Predicted classes: {y_pred}")

在 Google Colab 运行该代码可能得到如下输出:

Accuracy: 0.7728359001593202
Predicted classes: [7 11 0 ... 9 3 15]

解析:
示例使用的是在线的 20 Newsgroups 数据集(qwone.com/~jason/20Ne…),包含约 2 万篇新闻组文档,划分为约 20 个不同类别。该数据集由卡耐基梅隆大学的 Ken Lang 汇编。
示例用到 scikit-learn(sklearn)库,它是 Python 领域广受欢迎的机器学习开源库,支持多种监督和无监督算法,如分类、回归、聚类和降维。
这里使用 CountVectorizer 将文本转换成数值向量,便于机器学习处理。
训练了一个朴素贝叶斯分类器,假设文档中各词频相互独立,基于此预测新文档的类别。
输出的预测结果是测试数据的类别标签,整数范围为 0 到 19,对应 20 个类别。标签数字无实际含义,仅作分类标识。

问答系统(QA)

问答系统在 2022 年底因 ChatGPT 的出现而爆红。ChatGPT 不仅理解对话上下文,还能生成与用户问题相关的回答。它基于 GPT-3 架构预训练了问答模型。
QA 是 NLP 领域中构建自动回答人类提问系统的研究方向。挑战在于系统需理解问题上下文,有时问题属于对话片段,且对话可在会话中交织。

在大型语言模型(LLM)出现前,基于事实的 QA 系统回答问题一般包括两步:

  1. 理解问题,将其分解成主语、宾语和谓语等组成部分。
  2. 依赖庞大数据库检索相关信息,从中提取和综合答案。

此过程涉及文本处理、搜索及深度学习等机器学习算法。

实际应用示例:医疗行业。医生面对复杂病患病史时,需权衡不同药物的处方风险。QA 系统可辅助医生节省时间和减少患者痛苦,提升整体医疗服务质量。

以下示例展示如何使用 Hugging Face Transformers 库的预训练模型,根据上下文回答问题:

!pip install transformers
from transformers import pipeline

# 加载问答模型
model = pipeline("question-answering", model="distilbert-base-cased-distilled-squad", tokenizer="distilbert-base-cased")

# 定义问题和上下文
question = "What is the capital city of Japan?"
context = ("Japan is an island country in East Asia. Located in the Pacific Ocean, it lies to the east of the Sea of Japan, "
           "China, North Korea, South Korea and Russia, stretching from the Sea of Okhotsk in the north to the East China Sea and Taiwan in the south. "
           "The capital city of Japan is Tokyo.")

# 获取答案
result = model(question=question, context=context)

# 打印答案
print(f"Answer: {result['answer']}")

这里加载了 transformers 包中的预训练问答模型 distilbert-base-cased-distilled-squad,该模型基于斯坦福问答数据集(SQuAD)预训练。
SQuAD 数据集地址:rajpurkar.github.io/SQuAD-explo…(由 Pranav Rajpurkar、Robin Jia 和 Percy Liang 于 2018 年发布,论文题为《Know What You Don’t Know: Unanswerable Questions for SQuAD》)。

示例中定义了问题和上下文,传入模型进行回答。
在 Google Colab 运行代码,将得到如下输出:

Answer: Tokyo

文本摘要

文本摘要是另一项具有挑战性的自然语言处理(NLP)任务,因为它要求理解文档的语义,并识别出最相关的信息进行保留。我们必须在不丢失文本含义和准确性的前提下,减少文本中的信息量。

一个我们日常熟悉的真实例子是新闻推送应用。你使用的新闻应用会对内容进行摘要,以吸引你的注意力。这个过程面临的真正挑战在于新闻行业必须实时响应,每一毫秒的滚动体验都至关重要。在用户浏览的短暂时间内,摘要必须激励用户点击进入新闻详情页,而详情页中通常包含大量广告,是新闻机构获得收入的关键。

以下示例使用 Hugging Face Transformers 库对维基百科中“蓝喉金刚鹦鹉”(Blue-throated macaw)条目的文本进行摘要:

!pip install transformers
from transformers import pipeline

# 定义需要摘要的文本
text = ("The blue-throated macaw (Ara glaucogularis) is a species of macaw that is endemic to a small area of north-central Bolivia, "
        "known as the Llanos de Moxos. Recent population and range estimates suggest that about 350 to 400 individuals remain in the wild. "
        "Its demise was brought on by nesting competition, avian predation, and a small native range, exacerbated by indigenous hunting and capture for the pet trade. "
        "Although plentiful in captivity, it is critically endangered in the wild and protected by trading prohibitions. "
        "In 2014, the species was designated a natural patrimony of Bolivia. This blue-throated macaw in flight was photographed at Loro Parque, "
        "on the Spanish island of Tenerife in the Canary Islands.")

# 实例化摘要管道
summarizer = pipeline("summarization")

# 生成摘要
summary = summarizer(text, max_length=100, min_length=30, do_sample=False)[0]["summary_text"]

# 打印摘要
print(summary)

使用 Hugging Face 的 DistilBert 模型和指定最大、最小摘要长度参数后,输出可能为:

“蓝喉金刚鹦鹉(Ara glaucogularis)是一种特有于玻利维亚中北部小范围地区(称为莫霍斯大草原)的金刚鹦鹉。最新估计其野外种群约为 350 至 400 只。”

目前可用的模型数量相当丰富。像 Hugging Face 这样的社区大大提升了你的生产力,使你无需微调模型即可运行复杂的 NLP 任务。

到这里,你应该已经对基于 AI 的搜索有了较好的理解,掌握了如何使用现有技术,甚至能将部分学习成果立即应用到你的代码中。

Elastic 在该领域扮演了怎样的角色?

那么,Elastic 在这里发挥着什么作用呢?你可以通过多种方式利用 Elastic —— 其中包括 Elasticsearch。Elasticsearch 是一个分布式且高度可扩展的数据存储系统,擅长信息检索。在笔记本中运行前面那些代码是一回事,将其在大规模环境中投入生产、被数百、数千甚至数百万用户访问则是另一回事。

此外,训练过程可能耗时较长,因为算法需要访问大量经过索引、以支持高速访问的数据,并且要支持大规模处理。市场上很少有数据存储系统既能灵活处理结构化和非结构化数据,又能管理多种数据类型,同时具备高扩展性以支持海量数据摄取和搜索。

Elasticsearch 是一个独特的选择,不仅因为其技术特性,还因为其活跃的社区和广泛的采用。正如前文所述,基于 AI 的搜索应用领域变化迅速,因此在这一过程中拥有一定的稳定性是一种奢侈。Elasticsearch 和 Hugging Face 等技术与社区,为用户提供了安全保障和应对变化的韧性。

我们喜欢将 Elasticsearch 描述为搜索和分析引擎。其分析功能尤为关键,因为它允许你对数据执行复杂的查询和聚合。

更为重要的是,Elasticsearch 的可扩展性。2021 年,Elastic 推出了向量索引能力。这意味着 Elasticsearch 原生支持向量概念,并针对该任务进行了优化,用户无需自行管理或强制数据存储处理不支持的数据类型。

除了搜索,我们还希望启发你思考如何将向量搜索应用于其他场景,比如可观察性(observability)和网络安全。

可观察性与网络安全简介

向量不仅对 NLP 等任务重要,在可观察性和网络安全等领域同样关键。它们能够高效处理和分析大量数据。

让我们先暂停思考当前的可观察性状态。如今,运维团队拥有多种工具加速故障排查过程,如基于无监督学习的异常检测。文本分类对日志等相对非结构化、需要归类的数据尤其有益,能够提升分析师体验并加快根因分析。

想象一下未来的状态:通过向量化数据——即将数据点转换为向量——识别模式和异常变得更加容易。

在网络安全领域,向量可用于表示和分析多种数据类型,如网络流量、恶意软件特征和用户行为。

我们将在第7章和第8章分别详细探讨可观察性和网络安全,并展示你可以在实际环境中应用的案例,随后会将这些应用拓展到其他合适的领域。

总结

本书将通过务实且实用的示例,引导你根据自身需求复现各种应用,涵盖从构建基于向量的搜索应用,到将向量技术应用于可观察性和安全等领域。它面向广泛的实践者,但更侧重于运维团队,这些团队面临特定挑战,能够充分利用向量技术与 Elastic 的结合。

本章介绍了自然语言处理(NLP)、向量搜索、基于 AI 的搜索及相关技术的关键内容。你还学习了一些可运行并可根据业务需求调整的代码示例。最后,你对 Elasticsearch 在该领域中的作用有了宏观的认识,并了解了向量搜索在搜索以外的应用场景,如可观察性。

下一章我们将从 Elasticsearch 中的向量开始,探讨当前的搜索方法,并了解向量如何增强和提升搜索性能。同时,我们将深入研究 Elasticsearch 中向量实现的技术细节。