视频加载失败

课程

702 字
约 3 分钟

Lab05 基于BiLSTM+CRF的命名实体识别

自然语言处理labs/lab/lab05·更新于 2026-09-15

Lab05 基于BiLSTM+CRF的命名实体识别

本实验实现基于 PyTorch 的 BiLSTM+CRF 命名实体识别模型,使用 CoNLL2003 英文数据集进行训练和评估。

目录结构

lab05/
├── vocab.py            # Vocabulary 和 TokenVocabulary 词表类
├── vectorizer.py       # ConllVectorizer 向量化器
├── dataset.py          # ConllDataset 数据集 + batch 生成
├── pre_data.py         # CoNLL 格式数据读取
├── model.py            # BiLSTM_CRF 模型
├── train.py            # 训练脚本(含 early stopping)
├── toy_version.py      # 教学用最小 BiLSTM-CRF 示例
├── conlleval.pl        # CoNLL 评估脚本
├── data/
│   └── conll2003/      # CoNLL2003 数据集
│       ├── train.txt
│       ├── valid.txt
│       └── test.txt
├── model_storage/      # 模型检查点保存目录
├── README.md
└── requirements.txt

环境依赖

pip install -r lab05/requirements.txt

运行方式

训练模型

cd lab05
python train.py

训练完成后会生成 result.txt,包含测试集的预测结果。

评估

perl conlleval.pl < result.txt

可选参数

train.py 中修改 args 可调整:

  • batch_size: 批大小(默认 32)
  • num_epochs: 训练轮数(默认 50)
  • embedding_dim: 词嵌入维度(默认 100)
  • hidden_dim: LSTM 隐藏层维度(默认 50)
  • use_glove: 是否使用 GloVe 预训练词向量(默认 False)
  • glove_filepath: GloVe 文件路径(需自行下载 glove.6B.100d.txt)

Toy Version

运行简化版示例理解 BiLSTM-CRF 过程:

python toy_version.py

模型架构

  • Embedding 层: 将 token 映射为稠密向量
  • BiLSTM 层: 双向 LSTM 编码上下文信息
  • 线性层: 将 LSTM 输出映射到标签空间(emission scores)
  • CRF 层: 转移矩阵 + 前向算法 + Viterbi 解码

数据格式

CoNLL2003 格式,每行一个 token 和其 BIO 标签,空行分隔句子:

EU B-ORG
rejects O
German B-MISC
call O
Profile Image of the Author
Sonder
好想要技术
这是公告标题
这只是一个公告
分类
标签
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.7
文章许可
CC BY-NC-SA 4.0
文章目录