mlflow.johnsnowlabs

The mlflow.johnsnowlabs 模块提供了一个用于记录和加载 Spark NLP 和 NLU 模型的 API。此模块导出以下风格:

Johnsnowlabs(原生)格式

允许将模型作为 Spark Transformer 加载,以便在 Spark 会话中进行评分。具有此风格的模型可以作为 NluPipelines 加载,底层为 Spark MLlib PipelineModel。这是主要的风格,并且总是会生成。

mlflow.pyfunc

支持在 Spark 外部进行部署,方法是实例化 SparkContext 并将输入数据读取为 Spark DataFrame,然后再进行评分。也支持在 Spark 中作为 Spark UDF 进行部署。具有此风格的模型可以作为 Python 函数加载以执行推理。此风格总是会生成。

此风格使您可以访问 20,000+ 领先的 企业级 NLP 模型,支持 200 多种语言,涵盖医疗、金融、法律等多个领域。功能包括:LLM、文本摘要、问答、命名实体识别、关系抽取、情感分析、拼写检查、图像分类、自动语音识别等等,由最新的 Transformer 架构提供支持。这些模型由 John Snow Labs 提供,需要 John Snow Labs 企业 NLP 许可证。您可以联系我们获取研究或行业许可证。

您的许可证 JSON 中必须包含以下密钥

  1. SECRET:John Snow Labs 企业 NLP 库的密钥

  2. SPARK_NLP_LICENSE:您的 John Snow Labs 企业 NLP 许可证

  3. AWS_ACCESS_KEY_ID:您的 AWS 密钥 ID,用于访问 John Snow Labs 企业模型

  4. AWS_SECRET_ACCESS_KEY:您的 AWS 密钥,用于访问 John Snow Labs 企业模型

您可以使用以下代码设置它们

import os
import json

# Write your raw license.json string into the 'JOHNSNOWLABS_LICENSE_JSON' env variable
creds = {
    "AWS_ACCESS_KEY_ID": "...",
    "AWS_SECRET_ACCESS_KEY": "...",
    "SPARK_NLP_LICENSE": "...",
    "SECRET": "...",
}
os.environ["JOHNSNOWLABS_LICENSE_JSON"] = json.dumps(creds)
mlflow.johnsnowlabs.get_default_conda_env()[source]
返回

由调用 save_model()log_model() 生成的 MLflow 模型的默认 Conda 环境。

mlflow.johnsnowlabs.get_default_pip_requirements()[source]
返回

此风格生成的 MLflow 模型的默认 pip 要求列表。调用 save_model()log_model() 会生成一个至少包含这些要求的 pip 环境。

mlflow.johnsnowlabs.load_model(model_uri, dfs_tmpdir=None, dst_path=None)[source]

从路径加载 Johnsnowlabs MLflow 模型。

参数
  • model_uri

    MLflow 模型在 URI 格式中的位置。例如:

    • /Users/me/path/to/local/model

    • relative/path/to/local/model

    • s3://my_bucket/path/to/model

    • runs:/<mlflow_run_id>/run-relative/path/to/model

    • models:/<model_name>/<model_version>

    • models:/<model_name>/<stage>

    For more information about supported URI schemes, see Referencing Artifacts.

  • dfs_tmpdir – 分布式(Hadoop)文件系统 (DFS) 或本地文件系统(如果以本地模式运行)上的临时目录路径。模型将从该目标加载。默认为 /tmp/mlflow

  • dst_path – The local filesystem path to which to download the model artifact. This directory must already exist. If unspecified, a local output path will be created.

返回

一个 nlu.NLUPipeline

Example
import mlflow
from johnsnowlabs import nlp
import os

# Write your raw license.json string into the 'JOHNSNOWLABS_LICENSE_JSON' env variable
creds = {
    "AWS_ACCESS_KEY_ID": "...",
    "AWS_SECRET_ACCESS_KEY": "...",
    "SPARK_NLP_LICENSE": "...",
    "SECRET": "...",
}
os.environ["JOHNSNOWLABS_LICENSE_JSON"] = json.dumps(creds)

# start a spark session
nlp.start()
# Load you MLflow Model
model = mlflow.johnsnowlabs.load_model("johnsnowlabs_model")

# Make predictions on test documents
# supports datatypes defined in https://nlp.johnsnowlabs.com/docs/en/jsl/predict_api#supported-data-types
prediction = model.transform(["I love Covid", "I hate Covid"])
mlflow.johnsnowlabs.log_model(spark_model, artifact_path: str | None = None, conda_env=None, code_paths=None, dfs_tmpdir=None, registered_model_name=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, await_registration_for=300, pip_requirements=None, extra_pip_requirements=None, metadata=None, store_license=False, name: str | None = None, params: dict[str, typing.Any] | None = None, tags: dict[str, typing.Any] | None = None, model_type: str | None = None, step: int = 0, model_id: str | None = None)[source]

将通过 nlp.load() 创建的 Johnsnowlabs NLUPipeline 记录为当前运行的 MLflow artifact。这使用 MLlib 持久化格式,并生成具有 johnsnowlabs 风格的 MLflow 模型。

注意:如果没有活动的运行,它将实例化一个运行以获取 run_id。

参数
  • spark_model

    通过 nlp.load() 获取的 NLUPipeline

  • artifact_path – Deprecated. Use name instead.

  • conda_env

    Conda 环境的字典表示形式或本地文件系统上 Conda 环境 yaml 文件的路径。如果提供了此项,它描述了模型应运行的环境。它至少应指定 get_default_conda_env() 中包含的依赖项。如果为 None,则默认的 get_default_conda_env() 环境将添加到模型中。以下是 Conda 环境的示例字典表示形式

    {
        'name': 'mlflow-env',
        'channels': ['defaults'],
        'dependencies': [
            'python=3.8.15',
            'johnsnowlabs'
        ]
    }
    

  • code_paths

    A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.

    For a detailed explanation of code_paths functionality, recommended usage patterns and limitations, see the code_paths usage guide.

  • dfs_tmpdir – 分布式(Hadoop)文件系统 (DFS) 或本地文件系统(如果以本地模式运行)上的临时目录路径。模型将写入此目标,然后复制到模型的 artifact 目录中。这是必需的,因为如果在集群上运行,Spark ML 模型会从 DFS 读取和写入。如果此操作成功完成,则删除 DFS 上创建的所有临时文件。默认为 /tmp/mlflow

  • registered_model_name – 如果提供,则在 registered_model_name 下创建一个模型版本,如果给定名称的注册模型不存在,也会创建该注册模型。

  • signature

    ModelSignature 描述了模型输入和输出 Schema。模型签名可以从具有有效模型输入的​​数据集(例如,省略目标列的训练数据集)和有效模型输出的​​数据集(例如,在训练数据集上生成的模型预测)中推断,例如:

    from mlflow.models.signature import infer_signature
    
    train = df.drop_column("target_label")
    predictions = ...  # compute model predictions
    signature = infer_signature(train, predictions)
    

  • input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当 signature 参数为 None 时,输入示例用于推断模型签名。

  • await_registration_for – 等待模型版本完成创建并处于 READY 状态的秒数。默认情况下,函数等待五分钟。指定 0 或 None 可跳过等待。

  • pip_requirements – 要么是 pip 要求字符串的可迭代对象(例如 ["johnsnowlabs", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 要求文件的字符串路径(例如 "requirements.txt")。如果提供,这描述了模型应运行的环境。如果为 None,则通过 mlflow.models.infer_pip_requirements() 从当前软件环境中推断默认的要求列表。如果要求推断失败,则回退到使用 get_default_pip_requirements。要求和约束都会被自动解析并写入 requirements.txtconstraints.txt 文件,并作为模型的一部分存储。要求也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

  • extra_pip_requirements

    要么是 pip 要求字符串的可迭代对象(例如 ["pandas", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 要求文件的字符串路径(例如 "requirements.txt")。如果提供,这描述了附加到根据用户当前软件环境自动生成的默认 pip 要求集中的额外 pip 要求。要求和约束都会被自动解析并写入 requirements.txtconstraints.txt 文件,并作为模型的一部分存储。要求也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

    警告

    以下参数不能同时指定

    • conda_env

    • pip_requirements

    • extra_pip_requirements

    此示例演示了如何使用 pip_requirementsextra_pip_requirements 指定 pip requirements。

  • metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。

  • store_license – 如果为 True,许可证将与模型一起存储,并在重新加载时使用。

  • name – 模型名称。

  • params – 要与模型一起记录的参数字典。

  • tags – 要与模型一起记录的标签字典。

  • model_type – 模型的类型。

  • step – 记录模型输出和指标的步骤

  • model_id – 模型的 ID。

返回

一个 ModelInfo 实例,其中包含已记录模型的元数据。

示例
import os
import json
import pandas as pd
import mlflow
from johnsnowlabs import nlp

# Write your raw license.json string into the 'JOHNSNOWLABS_LICENSE_JSON' env variable
creds = {
    "AWS_ACCESS_KEY_ID": "...",
    "AWS_SECRET_ACCESS_KEY": "...",
    "SPARK_NLP_LICENSE": "...",
    "SECRET": "...",
}
os.environ["JOHNSNOWLABS_LICENSE_JSON"] = json.dumps(creds)

# Download & Install Jars/Wheels if missing and Start a spark Session
nlp.start()

# For more details on trainable models and parameterization like embedding choice see
# https://nlp.johnsnowlabs.com/docs/en/jsl/training
trainable_classifier = nlp.load("train.classifier")

# Create a sample training dataset
data = pd.DataFrame(
    {"text": ["I hate covid ", "I love covid"], "y": ["negative", "positive"]}
)

# Fit and get a trained classifier
trained_classifier = trainable_classifier.fit(data)
trained_classifier.predict("He hates covid")

# Log it
mlflow.johnsnowlabs.log_model(trained_classifier, name="my_trained_model")
mlflow.johnsnowlabs.save_model(spark_model, path, mlflow_model=None, conda_env=None, code_paths=None, dfs_tmpdir=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, pip_requirements=None, extra_pip_requirements=None, metadata=None, store_license=False)[source]

将 Spark johnsnowlabs 模型保存到本地路径。

默认情况下,此函数使用 Spark MLlib 持久化机制保存模型。

参数
  • spark_model – 要保存的 pyspark.ml.pipeline.PipelineModel 或 nlu.NLUPipeline 对象。每个 johnsnowlabs 模型都是一个 PipelineModel,可以加载为 nlu.NLUPipeline。

  • path – 要保存模型的本地路径。

  • mlflow_model – 正在向其添加此风格的 MLflow 模型配置。

  • conda_env

    Conda 环境的字典表示形式或本地文件系统上 Conda 环境 yaml 文件的路径。如果提供了此项,它描述了模型应运行的环境。它至少应指定 get_default_conda_env() 中包含的依赖项。如果为 None,则默认的 get_default_conda_env() 环境将添加到模型中。以下是 Conda 环境的示例字典表示形式

    {
        'name': 'mlflow-env',
        'channels': ['defaults'],
        'dependencies': [
            'python=3.8.15',
            'johnsnowlabs'
        ]
    }
    

  • code_paths

    A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.

    For a detailed explanation of code_paths functionality, recommended usage patterns and limitations, see the code_paths usage guide.

  • dfs_tmpdir – 分布式(Hadoop)文件系统 (DFS) 或本地文件系统(如果以本地模式运行)上的临时目录路径。模型将写入此目标,然后复制到请求的本地路径。这是必需的,因为如果在集群上运行,Spark ML 模型会从 DFS 读取和写入。如果此操作成功完成,则删除 DFS 上创建的所有临时文件。默认为 /tmp/mlflow

  • signature

    ModelSignature 描述了模型输入和输出 Schema。模型签名可以从具有有效模型输入的​​数据集(例如,省略目标列的训练数据集)和有效模型输出的​​数据集(例如,在训练数据集上生成的模型预测)中推断,例如:

    from mlflow.models.signature import infer_signature
    
    train = df.drop_column("target_label")
    predictions = ...  # compute model predictions
    signature = infer_signature(train, predictions)
    

  • input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当 signature 参数为 None 时,输入示例用于推断模型签名。

  • pip_requirements – 要么是 pip 要求字符串的可迭代对象(例如 ["johnsnowlabs", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 要求文件的字符串路径(例如 "requirements.txt")。如果提供,这描述了模型应运行的环境。如果为 None,则通过 mlflow.models.infer_pip_requirements() 从当前软件环境中推断默认的要求列表。如果要求推断失败,则回退到使用 get_default_pip_requirements。要求和约束都会被自动解析并写入 requirements.txtconstraints.txt 文件,并作为模型的一部分存储。要求也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

  • extra_pip_requirements

    要么是 pip 要求字符串的可迭代对象(例如 ["pandas", "-r requirements.txt", "-c constraints.txt"]),要么是本地文件系统上 pip 要求文件的字符串路径(例如 "requirements.txt")。如果提供,这描述了附加到根据用户当前软件环境自动生成的默认 pip 要求集中的额外 pip 要求。要求和约束都会被自动解析并写入 requirements.txtconstraints.txt 文件,并作为模型的一部分存储。要求也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

    警告

    以下参数不能同时指定

    • conda_env

    • pip_requirements

    • extra_pip_requirements

    此示例演示了如何使用 pip_requirementsextra_pip_requirements 指定 pip requirements。

  • metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。

  • store_license – 如果为 True,许可证将与模型一起存储,并在重新加载时使用。

Example
from johnsnowlabs import nlp
import mlflow
import os

# Write your raw license.json string into the 'JOHNSNOWLABS_LICENSE_JSON' env variable
creds = {
    "AWS_ACCESS_KEY_ID": "...",
    "AWS_SECRET_ACCESS_KEY": "...",
    "SPARK_NLP_LICENSE": "...",
    "SECRET": "...",
}
os.environ["JOHNSNOWLABS_LICENSE_JSON"] = json.dumps(creds)

# Download & Install Jars/Wheels if missing and Start a spark Session
nlp.start()

# load a model
model = nlp.load("en.classify.bert_sequence.covid_sentiment")
model.predict(["I hate covid", "I love covid"])

# Save model as pyfunc and johnsnowlabs format
mlflow.johnsnowlabs.save_model(model, "saved_model")
model = mlflow.johnsnowlabs.load_model("saved_model")
# Predict with reloaded model,
# supports datatypes defined in https://nlp.johnsnowlabs.com/docs/en/jsl/predict_api#supported-data-types
model.predict(["I hate covid", "I love covid"])