兼容的第三方 NLP 模型

编辑

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

Elastic Stack 机器学习功能支持符合标准 BERT 模型接口并使用 WordPiece 分词算法的 Transformer 模型。

当前支持的架构列表为:

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

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

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

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

第三方填充掩码模型

编辑

第三方命名实体识别模型

编辑

第三方问答模型

编辑

第三方文本嵌入模型

编辑

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

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

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

使用 SentenceTransformerWrapper

使用 DPREncoderWrapper

第三方文本分类模型

编辑

第三方文本相似度模型

编辑

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

第三方零样本文本分类模型

编辑

预期的模型输出

编辑

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

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

填充掩码预期的模型输出

编辑

填充掩码是一种特定的标记分类;它是许多 Transformer 模型的基础训练任务。

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

这是一个示例,其中包含单个序列 "The capital of [MASK] is Paris" 和词汇表 ["The", "capital", "of", "is", "Paris", "France", "[MASK]"]

应该输出

 [
   [
     [ 0, 0, 0, 0, 0, 0, 0 ], // The
     [ 0, 0, 0, 0, 0, 0, 0 ], // capital
     [ 0, 0, 0, 0, 0, 0, 0 ], // of
     [ 0.01, 0.01, 0.3, 0.01, 0.2, 1.2, 0.1 ], // [MASK]
     [ 0, 0, 0, 0, 0, 0, 0 ], // is
     [ 0, 0, 0, 0, 0, 0, 0 ] // Paris
   ]
]

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

命名实体识别预期的模型输出

编辑

命名实体识别是一种特定的标记分类任务。序列中的每个标记都根据一组特定的分类标签进行评分。对于 Elastic Stack,我们使用内部-外部-开始 (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 ], // Waldo
     [ 1,  0,         0,       0,       0,       0,       0,       0,       0 ], // is
     [ 1,  0,         0,       0,       0,       0,       0,       0,       0 ], // in
     [ 0,  0,         0,       0,       0,       0,       0,       0,       1.0 ] // Paris
   ]
]

文本嵌入预期的模型输出

编辑

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

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

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

文本分类预期的模型输出

编辑

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

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

 [
   [
//     happy, sad
     [ 0,     1], // first sequence
     [ 1,     0] // second sequence
   ]
]

零样本文本分类预期的模型输出

编辑

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

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

 [
   [
//     entailment, neutral, contradiction
     [ 0.5,        0.1,     0.4], // first label
     [ 0,          0,       1], // second label
     [ 1,          0,       0], // third label
     [ 0.7,        0.2,     0.1] // fourth label
   ]
]