output_transform
中 bin 索引的相差一錯誤。這個簡單的修復顯著提高了 Chronos 的整體效能。我們將在 ArXiv 的下一個版本中更新結果。pipeline.embed
用於從 Chronos 中提取編碼器嵌入。Chronos 是一系列基於語言模型架構的預訓練時間序列預測模型。透過縮放和量化將時間序列轉換為標記序列,並使用交叉熵損失對這些標記進行語言模型的訓練。經過訓練後,可以透過在給定歷史背景下對多個未來軌跡進行採樣來獲得機率預測。 Chronos 模型已經在大量公開的時間序列資料以及使用高斯過程產生的合成資料上進行了訓練。
有關 Chronos 模型、訓練數據和過程以及實驗結果的詳細信息,請參閱論文 Chronos:學習時間序列語言。
圖 1:Chronos 的高階描述。 (左)輸入時間序列經過縮放和量化以獲得標記序列。 (中)標記被輸入到語言模型中,該模型可以是編碼器-解碼器或僅解碼器模型。該模型使用交叉熵損失進行訓練。 (右)在推理過程中,我們從模型中自回歸採樣標記並將它們映射回數值。對多個軌跡進行取樣以獲得預測分佈。
此儲存庫中的模型基於 T5 架構。唯一的差異在於詞彙量大小:Chronos-T5 模型使用 4096 個不同的標記,而原始 T5 模型使用 32128 個標記,因此參數較少。
模型 | 參數 | 基於 |
---|---|---|
chronos-t5-小 | 8M | t5-高效-微小 |
chronos-t5-迷你 | 20M | t5-高效率-迷你 |
chronos-t5-小號 | 46M | t5-高效-小型 |
chronos-t5-基地 | 200M | t5-高效基 |
chronos-t5-大號 | 710M | t5-高效-大型 |
下圖展示了 Chronos 模型在 27 個資料集上相對於本地模型、特定任務模型和其他預訓練模型的卓越零樣本表現。有關評估設定和其他結果的詳細信息,請參閱論文。
圖 2:不同模型在 Benchmark II 上的表現,包括 Chronos 模型在訓練期間未見過的 27 個資料集。此基準測試提供了 Chronos 模型相對於本地統計模型的零樣本性能的見解,本地統計模型分別擬合每個時間序列的參數、針對每個任務訓練的特定於任務的模型以及在大型時間序列語料庫上訓練的預訓練模型。預訓練模型(其他)表示 Benchmark II 中的部分(或全部)資料集可能已在這些模型的訓練語料庫中。使用季節性樸素基線的分數對機率 (WQL) 和點 (MASE) 預測指標進行歸一化,並透過幾何平均值進行聚合以獲得 Agg。分別相對於 WQL 和 MASE。
若要使用 Chronos 模型執行推理,請透過執行以下命令安裝此軟體包:
pip install git+https://github.com/amazon-science/chronos-forecasting.git
提示
在生產用例中使用 Chronos 的建議方法是透過 AutoGluon,它具有與其他統計和機器學習模型整合以進行時間序列預測以及透過 SageMaker® 在 AWS 上無縫部署的功能。查看 AutoGluon Chronos 教學。
展示如何使用 Chronos 模型執行預測的最小範例:
import pandas as pd # requires: pip install pandas
import torch
from chronos import ChronosPipeline
pipeline = ChronosPipeline . from_pretrained (
"amazon/chronos-t5-small" ,
device_map = "cuda" , # use "cpu" for CPU inference and "mps" for Apple Silicon
torch_dtype = torch . bfloat16 ,
)
df = pd . read_csv ( "https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv" )
# context must be either a 1D tensor, a list of 1D tensors,
# or a left-padded 2D tensor with batch as the first dimension
# forecast shape: [num_series, num_samples, prediction_length]
forecast = pipeline . predict (
context = torch . tensor ( df [ "#Passengers" ]),
prediction_length = 12 ,
num_samples = 20 ,
)
pipeline.predict
的更多選項可以透過以下方式找到:
print ( ChronosPipeline . predict . __doc__ )
我們現在可以視覺化預測:
import matplotlib . pyplot as plt # requires: pip install matplotlib
import numpy as np
forecast_index = range ( len ( df ), len ( df ) + 12 )
low , median , high = np . quantile ( forecast [ 0 ]. numpy (), [ 0.1 , 0.5 , 0.9 ], axis = 0 )
plt . figure ( figsize = ( 8 , 4 ))
plt . plot ( df [ "#Passengers" ], color = "royalblue" , label = "historical data" )
plt . plot ( forecast_index , median , color = "tomato" , label = "median forecast" )
plt . fill_between ( forecast_index , low , high , color = "tomato" , alpha = 0.3 , label = "80% prediction interval" )
plt . legend ()
plt . grid ()
plt . show ()
一個展示如何從 Chronos 模型中提取編碼器嵌入的最小範例:
import pandas as pd
import torch
from chronos import ChronosPipeline
pipeline = ChronosPipeline . from_pretrained (
"amazon/chronos-t5-small" ,
device_map = "cuda" ,
torch_dtype = torch . bfloat16 ,
)
df = pd . read_csv ( "https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/AirPassengers.csv" )
# context must be either a 1D tensor, a list of 1D tensors,
# or a left-padded 2D tensor with batch as the first dimension
context = torch . tensor ( df [ "#Passengers" ])
embeddings , tokenizer_state = pipeline . embed ( context )
用於預訓練、微調和評估 Chronos 模型的腳本可以在此資料夾中找到。
Chronos 論文中用於預先訓練和評估的資料集(域內和零樣本)可透過 HuggingFace 儲存庫取得: autogluon/chronos_datasets
和autogluon/chronos_datasets_extra
。查看這些儲存庫以取得有關如何下載和使用資料集的說明。
如果您發現 Chronos 模型對您的研究有用,請考慮引用相關論文:
@article{ansari2024chronos,
author = {Ansari, Abdul Fatir and Stella, Lorenzo and Turkmen, Caner and Zhang, Xiyuan and Mercado, Pedro and Shen, Huibin and Shchur, Oleksandr and Rangapuram, Syama Syndar and Pineda Arango, Sebastian and Kapoor, Shubham and Zschiegner, Jasper and Maddix, Danielle C. and Wang, Hao and Mahoney, Michael W. and Torkkola, Kari and Gordon Wilson, Andrew and Bohlke-Schneider, Michael and Wang, Yuyang},
title = {Chronos: Learning the Language of Time Series},
journal = {arXiv preprint arXiv:2403.07815},
year = {2024}
}
請參閱貢獻以獲取更多資訊。
該專案根據 Apache-2.0 許可證獲得許可。