- 类别:
:doc:`/sql-reference/functions-string`(大型语言模型)
AI_CLASSIFY¶
备注
AI_CLASSIFY 是 CLASSIFY_TEXT (SNOWFLAKE.CORTEX) 的更新版本。要获得最新功能,请使用 AI_CLASSIFY。
将文本或图像分类到您指定的类别中。
区域可用性¶
下表显示了可以在其中使用 AI_CLASSIFY 函数来处理文本和图像的区域:
数据类型
|
AWS US 西部 2
(俄勒冈)
|
AWS US 东部 1
(弗吉尼亚北部)
|
AWS 欧洲中部 1
(法兰克福)
|
AWS 欧洲西部 1
(爱尔兰)
|
AWS AP 东南部 2
(悉尼)
|
AWS AP 东北部 1
(东京)
|
Azure 东部 US 2
(弗吉尼亚)
|
Azure 西欧
(荷兰)
|
AWS
(跨区域)
|
---|---|---|---|---|---|---|---|---|---|
TEXT
|
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
✔ |
IMAGE
|
✔ |
✔ |
✔ |
✔ |
语法¶
AI_CLASSIFY( <input> , <list_of_categories> [, <config_object>] )
实参¶
必填:
input
您正在分类的字符串、图像或 提示 对象。
对于文本分类,输入字符串区分大小写。结果可能因大小写而异。
list_of_categories
具有至少一个、至多 500 个唯一值的类别数组。类别区分大小写。
类别可以是简单的字符串,也可以是相同类型的 SQL 对象。如果您使用对象,则可以为一个或多个类别提供描述,以提高分类准确性。
对于每个类别,请指定以下内容:
备注
描述算作输入词元,会增加分类操作的成本。有关更多信息,请参阅 成本注意事项。
可选:
config_object
配置设置指定为键/值对。支持的键:
task_description
:对于不超过 50 个字的分类任务的解释。这可以帮助模型了解分类任务的上下文,并提高准确性。output_mode
:设置为'multi'
以进行多标签分类。默认为'single'
以进行单标签分类。examples
:用于少量样本学习的示例对象列表。每个示例必须包括以下内容:input
:待分类的示例文本。labels
:输入的正确类别列表。explanation
:解释输入为何映射到这些类别。
返回¶
一个序列化对象。该对象的 labels
字段是一个数组,用于指定输入所属类别的列表。
对于单标签分类,labels
数组只有一个元素。对于多标签分类,labels
字段可以有多个元素。
访问控制要求¶
您必须使用具有 SNOWFLAKE.CORTEX_USER 数据库角色 的角色。有关此权限的更多信息,请参阅 所需权限。
使用说明¶
为获得最佳结果,请遵循以下准则:
为
input
和list_of_categories
使用英文纯文本。避免包含代码片段、日志或非英文文本。
避免在文本中使用非开源代码或格式(例如专有语言或格式)。底层语言模型并未进行专有格式的训练。
不要在类别标签中使用缩写、特殊字符或行话。
使用描述性类别。避免使用诸如“Xa4s3”或“类别 1”之类的类别名称。
使用彼此互斥的类别。
当输入与类别之间的关系不明确或较为复杂时,提供清晰的任务描述可以提高准确性。
添加标签描述可以提高准确性,尤其是在标签不明确或者需要特定选择标准时。撰写描述,以清晰突出每个标签与其他标签的区别。
每个标签、描述和示例都会增加每次 AI_CLASSIFY 调用的输入词元数量,从而影响成本。
示例有助于提高准确性。
示例¶
以下示例使用仅包含所需实参的 AI_CLASSIFY 函数。
AI_CLASSIFY:文本¶
以下示例将提示分为两个类别之一,travel 或 cooking:
SELECT AI_CLASSIFY('One day I will see the world', ['travel', 'cooking']);
以下是前面命令的输出。
'{
"labels": ["travel"]
}';
以下示例使用多标签分类:
SELECT AI_CLASSIFY(
'One day I will see the world and learn to cook my favorite dishes',
['travel', 'cooking', 'reading', 'driving'],
{'output_mode': 'multi'}
);
以下是前面命令的输出。
'{
"labels": ["travel", "cooking"]
}';
以下示例传入了任务描述、标签描述和少量样本学习示例:
SELECT AI_CLASSIFY(
'One day I will see the world and learn to cook my favorite dishes',
[
{'label': 'travel', 'description': 'content related to traveling'},
{'label': 'cooking'},
{'label': 'reading'},
{'label': 'driving'}
],
{
'task_description': 'Determine topics related to the given text',
'output_mode': 'multi',
'examples': [
{
'input': 'i love traveling with a good book',
'labels': ['travel', 'reading'],
'explanation': 'the text mentions traveling and a good book which relates to reading'
}
]
});
以下是前面命令的输出。
'{
"labels": ["travel", "cooking"]
}';
以下示例创建了一个 text_classification_table
,其中包含文本列以及该文本的可能类别列。对表的每一行调用 AI_CLASSIFY 函数,可对文本列中的字符串进行分类。
CREATE OR REPLACE TEMPORARY TABLE text_classification_table AS
SELECT 'France' AS input, ['North America', 'Europe', 'Asia'] AS classes
UNION ALL
SELECT 'Singapore', ['North America', 'Europe', 'Asia']
UNION ALL
SELECT 'one day I will see the world', ['travel', 'cooking', 'dancing']
UNION ALL
SELECT 'my lobster bisque is second to none', ['travel', 'cooking', 'dancing'];
SELECT input,
classes,
AI_CLASSIFY(input, classes):labels AS classification
FROM text_classification_table;
AI_CLASSIFY:图像¶
使用单个文件输入:
WITH food_pictures AS (
SELECT
TO_FILE(file_url) AS img
FROM DIRECTORY(@file_stage)
)
SELECT
*,
AI_CLASSIFY(img, ['dessert', 'drink', 'main dish', 'side dish']):labels AS classification
FROM food_pictures;
使用由 PROMPT() 构造的提示对象:
WITH food_pictures AS (
SELECT
TO_FILE(file_url) AS img
FROM DIRECTORY(@file_stage)
)
SELECT
*,
AI_CLASSIFY(PROMPT('Please help me classify the food within this image {0}', img),
['dessert', 'drink', 'main dish', 'side dish']):labels AS classification
FROM food_pictures;
限制¶
Snowflake AI 函数不支持动态表增量刷新。
Snowflake AI 函数不适用于在以下类型的暂存区中通过文件创建的 FILE 对象:
具有加密模式
TYPE = 'SNOWFLAKE_FULL'
的内部暂存区使用任何客户端加密模式的外部暂存区:
TYPE = 'AWS_CSE'
TYPE = 'AZURE_CSE'
用户暂存区
表暂存区
带有双引号名称的暂存区