跳到主要内容

分类器工厂

在各种领域和企业中,分类模型在提高效率、改善用户体验和确保合规性方面发挥着关键作用。这些模型服务于多种目的,包括但不限于

  • 内容审核:分类模型对于服务内容审核和分类不需要的内容至关重要。例如,我们的内容审核服务有助于实时识别和过滤不适当或有害内容,确保为用户提供一个安全和尊重的环境。
  • 意图检测:这些模型有助于理解用户意图和行为。通过分析用户交互,它们可以预测用户的下一步操作或需求,从而实现个性化推荐和改进的客户支持。
  • 情感分析:情绪和情感检测模型分析文本数据,以确定文字背后的情感基调。这在社交媒体监控、客户反馈分析和市场研究中特别有用,理解公众情感可以推动战略决策。
  • 数据聚类:分类模型可以将相似的数据点分组,有助于数据组织和模式识别。这在市场细分中很有益处,企业可以识别不同的客户群进行定向营销活动。
  • 欺诈检测:在金融领域,分类模型通过分析交易数据中的模式和异常来帮助识别欺诈性交易。这确保了金融系统的安全和完整性。
  • 垃圾邮件过滤:电子邮件服务使用分类模型过滤垃圾邮件,确保用户只收到相关且安全的通信。
  • 推荐系统:分类模型通过对用户偏好进行分类,并根据过去的行为和偏好推荐相关产品、电影或内容,从而为推荐引擎提供动力。

通过利用分类模型,组织可以做出数据驱动的决策,提高运营效率,并为客户提供更好的产品和服务。

因此,我们设计了一种友好且简单的方式来创建您自己的分类器。分类器工厂利用我们小型但高效的模型和训练方法,可直接通过la plateforme和我们的 API 使用。

数据集格式

数据必须存储在 JSON Lines (.jsonl) 文件中,此类文件允许存储多个 JSON 对象,每个对象占一行。

我们提供两个端点

  • v1/classifications:用于分类原始文本。
  • v1/chat/classifications:用于分类聊天和多轮交互。

主要有 2 种分类模型

  • 单目标
  • 多目标

1. 单目标

对于单标签分类,数据必须包含标签名称和该对应标签的值。示例

{
"text": "I love this product!",
"labels": {
"sentiment": "positive" // positive/neutral/negative
}
}

对于多标签,您可以提供一个列表。

{
"text": "I love this product!",
"labels": {
"sentiment": ["positive","neutral"]
}
}

使用结果模型时,您将能够检索对应标签和值的分数。

请注意,文件必须采用 JSONL 格式,这意味着每个 JSON 对象必须扁平化为一行,且每个 JSON 对象位于新的一行。

原始 .jsonl 文件示例。
{"text": "I love this product!", "labels": {"sentiment": "positive"}}
{"text": "The game was amazing.", "labels": {"sentiment": "positive"}}
{"text": "The new policy is controversial.", "labels": {"sentiment": "neutral"}}
{"text": "I don't like the new design.", "labels": {"sentiment": "negative"}}
{"text": "The team won the championship.", "labels": {"sentiment": "positive"}}
{"text": "The economy is in a bad shape.", "labels": {"sentiment": "negative"}}
...
  • 标签数据必须是一个字典,其中标签名称作为键,标签值作为值。

2. 多目标

您还可以拥有多个目标,而不仅仅是一个。如果您想独立地对同一内容的不同方面进行分类,这会很有用。示例

{
"text": "I love this product!",
"labels": {
"sentiment": "positive", // positive/neutral/negative
"is-english": "yes" // yes/no, boolean
}
}
  • 每个目标彼此独立,这意味着每个标签的分数也将独立。

上传文件

一旦您拥有格式正确的数据文件,就可以将数据文件上传到 Mistral Client,使其可用于微调作业。

from mistralai import Mistral
import os

api_key = os.environ["MISTRAL_API_KEY"]

client = Mistral(api_key=api_key)

training_data = client.files.upload(
file={
"file_name": "training_file.jsonl",
"content": open("training_file.jsonl", "rb"),
}
)

validation_data = client.files.upload(
file={
"file_name": "validation_file.jsonl",
"content": open("validation_file.jsonl", "rb"),
}
)

创建微调作业

下一步是创建微调作业。

  • model:您希望微调的特定模型。选择是 ministral-3b-latest
  • training_files:训练文件 ID 的集合,可以包含单个文件或多个文件。
  • validation_files:验证文件 ID 的集合,可以包含单个文件或多个文件。
  • hyperparameters:两个可调整的超参数,“training_steps”和“learning_rate”,用户可以修改。
  • auto_start
    • auto_start=True:您的作业将在验证后立即启动。
    • auto_start=False(默认):您可以在验证后通过向 /fine_tuning/jobs/<uuid>/start 发送 POST 请求来手动启动训练。
  • integrations:我们支持的外部集成,例如用于训练期间指标跟踪的 Weights and Biases。
# create a fine-tuning job
created_jobs = client.fine_tuning.jobs.create(
model="ministral-3b-latest",
job_type="classifier",
training_files=[{"file_id": training_data.id, "weight": 1}],
validation_files=[validation_data.id],
hyperparameters={
"training_steps": 10,
"learning_rate":0.0001
},
auto_start=False,
# integrations=[
# {
# "project": "finetuning",
# "api_key": "WANDB_KEY",
# }
# ]
)

创建微调作业后,您可以使用 client.fine_tuning.jobs.get(job_id = created_jobs.id) 检查作业状态。

最初,作业状态将为 "QUEUED"。短暂延迟后,状态将更新为 "VALIDATED"。此时,您可以继续开始微调作业

# start a fine-tuning job
client.fine_tuning.jobs.start(job_id = created_jobs.id)

created_jobs

列出/检索/取消作业

您还可以列出、检索或取消作业。

您可以使用各种参数过滤和查看作业列表,例如 pagepage_sizemodelcreated_aftercreated_by_mestatuswandb_projectwandb_namesuffix。请查看我们的API 规范了解详情。

# List jobs
jobs = client.fine_tuning.jobs.list()
print(jobs)

# Retrieve a jobs
retrieved_jobs = client.fine_tuning.jobs.get(job_id = created_jobs.id)
print(retrieved_jobs)

# Cancel a jobs
canceled_jobs = client.fine_tuning.jobs.cancel(job_id = created_jobs.id)
print(canceled_jobs)

使用微调模型

微调作业完成后,您将能够通过 retrieved_jobs.fine_tuned_model 查看微调模型的名称。

classifier_response = client.classifiers.classify(
model=retrieved_job.fine_tuned_model,
inputs=["It's nice", "It's terrible", "Why not"],
)

使用 classify_chat 对聊天和多轮交互进行分类。

删除微调模型

client.models.delete(model_id=retrieved_job.fine_tuned_model)

Cookbooks

探索利用分类器工厂的指南和 Cookbooks

  • 意图分类:创建一个单目标、单标签的意图分类模型,用于预测用户行为并改进客户交互。
  • 内容审核分类器:构建一个单目标、多标签的简单内容审核模型,用于标注公众评论。
  • 产品分类:创建一个多目标、单标签和多标签的食品分类模型,用于对菜肴及其原产国进行分类,并与经典的 LLM 解决方案进行比较,从而增强食谱推荐和饮食规划。

常见问题

问:我们可以微调哪些模型来创建自己的分类器?
答:目前,分类器工厂使用 ministral-3b

问:我在哪里可以找到定价?
答:您可以在我们 定价页面的 Mistral Cloud 部分找到。