实现NER经典模型,仅用于个人学习
我个人的开发环境是:
- Linux系统
- GPU型号:GeForce RTX 3090
- python: 3.8
- pytorch:
torch==1.10.1+cu111
- 其它:
requirements.txt
文件中有相关依赖包
需要注意的是,PyTorch版本过低的话在GeForce RTX 3090上会出现不兼容问题。如果你的GPU型号不是3090,你可以根据实际情况选择合适的PyTorch版本。
暂时只针对中文的NER数据
NER最常用的范式就是序列标注,输入是一个token
序列,输出是一个标签序列。虽然conll
格式是最常用的,但是我这里是用JSON格式存储每个样本的。
以下是一个样例:
{"text": "生生不息CSOL生化狂潮让你填弹狂扫", "labels": ["O", "O", "O", "O", "B-game", "I-game", "I-game", "I-game", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O"]}
由于我用的数据集都是中文数据集,将text
的内容以字符为单位分隔即可得到token
序列,labels
的内容即为标签序列。
- 下载
git clone git@github.com:suhejian/DeepNER.git
- 进入项目所在目录:
cd DeepNER
- 安装虚拟环境
conda create -n deepner python=3.8
- 激活虚拟环境
conda activate deepner
- 安装PyTorch:
pip install torch==1.10.1+cu111 -f https://download.pytorch.org/whl/torch_stable.html
可根据自己的GPU型号,CUDA版本等自行选择合适的PyTorch版本 - 安装其它依赖包:
pip install -r requirements.txt
- 运行:
CUDA_VISIBLE_DEVICES=0 python run.py
,模型默认是BERT, 使用提供的CLUENER数据集。
可以将自己的数据集格式转换一下,改变相应的命令行参数
- 数据统计
- 对数据集整体的分析
- 数据格式转换
- CLUENER数据格式转换成序列标注格式
- 模型
- BERT
- BERT+CRF
【参考】: