使用DeepKE訓練命名實體識別模型DEMO(官方DEMO)

shizidushu發表於2024-10-10

使用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 set
  • valid.txt : Validation set
  • test.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_wandbTrue

如果需要使用多個GPU訓練,修改 example/ner/standard/conf/train.yaml 中的 use_multi_gpuTrue

開始訓練:

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/modelbert

bert的超參設定在 example/ner/standard/conf/hydra/model/bert.yaml,如有需要可以修改。

修改 example/ner/standard/conf/config.yaml 中的 use_wandbTrue

修改 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中的 device0

修改example/ner/standard/w2ner/conf/train.yaml中的data_dirdo_train

data_dir: "../data"
do_train: True

以便使用之前下載的資料集和開始訓練。

執行訓練:

python run.py

相關文章