Lindorm AI引擎支持通过Lindorm SQL创建AI模型,对宽表引擎或时序引擎中的数据进行建模分析。您可以根据业务场景,在CREATE MODEL语句中设置推理任务类型、配置任务参数,创建不同类型的模型,例如文生图、检索问答、时序预测等模型。
引擎与版本
CREATE MODEL语法适用于时序引擎和AI引擎。
时序引擎3.4.26及以上版本支持CREATE MODEL语法。
AI引擎无版本限制。
要求Lindorm SQL为2.6.1及以上版本。如何查看Lindorm SQL的版本,请参见SQL版本说明。
如果您需要创建AI推理服务模型(文本、图像、音视频等非结构化数据的AI分析与处理),需开通2.5.1.1及以上版本的宽表引擎。
语法
CREATE MODEL model_identifer
FROM {table_identifer | (select_statement) | model_file_path | huggingface_repo | modelscope_repo}
[ TARGET column_identifer ]
TASK ( TEXT_TO_IMAGE | RETRIEVAL_QA | ... )
ALGORITHM ( CHINESE_STABLE_DIFFUSION | CHATGLM_6B | ... )
[ PREPROCESSORS 'string' ]
SETTINGS (
doc_id_column 'string',
...
)
使用说明
模型名称(model_identifer)
模型名称遵循以下要求:
长度为1~255字符。
可包含数字、大写英文字符、小写英文字符、中划线(-)和下划线(_)。
源数据表(table_identifer)
仅TASK为检索类任务(SEMANTIC_RETRIEVAL、RETRIEVAL_QA)和时序类任务(TIME_SERIES_FORECAST、TIME_SERIES_ANOMALY_DETECTION)可以指定数据源表。
当任务类型为时序类任务时,源数据表必须至少包含2列,且其中1列为时间列。
查询语句(select_statement)
仅TASK为时序类任务(TIME_SERIES_FORECAST或TIME_SERIES_ANOMALY_DETECTION)时,可以指定查询语句。指定的查询语句的结果必须至少包含2列,且其中1列为时间列。
模型路径(model_file_path | huggingface_repo | modelscope_repo)
model_file_path:模型上传至LDFS上的地址,格式为
ldfs://model_file_path
,例如ldfs://x.x.x.x/CLIP-ViT-B-32-IMAGE.zip
。huggingface_repo:模型平台(HuggingFace)上的模型路径,格式为
huggingface://repository_id
,例如huggingface://lllyasviel/ControlNet
。modelscope_repo:模型平台(ModelScope)上的模型路径,格式为
modelscope://repository_id
,例如modelscope://damo/multi-modal_chinese_stable_diffusion_v1.0
。
指定目标列(TARGET column_identifer)
用于指定模型分析和处理的目标列。当TASK
指定以下任务类型时,TARGET column_identifer
必填 。
语义检索(SEMANTIC_RETRIEVAL)
检索问答(RETRIEVAL_QA)
时序预测(TIME_SERIES_FORECAST)
时序异常检测(TIME_SERIES_ANOMALY_DETECTION)
任务类型(TASK)
您可以通过TASK
关键字指定任务类型,例如TASK TEXT_TO_IMAGE
表示创建文生图模型。
任务类型 | 关键字 | 说明 |
特征提取 | FEATURE_EXTRACTION | 使用Embedding模型从数据(文本或图像等)中提取特征向量。 |
文生图 | TEXT_TO_IMAGE | 文本生成图像类AIGC任务。 |
语义检索 | SEMANTIC_RETRIEVAL | 在指定数据表中根据描述文本检索语义相似的文本。 |
基础问答 | QUESTION_ANSWERING | 使用大语言模型进行问答。 |
检索问答 | RETRIEVAL_QA | 使用指定数据表中的知识库结合大语言模型构建一个检索增强生成(Retrieval Augmented Generation,RAG)应用。 |
时序预测 | TIME_SERIES_FORECAST | 时序预测类任务。 |
时序异常检测 | TIME_SERIES_ANOMALY_DETECTION | 时序异常检测类任务。 |
时序类(时序预测和时序异常检测)任务的模型创建完成后,AI引擎会自动对模型进行训练。其他类型任务的模型创建完成后,AI引擎不会对其模型进行训练。
算法(ALGORITHM)
指定模型使用的算法。支持的算法如下表所示:
任务类型 | 算法 | 说明 |
特征提取、语义检索 | TEXT2VEC_BASE_CHINESE |
|
BGE_LARGE_ZH |
| |
M3E_BASE |
| |
GTE_LARGE_ZH |
| |
BGE_M3 |
| |
JINA_V2_BASE_ZH |
| |
文生图 | CHINESE_STABLE_DIFFUSION |
|
基础问答、检索问答 | CHATGLM3_6B |
|
CHATGLM2_6B_INT4 |
| |
CHATGLM2_6B |
| |
QWEN_7B_CHAT_INT4 |
| |
QWEN_14B_CHAT_INT4 |
| |
时序预测 | DeepAR | DeepAR算法是基于RNN的深度神经网络算法。详细信息,请参见DeepAR论文。 |
TFT | TFT(Temporal Fusion Transformer)算法是基于Transformer机制的深度神经网络算法,详细信息,请参见TFT论文。 | |
时序异常检测 | esd | 达摩院自研算法,适用于尖刺型异常(例如监控曲线出现尖刺的现象),对于数据点中有少量显著离群点的情况,检测结果准确。详细信息,请参见时序异常检测。 |
nsigma | 达摩院自研算法,原理简单,便于分析异常原因。详细信息,请参见时序异常检测。 | |
ttest | 达摩院自研算法,适用于识别一个时间窗口内时序指标是否存在因均值变化而发生的异常。详细信息,请参见时序异常检测。 |
指定列的预处理操作(PREPROCESSORS 'string')
PREPROCESSORS
为可选关键字,且仅对时序类任务(TIME_SERIES_FORECAST或TIME_SERIES_ANOMALY_DETECTION)生效。
PREPROCESSORS
用于指定某些列的预处理操作,通常使用JSON格式的字符串定义。
'string'
包括要处理的列集合Columns和需要执行的预处理操作列表Transformers。其中Transformers参数构成一个管道,会按照指定的顺序执行。每一个Transformers都包含预处理操作名称Name和参数Parameters。示例如下:
PREPROCESSORS '[
{
"Columns":[
"c1"
],
"Transformers":[
{
"Name": "Imputer",
"Parameters": {"value": 0}
},
{
"Name": "StandardScaler"
}
]
},
{
"Columns":[
"c2",
"c3"
],
"Transformers":[
{
"Name": "OrdinalEncoder"
}
]
}
]'
其中,预处理的列集合Columns参数和预处理操作包含的Parameters参数都为可选参数。
在模型训练时指定的预处理操作会被自动应用到模型推理的过程中。目前Lindorm AI支持的预处理操作如下表所示:
预处理操作 | 参数 | 说明 |
OneHotEncoder | 无 | 使用二进制对类别特征进行编码,适用于没有大小关系的类别特征。 |
OrdinalEncoder | 无 | 将类别特征编码从0开始的整数,适用于有大小关系的类别特征。 |
Imputer |
| 对缺失值进行插值,可选多种策略。 |
StandardScaler | 无 | 将数据转换成标准正态分布(均值为0,标准差为1),也叫z-score标准化。 |
MinMaxScaler |
| 将数据范围缩放至(min,max)区间,默认缩放至(0,1)。 |
LogTransformer | 无 | 将数据转换成log对数值。 |
配置任务参数(SETTINGS)
您可以通过SETTINGS
关键字配置任务参数,例如是否检索主键列、指定时间列等等。具体如下:
语义检索和检索问答任务相关参数
参数名
参数类型
说明
是否必填
embedding_model
VARCHAR
此参数可用于两个用途:
语义检索任务指定使用BYOM功能导入的Embedding模型,取值为使用BYOM功能导入的Embedding模型名称。
检索问答任务更换Embedding模型,取值为:
使用BYOM功能导入的Embedding模型名。
特征提取任务支持的所有Embedding模型对应的模型平台路径,如
huggingface://BAAI/bge-large-zh-v1.5
等。
否
hybrid_retrieval
VARCHAR
是否打开向量+全文混合检索功能(仅对语义检索任务生效),打开后会使用RRF(Reciprocal rank fusion)算法对双路召回结果进行排序。取值如下:
on:默认值,打开。
off:关闭。
否
text_splitter
VARCHAR
是否打开文档切片功能。取值如下:
on:默认值,打开。
off:关闭。
否
incremental_train
VARCHAR
是否打开增量处理功能。取值如下:
on:打开。
off:默认值,关闭。
否
retrievel_algo
VARCHAR
向量检索的索引算法。取值如下:
HNSW:默认值。采用HNSW图结构构建整个向量索引,并通过该算法进行查询,适合大规模的数据集。
FLAT:不单独构建索引,采用暴力搜索的方式执行查询,适合1万条以下的小规模数据集。
否
retrieval_distance_method
VARCHAR
向量检索的距离函数。取值如下:
IP:默认值。向量内积。
COSINE:余弦距离。
L2:平方欧式距离。
否
retrieval_ef_construct
INTEGER
使用HNSW向量检索算法构建索引时,动态列表的长度。默认值为400,取值范围为[1,1000],该值越大则ANN查询精度越高,同时性能开销越大。
否
retrieval_maximum_degree
INTEGER
使用HNSW向量检索算法构建索引时,每一层的最大出边数量。默认值为80,取值范围为[1,100]。该值越大则ANN查询精度越高,同时性能开销越大。
否
retrieval_num_shards
INTEGER
向量索引使用的分片个数,向量数据和结构化数据进行融合检索时,每个索引表分片会先根据向量的相似查询获取topK数据,再基于合并后的topK数据进行结构化数据过滤。默认值为4。
否
text_analyzer
VARCHAR
此配置项在混合检索功能(hybrid_retrieval)打开时生效,用于指定全文检索使用的分词器。取值如下:
ik:默认值。
standard
english
whitespace
comma
否
时序预测任务相关参数
参数名
参数类型
说明
是否必填
epochs
INTEGER
训练epochs的个数,只适用于时序预测。默认为80。
是
time_column
VARCHAR
时间列。
是
group_columns
VARCHAR
分组列。即决定时间线的TAG列。
是
freq
VARCHAR
时序数据的频率。例如“1D”。
是
prediction_length
INTEGER
预测步长。
是
feat_static_columns
VARCHAR
静态特征列(TAG)的集合,以英文逗号(,)分隔。
否
时序异常检测相关参数
时序异常检测支持的参数,请参见时序异常检测中的训练参数。
示例
文生图
CREATE MODEL t2i_model
FROM 'modelscope://damo/multi-modal_chinese_stable_diffusion_v1.0'
TASK TEXT_TO_IMAGE
ALGORITHM CHINESE_STABLE_DIFFUSION;
特征提取
CREATE MODEL fe_model
FROM 'huggingface://BAAI/bge-large-zh-v1.5'
TASK FEATURE_EXTRACTION
ALGORITHM BGE_LARGE_ZH;
语义检索
CREATE MODEL sr_model
FROM doc_table
TARGET doc_field
TASK SEMANTIC_RETRIEVAL
ALGORITHM BGE_LARGE_ZH;
基础问答
CREATE MODEL qa_model
FROM 'huggingface://THUDM/chatglm2-6b-int4'
TASK QUESTION_ANSWERING
ALGORITHM CHATGLM2_6B_INT4;
检索问答
CREATE MODEL rqa_model
FROM doc_table
TARGET doc_field
TASK RETRIEVAL_QA
ALGORITHM CHATGLM2_6B_INT4;
时序预测
CREATE MODEL tft_model
FROM (SELECT * FROM fresh_sales WHERE `time` > '2021-02-08T00:00:00+08:00')
TARGET sales
TASK time_series_forecast
ALGORITHM tft
SETTINGS
(
time_column 'time',
group_columns 'id_code',
feat_static_columns 'cate1_id,cate2_id,brand_id',
context_length '28',
prediction_length '6',
epochs '5',
freq '1D'
);