mlflow.johnsnowlabs

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

Johnsnowlabs (本地) 格式

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

mlflow.pyfunc

支持在Spark外部部署,通过实例化一个SparkContext并将输入数据读取为Spark DataFrame进行评分。还支持在Spark中作为Spark UDF部署。具有这种风格的模型可以作为Python函数加载以执行推理。这种风格总是被生成。

This flavor gives you access to 20.000+ state-of-the-art enterprise NLP models in 200+ languages for medical, finance, legal and many more domains. Features include: LLM’s, Text Summarization, Question Answering, Named Entity Recognition, Relation Extration, Sentiment Analysis, Spell Checking, Image Classification, Automatic Speech Recognition and much more, powered by the latest Transformer Architectures. The models are provided by John Snow Labs and requires a John Snow Labs Enterprise NLP License. You can reach out to us for a research or industry license.

这些键必须存在于您的许可证 json 中:

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

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

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

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

你可以使用以下代码来设置它们:

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()[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

返回:

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

mlflow.johnsnowlabs.get_default_pip_requirements()[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

返回:

此flavor生成的MLflow Models的默认pip需求列表。对 save_model()log_model() 的调用会生成一个pip环境,该环境至少包含这些需求。

mlflow.johnsnowlabs.load_model(model_uri, dfs_tmpdir=None, dst_path=None)[源代码]

从路径加载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> 有关支持的 URI 方案的更多信息,请参阅 引用工件

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

  • dst_path – 下载模型工件的本地文件系统路径。此目录必须已经存在。如果未指定,将创建一个本地输出路径。

返回:

一个 nlu.NLUPipeline

示例
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, conda_env=None, code_paths=None, dfs_tmpdir=None, sample_input=None, registered_model_name=None, signature: ModelSignature = None, input_example: DataFrame | 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)[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

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

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

参数:
  • spark_model – 通过 nlp.load() 获得的 NLUPipeline

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

  • artifact_path – 运行相对工件路径。

  • 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 – 本地文件系统路径列表,指向Python文件依赖项(或包含文件依赖项的目录)。这些文件在加载模型时会被*前置*到系统路径中。如果为给定模型声明了依赖关系,则应从公共根路径声明相对导入,以避免在加载模型时出现导入错误。有关``code_paths``功能的详细解释、推荐的使用模式和限制,请参阅`code_paths使用指南 <https://mlflow.org/docs/latest/model/dependencies.html?highlight=code_paths#saving-extra-code-with-an-mlflow-model>`_。

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

  • sample_input – 用于向模型添加 MLeap 风格的示例输入。这必须是一个模型可以评估的 PySpark DataFrame。如果 sample_inputNone,则不会添加 MLeap 风格。

  • registered_model_name – 如果指定,在 registered_model_name 下创建一个模型版本,如果给定名称的注册模型不存在,则同时创建一个注册模型。

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

  • input_example – 一个或多个有效的模型输入实例。输入示例用作提示,指示应向模型提供哪些数据。它将被转换为Pandas DataFrame,然后使用Pandas的面向分割的格式序列化为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 需求。

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

返回:

一个包含记录模型元数据的 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, "my_trained_model")
mlflow.johnsnowlabs.save_model(spark_model, path, mlflow_model=None, conda_env=None, code_paths=None, dfs_tmpdir=None, sample_input=None, signature: ModelSignature = None, input_example: DataFrame | ndarray | dict | list | csr_matrix | csc_matrix | str | bytes | tuple = None, pip_requirements=None, extra_pip_requirements=None, metadata=None, store_license=False)[源代码]

备注

实验性功能:此功能可能在未来的版本中无警告地更改或移除。

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

默认情况下,此函数使用 Spark MLlib 持久化机制保存模型。此外,如果使用 sample_input 参数指定了示例输入,模型还会以 MLeap 格式序列化,并添加 MLeap 风格。

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

  • 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 – 本地文件系统路径列表,指向Python文件依赖项(或包含文件依赖项的目录)。这些文件在加载模型时会被*前置*到系统路径中。如果为给定模型声明了依赖关系,则应从公共根路径声明相对导入,以避免在加载模型时出现导入错误。有关``code_paths``功能的详细解释、推荐的使用模式和限制,请参阅`code_paths使用指南 <https://mlflow.org/docs/latest/model/dependencies.html?highlight=code_paths#saving-extra-code-with-an-mlflow-model>`_。

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

  • sample_input – 用于向模型添加 MLeap 风格的示例输入。这必须是一个模型可以评估的 PySpark DataFrame。如果 sample_inputNone,则不会添加 MLeap 风格。

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

  • input_example – 一个或多个有效的模型输入实例。输入示例用作提示,指示应向模型提供哪些数据。它将被转换为Pandas DataFrame,然后使用Pandas的面向分割的格式序列化为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 需求。

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

示例
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"])