Skip to content

Latest commit

 

History

History
79 lines (44 loc) · 3.8 KB

README.md

File metadata and controls

79 lines (44 loc) · 3.8 KB

基于机器阅读理解框架的中药说明书实体识别

作者:刘如日
北京航空航天大学
机器学习课设
阿里天池中医药说明书实体识别挑战赛

1. 任务背景

使用人工智能助力中医药传承创新加速发展,通过命名实体识别的方式抽取中药药品说明书中的关键信息。

数据源来自中药药品说明书,共包含1997份去重后的药品说明书,其中1000份用于训练数据,500份用作初赛测试数据,以strict-F1作为衡量标准。共定义了13类实体,包括:药品(DRUG)药物成分(DRUG_INGREDIENT)疾病(DISEASE)症状(SYMPTOM)证候(SYNDROME)疾病分组(DISEASE_GROUP)食物(FOOD)食物分组(FOOD_GROUP)人群(PERSON_GROUP)药品分组(DRUG_GROUP)药物剂型(DRUG_DOSAGE)药物性味(DRUG_TASTE)中药功效(DRUG_EFFICACY)

2. 解决方案

本团队使用基于 **机器阅读理解 (Machine Reading Comprehension, MRC) **的框架代替传统序列标注模型 (sequence labeling) 。和机器阅读理解问答(MRC-QA)任务相似,通过构建数据,以问答的形式找出原文中所有指定实体的起始位置,从而抽取出实体。

2.1 数据构建

首先回顾一下NER任务。给定一个文本序列$X$,它的长度为n,我们要抽取出其中的每个实体,其中实体都有各自的实体类型。假设该数据集的所有实体标签集合为Y,那幺对其中的每个实体标签y,都有一个关于它的问题q(y)。

构造问题时,我们使用了每个类别的定义作为每个类别的问题。例如药品(DRUG)的构造问题是:

“找出所有的中药:指在中医理论指导下,用于预防、治疗、诊断疾病并具有康复与保健作用的物质,主要来源是天然药及其加工品,包括植物药、动物药、矿物药及部分化学、生物制品类药物,如六味地黄丸、逍遥散等”。

有了问题q(y)之后,就可以构造训练实例三元组(Question, Answer, Context),也就是(q(y), Answer, X),这里的Answer就是对应的实体起始位置。

2.2 模型细节

我们使用哈工大提供的中文预训练的RoBERTa-large作为我们的编码器,输入到编码器中的形式是[CLS] Question [SEP] Context [SEP],也就是把问题q(y)和原文X分别作为两个部分作为输入编码器得到原文的表征。

为了预测实体的起始和结束位置,将原文每个序列做了两次二分类,分别判断该词是否作为起始位置和结束位置。

得到所有可能的实体起始位置 s 和实体结束位置 e 后,我们需要对开始位置和结束位置进行配对,这里我们把两个可能的起始 s_i 和结束位置 e_j 的表征相加之后送入一个二分类器判断该位置对 (s_i, e_j) 是否是一个实体。

2.3 训练和推理

训练的时候,这里定义了三个损失,分别是:开始位置损失、结束位置损失和实体配对损失。

L_s = Cross_Entropy(P_s, Y_s) L_e = Cross_Entropy(P_e, Y_e) L_{span} = Cross_Entropy(P_{span}, Y_{span})

三个损失相加得到最终训练时的损失函数 L = L_s + L_e + L_{span} 推理时,对于某个起始位置s_i,在候选的所有结束位置中,选取配对概率最大的结束位置与其组成一个实体。

3. 环境依赖

系统环境

Ubuntu 16.04 LTS Python: 3.8.3 Cuda: 10.0 Cudnn: 7.6.2

Python包依赖:

pytorch 1.6.0

transformers 3.0.2

tensorboardx 2.1

Numpy 1.18.5

4. 注意事项

  1. 模型使用了RoBERTa-large的预训练参数,下载地址为:https://github.com/ymcui/Chinese-BERT-wwm
    下载解压后将文件放在user_data/model_data目录下,并将bert_config.json文件重命名为config.json