
構(gòu)建大語言模型友好型API
在計算語言學(xué)領(lǐng)域基礎(chǔ)模型取得成功后,越來越多的研究致力于將這種成功復(fù)制到另一種序列數(shù)據(jù)類型上:時間序列。
與大型語言模型(LLMs)類似,大型時間序列基礎(chǔ)模型(LTSM)旨在從龐大且多樣的時間序列數(shù)據(jù)集中學(xué)習(xí)以進(jìn)行預(yù)測。
訓(xùn)練好的基礎(chǔ)模型隨后可以針對各種任務(wù)(如異常檢測或時間序列分類)進(jìn)行微調(diào)。
盡管時間序列基礎(chǔ)模型的概念已存在一段時間,并且已經(jīng)探索了多種神經(jīng)網(wǎng)絡(luò)架構(gòu)(如MLP、RNN、CNN),但由于數(shù)據(jù)數(shù)量和質(zhì)量的問題,尚未實現(xiàn)零樣本預(yù)測。
在LLMs取得成功之后,人們開始投入更多努力,旨在利用從自然語言數(shù)據(jù)中學(xué)習(xí)到的序列信息來進(jìn)行時間序列建模。
語言模型與時間序列模型之間的主要聯(lián)系在于,它們的輸入數(shù)據(jù)都是序列數(shù)據(jù)。
主要區(qū)別在于數(shù)據(jù)如何被編碼以供模型捕捉不同類型的模式和結(jié)構(gòu)。
對于大型語言模型,輸入句子中的單詞首先通過分詞被編碼為整數(shù)序列,然后通過嵌入查找過程轉(zhuǎn)換為數(shù)值向量。
類似地,時間序列數(shù)據(jù)也可以被分詞為一系列符號表示。
下圖展示了一個將包含100個時間戳的時間序列轉(zhuǎn)換為長度為5的序列的示例,其中序列中的每一步都由一個4維特征向量表示。
時間序列可以通過滑動窗口進(jìn)行分割,并進(jìn)行離散化處理以提取統(tǒng)計值(如均值、標(biāo)準(zhǔn)差、最小值、最大值)來表示每個窗口。
這樣,一個在廣泛語料庫上訓(xùn)練的大型語言模型可以被視為與從現(xiàn)實世界中廣泛數(shù)值模式中學(xué)習(xí)的大型時間序列模型(LTSM)類似。
因此,時間序列預(yù)測問題可以被構(gòu)造成一個類似于下一個單詞預(yù)測的問題。
實現(xiàn)最佳性能和零樣本/少樣本預(yù)測的關(guān)鍵挑戰(zhàn)在于對齊時間序列符號和自然語言符號之間的語義信息。
為了應(yīng)對這一挑戰(zhàn),研究人員正在從訓(xùn)練大型語言模型的各個角度研究如何彌合時間序列與自然語言之間的信息鴻溝。下表展示了這兩種數(shù)據(jù)類型在組件上的比較以及每個組件的代表性工作。
一般來說,將大型語言模型(LLM)重新編程用于時間序列建模,與針對特定領(lǐng)域進(jìn)行微調(diào)的過程相似。
這一過程包含幾個關(guān)鍵步驟:數(shù)據(jù)分詞、基礎(chǔ)模型選擇、提示工程以及定義訓(xùn)練范式。
對于LLM來說,時間序列數(shù)據(jù)的分詞可以通過符號化表示來實現(xiàn)。
這避免了手動離散化和啟發(fā)式特征提取的復(fù)雜性,可以通過簡單的線性層或預(yù)訓(xùn)練的分詞器[3]將時間序列數(shù)據(jù)的片段映射到潛在嵌入空間中的標(biāo)記上,從而使分詞后的時間序列數(shù)據(jù)更好地適應(yīng)LLM。
在選擇基礎(chǔ)模型時,可以通過比較不同架構(gòu)的目標(biāo)任務(wù)來進(jìn)行。
例如,句子分類可以與時間序列分類或異常檢測相對應(yīng),而下一個詞的預(yù)測則可以對應(yīng)于時間序列預(yù)測。
對時間序列數(shù)據(jù)進(jìn)行提示時,可以依賴于數(shù)據(jù)的文本信息(如數(shù)據(jù)集或任務(wù)描述),或者從每個時間序列中提取全局統(tǒng)計特征,以突出不同數(shù)據(jù)集之間的總體差異。
時間序列數(shù)據(jù)的訓(xùn)練范式通常遵循自然語言處理中使用的類似方法。
這些方法包括:使用相同模型架構(gòu)但不包含預(yù)訓(xùn)練權(quán)重的從頭開始訓(xùn)練、在預(yù)訓(xùn)練權(quán)重上進(jìn)行微調(diào),或訓(xùn)練一個并行適配器(如LoRA)以使LLM適應(yīng)時間序列數(shù)據(jù)。
每種方法都有不同的計算成本,而這些成本并不一定與性能結(jié)果成正比。
因此,鑒于每個步驟中的多樣選擇,我們?nèi)绾未_定最佳選項,以創(chuàng)建一個具有最優(yōu)性能且更具泛化能力的模型呢?
深入理解大型時間序列模型訓(xùn)練中的不同設(shè)計選擇
為了全面評估每一步選擇的優(yōu)勢與劣勢,論文《LTSM-bundle》研究了在開源基準(zhǔn)數(shù)據(jù)集上不同選擇組合的效果,并提供了一個開源基準(zhǔn)框架,使公眾能夠針對自己的時間序列數(shù)據(jù)重新編程和基準(zhǔn)測試不同的LLM(大型語言模型)選擇。
這篇論文深入探討了訓(xùn)練LTSM(長短期記憶)模型的多種因素,包括模型提示的不同方式、數(shù)據(jù)分割策略、訓(xùn)練方法、基礎(chǔ)模型的選擇、數(shù)據(jù)量的多少以及數(shù)據(jù)集的多樣性等。
在審視現(xiàn)有方法的基礎(chǔ)上,我們提出了一種新的概念——“時間序列提示”(Time Series Prompt)。
這種新方法通過從訓(xùn)練數(shù)據(jù)中提取關(guān)鍵特征來生成提示,為每個數(shù)據(jù)集提供了堅實的統(tǒng)計概覽。
我們基于預(yù)測誤差(均方誤差/平均絕對誤差)來評估不同的選擇,誤差值越低,模型性能越好。
研究中的一些關(guān)鍵發(fā)現(xiàn)包括:
簡單的統(tǒng)計提示(TS Prompt)在提升LTSM模型訓(xùn)練方面優(yōu)于文本提示,并且與不使用任何提示的場景相比,使用統(tǒng)計提示能帶來更優(yōu)的性能表現(xiàn)。
使用可學(xué)習(xí)的線性層對時間序列進(jìn)行分詞,在訓(xùn)練LTSM模型時表現(xiàn)更佳,特別是在同時處理來自不同領(lǐng)域的數(shù)據(jù)時,這一方法相較于其他分詞方法更具優(yōu)勢。
雖然從頭開始訓(xùn)練模型在初期可能表現(xiàn)良好,但由于參數(shù)眾多,存在過擬合的風(fēng)險。全面微調(diào)通常能達(dá)到最佳性能,并且收斂速度是從頭開始訓(xùn)練的兩倍,從而確保了預(yù)測的高效性和準(zhǔn)確性。
在長期預(yù)測(336步和720步)中,小型模型表現(xiàn)出高達(dá)2%的性能優(yōu)勢;而在短期預(yù)測(96步和192步)中,中等大小的模型則優(yōu)于大型模型,這可能是因為大型模型存在潛在的過擬合問題。
數(shù)據(jù)量的增加并不總是能帶來模型性能的改善,因為每個數(shù)據(jù)集的數(shù)據(jù)量增加會提高訓(xùn)練時間序列的粒度,反而可能降低模型的泛化能力。但增加數(shù)據(jù)集的多樣性通常能提升性能。
綜合以上發(fā)現(xiàn),作者創(chuàng)建了LTSM-Bundle模型,該模型在重新編程用于時間序列的LLM(大型語言模型)和基于Transformer的時間序列預(yù)測模型方面,表現(xiàn)優(yōu)于所有現(xiàn)有方法。
如果大家想嘗試自己重新編程LTSM,以下是LTSM-bundle的教程鏈接:https://github.com/daochenzha/ltsm/blob/main/tutorial/README.md
步驟1:創(chuàng)建一個虛擬環(huán)境。克隆并安裝所需的依賴項和倉庫。
conda create -n ltsm python=3.8.0
conda activate ltsm
git clone git@github.com:daochenzha/ltsm.gitclone git@github.com:daochenzha/ltsm.git
cd ltsm
pip3 install -e .
pip3 install -r requirements.txt
步驟2:準(zhǔn)備你的數(shù)據(jù)集。確保你的本地數(shù)據(jù)文件夾結(jié)構(gòu)如下所述。
- ltsm/ - datasets/ DATA_1.csv/ DATA_2.csv/ DATA_3.csv/
...
步驟3:?從訓(xùn)練、驗證和測試數(shù)據(jù)集中生成時間序列提示
python3 prompt_generate_split.pypy
步驟4:在‘./prompt_data_split’文件夾中找到生成的時間序列提示。然后運(yùn)行以下命令以完成提示的定制。
# normalizing the promptspython3 prompt_normalization_split.py --mode fit#export the prompts to the "./prompt_data_normalize_split" folder
python3 prompt_normalization_split.py --mode transform
最后步驟:使用時間序列提示和線性分詞在gpt2-medium上訓(xùn)練你自己的LTSM模型。
python3 main_ltsm.py \ --model LTSM \ --model_name_or_path gpt2-medium \ --train_epochs 500 \ --batch_size 10 \ --pred_len 96 \ --data_path "DATA_1.csv DATA_2.csv" \"DATA_1.csv DATA_2.csv" \ --test_data_path_list "DATA_3.csv" \ --prompt_data_path "prompt_bank/prompt_data_normalize_split" \ --freeze 0 \ --learning_rate 1e-3 \ --downsample_rate 20 \
--output_dir [Your_Output_Path] \
論文和GitHub倉庫:
論文鏈接:
https://arxiv.org/pdf/2406.14045
代碼倉庫:
https://github.com/daochenzha/ltsm/
參考文獻(xiàn):
原文轉(zhuǎn)自 微信公眾號@人工智能學(xué)習(xí)指南