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