WordSeg
A PyTorch implementation of a BiLSTM \ BERT \ Roberta (+ BiLSTM + CRF) model for Chinese Word Segmentation (中文分词) .
Install / Use
/learn @hemingkx/WordSegREADME
Chinese Word Segmentation
本项目为中文分词任务baseline的代码实现,模型包括
- BiLSTM-CRF + pretrained embedding (unigram/unigram+bigram)
- BERT-base + X (softmax/CRF/BiLSTM-CRF)
- Roberta + X (softmax/CRF/BiLSTM-CRF)
本项目是 CLUENER2020 的拓展项目。
项目说明参考知乎文章:紧追SOTA!教你用Pytorch上手BERT中文分词!
Dataset
数据集来源于SIGHAN 2005第二届中文分词任务中的Peking University数据集。
如有需要,这里是PKU数据集及评测脚本的百度网盘地址👇:
链接: https://pan.baidu.com/s/1yZrDSrvAXi-0mCxRp3L-sw 密码: 31qd
将数据集及评测脚本解压后放置在所用模型的./data/路径下即可。
Model
本项目实现了中文分词任务的baseline模型,对应路径分别为:
- BiLSTM-CRF ( + pretrained embedding)
- BERT-Softmax
- BERT-CRF
- BERT-BiLSTM-CRF
其中,根据使用的预训练模型的不同,BERT-base-X 模型可转换为 RoBERTa-X 模型。
Requirements
This repo was tested on Python 3.6+ and PyTorch 1.5.1. The main requirements are:
- tqdm
- scikit-learn
- pytorch >= 1.5.1
- 🤗transformers == 2.2.2
To get the environment settled, run:
pip install -r requirements.txt
Pretrained Model Required
需要提前下载BERT的预训练模型,包括
- pytorch_model.bin
- vocab.txt
放置在./pretrained_bert_models对应的预训练模型文件夹下,其中
bert-base-chinese模型:下载地址 。
注意,以上下载地址仅提供tensorflow版本,需要根据huggingface suggest将其转换为pytorch版本。
chinese_roberta_wwm_large模型:下载地址 。
如果觉得麻烦,pytorch版本的上述模型可以通过下方网盘链接直接获取😊:
链接: https://pan.baidu.com/s/1rhleLywF_EuoxB2nmA212w 密码: isc5
Pretrained Embedding Required
BiLSTM-CRF中使用的unigram-embedding和bigram-embedding均来自Chinese-Word-Vectors :
Various Co-occurrence Information$\rightarrow$Character Feature$\rightarrow$Word$\rightarrow$ Character (1-2)$\rightarrow$Context Word Vectors 百度网盘下载地址 。
关于选用该文件的具体说明参见 中文字符向量 #18 。
Results
各个模型在数据集上的结果(f1 score)如下表所示:
BERT均指Bert-chinese-base模型,RoBERTa均指RoBERTa-wwm-ext-large模型。
| 模型 | F1 Score | Recall | Precision | OOV Rate | OOV Recall | IV Recall | | :-------------------------: | :-------: | :-------: | :-------: | :------: | :--------: | --------- | | BiLSTM+CRF | 0.927 | 0.922 | 0.933 | 0.058 | 0.622 | 0.940 | | BiLSTM+CRF (unigram) | 0.922 | 0.927 | 0.916 | 0.058 | 0.538 | 0.939 | | BiLSTM+CRF (unigram+bigram) | 0.945 | 0.947 | 0.944 | 0.058 | 0.649 | 0.962 | | BERT+Softmax | 0.965 | 0.961 | 0.968 | 0.058 | 0.850 | 0.968 | | BERT+CRF | 0.965 | 0.962 | 0.969 | 0.058 | 0.858 | 0.968 | | BERT+BiLSTM+CRF | 0.964 | 0.960 | 0.969 | 0.058 | 0.861 | 0.966 | | RoBERTa+CRF | 0.962 | 0.960 | 0.965 | 0.058 | 0.827 | 0.968 |
我们在BiLSTM-CRF代码中实现了K折验证,结果如下:
| Model | K-fold | Average F1 Score | Average Test Loss | | :-------------------------: | :----: | :--------------: | :---------------: | | BiLSTM+CRF | 10 | 0.923 | 887.08 | | BiLSTM+CRF (unigram) | 10 | 0.918 | 640.43 | | BiLSTM+CRF (unigram+bigram) | 10 | 0.943 | 506.95 |
Parameter Setting
1.model parameters
在./experiments/seg/config.json中设置了Bert/Roberta模型的基本参数,而在./pretrained_bert_models下的两个预训练文件夹中,config.json除了设置Bert/Roberta的基本参数外,还设置了'X'模型(如LSTM)参数,可根据需要进行更改。
2.other parameters
环境路径以及其他超参数在./config.py中进行设置。
Usage
打开指定模型对应的目录,命令行输入:
python run.py
模型运行结束后,最优模型和训练log保存在./experiments/路径下。在测试集中的bad case保存在./case/bad_case.txt中。
Evaluation
本项目可以使用SIGHAN 2005官方脚本计算F1 Score等评测指标。
BiLSTM-CRF需在./data/路径下运行
perl scripts/score training_vocab.txt test.txt output.txt > score.txt
BERT + X需在./data/路径下运行
perl scripts/score training_vocab.txt test.txt res.txt > score.txt
MultiGPU
由于Roberta模型占用显存较多,因此该项目中的BERT部分支持Multi GPU训练。BERT-base可直接设置为单卡训练。
单卡训练指令:
CUDA_VISIBLE_DEVICES=0 python -m torch.distributed.launch --nproc_per_node=1 run.py
多卡训练指令:
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m torch.distributed.launch --nproc_per_node=4 run.py
后台训练:
CUDA_VISIBLE_DEVICES=0,1,2,3 nohup python -m torch.distributed.launch --nproc_per_node=4 run.py >/dev/null 2>&1
Attention
1.log保存
目前,当前模型的train.log已保存在./experiments/路径下,如要重新运行模型,请先将train.log移出当前路径,以免覆盖。
2.关于注释
本项目是 CLUENER2020 的拓展项目,因此有些代码注释没有改过来,对项目运行无任何影响。
Related Skills
node-connect
337.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
