# 可复现文本特征提取 · 示例代码

配套博文《可复现的文本自变量：用 BERT 为经济研究提取稳定特征》。

## 依赖

```bash
pip install torch transformers sqlalchemy pymysql
```

如需从魔搭社区下载模型，另装：

```bash
pip install modelscope
```

## 运行顺序

1. **准备模型**：用魔搭下载并本地化 `AI-ModelScope/bert-base-chinese`：

   ```python
   from modelscope import snapshot_download
   model_dir = snapshot_download('AI-ModelScope/bert-base-chinese', cache_dir='./models')
   ```

   把返回的本地快照路径填入各脚本的 `MODEL_DIR`（或直接让脚本用默认 `bert-base-chinese`，它会从缓存加载）。

2. **准备数据库**：启动 MySQL，建库 `bert_demo`（`CREATE DATABASE bert_demo CHARACTER SET utf8mb4;`），把各脚本里的 `DB_URL` 改成你的连接串。

3. **按顺序执行**：

   ```bash
   python extract_store.py      # 提取特征并入库
   python verify_repro.py       # 复现性验证（两次零差异 + 读回一致）
   python downstream_demo.py    # 下游：余弦相似度演示
   ```

## 说明

- 三个脚本共享同一组 6 篇示例专利摘要与随机种子 `seed=42`，产出与博文截图完全一致。
- 换用你自己的文本：改 `extract_store.py` 里的 `patents` 列表即可；长文本把 `max_length=128` 调大到 512。
- 复现要点：`MODEL_DIR` 固定、种子三件套（random/numpy/torch）、`model.eval()`、`torch.no_grad()`，缺一不可。
