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 API(
OpenTSLM类):从 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 – MCQ(TSQA 数据集上的多选 QA)
- 阶段 2 – 描述生成(自由形式的时序描述,M4 数据集)
- 阶段 3 – CoT(人类活动识别的链式思维推理)
- 阶段 4 – 睡眠 CoT(睡眠阶段分类)
- 阶段 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
- 项目