分类器工厂
在各种领域和企业中,分类模型在提高效率、改善用户体验和确保合规性方面发挥着关键作用。这些模型服务于多种目的,包括但不限于
- 内容审核:分类模型对于服务内容审核和分类不需要的内容至关重要。例如,我们的内容审核服务有助于实时识别和过滤不适当或有害内容,确保为用户提供一个安全和尊重的环境。
- 意图检测:这些模型有助于理解用户意图和行为。通过分析用户交互,它们可以预测用户的下一步操作或需求,从而实现个性化推荐和改进的客户支持。
- 情感分析:情绪和情感检测模型分析文本数据,以确定文字背后的情感基调。这在社交媒体监控、客户反馈分析和市场研究中特别有用,理解公众情感可以推动战略决策。
- 数据聚类:分类模型可以将相似的数据点分组,有助于数据组织和模式识别。这在市场细分中很有益处,企业可以识别不同的客户群进行定向营销活动。
- 欺诈检测:在金融领域,分类模型通过分析交易数据中的模式和异常来帮助识别欺诈性交易。这确保了金融系统的安全和完整性。
- 垃圾邮件过滤:电子邮件服务使用分类模型过滤垃圾邮件,确保用户只收到相关且安全的通信。
- 推荐系统:分类模型通过对用户偏好进行分类,并根据过去的行为和偏好推荐相关产品、电影或内容,从而为推荐引擎提供动力。
通过利用分类模型,组织可以做出数据驱动的决策,提高运营效率,并为客户提供更好的产品和服务。
因此,我们设计了一种友好且简单的方式来创建您自己的分类器。分类器工厂利用我们小型但高效的模型和训练方法,可直接通过la plateforme和我们的 API 使用。
数据集格式
数据必须存储在 JSON Lines (.jsonl
) 文件中,此类文件允许存储多个 JSON 对象,每个对象占一行。
我们提供两个端点
v1/classifications
:用于分类原始文本。v1/chat/classifications
:用于分类聊天和多轮交互。
主要有 2 种分类模型
- 单目标
- 多目标
1. 单目标
对于单标签分类,数据必须包含标签名称和该对应标签的值。示例
- v1/classifications
- v1/chat/classifications
{
"text": "I love this product!",
"labels": {
"sentiment": "positive" // positive/neutral/negative
}
}
对于多标签,您可以提供一个列表。
{
"text": "I love this product!",
"labels": {
"sentiment": ["positive","neutral"]
}
}
{
"messages": [{"role": "user", "content": "I love this product!"}],
"labels": {
"sentiment": "positive" // positive/neutral/negative
}
}
对于多标签,您可以提供一个列表。
{
"messages": [{"role": "user", "content": "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. 多目标
您还可以拥有多个目标,而不仅仅是一个。如果您想独立地对同一内容的不同方面进行分类,这会很有用。示例
- v1/classifications
- v1/chat/classifications
{
"text": "I love this product!",
"labels": {
"sentiment": "positive", // positive/neutral/negative
"is-english": "yes" // yes/no, boolean
}
}
{
"messages": [{"role": "user", "content": "I love this product!"}],
"labels": {
"sentiment": "positive", // positive/neutral/negative
"is-english": "yes" // yes/no, boolean
}
}
- 每个目标彼此独立,这意味着每个标签的分数也将独立。
上传文件
一旦您拥有格式正确的数据文件,就可以将数据文件上传到 Mistral Client,使其可用于微调作业。
- python
- typescript
- curl
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"),
}
)
import { Mistral } from '@mistralai/mistralai';
import fs from 'fs';
const apiKey = process.env.MISTRAL_API_KEY;
const client = new Mistral({apiKey: apiKey});
const training_file = fs.readFileSync('training_file.jsonl');
const training_data = await client.files.upload({
file: {
fileName: "training_file.jsonl",
content: training_file,
}
});
const validation_file = fs.readFileSync('validation_file.jsonl');
const validation_data = await client.files.upload({
file: {
fileName: "validation_file.jsonl",
content: validation_file,
}
});
curl https://api.mistral.ai/v1/files \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-F purpose="fine-tune" \
-F file="@training_file.jsonl"
curl https://api.mistral.ai/v1/files \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-F purpose="fine-tune" \
-F file="@validation_file.jsonl"
创建微调作业
下一步是创建微调作业。
- 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。
- python
- typescript
- curl
# 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)
检查作业状态。
const createdJob = await client.fineTuning.jobs.create({
model: 'ministral-3b-latest',
jobType: 'classifier',
trainingFiles: [{fileId: training_data.id, weight: 1}],
validationFiles: [validation_data.id],
hyperparameters: {
trainingSteps: 10,
learningRate: 0.0001,
},
autoStart:false,
// integrations:[
// {
// project: "finetuning",
// apiKey: "WANDB_KEY",
// }
// ],
});
创建微调作业后,您可以使用 client.fineTuning.jobs.get({ jobId: createdJob.id })
检查作业状态。
curl https://api.mistral.ai/v1/fine_tuning/jobs \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"model": "ministral-3b-latest",
"job_type": "classifier",
"training_files": [
"<uuid>"
],
"validation_files": [
"<uuid>"
],
"hyperparameters": {
"training_steps": 10,
"learning_rate": 0.0001
},
"auto_start": false
}'
创建微调作业后,您可以使用以下方式检查作业状态
curl https://api.mistral.ai/v1/fine_tuning/jobs/<jobid> \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json'
最初,作业状态将为 "QUEUED"
。短暂延迟后,状态将更新为 "VALIDATED"
。此时,您可以继续开始微调作业
- python
- typescript
- curl
# start a fine-tuning job
client.fine_tuning.jobs.start(job_id = created_jobs.id)
created_jobs
await client.fineTuning.jobs.start({jobId: createdJob.id})
curl -X POST https://api.mistral.ai/v1/fine_tuning/jobs/<jobid>/start \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json'
列出/检索/取消作业
您还可以列出、检索或取消作业。
您可以使用各种参数过滤和查看作业列表,例如 page
、page_size
、model
、created_after
、created_by_me
、status
、wandb_project
、wandb_name
和 suffix
。请查看我们的API 规范了解详情。
- python
- typescript
- curl
# 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)
// List jobs
const jobs = await client.fineTuning.jobs.list();
// Retrieve a job
const retrievedJob = await client.fineTuning.jobs.get({ jobId: createdJob.id })
// Cancel a job
const canceledJob = await client.fineTuning.jobs.cancel({
jobId: createdJob.id,
});
# List jobs
curl https://api.mistral.ai/v1/fine_tuning/jobs \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json'
# Retrieve a job
curl https://api.mistral.ai/v1/fine_tuning/jobs/<jobid> \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json'
# Cancel a job
curl -X POST https://api.mistral.ai/v1/fine_tuning/jobs/<jobid>/cancel \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--header 'Content-Type: application/json'
使用微调模型
微调作业完成后,您将能够通过 retrieved_jobs.fine_tuned_model
查看微调模型的名称。
- python
- typescript
- curl
classifier_response = client.classifiers.classify(
model=retrieved_job.fine_tuned_model,
inputs=["It's nice", "It's terrible", "Why not"],
)
使用 classify_chat
对聊天和多轮交互进行分类。
const classifierResponse = await client.classifiers.classify({
model: retrievedJob.fine_tuned_model,
inputs: ["It's nice", "It's terrible", "Why not"],
})
使用 classifyChat
对聊天和多轮交互进行分类。
curl "https://api.mistral.ai/v1/classifications" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $MISTRAL_API_KEY" \
--data '{
"model": "ft:classifier:ministral-3b-latest:XXX:20250401:XXX",
"input": ["It's nice", "It's terrible", "Why not"]
}'
删除微调模型
- python
- typescript
- curl
client.models.delete(model_id=retrieved_job.fine_tuned_model)
await client.models.delete({modelId:retrieved_job.fine_tuned_model})
curl --location --request DELETE 'https://api.mistral.ai/v1/models/ft:classifier:ministral-3b-latest:XXX:20250401:XXX' \
--header 'Accept: application/json' \
--header "Authorization: Bearer $MISTRAL_API_KEY"
Cookbooks
探索利用分类器工厂的指南和 Cookbooks
- 意图分类:创建一个单目标、单标签的意图分类模型,用于预测用户行为并改进客户交互。
- 内容审核分类器:构建一个单目标、多标签的简单内容审核模型,用于标注公众评论。
- 产品分类:创建一个多目标、单标签和多标签的食品分类模型,用于对菜肴及其原产国进行分类,并与经典的 LLM 解决方案进行比较,从而增强食谱推荐和饮食规划。
常见问题
问:我们可以微调哪些模型来创建自己的分类器?
答:目前,分类器工厂使用 ministral-3b
。
问:我在哪里可以找到定价?
答:您可以在我们 定价页面的 Mistral Cloud 部分找到。