English | 简体中文
基于文本到文本生成模型的跨域命名实体识别方法CP-NER (详情请查看IJCAI2023论文One Model for All Domains: Collaborative Domain-Prefix Tuning for Cross-Domain NER).
python == 3.8
- torch == 1.11
- transformers == 4.26.0
- datasets
- deepke
git clone https://github.com/zjunlp/DeepKE.git
cd DeepKE/example/ner/cross
- 首先创建python虚拟环境,再进入虚拟环境
- 安装依赖:
pip install -r requirements.txt
.
-
先使用以下代码下载处理好的数据:
wget 120.27.214.45/Data/ner/cross/data.tar.gz tar -xzvf data.tar.gz
-
解压后数据会存放到
data
文件夹中,包括了 CoNLL-2003, MIT-movie, MIT-restaurant, Ai, Literature, Music, Politics和science等数据. -
每个数据集都遵循以下的数据格式:
train.json
:训练数据val.json
:验证数据test.json
:测试数据entity.schema
:实体类别event.schema
record.schema
relation.schema
-
训练作为领域控制器的前缀 (Prefix):
-
我们首先利用领域的数据来预热训练对应的前缀。
-
模型加载和训练相关的参数、路径等可以在
hydra/run/train.yaml
文件中进行修改。以
CoNLL03
的训练过程为例,先进行训练相关参数的修改:train_file: 'data/conll03/train.json' validation_file: 'data/conll03/val.json' test_file: 'data/conll03/test.json' record_schema: '../../data/conll03/record.schema' output_dir: 'output/conll03-t5-base' # 模型和训练数据的输出路径 logging_dir: 'output/conll03-t5-base_log' # 训练日志的路径 model_name_or_path: '../../hf_models/t5-base' # 预训练模型的路径
之后运行下列命令进行训练
python run.py
-
训练过程中产生的最佳模型权重、训练细节和测试结果会存储到
logs/xxx/output/conll03-t5-base
. -
可以在此链接 Google Drive 下载此步骤中产生的最佳模型权重。
-
-
单领域迁移(Cross-NER)
-
首先更改
hydra/run/single_transfer.yaml
中的参数model_name_or_path
,source_prefix_path
和targets_prefix_path
(通常model_path
和targets_prefix_path
相同的,source_prefix_path
是源域中训练好的模型路径) -
以
CoNLL03
迁移到AI
为例,先进行相关参数的修改:train_file: 'data/ai/train.json' # AI领域的训练数据路径 validation_file: 'data/ai/val.json' test_file: 'data/ai/test.json' record_schema: '../../data/ai/record.schema' output_dir: 'output/conll_to_ai-t5-base' # 模型和训练数据的输出路径 logging_dir: 'output/conll_to_ai-t5-base_log' # 训练日志的路径 model_name_or_path: '../xxx/output/ai-t5-base' # 加载的模型路径 source_prefix_path: '../xxx/output//conll-t5-base' # 源域训好的模型路径 target_prefix_path: '../xxx/output/ai-t5-base' # 目标域训好的模型路径
-
之后运行以下命令:
python run.py hydra/run=single_transfer.yaml
-
-
多源域迁移
-
保存每个域的前缀和标签词信息。我们使用双查询域选择器(前缀和标签词)来聚合多个源域。 以
CoNLL03
的保存过程为例,先进行相关参数的修改:output_dir: '../xxx/output/conll-t5-base' # 前缀和标签词输出路径 model_name_or_path: '../xxx/output/conll-t5-base' # 训好的模型的路径 model_ckpt_path: '../xxx/output/conll-t5-base' # 训好的模型的路径 save_prefix: true # 是否保存前缀 save_label_word: true # 是否保存标签词
之后运行以下命令,前缀和目标词会存储于
output_dir
文件夹下:python run.py hydra/run=save_prefix_label.yaml
-
开始迁移。修改
hydra/run/multi_transfer.yaml
中的参数model_name_or_path
,model_ckpt_path
和multi_source_path
(注意multi_source_path
包含多个源域的模型加载路径,他们用逗号进行分隔)。以CoNLL03
,Politics
,Music
和Literature
迁移到AI
为例,先进行相关参数的修改:model_name_or_path: '../xxx/output/ai-t5-base' # 目标域训好的模型路径 model_ckpt_path: '../xxx/output/ai-t5-base' # 目标域训好的模型路径 multi_source_path: '../xxx/output/conll-t5-base,../xxx/output/politics-t5-base,../xxx/output/music-t5-base,../xxx/output/literature-t5-base' # 源域训好的模型路径 (用逗号进行分隔)
最后运行以下命令进行迁移实验:
python run.py hydra/run=multi_transfer.yaml
-
我们的代码基于 UIE, 非常感谢!
如果您使用了上述代码,请您引用下列论文:
@article{DBLP:journals/corr/abs-2301-10410,
author = {Xiang Chen and
Lei Li and
Shuofei Qiao and
Ningyu Zhang and
Chuanqi Tan and
Yong Jiang and
Fei Huang and
Huajun Chen},
title = {One Model for All Domains: Collaborative Domain-Prefix Tuning for
Cross-Domain {NER}},
journal = {CoRR},
volume = {abs/2301.10410},
year = {2023},
url = {https://doi.org/10.48550/arXiv.2301.10410},
doi = {10.48550/arXiv.2301.10410},
eprinttype = {arXiv},
eprint = {2301.10410},
timestamp = {Mon, 13 Mar 2023 11:20:37 +0100},
biburl = {https://dblp.org/rec/journals/corr/abs-2301-10410.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}