---
title: LingLan
canonical_url: "https://www.modelscope.cn/datasets/TCMAIBJTU/LingLan"
md_url: "https://www.modelscope.cn/datasets/TCMAIBJTU/LingLan.md"
repository: TCMAIBJTU/LingLan
chinese_name: "灵兰秘典-中医大模型基准"
last_updated: 2026-10-10
license: cc-by-4.0
storage_size: "32 MB"
downloads: 481
stars: 0
---

# LingLan

> LingLan - TCMAIBJTU 在 ModelScope 开源的数据集。LingLan Traditional Chinese Medicine Benchmark Dataset

TCMAIBJTU/LingLan 是 ModelScope 魔搭社区上的数据集，存储大小 32 MB，采用 cc-by-4.0 许可。

- **Repository**: TCMAIBJTU/LingLan
- **License**: cc-by-4.0
- **Storage size**: 32 MB
- **Downloads**: 481
- **Stars**: 0
- **Last updated**: 2026-10-10

Source: https://www.modelscope.cn/datasets/TCMAIBJTU/LingLan

---

<h2 align="center">
  <img width="600" src="./assets/linglan_logo_horizontal.png" alt="LingLan logo" /><br />
  LingLan Traditional Chinese Medicine<br />Benchmark Dataset
</h2>

<p align="center">
  <a href="https://arxiv.org/abs/2602.01779"><img src="https://img.shields.io/badge/Paper-arXiv-B31B1B?style=plastic&amp;logo=arxiv&amp;logoColor=white" alt="Paper: arXiv" height="28" /></a>
  &nbsp;
  <a href="https://www.tcmnlp.com/"><img src="https://img.shields.io/badge/Website-Leaderboard-2F9984?style=plastic" alt="Website: Leaderboard" height="28" /></a>
  &nbsp;
  <a href="https://github.com/TCMAI-BJTU/LingLan"><img src="https://img.shields.io/badge/Code-GitHub-24292F?style=plastic&amp;logo=github&amp;logoColor=white" alt="Code: GitHub" height="28" /></a>
  &nbsp;
  <a href="https://huggingface.co/datasets/TCMLLM/LingLan"><img src="https://img.shields.io/badge/Dataset-Hugging%20Face-FFD21E?style=plastic&amp;logo=huggingface&amp;logoColor=black" alt="Dataset: Hugging Face" height="28" /></a>
</p>

<p align="center">
  <a href="https://github.com/TCMAI-BJTU/LingLan/blob/master/README_zh.md">中文说明</a>
</p>

<p align="center">
  <strong>5</strong> evaluation domains&nbsp; · &nbsp;
  <strong>13</strong> benchmark tasks&nbsp; · &nbsp;
  <strong>25,620</strong> Full items&nbsp; · &nbsp;
  <strong>5,200</strong> Hard items
</p>

<p align="center">
  <a href="#load-from-modelscope">Load the data</a>&nbsp; · &nbsp;
  <a href="#tasks-and-counts">Tasks and counts</a>&nbsp; · &nbsp;
  <a href="data/README.md#paper-evaluation-results">Explore all results</a>
</p>

LingLan is an expert-curated benchmark for evaluating large language models on Traditional Chinese Medicine knowledge and clinical reasoning across five domains and 13 benchmark tasks. This repository distributes the labelled data; evaluation code is maintained in the [GitHub project](https://github.com/TCMAI-BJTU/LingLan).

The counts above treat each joint diagnostic and therapeutic reasoning case as one item. Its labels are stored in three files, giving **15 task configurations and 30 JSONL files**, with **29,620 Full and 6,000 Hard file rows**. Every record has `id`, `task`, and `answer`.

**Hard is a subset of Full, not an independent train/test partition.** Each Hard file contains 400 records with the same IDs and labels as Full. Do not concatenate the two sets as independent examples.

## Load from ModelScope

Install the dependencies:

```bash
python -m pip install "modelscope[datasets]"
```

Load one task and one set:

```python
from modelscope.msdatasets import MsDataset

full = MsDataset.load("TCMAIBJTU/LingLan", subset_name="fundamental_tcm_knowledge_multiple_choice", split="fullset")
hard = MsDataset.load("TCMAIBJTU/LingLan", subset_name="fundamental_tcm_knowledge_multiple_choice", split="hardset")
print(len(full), len(hard))  # 1919, 400
print(hard[0]["id"], hard[0]["answer"])
```

The README YAML defines the task configurations and their Full/Hard file mappings for the general dataset loader. The same mappings are available in `task_configs.json`.

Choose a configuration from the table below. `fullset` and `hardset` are the split names. Always specify the task; different tasks have different answer schemas.

## Tasks and counts

| Configuration / `task` | Full | Hard |
| --- | ---: | ---: |
| `chinese_patent_medicine_knowledge_single_choice` | 1,998 | 400 |
| `chinese_patent_medicine_knowledge_fill_blank` | 2,000 | 400 |
| `chinese_patent_medicine_knowledge_multiple_choice` | 1,950 | 400 |
| `herbal_prescription_single_choice` | 2,000 | 400 |
| `treatment_method_single_choice` | 2,000 | 400 |
| `syndrome_single_choice` | 2,000 | 400 |
| `herbal_prescription` | 2,000 | 400 |
| `treatment_method` | 2,000 | 400 |
| `syndrome` | 2,000 | 400 |
| `fundamental_tcm_knowledge_single_choice` | 1,962 | 400 |
| `fundamental_tcm_knowledge_fill_blank` | 1,959 | 400 |
| `fundamental_tcm_knowledge_multiple_choice` | 1,919 | 400 |
| `classical_text_entity_extraction` | 2,000 | 400 |
| `clinical_record_entity_extraction` | 2,000 | 400 |
| `tcm_licensing_examination` | 1,832 | 400 |

## Structure and fields

```text
LingLan/
├── README.md
├── README_zh.md
├── task_configs.json
├── data_manifest.json
└── data/
    ├── README.md
    ├── README_zh.md
    ├── fullset/
    └── hardset/
```

See [data/README.md](data/README.md) for all fields, answer formats, ID relationships, and evaluation output conventions. `task_configs.json` mirrors the README's task/file mappings. `data_manifest.json` records the row count and SHA-256 checksum of each JSONL file. The Hugging Face and ModelScope distributions contain identical JSONL bytes copied from the GitHub source data.

## Independent and joint diagnostic and therapeutic reasoning evaluation

Diagnostic and therapeutic reasoning supports generating syndrome, treatment, or prescription independently, or all three in one call. Join the three files by four-digit case ID for joint generation; the GitHub runner uses this workflow. See [diagnostic and therapeutic reasoning documentation](data/README.md#diagnostic-and-therapeutic-reasoning) for fields, entry-point names, and scoring.

This example loads the three gold answers for one shared case:

```python
from modelscope.msdatasets import MsDataset

tasks = ["syndrome", "treatment_method", "herbal_prescription"]
components = {}
for task in tasks:
    rows = MsDataset.load("TCMAIBJTU/LingLan", subset_name=task, split="hardset")
    components[task] = {r["id"].rsplit("_", 1)[1]: r for r in rows}
case_id = next(iter(components["syndrome"]))
records = [components[task][case_id] for task in tasks]
assert len({r["病历文本"] for r in records}) == 1
print(records[0]["病历文本"])
print({task: components[task][case_id]["answer"] for task in tasks})
```

## Data sources and license

Data are curated from de-identified clinical records, classical texts, official examination sources, and structured knowledge resources.

The LingLan dataset is released under the [Creative Commons Attribution 4.0 International license](https://creativecommons.org/licenses/by/4.0/). Please credit [LingLan, its authors, and the data source](https://github.com/TCMAI-BJTU/LingLan), and cite the [paper](https://arxiv.org/abs/2602.01779) when using it. When sharing the data, retain the license link and indicate any changes. See [data/LICENSE](data/LICENSE) for the full terms.


## Citation

```bibtex
@misc{hua2026linglan,
      title={LingLan: A Unified Benchmark for Evaluating Large Language Models in Traditional Chinese Medicine},
      author={Rui Hua and Yu Wei and Zixin Shu and Kai Chang and Dengying Yan and Jianan Xia and Zeyu Liu and Hui Zhu and Shujie Song and Mingzhong Xiao and Xiaodong Li and Dongmei Jia and Zhuye Gao and Yanyan Meng and Naixuan Zhao and Yu Fu and Haibin Yu and Benman Yu and Yuanyuan Chen and Fei Dong and Zhizhou Meng and Pengcheng Yang and Songxue Zhao and Lijuan Pei and Yunhui Hu and Kan Ding and Jiayuan Duan and Wenmao Yin and Yang Gu and Runshun Zhang and Qiang Zhu and Jian Yu and Jiansheng Li and Baoyan Liu and Wenjia Wang and Xuezhong Zhou},
      year={2026},
      eprint={2602.01779},
      archivePrefix={arXiv},
      primaryClass={cs.AI},
      url={https://arxiv.org/abs/2602.01779},
}

```
