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'
);