Downloads · 30 days
0
weidejian/BERT_SHL
BERT_SHL is a machine learning model from weidejian. Use it for the machine learning task on the model card, and read the license before you ship it in a product.
text Raw Text ↓ 01preprocess.py ↓ docs.jsonl / chunks.jsonl ↓ 02buildindex.py ↓ FAISS Index + chunkmeta.jsonl ↓ 03retrieve.py ↓ 04answerextract.py ↓ 05generate.py ↓ Answer + Evidence ↓ 06evaluate.py text BERTSHL/ ├──…
Downloads · 30 days
0
Access
Public
Updated Apr 19, 2026
Repo size
412 MB
Likes
0
Public
Click a slice to open those files.
.bin412 MB · 98%
From the Hugging Face model README
# BERT_SHL
《伤寒论》领域的中文检索增强问答(RAG)项目,面向中医经典条文的结构化预处理、向量检索、规则抽取与可解释回答生成。
本仓库不仅包含模型文件,也包含一个可以直接运行的《伤寒论》RAG 基线系统:从原始文本清洗、条文切分、FAISS 建库,到检索、答案抽取、自然语言生成与简单评估,形成了一个完整闭环。
---
## 项目简介
`BERT_SHL` 聚焦《伤寒论》文本问答场景,核心目标是:
- 将《伤寒论》原始文本转为适合检索的结构化语料
- 基于中文领域编码器构建向量索引
- 在问答阶段融合:
- 检索增强(RAG)
- 症状/术语改写
- 方剂组成类问题的规则抽取
- 轻量生成模型兜底
- 输出尽量可解释、可追溯、有证据依据的答案
本项目更适合作为:
1. 中医经典问答的教学型 baseline
2. 小规模领域 RAG 项目的参考实现
3. “规则 + 检索 + 轻量生成”混合范式的实验起点
---
## 项目特点
### 1. 面向《伤寒论》的结构化预处理
项目首先把原始《伤寒论》文本做清洗、编号修正与条文切分,并进一步拆成更适合向量检索的 `chunk`,同时保留 `parent_doc_id` 以支持从 chunk 回溯到原始条文。
### 2. 领域检索增强
使用本地编码器模型对 chunk 建立向量表示,并基于 FAISS 建库,实现高效检索。
### 3. 面向中医问答的规则增强
对部分问题(尤其是方剂组成 / 配方 / 煎服法)采用专门的规则抽取 pipeline,而不是完全依赖通用生成模型,以增强可解释性和稳定性。
### 4. 口语症状到经典表述的查询改写
针对现代口语化表达(如“发烧”“怕冷”“腹泻”等),在检索前自动扩展到《伤寒论》中更常见的表述,从而提高召回效果。
### 5. 规则优先、生成兜底
回答生成阶段优先根据证据做规则抽取;只有在规则不足但证据相对充分时,才调用轻量生成模型组织语言,尽量减少无依据生成。
---
## 方法概览
整体流程如下:
```text
Raw Text
↓
01_preprocess.py
↓
docs.jsonl / chunks.jsonl
↓
02_build_index.py
↓
FAISS Index + chunk_meta.jsonl
↓
03_retrieve.py
↓
04_answer_extract.py
↓
05_generate.py
↓
Answer + Evidence
↓
06_evaluate.py
BERT_SHL/
├── shtl_rag/
│ ├── data/
│ │ ├── raw/
│ │ │ └── shanghanlun.txt
│ │ └── processed/
│ │ ├── docs.jsonl
│ │ └── chunks.jsonl
│ ├── index/
│ │ ├── faiss.index
│ │ └── chunk_meta.jsonl
│ ├── models/
│ │ ├── finetuned_lm_domain_corpus/
│ │ └── tcm_bert/
│ ├── src/
│ │ ├── 01_preprocess.py
│ │ ├── 02_build_index.py
│ │ ├── 03_retrieve.py
│ │ ├── 04_answer_extract.py
│ │ ├── 05_generate.py
│ │ └── 06_evaluate.py
│ ├── Dockerfile
│ └── Dockerfile.gpu
01_preprocess.py将《伤寒论》原始文本预处理为两层结构:
doc:条文级结构单元chunk:检索级最小单元主要功能:
02_build_index.py对 chunks.jsonl 中的文本做向量化,并构建 FAISS 索引。
输出:
index/faiss.indexindex/chunk_meta.jsonl03_retrieve.py实现查询检索逻辑:
chunk_meta.jsonl 映射回原始文本证据04_answer_extract.py问答主入口,负责把整个 RAG 闭环串起来。
主要逻辑包括:
05_generate.py回答生成模块,采用“规则优先、生成兜底”的设计:
06_evaluate.py提供一个简单的检索评估脚本,基于伪造问答样本统计:
包括:
建议 Python 3.10+。
安装依赖:
pip install -U pip
pip install torch transformers faiss-cpu numpy tqdm regex rank-bm25 gdown pdfplumber
如果你使用 GPU,请根据本机 CUDA 版本安装对应的 PyTorch。
cd shtl_rag
docker build -t bert_shl_rag -f Dockerfile .
docker run --rm -it bert_shl_rag bash
cd shtl_rag
docker build -t bert_shl_rag_gpu -f Dockerfile.gpu .
docker run --gpus all --rm -it bert_shl_rag_gpu bash
进入项目目录:
cd shtl_rag
python src/01_preprocess.py
生成:
data/processed/docs.jsonldata/processed/chunks.jsonlpython src/02_build_index.py
生成:
index/faiss.indexindex/chunk_meta.jsonlpython src/04_answer_extract.py --mode rag-gen --topk 10 --top_sent 3
程序会提示你输入问题,例如:
请输入问题:麻黄汤由哪些药物组成?
python src/06_evaluate.py
##当然你仓库下全了可以直接运行04因为我全传上来了能开盖即食
你可以尝试以下问题:
这个项目的设计并不是“纯生成式问答”,而是强调:
文本证据优先 所有输出尽量回到原文 chunk 与条文级证据。
规则增强可解释性 对方剂、配伍、煎服法等结构化问题,规则比开放式生成更稳定。
查询改写增强召回 用户常用的是现代口语,而原始经典文本常用古典表达,因此需要做桥接。
小而清晰的教学型 RAG baseline 保持流程清楚、模块独立,便于后续扩展 BM25、reranker、LLM、知识图谱等能力。
后续可以考虑加入:
如果你基于本项目做二次开发,建议优先关注以下部分:
data/raw/ + 01_preprocess.py02_build_index.py 与 03_retrieve.py 的 MODEL_NAME03_retrieve.py04_answer_extract.py 和 05_generate.py如果你觉得这个项目对你有帮助,欢迎引用或标注来源:
@misc{bert_shl,
title = {BERT_SHL: RAG Baseline for Shanghanlun QA},
author = {XiaoShengpeng},
year = {2025},
url = {https://huggingface.co/XiaoShengpeng/BERT_SHL}
}
感谢以下开源生态:
如有合作、交流或问题反馈,欢迎通过 Hugging Face 仓库联系 https://huggingface.co/XiaoShengpeng/BERT_SHL "XiaoShengpeng/BERT_SHL · Hugging Face"