为CCKS 2020开发的实体链指基线系统,在CCKS 2019面向中文短文本的实体链指任务的基础上进行了拓展与改进。有关数据集和任务的详细信息,请访问我们比赛的官方网站。
DuEL模型是一个多任务模型,包含两个任务:候选实体排名和提及类型的预测。
候选实体排序任务使用pairwise模型。在训练阶段,将query和候选实体描述分别输入Ernie网络以query表示和候选实体表示。 之后,合并query表示和候选实体表示并经过MLP网络进行打分。这里使用的损失函数是rank_loss。
Mention 类型预测任务使用分类模型。在训练阶段,将query输入到Ernie网络中以获取表示。 之后,query表示向量通过MLP获得mention类型。这里的损失函数是分类损失。
最后,我们将两个损失合并后,进行多任务训练。
在预测阶段,我们使用预测的mention类型来验证候选实体。
注,在训练和预测阶段,我们将NIL视为实体ID,详细信息见代码。
Python3.6 + pytorch>=1.6 (请在脚本中确认您的Python路径)。
需求包在./requirements.txt中列出
代码在单个P40 GPU上进行了测试,CUDA版本=10.0
从百度AiStudio官网下载DuEL数据,解压后放在../../datasets/DuEL/data/basic_data/目录,其中包含文件:
dev.json
kb.json
test.json
train.json
eval.py
下载chinese-bert_chinese_wwm_pytorch模型,并将其解压到../../models/
data目录下文件改名(否则transformers无法正确加载模型):
bert_config.json 改名为 config.json
chinese_wwm_pytorch.bin 改名为 pytorch_model.bin
data目录下文件移动至上一级目录
生成的数据在../../datasets/DuEL/generated/目录中
运行: cd ./data_process/
python duel_process.py
config/duel_config_bert.json中修改模型训练配置do_train,do_eval设为true
duel_utils.read_examples_from_file中修改seg_idx和seg_num调整使用的样本量,全量数据太多,训练时间很长,且内存可能不够
运行python dule.py --config config/duel_config_bert.json
config/duel_config_bert.json中do_train,do_eval设为false,do_predict改为true
运行python dule.py --config config/duel_config_bert.json结果文件test_pred.json保存在./out_put下
数据集包含24种实体类型,详情见下表
Type | 中文名 |
---|---|
Event | 事件活动 |
Person | 人物 |
Work | 作品 |
Location | 区域场所 |
Time&Calendar | 时间历法 |
Brand | 品牌 |
Natural&Geography | 自然地理 |
Game | 游戏 |
Biological | 生物 |
Medicine | 药物 |
Food | 食物 |
Software | 软件 |
Vehicle | 车辆 |
Website | 网站平台 |
Disease&Symptom | 疾病症状 |
Organization | 组织机构 |
Awards | 奖项 |
Education | 教育 |
Culture | 文化 |
Constellation | 星座 |
Law&Regulation | 法律法规 |
VirtualThings | 虚拟事物 |
Diagnosis&Treatment | 诊断治疗方法 |
Other | 其他 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。