正在加载

兼容的第三方模型

Elastic Stack 无服务器

注意

如果部署自动缩放已关闭,则用于部署和使用自然语言处理模型的最小专用 ML 节点大小在 Elastic Cloud Hosted 中为 16 GB。建议启用自动缩放,因为它允许您的部署根据需求动态调整资源。通过使用更多分配或每个分配更多线程可以实现更好的性能,这需要更大的 ML 节点。自动缩放会在需要时提供更大的节点。如果关闭自动缩放,您必须自己提供大小合适的节点。

Elastic Stack 机器学习功能支持符合标准 BERT 模型接口并使用 WordPiece 标记化算法的转换器模型。

当前支持的架构列表是

  • BERT
  • BART
  • DPR 双编码器
  • DeBERTa
  • DistilBERT
  • ELECTRA
  • MobileBERT
  • RoBERTa
  • RetriBERT
  • MPNet
  • 具有上述转换器架构的 SentenceTransformers 双编码器
  • XLM-RoBERTa

一般来说,任何具有受支持架构的训练模型都可以使用 eland 部署在 Elasticsearch 中。但是,不可能测试每个第三方模型。因此,提供以下列表仅供参考,可能不是最新的。 Elastic 不保证或保证机器学习功能将继续以描述的方式或根本不与这些第三方模型互操作。

这些模型按 NLP 任务列出;有关这些任务的更多信息,请参阅概述

以下列表中以**粗体**突出显示的模型建议用于评估目的以及开始使用 Elastic 自然语言处理功能。

稀疏嵌入模型应配置为 text_expansion 任务类型。

文本嵌入模型旨在与特定的评分函数一起使用,以计算它们产生的嵌入之间的相似性。典型评分函数的示例包括:cosinedot producteuclidean distance(也称为 l2_norm)。

这些模型产生的嵌入应使用 稠密向量字段类型在 Elasticsearch 中进行索引,并为模型选择合适的 相似度函数

要在 Elasticsearch 中查找相似的嵌入,请使用高效的 近似 k 近邻 (kNN) 搜索 API,并将文本嵌入作为查询向量。近似 kNN 搜索使用在稠密向量字段映射中定义的相似度函数来计算相关性。为了获得最佳结果,该函数必须是模型的合适相似度函数之一。

使用 SentenceTransformerWrapper

使用 DPREncoderWrapper

您可以将这些文本相似度模型用于语义重排序

用于每种 NLP 任务类型的模型必须输出特定格式的张量,才能在 Elasticsearch NLP 管道中使用。

以下是每种任务类型的预期输出。

填充掩码是一种特定的令牌分类;它是许多转换器模型的基本训练任务。

为了使 Elastic Stack 的填充掩码 NLP 任务理解模型输出,它必须具有特定的格式。它需要是一个浮点张量,shape(<序列数>, <令牌数>, <词汇大小>)

这是一个单序列示例 "The capital of [MASK] is Paris",词汇表为 ["The", "capital", "of", "is", "Paris", "France", "[MASK]"]

应输出

 [
   [
     [ 0, 0, 0, 0, 0, 0, 0 ],
     [ 0, 0, 0, 0, 0, 0, 0 ],
     [ 0, 0, 0, 0, 0, 0, 0 ],
     [ 0.01, 0.01, 0.3, 0.01, 0.2, 1.2, 0.1 ],
     [ 0, 0, 0, 0, 0, 0, 0 ],
     [ 0, 0, 0, 0, 0, 0, 0 ]
   ]
]
  1. The
  2. capital
  3. of
  4. [MASK]
  5. is
  6. Paris

此处 [MASK] 的预测值为 "France",得分为 1.2。

命名实体识别是一种特定的令牌分类任务。序列中的每个令牌都根据一组特定的分类标签进行评分。对于 Elastic Stack,我们使用 Inside-Outside-Beginning (IOB) 标记。 Elastic 支持任何 NER 实体,只要它们是 IOB 标记的。默认值为:“O”、“B_MISC”、“I_MISC”、“B_PER”、“I_PER”、“B_ORG”、“I_ORG”、“B_LOC”、“I_LOC”。

"O" 实体标签表示当前令牌在任何实体之外。 "I" 表示令牌在实体内部。 "B" 表示实体的开始。 "MISC" 是一个杂项实体。 "LOC" 是一个位置。 "PER" 是一个人。 "ORG" 是一个组织。

响应格式必须是一个浮点张量,shape(<序列数>, <令牌数>, <分类标签数>)

这是一个单序列示例 "Waldo is in Paris"

 [
   [
//    "O", "B_MISC", "I_MISC", "B_PER", "I_PER", "B_ORG", "I_ORG", "B_LOC", "I_LOC"
     [ 0,  0,         0,       0.4,     0.5,     0,       0.1,     0,       0 ],
     [ 1,  0,         0,       0,       0,       0,       0,       0,       0 ],
     [ 1,  0,         0,       0,       0,       0,       0,       0,       0 ],
     [ 0,  0,         0,       0,       0,       0,       0,       0,       1.0 ]
   ]
]
  1. Waldo
  2. is
  3. in
  4. Paris

文本嵌入允许对文本进行语义嵌入,以进行密集信息检索。

模型的输出必须是特定的嵌入,没有任何额外的池化。

Eland 为上述模型完成了此包装。但是,如果提供您自己的模型,则该模型必须输出每个推断序列的嵌入。

对于文本分类(例如,在情感分析等任务中),对整个序列进行分类。模型的输出必须是一个浮点张量,shape(<序列数>, <分类标签数>)

这是一个包含两个序列的“快乐”和“悲伤”的二元分类模型的示例

 [
   [
//     happy, sad
     [ 0,     1],
     [ 1,     0]
   ]
]
  1. 第一个序列
  2. 第二个序列

零样本文本分类允许对任意标签进行文本分类,这些标签不一定是原始训练的一部分。每个序列都与给定的假设模板的标签组合在一起。然后,模型根据 [蕴含、中性、矛盾] 对每个组合进行评分。模型的输出必须是一个浮点张量,shape(<序列数>, <标签数>, 3)

这是一个针对 4 个标签进行分类的单序列示例

 [
   [
//     entailment, neutral, contradiction
     [ 0.5,        0.1,     0.4],
     [ 0,          0,       1],
     [ 1,          0,       0],
     [ 0.7,        0.2,     0.1]
   ]
]
  1. 第一个标签
  2. 第二个标签
  3. 第三个标签
  4. 第四个标签
© . All rights reserved.