DotaArtist / ccks2020-task3.1

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

记录尝试过的一些方法与疑惑

  • baseline: CRFSUITE
  • 词库匹配:利用整理的词库匹配与修正。
  • bilstm + word2vec/glove: 预训练词向量模型。
  • elmo pretrain + bilstm: 预训练语言模型。
  • bert fine-tuning:微调模型。
  • albet(todo):也是微调模型,感觉效果应该和bert类似。
  • xlnet:想利用超长文本模型,端到端解决抽取问题。
  • LexiconAugmentedNER:想利用词典信息训练,增强模型学习能力。

错误分析

  • 16:
{
  "relax": {
    "疾病和诊断": 0.9480073898126155,
    "影像检查": 0.9248197734294541,
    "实验室检验": 0.9132653061224489,
    "手术": 0.9142857142857144,
    "药物": 0.9532006455083378,
    "解剖部位": 0.9305925643953812,
    "综合": 0.9347299588278033
  },
  "strict": {
    "疾病和诊断": 0.7632620744259699,
    "影像检查": 0.8424304840370752,
    "实验室检验": 0.7772108843537415,
    "手术": 0.8023809523809524,
    "药物": 0.8832705755782679,
    "解剖部位": 0.8090343864991753,
    "综合": 0.8062484863162994
  }
}
  • 14:
{
  "relax": {
    "疾病和诊断": 0.9148525764673463,
    "影像检查": 0.9251559251559252,
    "实验室检验": 0.921602787456446,
    "手术": 0.9199491740787802,
    "药物": 0.9576988155668359,
    "解剖部位": 0.925164792555254,
    "综合": 0.9259166874532302
  },
  "strict": {
    "疾病和诊断": 0.7919537062551667,
    "影像检查": 0.8627858627858628,
    "实验室检验": 0.7822299651567944,
    "手术": 0.8132147395171538,
    "药物": 0.8855047941342358,
    "解剖部位": 0.8227995347033734,
    "综合": 0.8217760039910201
  }
}
  • 3:
{
  "relax": {
    "疾病和诊断": 0.8988826815642459,
    "影像检查": 0.9012875536480686,
    "实验室检验": 0.8703703703703703,
    "手术": 0.9093231162196679,
    "药物": 0.9358974358974359,
    "解剖部位": 0.9106885245901638,
    "综合": 0.9073555612115041
  },
  "strict": {
    "疾病和诊断": 0.7843575418994413,
    "影像检查": 0.8304721030042918,
    "实验室检验": 0.7629629629629631,
    "手术": 0.8045977011494253,
    "药物": 0.8846153846153847,
    "解剖部位": 0.8152131147540983,
    "综合": 0.8125477220666836
  }
}
  • 比对结果
  • bert:容易在药品后缀带上符号, 解剖部位抽取过细, 多标签问题;
  • LexiconAugmentedNER: 完整性较好
case比对:
两侧筛窦少许炎症:仅LANER 拿到,bert 拿到 两侧筛窦
齿状线: 仅bert 拿到
右室舒张功能减退: 仅LANNER 拿到
肠周:bert 拿到完整词,其他模型拿到肠
剖腹探查、左肝肿瘤切除、胆囊切除、左肝结节射频消融术(术中彩超引导上):BERT LANER 拿到完整词
肝区:仅bert拿到完整词
肺部肿物非恶性肿瘤:bert 仅拿到肺部
单侧括号问题:两个模型都存在边界问题
进展期胃癌,隆起型: 仅bert拿到,但词库为 进展期胃癌,隆起型,高-中分化管状腺癌
糖尿病植物神经病变:bert仅拿到 植物神经病变
原发性高血压3级 极高危: 模型仅拿到 原发性高血压3级;
胃角MT: LANER未拿到
腰椎前: 仅bert拿到;
髂嵴:仅LANER拿到,CRF拿到 髂嵴水平上腹部L5腰椎
第三组(4个)、第四组(4个)、“胃第七组”(1个)淋巴结
直肠肿瘤切除术@@手术@@全麻上直肠肿瘤切除术
头孢哌酮钠/舒巴坦钠
哌拉西林/他唑巴坦钠
两侧附件及子宫切除@@左侧卵巢癌手术,两侧附件及子宫切除
腹部切口@@腹部切口疝
异烟肼、利福平
经胸腔镜上肺部肿物活检术
胃癌根治术(
瘢痕子宫(前次剖宫产)
胃管鼻饲
下腹部平扫+
心律失常(房早、室早)
1. 实体冲突校验,投票策略
2. 实体修正校验,词库相似匹配替换策略
3. 实体补充策略;

程序逻辑:
提取不完备(缺失):
1.如果不在词库,取最相似判断是否在文本相邻位置中出现,如果出现过则进行替换;
如果没出现过,不进行替换;
提取过长:
2.如果不在词库,取最相似判断是否在文本相邻位置中出现,如果出现过则进行替换;
如果没出现过,不进行替换;
投票:
不进行替换的部分,采用多模型交叉投票,两个以上的直接替换;
不一致的走人工判断,是否需要补充词库


type_vocab_size = 2

model.get_layer(name='Embedding-Segment').set_weights([
    loader('bert/embeddings/token_type_embeddings'),
])

np.random.normal(size=[2,768],scale=0.03)


# 随机初始化
np.std(model.get_layer(name='Embedding-Segment').get_weights()[0])
0.029080255
np.mean(model.get_layer(name='Embedding-Segment').get_weights()[0])
-0.0006446646

# 加载预训练
np.std(loader('bert/embeddings/token_type_embeddings'))
0.03032923
np.mean(loader('bert/embeddings/token_type_embeddings'))
-7.424337e-05

# 正态性检验
kstest(model.get_layer(name='Embedding-Segment').get_weights()[0].reshape(-1), 'norm')
KstestResult(statistic=0.4801042600197004, pvalue=0.0)

kstest(loader('bert/embeddings/token_type_embeddings'), 'norm')
KstestResult(statistic=0.47964710414332534, pvalue=0.0)


About


Languages

Language:Python 95.0%Language:Perl 4.7%Language:Shell 0.3%Language:Batchfile 0.1%