访问 Elastic 中的 Machine Learning 模型
Elastic 支持您所需的 Machine Learning 模型
借助 Elastic®,您可以应用适合您的用例和 ML 专业知识水平的 Machine Learning (ML)。您有多种选择:
- 利用内置的模型。在我们的可观测性和安全解决方案中,除了针对特定安全威胁和系统问题类型的模型外,您还可以使用专有的开箱即用型 Elastic Learned Sparse Encoder 模型以及语言识别;如果您处理的是非英语文本数据,语言识别就很有用。
- 从任意位置访问第三方 PyTorch 模型,包括 HuggingFace 模型中心。
- 加载您自行训练的模型,现在主要指的是 NLP 转换器。
使用内置模型可让您即时获得价值,而不需要您具备任何 ML 专业知识,而且您可以灵活地尝试不同的模型,并确定哪种模型对您的数据而言效果最好
我们的模型管理机制可跨集群中的多个节点进行扩展,同时还能确保为高吞吐量和低延迟工作负载提供良好的推理性能。之所以能够做到这一点,部分原因在于,赋予采集管道运行推理的能力,并在采集阶段以及数据分析和搜索期间使用专用节点进行计算要求高的模型推理。
请继续阅读本文,进一步了解 Eland 库,包括如何使用 Eland 库将模型加载到 Elastic 中,以及对于您在 Elasticsearch® 中可能使用的各种 Machine Learning(从最新的转换器和自然语言处理 (NLP) 模型到用于回归的增强树模型),Eland 库如何发挥作用。
使用 Eland 可以将 ML 模型加载到 Elastic 中
我们的 Eland 库提供了一个简单的接口,可以将 ML 模型加载到 Elasticsearch 中,前提是这些模型是使用 PyTorch 训练的。Elasticsearch 使用原生库 libtorch,且要求模型已经导出或保存为 TorchScript 表示形式,从而避免了在执行模型推理时运行 Python 解释器。
通过在 PyTorch 中集成用于构建 NLP 模型的最热门格式之一,Elasticsearch 可以提供一个适用于各种 NLP 任务和用例的平台。我们将在接下来的转换器部分中对此进行详细介绍。
可以通过三种方式使用 Eland 上传模型:命令行、Docker 和在您自己的 Python 代码中。Docker 没有那么复杂,因为它不需要在本地安装 Eland 及其所有依赖项。下面的代码示例展示了您在能够访问 Eland 后如何上传 DistilBERT NER 模型:
下面我们将逐一介绍 eland_import_hub_model 的参数。您可以在 Docker 容器中发出相同的命令。
上传完成后,您可以在 Kibana 的 ML 模型管理用户界面中管理 Elasticsearch 集群上的模型,包括增加分配数量以提高吞吐量,以及在(重新)配置系统时停止/恢复模型。
支持哪些模型?
Elastic 支持各种转换器模型,以及最热门的监督式学习库:
- NLP 和嵌入模型:所有符合标准 BERT 模型接口并使用 WordPiece 词汇切分算法的转换器。查看受支持的模型架构的完整列表。
- 监督式学习:将 scikit-learn、XGBoost 和 LightGBM 库中训练的模型进行序列化,并用作 Elasticsearch 中的推理模型。我们的文档提供了一个示例,展示了如何在 Elastic 中对数据进行 XGBoost 分类训练。您还可以利用我们的数据帧分析功能导出和导入在 Elastic 中训练好的监督式模型。
- 生成式 AI:您可以使用为 LLM 提供的 API 来传递查询(可能会使用从 Elastic 中检索到的上下文进行扩充),并处理返回的结果。有关进一步说明,请参阅这篇博文,文中有 GitHub 存储库的链接,其中提供了通过 ChatGPT 的 API 进行通信的示例代码。
下面我们将进一步介绍您在搜索应用程序上下文中最有可能使用的模型类型:NLP 转换器。
在 Elastic 中轻松应用转换器和 NLP,轻而易举!
接下来向大家介绍加载和使用 NLP 模型的步骤,以 Hugging Face 提供的常用 NER 模型为例,仔细查看下面的代码片段中标识的参数。
- 指定 Elastic Cloud 标识符。或者,使用 --url。
- 提供用于访问集群的身份验证详细信息。您可以查找可用的身份验证方法。
- 在 Hugging Face 模型中心指定模型的标识符。
- 指定 NLP 任务的类型。支持的值为 fill_mask、ner、text_classification、text_embedding 和 zero_shot_classification。
加载模型后,接下来需要部署模型。您可以在 Kibana 中“Machine Learning”选项卡的“Model Management”(模型管理)屏幕上完成部署操作。然后,通常会测试模型,确保它正常运行。
现在,您可以随时使用已部署的模型进行推理。例如,要提取命名实体,您可以在已加载的 NER 模型上调用 _infer 终端:
该模型识别到两个实体:人名“Josh”和地名“Berlin”。
有关其他步骤,例如在推理管道中使用此模型和调整部署等,请阅读这篇博文,其中介绍了这个示例。
想了解如何应用语义搜索(例如,如何为文本创建嵌入,然后应用矢量搜索来查找相关文档)?这篇博文对此进行了分步介绍,包括验证模型性能。
不知道哪类任务适合哪种模型?下面这张表应会有所帮助。
Hugging Face 模型 | task-type |
---|---|
ner | |
text_embedding | |
text_classification | |
zero_shot_classification | |
问题回答 | question_answering |
此外,Elastic 还支持以 text_similarity 任务类型来比较两段文本之间的相似度(在将文档文本与所提供的另一个文本输入进行比较以进行排名时,这非常有用),有时也称为交叉编码。
查看以下资源,了解更多详细信息
- 支持 PyTorch 转换器,包括 Eland 的设计注意事项
- 将转换器加载到 Elastic 中并在推理中使用它们的步骤
- 介绍如何使用 ChatGPT 查询专有数据的博文
- 根据文本分类任务调整预先训练的转换器,并将定制模型加载到 Elastic 中
- 内置语言识别功能,可以在将非英语文本传入仅支持英语的模型之前进行语言识别
Elastic、Elasticsearch 及相关标志为 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称均为其相应所有者的商标、徽标或注册商标。
本博文所描述的任何特性或功能的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何特性或功能可能无法按时提供或根本不会提供。