使用DeepKE訓練命名實體識別模型DEMO(官方DEMO)
說明:
- 首次發表日期:2024-10-10
- DeepKE資源:
- 文件: https://www.zjukg.org/DeepKE/
- 網站: http://deepke.zjukg.cn/
- cnschema: http://cnschema.openkg.cn/
如果需要,設定Github映象
git config --system url."https://githubfast.com/".insteadOf https://github.com/
如果要取消,則輸入:
git config --system --unset url.https://githubfast.com/.insteadof
建立conda環境
conda create -n deepke python=3.8
conda activate deepke
# 安裝torch
pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113
# 使用阿里雲映象安裝torch 1.11.0
# pip install https://mirrors.aliyun.com/pytorch-wheels/cu113/torch-1.11.0+cu113-cp38-cp38-linux_x86_64.whl https://mirrors.aliyun.com/pytorch-wheels/cu113/torchvision-0.12.0+cu113-cp38-cp38-linux_x86_64.whl https://mirrors.aliyun.com/pytorch-wheels/cu113/torchaudio-0.11.0+cu113-cp38-cp38-linux_x86_64.whl -i https://mirrors.aliyun.com/pypi/simple/
安裝DeepKE:
git clone https://github.com/zjunlp/DeepKE.git
cd DeepKE
pip install pip==24.0
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
python setup.py install
python setup.py develop
pip install prettytable==2.4.0
pip install ipython==8.12.0
下載資料集
# apt-get install wget
cd example/ner/standard
wget 120.27.214.45/Data/ner/standard/data.tar.gz
tar -xzvf data.tar.gz
可以看到data
資料夾下有:
train.txt
: Training setvalid.txt
: Validation settest.txt
: Test set
配置wandb
在 https://wandb.ai/ 上註冊賬號,並新建一個project,取一個名字,比如:deepke-ner-official-demo
開啟 https://wandb.ai/authorize 獲取 API key
執行 wandb init
,輸入剛獲取的 API key 和建立的project
執行訓練和預測
刪除之前訓練時儲存的checkpoints和logs資料夾(如果有):
rm -r checkpoints/
rm -r logs/
lstmcrf
開啟 example/ner/standard/run_lstmcrf.py
, 確保wandb和yaml庫有正常匯入:
import wandb
import yaml
修改wandb的project名稱:
if config['use_wandb']:
wandb.init(project="deepke-ner-official-demo")
修改 example/ner/standard/conf/config.yaml
中的 use_wandb
為 True
。
如果需要使用多個GPU訓練,修改 example/ner/standard/conf/train.yaml
中的 use_multi_gpu
為 True
開始訓練:
python run_lstmcrf.py
>> total: 109870 loss: 27.181508426008552
precision recall f1-score support
B-LOC 0.8920 0.8426 0.8666 1951
B-ORG 0.8170 0.7439 0.7787 984
B-PER 0.8783 0.8167 0.8464 884
I-LOC 0.8650 0.8264 0.8453 2581
I-ORG 0.8483 0.8365 0.8424 3945
I-PER 0.8860 0.8436 0.8643 1714
O 0.9861 0.9912 0.9886 97811
accuracy 0.9732 109870
macro avg 0.8818 0.8430 0.8618 109870
weighted avg 0.9727 0.9732 0.9729 109870
用於的預測文字儲存在example/ner/standard/conf/predict.yaml
中,修改為如下:
text: "“熱水器等以舊換新,節省了2000多元。”10月3日,在湖北省襄陽市的一家購物廣場,市民金煜輕觸手機,下單、付款、登記。湖北著力推動大規模裝置更新和消費品以舊換新。“力爭到今年底,全省汽車報廢更新、置換更新分別達到4.5萬輛、12.5萬輛,家電以舊換新170萬套。”湖北省商務廳廳長龍小紅介紹。"
執行預測:
python predict.py
NER結果:
[('湖', 'B-LOC'), ('北', 'I-LOC'), ('省', 'I-LOC'), ('襄', 'B-LOC'), ('陽', 'I-LOC'), ('市', 'I-LOC'), ('場', 'I-LOC'), ('煜', 'I-PER'), ('湖', 'B-ORG'), ('北', 'I-ORG'), ('省', 'I-ORG'), ('商', 'I-ORG'), ('務', 'I-ORG'), ('廳', 'I-ORG'), ('廳', 'I-ORG'), ('龍', 'B-PER'), ('小', 'I-PER'), ('紅', 'I-PER')]
bert
修改 example/ner/standard/conf/config.yaml
中的hydra/model
為bert
。
bert的超參設定在 example/ner/standard/conf/hydra/model/bert.yaml
,如有需要可以修改。
修改 example/ner/standard/conf/config.yaml
中的 use_wandb
為 True
。
修改 example/ner/standard/run_bert.py
中的wandb的project名稱:
if cfg.use_wandb:
wandb.init(project="deepke-ner-official-demo")
根據需要,修改example/ner/standard/conf/train.yaml
中的train_batch_size
,對於bert來說推薦不小於64
開始訓練:
export HF_ENDPOINT=https://hf-mirror.com
python run_bert.py
w2ner
w2ner是一個新的SOTA模型。
基於W2NER (AAAI’22)的應對多種場景的實體識別方法 (詳情請查閱論文Unified Named Entity Recognition as Word-Word Relation Classification).
命名實體識別 (NER) 涉及三種主要型別,包括平面、重疊(又名巢狀)和不連續的 NER,它們大多是單獨研究的。最近,人們對統一 NER 越來越感興趣,
W2NER
使用一個模型同時處理上述三項工作。
由於使用單卡GPU,修改example/ner/standard/w2ner/conf/train.yaml
中的 device
為 0
。
修改example/ner/standard/w2ner/conf/train.yaml
中的data_dir
和do_train
:
data_dir: "../data"
do_train: True
以便使用之前下載的資料集和開始訓練。
執行訓練:
python run.py