随着数据科学中 AI 应用场景的增多,AI 模型训练愈发受到关注。更具体地说,您可以使用 Snowflake Cortex AI 来完成机器学习。
在本指南中,我们将介绍 Snowflake Cortex AI 是什么以及它能做什么。此外,我们还将提供一个简单教程,演示如何结合 Python 和一些 SQL 开始进行机器学习与 AI。如果您是 Snowflake 新手,请查看我们的 Snowflake 入门课程 以快速上手。
什么是 Snowflake Cortex AI?
Snowflake Cortex AI 是集成在 Snowflake AI 数据云中的一项强大功能,旨在让您直接在 Snowflake 环境内开展机器学习(ML)相关操作。
它可将 Python 机器学习模型与 Snowflake 数据无缝集成,使组织能够在利用云基础设施的同时,从大型数据集中获取洞察、进行预测并开展高级分析。
来源: Snowflake Cortex AI
Snowflake Cortex AI 的关键功能:
Snowflake Cortex 由两大部分组成——LLM 函数和 ML 函数。
LLM 函数包括:
Summarize(摘要)
Translate(翻译)
Complete(补全)
Extract Answer(抽取答案)
Sentiment(情感)
Embed Text(文本嵌入)
我们将在下文进一步详细介绍每个函数。
ML 函数包括:
异常检测 :自动检测并提醒数据中的异常值。
预测 :利用机器学习算法基于历史数据做出预测。
分类 :将数据划分到不同类别或组别。
关键洞察 :识别一段时间内指标值波动的原因。
想了解如何学习 Snowflake 及其函数?我们的初学者 Snowflake 教程 和 Snowflake 认证指南 将为您提供帮助。
为什么将 Snowflake Cortex AI 与 Python 结合使用?
现在让我们看看将二者结合使用的优势。
将 Snowflake Cortex AI 与 Python 结合的优势
使用 Snowflake Cortex AI 的一些关键优势:
Python 集成 :允许您在 Snowflake 计算环境中直接运行 Python 机器学习模型。
模型托管 :模型可以托管并用于推理服务。
无需数据迁移 :由于模型在 Snowflake 环境内运行,无需将大型数据集移动到外部服务器。
使用场景与应用
首先,Snowflake Cortex AI 非常适合希望在不大幅增加资源投入的情况下提升数据科学能力的企业。它提供零代码环境,即使是非技术用户也能轻松开发并部署机器学习模型。
这对预算不足以雇佣数据科学团队或投资昂贵 LLM 的小型企业或初创公司尤为有用。
其次,通过将 Python 集成进 Snowflake 的计算环境,用户可以利用海量的 Python 机器学习算法与工具库。这意味着他们无需学习新的编程语言,也能构建更先进、更准确的模型。
最后,已采用 Snowflake 环境的公司可以充分享受 Cortex AI 的优势,因为它与现有数据仓库无缝集成,无需额外的基础设施或数据迁移。
借助 Snowflake Cortex AI,企业可以轻松高效地将机器学习融入业务流程。
开始使用 Snowflake Cortex AI
在本教程中,我们将一步步演示如何使用 Python 和 Snowflake Cortex AI 搭建机器学习流水线。
先决条件
在使用 Snowflake Cortex AI 进行机器学习之前,请确保满足以下要求:
设置 Snowflake 账户
首先,您需要一个 Snowflake 实例来存储和处理数据。您可以在 Snowflake 官网注册 。
在注册表单中填写账户信息,并在第二页按以下选项选择。为便于教程演示与复现,请选择 Standard 版本与 Amazon Web Services。服务器区域选择 US West(俄勒冈),以获得最佳的 LLM 函数可用性。
选择完成后,单击 Get Started 接收激活邮件。前往邮箱激活账户,您的 Snowflake 账号即可使用。
软件要求
接下来,您还需要满足一些软件方面的要求。
以下是简单清单:
Python 环境 :Python 3.x,并安装必要的包。
Snowflake: 需要通过终端安装 Snowflake 相关包,以将 Python 环境连接到您的 Snowflake 账号。
VS Code :可使用适合 Python 的集成开发环境(IDE)。其他替代方案包括 DataLab、Google Colab 或 Jupyter Notebooks。
开始任何分析之前,请先安装相关包,准备好编码环境。
安装必要包,您可以使用 pip :
pip install snowflake技术支持
pip install python-dotenv技术支持
安装完成后,您需要设置工作文件夹与文件以开始。
我创建了名为 Cortex AI Tutorial 的文件夹,并加入一个新的 .env 文件,包含如下信息:
SNOWFLAKE_ACCOUNT = "< YOUR_ACCOUNT> " # eg. XXXX-XXXX
SNOWFLAKE_USER = "< YOUR_USER> "
SNOWFLAKE_USER_PASSWORD = "< YOUR_PASSWORD> "技术支持
输入账户信息后保存文件,并在同一文件夹中创建一个 Python 文件或 Jupyter Notebook。
连接 Snowflake
准备就绪后,让我们将您的 Python 环境连接到 Snowflake。
首先,打开 Python 文件并导入必要的库。示例代码如下:
import os
from dotenv import load_dotenv
from snowflake. snowpark import Session
from snowflake. cortex import Summarize, Complete, ExtractAnswer, Sentiment, Translate, EmbedText768技术支持
接下来,您需要加载先前保存在 .env 文件中的变量。这将为 Snowflake 提供您的账户凭据,以登录并使用其功能。
load_dotenv( )
connection_params = {
"account" : os. environ[ "SNOWFLAKE_ACCOUNT" ] ,
"user" : os. environ[ "SNOWFLAKE_USER" ] ,
"password" : os. environ[ "SNOWFLAKE_USER_PASSWORD" ] ,
}
技术支持
使用这些变量完成连接后,您需要设置一个 Snowflake 会话。该对象将处理您的所有请求。
snowflake_session = Session. builder. configs( connection_params) . create( ) 技术支持
Snowflake Cortex AI 的 LLM 函数
Cortex AI 中的 LLM 函数让用户无需自建 AI 模型即可发挥大语言模型的能力。
这些函数通过一些基础任务,为一般的分析用户提供 AI 驱动的分析能力。
以下是 Snowflake Cortex 提供的函数:
1. SUMMARIZE
summarize 函数根据输入生成数据摘要。
它使用 LLM 识别关键信息并以精炼的形式呈现。
例如,如果您有一篇冗长的文档,希望快速了解其内容,您可以使用 summarize 函数得到涵盖要点的简要摘要。这能节省时间,并加速大量数据的分析。
撰文时,该函数的输入语言目前仅限英语。
参考代码如下:
def summarize ( user_text) :
summary = Summarize( text= user_text, session= snowflake_session)
return summary技术支持
2. TRANSLATE
translate 函数用于将文本从一种语言转换为另一种语言。
它使用机器学习算法和统计模型来准确翻译文本。
在处理多语言数据或文档时,它有助于更轻松地沟通与理解。
例如,若您有一份西班牙语报告需要呈现给英语受众,您可以使用 translate 函数快速转换文本,从而免去人工翻译并节省时间。
参考代码如下:
def translate ( user_text) :
translation = Translate(
text= user_text, from_language= "en" , to_language= "ko" , session= snowflake_session
)
return translation技术支持
3. COMPLETE
complete 是一个通用函数,可用于执行特定任务。通过构造句子式提示,引导 AI 模型提供执行任务所需的信息。
参考代码如下:
def complete ( user_text) :
completion = Complete(
model= "snowflake-arctic" ,
prompt= f"Provide 3 relevant keywords from the following text: { user_text} " ,
session= snowflake_session,
)
return completion技术支持
extract answer 函数会基于提供给模型的问题返回答案。输入必须为英文字符串或 JSON 格式。
参考代码如下:
def extract_answer ( user_text) :
answer = ExtractAnswer(
from_text= user_text,
question= "What are some reasons why young adult South Koreans love coffee?" ,
session= snowflake_session,
)
return answer技术支持
5. SENTIMENT
sentiment 函数根据文本的情感倾向输出一个定量数值,范围为 -1 至 1。-1 表示最消极,1 表示最积极,接近 0 表示中性。
参考代码如下:
def sentiment ( user_text) :
sentiment = Sentiment( text= user_text, session= snowflake_session)
return sentiment技术支持
6. EMBED_TEXT
embed text 函数包括 EMBED_TEXT_768 与 EMBED_TEXT_1024,分别创建 768 与 1024 维的向量嵌入。
以下是 EMBED_TEXT_768 的参考代码:
def embed_text ( user_text) :
embed_text = EmbedText768( text= user_text, model= 'snowflake-arctic-embed-m' , session= snowflake_session)
return embed_text技术支持
现在让我们把它们组合到一个主函数中,并用一段示例文本运行以查看结果。
我使用了一段简短的文本作为模型输入,如下所示:
为便于复制粘贴,文本如下:
user_text = """
Young adults in South Korea are embracing coffee as a blend of energy, comfort, and culture.
Coffee isn't just about staying awake during demanding studies or work; it’s a cherished part of daily routines.
With South Korea's bustling café culture, coffee shops have become popular spaces for socializing, studying,
or just taking a break from the fast-paced city life.
The diversity of flavors and trendy cafés also offers a unique,
stylish experience that fits right into the evolving lifestyle of young adults,
who seek both connection and personal moments in the midst of it all.
"""技术支持
现在运行代码,应该只需几秒钟。
结果如下:
如您所见,AI 基于我们提供的文本给出了所需的全部结果:摘要、将文本翻译为韩语、根据文本生成三个关键词,并基于问题提供了答案。
Snowflake Cortex AI 的机器学习函数
Cortex AI 还提供仅用 SQL 即可运行的 ML 函数。以下为其提供的多种函数。
1. 异常检测
异常检测对于识别不符合数据预期行为的异常模式至关重要。Snowflake 通过内置的基于梯度提升机(GBM)的机器学习函数简化异常检测,使您能够快速定位数据集中的离群点。
异常检测尤其适用于以下任务:
检测交易数据中的欺诈行为。
识别异常的用户行为。
监控时间序列数据中的系统性能异常。
进行异常检测时,可使用 Snowflake 类 ANOMALY_DETECTION(SNOWFLAKE.ML)。该命令会创建一个异常检测模型对象,并将模型拟合到训练数据。
用法如下:
CREATE [ OR REPLACE ] SNOWFLAKE. ML. ANOMALY_DETECTION < model_name> (
INPUT_DATA = > < reference_to_training_data> ,
[ SERIES_COLNAME = > '<series_column_name>' , ]
TIMESTAMP_COLNAME = > '<timestamp_column_name>' ,
TARGET_COLNAME = > '<target_column_name>' ,
LABEL_COLNAME = > '<label_column_name>' ,
[ CONFIG_OBJECT = > < config_object> ]
)
[ [ WITH ] TAG ( < tag_name> = '<tag_value>' [ , < tag_name> = '<tag_value>' , . . . ] ) ]
[ COMMENT = '<string_literal>' ] 技术支持
创建对象后,您可以使用 <model_name>!DETECT_ANOMALIES 方法执行异常检测,
< model_name> ! DETECT_ANOMALIES(
INPUT_DATA = > < reference_to_data_to_analyze> ,
TIMESTAMP_COLNAME = > '<timestamp_column_name>' ,
TARGET_COLNAME = > '<target_column_name>' ,
[ CONFIG_OBJECT = > < configuration_object> , ]
[ SERIES_COLNAME = > '<series_column_name>' ]
) 技术支持
这一步是实际的预测步骤,方法会检测出离群点。
以下是使用数据集进行异常检测的示例。
首先,您可以通过左侧的 Data,点击 Add Data,然后选择 Load data into a Table 来创建数据库。
在弹出窗口中,点击 + Database 并为数据库命名。点击 Create,然后在主弹窗中点击 Cancel。
这样就创建了一个可供您使用的空数据库。
以下示例改编自 Snowflake 文档 。
开始异常检测前,打开一个新的 SQL 工作表,选择您新建的数据库作为数据源,并粘贴以下代码以创建数据表:
CREATE OR REPLACE TABLE historical_sales_data (
store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT, label BOOLEAN,
temperature NUMBER, humidity FLOAT, holiday VARCHAR);
INSERT INTO historical_sales_data VALUES
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-01' ) , 2.0 , false , 50 , 0.3 , 'new year' ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-02' ) , 3.0 , false , 52 , 0.3 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-03' ) , 5.0 , false , 54 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-04' ) , 30.0 , true , 54 , 0.3 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-05' ) , 8.0 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-06' ) , 6.0 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-07' ) , 4.6 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-08' ) , 2.7 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-09' ) , 8.6 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-10' ) , 9.2 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-11' ) , 4.6 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-12' ) , 7.0 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-13' ) , 3.6 , false , 55 , 0.2 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-14' ) , 8.0 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-01' ) , 3.4 , false , 50 , 0.3 , 'new year' ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-02' ) , 5.0 , false , 52 , 0.3 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-03' ) , 4.0 , false , 54 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-04' ) , 5.4 , false , 54 , 0.3 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-05' ) , 3.7 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-06' ) , 3.2 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-07' ) , 3.2 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-08' ) , 5.6 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-09' ) , 7.3 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-10' ) , 8.2 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-11' ) , 3.7 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-12' ) , 5.7 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-13' ) , 6.3 , false , 55 , 0.2 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-14' ) , 2.9 , false , 55 , 0.2 , null ) ; 技术支持
您的代码应粘贴在类似如下界面的 SQL 工作表中:
接着执行以下语句以创建名为 new_sales_data 的表。
CREATE OR REPLACE TABLE new_sales_data (
store_id NUMBER, item VARCHAR , date TIMESTAMP_NTZ, sales FLOAT ,
temperature NUMBER, humidity FLOAT , holiday VARCHAR ) ;
INSERT INTO new_sales_data VALUES
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-16' ) , 6.0 , 52 , 0.3 , null ) ,
( 1 , 'jacket' , to_timestamp_ntz( '2020-01-17' ) , 20.0 , 53 , 0.3 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-16' ) , 3.0 , 52 , 0.3 , null ) ,
( 2 , 'umbrella' , to_timestamp_ntz( '2020-01-17' ) , 70.0 , 53 , 0.3 , null ) ; 技术支持
现在,创建异常检测模型:
CREATE OR REPLACE VIEW view_with_training_data
AS SELECT date , sales FROM historical_sales_data
WHERE store_id= 1 AND item= 'jacket' ;
CREATE OR REPLACE SNOWFLAKE. ML. ANOMALY_DETECTION basic_model(
INPUT_DATA = > TABLE ( view_with_training_data) ,
TIMESTAMP_COLNAME = > 'date' ,
TARGET_COLNAME = > 'sales' ,
LABEL_COLNAME = > '' ) ; 技术支持
创建成功后会显示如下所示的模型已创建结果。
接下来,让我们使用该模型对象进行检测。
CREATE OR REPLACE VIEW view_with_data_to_analyze
AS SELECT date , sales FROM new_sales_data
WHERE store_id= 1 and item= 'jacket' ;
CALL basic_model! DETECT_ANOMALIES(
INPUT_DATA = > TABLE ( view_with_data_to_analyze) ,
TIMESTAMP_COLNAME = > 'date' ,
TARGET_COLNAME = > 'sales'
) ; 技术支持
检测输出如下:
2. 分类
分类 是将数据归入预定义类别的过程。借助 Snowflake,您可以直接在 Snowflake 内完成分类,无需将数据导出到外部 ML 环境。
首先,使用以下代码创建示例数据集:
CREATE OR REPLACE TABLE training_purchase_data AS (
SELECT
CAST( UNIFORM( 0 , 4 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 0 , 3 , RANDOM( ) ) AS user_rating,
FALSE AS label,
'not_interested' AS class
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
UNION ALL
SELECT
CAST( UNIFORM( 4 , 7 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 3 , 7 , RANDOM( ) ) AS user_rating,
FALSE AS label,
'add_to_wishlist' AS class
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
UNION ALL
SELECT
CAST( UNIFORM( 7 , 10 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 7 , 10 , RANDOM( ) ) AS user_rating,
TRUE AS label,
'purchase' AS class
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
) ;
CREATE OR REPLACE table prediction_purchase_data AS (
SELECT
CAST( UNIFORM( 0 , 4 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 0 , 3 , RANDOM( ) ) AS user_rating
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
UNION ALL
SELECT
CAST( UNIFORM( 4 , 7 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 3 , 7 , RANDOM( ) ) AS user_rating
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
UNION ALL
SELECT
CAST( UNIFORM( 7 , 10 , RANDOM( ) ) AS VARCHAR ) AS user_interest_score,
UNIFORM( 7 , 10 , RANDOM( ) ) AS user_rating
FROM TABLE ( GENERATOR( rowCount = > 100 ) )
) ; 技术支持
作为训练数据,我们创建一个新视图:
CREATE OR REPLACE view binary_classification_view AS
SELECT user_interest_score, user_rating, label
FROM training_purchase_data;
SELECT * FROM binary_classification_view ORDER BY RANDOM( 42 ) LIMIT 5 ; 技术支持
该视图应输出如下结果:
接下来,根据训练数据训练模型:
CREATE OR REPLACE SNOWFLAKE. ML. CLASSIFICATION model_binary(
INPUT_DATA = > SYSTEM$REFERENCE( 'view' , 'binary_classification_view' ) ,
TARGET_COLNAME = > 'label'
) ; 技术支持
执行分类时,使用 PREDICT 方法:
SELECT model_binary! PREDICT( INPUT_DATA = > {* })
AS prediction FROM prediction_purchase_data; 技术支持
预测结果示例如下:
若要更易读的展示格式,使用以下 SQL:
SELECT * , model_binary! PREDICT( INPUT_DATA = > {* })
AS predictions FROM prediction_purchase_data; 技术支持
您应能得到如下整洁的预测输出格式:
3. 关键洞察
Top Insights 是一款监控工具,通过时间序列分析来观察指标随时间的波动。借助决策树模型,Top Insights 能识别导致某项指标上升或下降的最重要因素。
下面通过一个时间序列分析示例来说明该函数。
首先,创建数据集:
CREATE OR REPLACE TABLE input_table(
ds DATE , metric NUMBER, dim_country VARCHAR , dim_vertical VARCHAR ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'tech' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'auto' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , seq4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'fashion' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'finance' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'canada' AS dim_country,
'fashion' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'canada' AS dim_country,
'finance' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'canada' AS dim_country,
'tech' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'canada' AS dim_country,
'auto' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'france' AS dim_country,
'fashion' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'france' AS dim_country,
'finance' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'france' AS dim_country,
'tech' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 4 , 1 ) ) AS ds,
UNIFORM( 1 , 10 , RANDOM( ) ) AS metric,
'france' AS dim_country,
'auto' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 8 , 1 ) ) AS ds,
UNIFORM( 300 , 320 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'auto' AS dim_vertica
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
INSERT INTO input_table
SELECT
DATEADD( day , SEQ4( ) , DATE_FROM_PARTS( 2020 , 8 , 1 ) ) AS ds,
UNIFORM( 400 , 420 , RANDOM( ) ) AS metric,
'usa' AS dim_country,
'finance' AS dim_vertical
FROM TABLE ( GENERATOR( ROWCOUNT = > 365 ) ) ;
CREATE OR REPLACE VIEW input_view AS (
SELECT
metric,
dim_country as country,
dim_vertical as vertical,
ds >= '2021-01-01' AS label
FROM input_table
) ; 技术支持
接下来,我们需要创建用于预测的模型对象,以便使用 GET_DRIVERS 方法。
CREATE OR REPLACE SNOWFLAKE. ML. TOP_INSIGHTS my_insights_model( ) 技术支持
最后,调用 GET_DRIVERS 方法进行预测。
CALL my_insights_model! GET_DRIVERS(
INPUT_DATA = > TABLE ( input_view) ,
LABEL_COLNAME = > 'label' ,
METRIC_COLNAME = > 'metric'
) ; 技术支持
您应得到如下结果:
4. 预测
当您需要基于历史数据预测未来数值时,预测尤为关键。无论是销售预测、能耗预测,还是网站流量预测,Snowflake 的内置函数都能让这些任务更简单。
在示例中,我们对单一序列进行预测:
CREATE OR REPLACE TABLE sales_data ( store_id NUMBER, item VARCHAR , date TIMESTAMP_NTZ,
sales FLOAT , temperature NUMBER, humidity FLOAT , holiday VARCHAR ) ;
INSERT INTO sales_data VALUES
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-01' ) , 2.0 , 50 , 0.3 , 'new year' ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-02' ) , 3.0 , 52 , 0.3 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-03' ) , 4.0 , 54 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-04' ) , 5.0 , 54 , 0.3 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-05' ) , 6.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-06' ) , 7.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-07' ) , 8.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-08' ) , 9.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-09' ) , 10.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-10' ) , 11.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-11' ) , 12.0 , 55 , 0.2 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-12' ) , 13.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-01' ) , 2.0 , 50 , 0.3 , 'new year' ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-02' ) , 3.0 , 52 , 0.3 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-03' ) , 4.0 , 54 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-04' ) , 5.0 , 54 , 0.3 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-05' ) , 6.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-06' ) , 7.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-07' ) , 8.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-08' ) , 9.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-09' ) , 10.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-10' ) , 11.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-11' ) , 12.0 , 55 , 0.2 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-12' ) , 13.0 , 55 , 0.2 , NULL ) ;
CREATE OR REPLACE TABLE future_features ( store_id NUMBER, item VARCHAR ,
date TIMESTAMP_NTZ, temperature NUMBER, humidity FLOAT , holiday VARCHAR ) ;
INSERT INTO future_features VALUES
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-13' ) , 52 , 0.3 , NULL ) ,
( 1 , 'jacket' , TO_TIMESTAMP_NTZ( '2020-01-14' ) , 53 , 0.3 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-13' ) , 52 , 0.3 , NULL ) ,
( 2 , 'umbrella' , TO_TIMESTAMP_NTZ( '2020-01-14' ) , 53 , 0.3 , NULL ) ; 技术支持
接下来,将训练数据从数据集中分离:
CREATE OR REPLACE VIEW v1 AS SELECT date , sales
FROM sales_data WHERE store_id= 1 AND item= 'jacket' ;
SELECT * FROM v1; 技术支持
开始预测之前,您需要基于所选训练数据训练模型。
操作如下:
CREATE SNOWFLAKE. ML. FORECAST model1(
INPUT_DATA = > TABLE ( v1) ,
TIMESTAMP_COLNAME = > 'date' ,
TARGET_COLNAME = > 'sales'
) ; 技术支持
最后,调用 FORECAST 方法执行预测步骤。
call model1! FORECAST( FORECASTING_PERIODS = > 5 ) ; 技术支持
以下是本次预测的输出结果。
在 Snowflake 中监控机器学习模型
可以通过与第三方工具(如 Tableau)集成在 Snowflake 中创建仪表板,或查询 Snowflake 日志来监控模型表现。可用于跟踪模型的一些有用指标包括准确率、精确率与召回率。
结论
Snowflake Cortex AI 通过在 Snowflake 平台上无缝整合模型,简化了机器学习。本教程带您了解了如何使用 Snowflake Cortex AI 以及 Snowflake Cortex 的 ML 函数。
该方案兼具 Snowflake 的可扩展性与 Python 的灵活性,非常适合希望在不将数据移出云环境的前提下实施机器学习的组织。
想了解更多 Snowflake 资源?您可能会喜欢我们的 Snowflake 初学者教程 和 Snowpark 指南 。若您需要更系统的内容, Snowflake 入门 课程可能正合适您。
随着数据科学中 AI 应用场景的增多,AI 模型训练愈发受到关注。更具体地说,您可以使用 Snowflake Cortex AI 来完成机器学习。
在本指南中,我们将介绍 Snowflake Cortex AI 是什么以及它能做什么。此外,我们还将提供一个简单教程,演示如何结合 Python 和一些 SQL 开始进行机器学习与 AI。如果您是 Snowflake 新手,请查看我们的Snowflake 入门课程以快速上手。
什么是 Snowflake Cortex AI?
Snowflake Cortex AI 是集成在 Snowflake AI 数据云中的一项强大功能,旨在让您直接在 Snowflake 环境内开展机器学习(ML)相关操作。
它可将 Python 机器学习模型与 Snowflake 数据无缝集成,使组织能够在利用云基础设施的同时,从大型数据集中获取洞察、进行预测并开展高级分析。
来源:Snowflake Cortex AI
Snowflake Cortex AI 的关键功能:
Snowflake Cortex 由两大部分组成——LLM 函数和 ML 函数。
LLM 函数包括:
我们将在下文进一步详细介绍每个函数。
ML 函数包括:
想了解如何学习 Snowflake 及其函数?我们的初学者Snowflake 教程和Snowflake 认证指南将为您提供帮助。
为什么将 Snowflake Cortex AI 与 Python 结合使用?
现在让我们看看将二者结合使用的优势。
将 Snowflake Cortex AI 与 Python 结合的优势
使用 Snowflake Cortex AI 的一些关键优势:
使用场景与应用
首先,Snowflake Cortex AI 非常适合希望在不大幅增加资源投入的情况下提升数据科学能力的企业。它提供零代码环境,即使是非技术用户也能轻松开发并部署机器学习模型。
这对预算不足以雇佣数据科学团队或投资昂贵 LLM 的小型企业或初创公司尤为有用。
其次,通过将 Python 集成进 Snowflake 的计算环境,用户可以利用海量的 Python 机器学习算法与工具库。这意味着他们无需学习新的编程语言,也能构建更先进、更准确的模型。
最后,已采用 Snowflake 环境的公司可以充分享受 Cortex AI 的优势,因为它与现有数据仓库无缝集成,无需额外的基础设施或数据迁移。
借助 Snowflake Cortex AI,企业可以轻松高效地将机器学习融入业务流程。
开始使用 Snowflake Cortex AI
在本教程中,我们将一步步演示如何使用 Python 和 Snowflake Cortex AI 搭建机器学习流水线。
先决条件
在使用 Snowflake Cortex AI 进行机器学习之前,请确保满足以下要求:
设置 Snowflake 账户
首先,您需要一个 Snowflake 实例来存储和处理数据。您可以在Snowflake 官网注册。
在注册表单中填写账户信息,并在第二页按以下选项选择。为便于教程演示与复现,请选择 Standard 版本与 Amazon Web Services。服务器区域选择 US West(俄勒冈),以获得最佳的 LLM 函数可用性。
选择完成后,单击 Get Started 接收激活邮件。前往邮箱激活账户,您的 Snowflake 账号即可使用。
软件要求
接下来,您还需要满足一些软件方面的要求。
以下是简单清单:
开始任何分析之前,请先安装相关包,准备好编码环境。
安装必要包,您可以使用pip:
安装完成后,您需要设置工作文件夹与文件以开始。
我创建了名为 Cortex AI Tutorial 的文件夹,并加入一个新的
.env文件,包含如下信息:输入账户信息后保存文件,并在同一文件夹中创建一个 Python 文件或 Jupyter Notebook。
连接 Snowflake
准备就绪后,让我们将您的 Python 环境连接到 Snowflake。
首先,打开 Python 文件并导入必要的库。示例代码如下:
接下来,您需要加载先前保存在.env 文件中的变量。这将为 Snowflake 提供您的账户凭据,以登录并使用其功能。
使用这些变量完成连接后,您需要设置一个 Snowflake 会话。该对象将处理您的所有请求。
Snowflake Cortex AI 的 LLM 函数
Cortex AI 中的 LLM 函数让用户无需自建 AI 模型即可发挥大语言模型的能力。
这些函数通过一些基础任务,为一般的分析用户提供 AI 驱动的分析能力。
以下是 Snowflake Cortex 提供的函数:
1. SUMMARIZE
summarize 函数根据输入生成数据摘要。
它使用 LLM 识别关键信息并以精炼的形式呈现。
例如,如果您有一篇冗长的文档,希望快速了解其内容,您可以使用 summarize 函数得到涵盖要点的简要摘要。这能节省时间,并加速大量数据的分析。
撰文时,该函数的输入语言目前仅限英语。
参考代码如下:
2. TRANSLATE
translate 函数用于将文本从一种语言转换为另一种语言。
它使用机器学习算法和统计模型来准确翻译文本。
在处理多语言数据或文档时,它有助于更轻松地沟通与理解。
例如,若您有一份西班牙语报告需要呈现给英语受众,您可以使用 translate 函数快速转换文本,从而免去人工翻译并节省时间。
参考代码如下:
3. COMPLETE
complete 是一个通用函数,可用于执行特定任务。通过构造句子式提示,引导 AI 模型提供执行任务所需的信息。
参考代码如下:
4. EXTRACT_ANSWER
extract answer 函数会基于提供给模型的问题返回答案。输入必须为英文字符串或 JSON 格式。
参考代码如下:
5. SENTIMENT
sentiment 函数根据文本的情感倾向输出一个定量数值,范围为 -1 至 1。-1 表示最消极,1 表示最积极,接近 0 表示中性。
参考代码如下:
6. EMBED_TEXT
embed text 函数包括
EMBED_TEXT_768与EMBED_TEXT_1024,分别创建 768 与 1024 维的向量嵌入。以下是
EMBED_TEXT_768的参考代码:现在让我们把它们组合到一个主函数中,并用一段示例文本运行以查看结果。
我使用了一段简短的文本作为模型输入,如下所示:
为便于复制粘贴,文本如下:
现在运行代码,应该只需几秒钟。
结果如下:
如您所见,AI 基于我们提供的文本给出了所需的全部结果:摘要、将文本翻译为韩语、根据文本生成三个关键词,并基于问题提供了答案。
Snowflake Cortex AI 的机器学习函数
Cortex AI 还提供仅用 SQL 即可运行的 ML 函数。以下为其提供的多种函数。
1. 异常检测
异常检测对于识别不符合数据预期行为的异常模式至关重要。Snowflake 通过内置的基于梯度提升机(GBM)的机器学习函数简化异常检测,使您能够快速定位数据集中的离群点。
异常检测尤其适用于以下任务:
进行异常检测时,可使用 Snowflake 类 ANOMALY_DETECTION(SNOWFLAKE.ML)。该命令会创建一个异常检测模型对象,并将模型拟合到训练数据。
用法如下:
创建对象后,您可以使用 <model_name>!DETECT_ANOMALIES 方法执行异常检测,
这一步是实际的预测步骤,方法会检测出离群点。
以下是使用数据集进行异常检测的示例。
首先,您可以通过左侧的 Data,点击 Add Data,然后选择 Load data into a Table 来创建数据库。
在弹出窗口中,点击 + Database 并为数据库命名。点击 Create,然后在主弹窗中点击 Cancel。
这样就创建了一个可供您使用的空数据库。
以下示例改编自Snowflake 文档。
开始异常检测前,打开一个新的 SQL 工作表,选择您新建的数据库作为数据源,并粘贴以下代码以创建数据表:
CREATE OR REPLACE TABLE historical_sales_data (
store_id NUMBER, item VARCHAR, date TIMESTAMP_NTZ, sales FLOAT, label BOOLEAN,
temperature NUMBER, humidity FLOAT, holiday VARCHAR);
您的代码应粘贴在类似如下界面的 SQL 工作表中:
接着执行以下语句以创建名为
new_sales_data的表。现在,创建异常检测模型:
创建成功后会显示如下所示的模型已创建结果。
接下来,让我们使用该模型对象进行检测。
检测输出如下:
2. 分类
分类 是将数据归入预定义类别的过程。借助 Snowflake,您可以直接在 Snowflake 内完成分类,无需将数据导出到外部 ML 环境。
首先,使用以下代码创建示例数据集:
作为训练数据,我们创建一个新视图:
该视图应输出如下结果:
接下来,根据训练数据训练模型:
执行分类时,使用
PREDICT方法:预测结果示例如下:
若要更易读的展示格式,使用以下 SQL:
您应能得到如下整洁的预测输出格式:
3. 关键洞察
Top Insights 是一款监控工具,通过时间序列分析来观察指标随时间的波动。借助决策树模型,Top Insights 能识别导致某项指标上升或下降的最重要因素。
下面通过一个时间序列分析示例来说明该函数。
首先,创建数据集:
接下来,我们需要创建用于预测的模型对象,以便使用
GET_DRIVERS方法。最后,调用 GET_DRIVERS 方法进行预测。
您应得到如下结果:
4. 预测
当您需要基于历史数据预测未来数值时,预测尤为关键。无论是销售预测、能耗预测,还是网站流量预测,Snowflake 的内置函数都能让这些任务更简单。
在示例中,我们对单一序列进行预测:
接下来,将训练数据从数据集中分离:
开始预测之前,您需要基于所选训练数据训练模型。
操作如下:
最后,调用 FORECAST 方法执行预测步骤。
以下是本次预测的输出结果。
在 Snowflake 中监控机器学习模型
可以通过与第三方工具(如 Tableau)集成在 Snowflake 中创建仪表板,或查询 Snowflake 日志来监控模型表现。可用于跟踪模型的一些有用指标包括准确率、精确率与召回率。
结论
Snowflake Cortex AI 通过在 Snowflake 平台上无缝整合模型,简化了机器学习。本教程带您了解了如何使用 Snowflake Cortex AI 以及 Snowflake Cortex 的 ML 函数。
该方案兼具 Snowflake 的可扩展性与 Python 的灵活性,非常适合希望在不将数据移出云环境的前提下实施机器学习的组织。
想了解更多 Snowflake 资源?您可能会喜欢我们的Snowflake 初学者教程和Snowpark 指南。若您需要更系统的内容,Snowflake 入门课程可能正合适您。