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 → 描述生成 → 链式思维推理),涵盖人类活动识别、睡眠分期、ECG 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 驱动程序,执行五个阶段的训练:

  1. 阶段 1 – MCQ(TSQA 数据集上的多选 QA)
  2. 阶段 2 – 描述生成(自由形式的时序描述,M4 数据集)
  3. 阶段 3 – CoT(人类活动识别的链式思维推理)
  4. 阶段 4 – 睡眠 CoT(睡眠阶段分类)
  5. 阶段 5 – ECG CoT(ECG 问答)

典型命令:

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

  • 您需要一个能回答临床时序数据自然语言问题的单一模型(例如:“这个 ECG 中存在什么心律失常?”)。
  • 您希望在新医疗时序数据集上微调语言模型,同时保留 LLM 的推理能力。
  • 您正在研究多模态 LLM,并需要一个将时序数据作为第一类模态的参考实现。

总结:OpenTSLM 将现成的 Llama 或 Gemma 模型转变为“时序语言模型”,可像其他 LLM 一样进行提示,同时仍能处理任意长度的多变量信号。该仓库提供预训练检查点、简洁的 Python API 和用于扩展到新医疗领域的课程训练管道。

相关

  • 项目
  • 项目
  • Dispatch
  • Dispatch
  • 项目