kaggle临床患者病历评分baseline
来源:投稿 作者:William
编辑:学姐
William
研究生毕业于美国TOP20大学
现就职国内某互联网大厂
赛题分析+baseline

1、赛题链接
https://www.kaggle.com/c/nbme-score-clinical-patient-notes
2、赛题描述
本次竞赛的目标是通过建立一个模型来将不同病情的临床表现在病例中找出,具体而言就是将病情描述+病人病例 一起输入模型, 在病例中提取出对应的span位置。
商业价值:帮助医生可以快速的定位病人的病情,从而对症下药
※ 比赛时间线
2022 2月 1日 年 - 开始日期。
2022 4 月 26 日 年 - 报名截止日期。 您必须在此日期之前接受比赛规则才能参加比赛。
2022 4 月 26 日 年 - 团队合并截止日期。 这是参与者可以加入或合并团队的最后一天。
2022 5 月 3 日 年 - 最终提交截止日期。
※ 丰厚的奖金
一等奖:15,000美元
二等奖:10,000美元
三等奖:8,000美元
四等奖:7,000美元
五等奖:5,000美元
六等奖:5,000美元
3、数据描述
本次比赛提供了5份数据分别是 train, test, features, patient_notes, submission, 其中test, submission为提交答案时用。
重点是如下3个文件
train文件标记了每个病例中,不同症状的相关描述
features中给出了所有病症的名称和id
patient_notes中给出了每份病例的详细描述
3.1 训练数据分析:
id- 一个unique 标记符来表示 patient note number - feature number对.pn_num- patient note number 可以当成病例号.feature_num- feature number 可以看作不同病症的一个id.case_num- 病例所属的case id 之后会用来关联起病人patient note的文本描述和对应症状的文本描述.annotation- patient note中体现相关症状的描述, 一个病例中可能对同一个疾病症状存在多处描述.location- annotation所在的病例中的char 级别的位置.
其中——
在标记数据中,有的病情会在病例中有多处体现,具体的分布如下:

可以看到大部分病情之在病例中有一处对应,大约有4399条在原文中并没有找到对应的部分。
平均annotation 的char 级别长度为16.53,具体的分布如下:

下面是这个病例的内容:

病例的char级别的长度分布如下

其实feature就是疾病对应的专业描述,像下面这个例子
病例的char级别的长度分布如下,平均char级别长度为23

4、评价指标
micro-averaged:
https://scikit-learn.org/stable/modules/model_evaluation.html#from-binary-to-multiclass-and-multilabel
F1 :
https://scikit-learn.org/stable/modules/model_evaluation.html#precision-recall-f-measure-metrics
5、构建训练数据
下面演示如何将3个数据merge到一起, 具体可以详见baseline代码,里面有更为详细的介绍。
领baseline代码
关注【学姐带你玩AI】公众号
回复“top”添加小享领取

merge以后数据张这样子, feature text是疾病名称,pn history就是病例annotation就是对应的体现这种疾病的具体描述。

根据label 生成 tensor,结合代码,我们看一下label 数据是怎么生成的
举个例子(不一定对应真实数据,仅作为说明使用):
6、Baseline流程
1、加载数据,切分CV,定义dataloader
2、定义模型
3、定义训练函数
4、定义eval函数
5、调参完成训练,上传权重提交成绩
7、赛题难点思考
1、label中大量为0, 1很少label不平横对模型的影响
2、专业领域很多简称和没有在vocab中收录的词会不会对模型造成影响
8、无痛涨分Trick
多drop out 对比学习
对抗训练
r_drop
模型融合
领baseline代码
关注【学姐带你玩AI】公众号
回复“top”添加小享领取


