OpenTSLM/OpenTSLM

OpenTSLM: Time-Series Language Models for Reasoning over Multivariate Medical Text- and Time-Series Data

OpenTSLM – 医療データ向け時系列言語モデル

何であるか – OpenTSLM は、大規模言語モデル(LLM)に多変量時系列データ(例:心電図、加速度計、脳波など)の入力と推論を可能にするオープンソースライブラリです。本プロジェクトは以下のものを提供します:

  • 事前学習済みの「TSLM」チェックポイント:Llama 3.2(1 B/3 B)およびGemma(270 M/1 B)に基づき、任意長の時系列を理解でき、自然言語でプロンプトできるように設計されています。
  • Python APIOpenTSLM クラス):Hugging-Face Hubからこれらのチェックポイントを読み込み、推論用の generate メソッドを提供します。
  • カリキュラムスタイルの学習スクリプト:研究者が複数のタスク(複数選択QA → 説明文生成 → 連鎖的思考推論)を段階的に微調整できるように設計されており、人間の活動認識、睡眠ステージ分類、心電図QA、一般的な時系列説明文生成をカバーしています。
  • デモスクリプト:各ベンチマークデータセットでのエンドツーエンド実行を迅速に実行できるスクリプトが用意されています。

クイックスタート(推論)

pip install opentslm          # ライブラリをインストール
from opentslm import OpenTSLM
from opentslm.time_series_datasets.TSQADataset import TSQADataset
from opentslm.time_series_datasets.util import extend_time_series_to_match_patch_size_and_aggregate
from torch.utils.data import DataLoader
from opentslm.model_config import PATCH_SIZE
import torch

REPO_ID = "OpenTSLM/llama-3.2-1b-tsqa-sp"
model = OpenTSLM.load_pretrained(REPO_ID,
                                 device="cuda" if torch.cuda.is_available() else "cpu")

test_dataset = TSQADataset("test", EOS_TOKEN=model.get_eos_token())
loader = DataLoader(test_dataset,
                    batch_size=1,
                    shuffle=False,
                    collate_fn=lambda b: extend_time_series_to_match_patch_size_and_aggregate(
                        b, patch_size=PATCH_SIZE))

for batch in loader:
    preds = model.generate(batch, max_new_tokens=200)
    for sample, out in zip(batch, preds):
        print("Q:", sample.get("pre_prompt", "N/A"))
        print("A:", sample.get("answer", "N/A"))
        print("Model output:", out)
    break   # デモでは最初の数例を表示

このスクリプトはソフトプロンプトチューニングされたモデル(sp)を読み込み、TSQAテストセット上で数ステップの推論を実行します。


学習(カリキュラム学習)

OpenTSLM には curriculum_learning.py ドライバが同梱されており、5段階の学習フェーズを実行します:

  1. ステージ1 – MCQ(TSQAデータセット上の複数選択QA)
  2. ステージ2 – 説明文生成(自由形式の時系列記述、M4データセット)
  3. ステージ3 – CoT(人間の活動認識における連鎖的思考推論)
  4. ステージ4 – 睡眠CoT(睡眠ステージ分類)
  5. ステージ5 – ECG CoT(心電図質問応答)

一般的なコマンド:

python curriculum_learning.py \
    --model OpenTSLMFlamingo \
    --llm_id meta-llama/Llama-3.2-1B \
    --device cuda \
    --stages stage1_mcq stage2_captioning stage3_cot

このスクリプトは自動的に前段階の最良チェックポイントを読み込み、results/<llm_id>/<model_type>/stageX/ に新しいチェックポイントを保存し、メトリクスと予測結果をJSONLファイルに書き出します。


モデルバリアント

基盤LLM サイズ バリアント リポジトリIDパターン
Llama‑3.2 1 B ソフトプロンプト(sp OpenTSLM/llama-3.2-1b-<dataset>-sp
Llama‑3.2 3 B Flamingo(flamingo OpenTSLM/llama-3.2-3b-<dataset>-flamingo
Gemma 270 M sp OpenTSLM/gemma-3-270m-<dataset>-sp
Gemma 1 B flamingo OpenTSLM/gemma-3-1b-pt-<dataset>-flamingo

このライブラリは上記のいずれのモデルとも互換性があります。MetaまたはGoogleのモデルリポジトリへの読み取りアクセス権を持つHugging-Faceトークンが必要です。


キーとなるコンポーネント

  • opentslm/ – コアライブラリ(モデルラッパー、データセットユーティリティ、設定定数)。
  • demo/huggingface/ – 各ベンチマーク用の即時実行スクリプト。
  • scripts/ – メモリ使用量分析、データセット作成、補助ツール。
  • curriculum_learning.py – 複数段階の学習/評価をオーケストレーションするスクリプト。
  • results/ – チェックポイントとメトリクスのデフォルト出力構造。

ライセンスとコミュニティ

  • ライセンス:MIT(REUSE対応)。
  • 貢献方法:ガイドラインとコードオブコンダクトが提供されており、プルリクエストによる貢献を歓迎しています。
  • 連絡先 / 研究機会:メール digitalhealthresearch@stanford.edu またはスタンフォード/ETHラボの学生研究ページをご覧ください。

OpenTSLMを使うべきタイミング

  • 臨床時系列データに関する自然言語質問(例:「この心電図に現れる不整脈は何ですか?」)に答える単一モデルが必要な場合。
  • LLMの推論能力を維持しつつ、新しい医療時系列データセット上で言語モデルを微調整したい場合。
  • マルチモーダルLLMの研究を進め、時系列を第一級のモダリティとして扱う参照実装が必要な場合。

結論:OpenTSLMは、既存のLlamaやGemmaモデルを「時系列言語モデル」に変換し、他のLLMと同様にプロンプト可能にしながら、任意長の多変量信号を処理できます。リポジトリには事前学習済みチェックポイント、洗練されたPython API、および新しい医療分野へのアプローチ拡張用のカリキュラム学習パイプラインが提供されています。

関連

  • プロジェクト
  • プロジェクト
  • Dispatch
  • Dispatch
  • プロジェクト