微调 arctic-extract 模型¶
您现在可以使用 Snowflake Cortex Fine-tuning 函数和 Snowflake 数据集 微调 arctic-extract 模型。然后,微调后的模型可通过 AI_EXTRACT 函数用于推理。
语法¶
有关具体语法、使用说明和示例,请参阅:
FINETUNE ('CREATE') (SNOWFLAKE.CORTEX)¶
创建微调作业。
语法¶
SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'@<database>.<schema>.<model_name>',
'arctic-extract',
'<training_dataset>'
[
, '<validation_dataset>'
]
)
必填参数¶
'CREATE'指定您要创建微调作业。
'training_dataset'用于训练的数据集对象。有关更多信息,请参阅 Dataset 要求。
可选参数¶
'validation_dataset'用于验证的数据集对象。有关更多信息,请参阅 Dataset 要求。
备注
options 参数不能用于微调 arctic-extract 模型。轮次数由系统自动确定。
访问控制要求¶
权限 |
对象 |
备注 |
|---|---|---|
USAGE 或 OWNERSHIP |
DATABASE |
用于存储数据集对象的数据库。 |
USAGE 或 OWNERSHIP |
SCHEMA |
用于存储数据集对象的架构。 |
READ 或 OWNERSHIP |
STAGE |
用于存储文档文件的暂存区。 |
USAGE 或 OWNERSHIP |
SCHEMA |
用于存储微调后模型的架构。 |
CREATE MODEL |
SCHEMA |
用于存储微调后模型的架构。 |
此外,要使用 FINETUNE 函数,ACCOUNTADMIN 角色必须将 SNOWFLAKE.CORTEX_USER 数据库角色授予将调用该函数的用户。有关详细信息,请参阅 LLM 函数所需权限 主题。
示例¶
SELECT SNOWFLAKE.CORTEX.FINETUNE(
'CREATE',
'@database.schema.model_name',
'arctic-extract`,
'snow://dataset/training_ds/versions/2',
'snow://dataset/validation_ds/versions/4'
);
FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX)¶
描述微调作业的属性。
有关语法和参数,请参阅 FINETUNE ('DESCRIBE') (SNOWFLAKE.CORTEX)。
微调 arctic-extract 模型时成功作业的输出示例:
{
"base_model":"arctic-extract",
"created_on":1717004388348,
"finished_on":1717004691577,
"id":"ft_6556e15c-8f12-4d94-8cb0-87e6f2fd2299",
"model":"mydb.myschema.my_tuned_model",
"progress":1.0,
"status":"SUCCESS",
"training_data":"snow://dataset/training_ds/versions/2",
"trained_tokens":2670734,
"training_result":{"validation_loss":1.0138969421386719,"training_loss":0.6477728401547047},
"validation_data":"snow://dataset/validation_ds/versions/4",
}
Dataset 要求¶
用于训练和验证的 数据集 必须包含以下列:
- 文件:
包含要提取的文档的文件路径的字符串。例如:
@db.schema.stage/file.pdf- 提示:
以 AI_EXTRACT 函数的
responseFormat实参支持的任一格式提取的键和问题对。有关更多信息,请参阅 AI_EXTRACT。
- 响应:
包含密钥和响应对的 JSON 对象。
备注
列名不区分大小写,在数据集中可以按任意顺序排列;但是,所有必填列(File、Prompt 和 Response)必须存在,数据集才有效。数据集中的其他列将被忽略。
准备数据集时,请注意以下事项:
微调后模型的架构是数据集中所有问题的唯一集合。
Response列中的答案应该与Prompt列中的问题匹配,方法是匹配Prompt和Response列中的键。您不必为每个文档指定相同的问题集。
要提高模型准确性,请为每个问题添加提示和响应行,即使模型的默认响应正确也应如此。此操作确认默认答案准确无误。
有关数据集的更多信息,请参阅 Snowflake 数据集。
数据集示例¶
文件 |
提示 |
响应 |
|---|---|---|
|
|
|
|
|
|
|
{
"schema":
{
"type": "object",
"properties": {
"deductions": {
"description": "Deductions",
"type": "object",
"properties": {
"deductions_name": {
"type": "array"
},
"current": {
"type": "array"
}
}
}
}
}
}
|
{
"deductions": {
"deductions_name": [
"Federal Tax",
"Wyoming State Tax",
"SDI",
"Soc Sec / OASDI",
"Health Insurance Tax",
"None"
],
"current": [
"82.50",
"64.08",
"None",
"13.32",
"91.74",
"21.46"
]
}
}
|
备注
创建数据集时,如果文档不包含问题的答案,则将响应设置为 None。
使用说明¶
Snowflake 建议至少使用 20 个文档进行微调。
支持的文档文件格式包括:
PDF
PNG
JPG、JPEG
TIFF、TIF
每个文档的最大页数为:
64 页,适用于 AWS US 西部 2(俄勒冈州)和 AWS 欧洲中部 1(法兰克福)
125 页,适用于 AWS US 东部 1(弗吉尼亚北部)和 Azure 东部 US 2(弗吉尼亚)
数据集中独立文档文件的最大数量为 1,000。您可以多次引用同一个文档文件。
微调作业中问题和文档的数量有限制。问题数乘以数据集中所有文档文件的总页数必须等于或小于 50,000。
例如,一些有效的组合如下:
问题数
页数
文档文件引用数 [1]
10
1
5,000
100
1
500
10
10
500
25
10
200
创建微调作业。¶
要创建微调作业,您必须创建一个包含训练数据的数据集对象。以下示例演示如何创建数据集对象,并使用该数据集为 arctic-extract 模型创建微调作业。
创建包含训练数据的表:
CREATE OR REPLACE TABLE my_data_table (f FILE, p VARCHAR, r VARCHAR);
使用训练数据填充表:
INSERT INTO my_data_table (f, p, r) SELECT TO_FILE('@db.schema.stage', '1.pdf'), '{"net": "What is the net value?"}', '{"net": "3,762.56"}';
创建数据集对象:
CREATE OR REPLACE DATASET my_dataset;
创建包含训练数据的新版数据集,使用 FL_GET_STAGE 和 FL_GET_RELATIVE_PATH 函数获取文件路径:
ALTER DATASET my_dataset ADD VERSION 'v1' FROM ( SELECT FL_GET_STAGE(f) || '/' || FL_GET_RELATIVE_PATH(f) AS "file", p AS "prompt", r AS "response" FROM my_data_table );
创建微调作业:
SELECT SNOWFLAKE.CORTEX.FINETUNE( 'CREATE', 'my_tuned_model', 'arctic-extract', 'snow://dataset/db.schema.my_dataset/versions/v1' );
使用微调后的 arctic-extract 模型进行推理¶
要使用微调后的 arctic-extract 模型进行推理,请确保您对模型对象具有以下权限:
OWNERSHIP
USAGE
READ
要使用微调后的 arctic-extract 模型通过 AI_EXTRACT 函数进行推理,请使用 model 参数指定模型,如以下示例所示:
SELECT AI_EXTRACT(
model => 'db.schema.my_tuned_model',
file => TO_FILE('@db.schema.files','document.pdf')
);
您可以使用 responseFormat 参数覆盖用于微调的问题,如以下示例所示:
SELECT AI_EXTRACT(
model => 'db.schema.my_tuned_model',
file => TO_FILE('@db.schema.files','document.pdf'),
responseFormat => [['name', 'What is the first name of the employee?'], ['city', 'Where does the employee live?']]
);
有关更多信息,请参阅 AI_EXTRACT。