论文网址:Towards semi-structured automatic ICD coding via tree-based contrastive learning | Proceedings of the 37th International Conference on Neural Information Processing Systems

论文代码:https://github.com/LuChang-CS/semi-structured-icd-coding

目录

1. 心得

2. 论文逐段精读

2.1. Abstract

2.2. Introduction

2.3. Related work

2.4. Preliminaries

2.5. Method

2.5.1. Automatic section-based segmentation

2.5.2. Supervised tree-based contrastive learning on sections

2.5.3. Maskedsection training

2.6. Experiments

2.6.1. Dataset, tasks, and evaluation metrics

2.6.2. Backbone models

2.6.3. Implementation details

2.6.4. Experimental results

2.6.5. Ablation studies

2.6.7. Case studies

2.7. Conclusion

1. 心得

(1)还行就是这个局限真的一眼大局限

2. 论文逐段精读

2.1. Abstract

        ①对于诊断文本ICD疾病分类的挑战:样本有限、医生书写习惯不同、病理多样性

2.2. Introduction

        ①将电子健康记录(electronic health records,EHR)和International Classification of Diseases (ICD)结合的现实意义是便于医疗记录管理、医疗账单记录、医保报销,未来结合AI的意义是可以用于诊断或诊疗建议

        ②算法诊断现存挑战:长尾问题、结构化/非结构化记录差异、医生手写习惯差异

        ③结构化文本和非结构化文本示例:

reimbursement  n.报销;补偿;赔偿;偿付

2.3. Related work

        ①记录一些RNN/CNN、Attention/GNN、半监督方法

2.4. Preliminaries

(1)任务描述

        ①ICD编码:\mathcal{L} = \{l_i\}_{i=1}^{L},其中L = |\mathcal{L}|是编码个数,l_i = {\{w_j\}}_{j=1}^m是对于第i个ICD编码的含有m个token的描述

        ②临床记录:S = {\{ w_j \}}_{j=1}^n含有n个token

        ③任务:使用模型\mathcal{M}去预测临床文本的ICD分类\hat{\mathbf{y}} \in {\{0,1\}}^L

(2)常见的ICD编码框架

        ①编码诊断文本:\mathbf{h}_{note}=\text{Enc}_{\text{text}}(S)\in \mathbb{R}^{n \times d}

        ②编码单个ICD描述:\mathbf{h}_{code}^i= \text{Pooling}(\text{Enc}_{\text{text}}(l_i)) \in \mathbb{R}^d;整体ICD嵌入:\mathbf{h}_{code}\in \mathbb{R}^{L \times d}

        ③特征融合(感觉不能这么叫,这里实际上有种信息交互的感觉):

\mathbf{q}_{\text{code}}=\text{Attn}(\mathbf{h}_{\text{code}},\mathbf{h}_{\text{note}},\mathbf{h}_{\text{note}}) \in \mathbb{R}^{L\times d}

        ④分类:

\mathbf{o}=\mathbf{q}_{\text{code}}\odot \mathbf{h}_{code} \in \mathbb{R}^{L}

\hat{\mathbf{y}}=\text{sigmoid}({\mathbf{o}})

2.5. Method

2.5.1. Automatic section-based segmentation

        ①定义一个具有n-gram document frequency-inverse average phrase frequency(DF-IAPF)分数的包含N个单词的短语t=(w_1,w_2,...,w_N)

        ②\mathrm{DF}(t)定义为包含词t的文档的相对频率,而\mathrm{IAPF}(t)则是词t在所有包含词t的文档中的逆平均短语频率:

\mathrm{DF}(t)=\frac{n_t}{n_d},\quad\mathrm{IAPF}(t)=\frac{1}{\frac{1}{n_t}\sum_{i=1}^{n_d}f_{t,i}}=\frac{n_t}{\sum_{i=1}^{n_d}f_{t,i}},

其中n_d是文档综述,n_t代表含有t的文档数,f_{t,i}是词t在文档i中的出现次数

        ③DF-IAPF计算:

\mathrm{DF-IAPF}(t)=\mathrm{DF}(t)\times\mathrm{IAPF}(t)=\frac{n_t}{n_d}\times\frac{n_t}{\sum_{i=1}^{n_d}f_{t,i}}=\frac{n_t^2}{n_d\sum_{i=1}^{n_d}f_{t,i}}.

        ④选出来的前20个短语:

        ⑤选出的标题短语组成一个标题子集:\left \{ t_1,t_2,...,t_T \right \}包含T个标题

        ⑥按照标题出现的地方对文本进行切割,得到多个片段\left \{ s_k \right \}^{T}_{k=1}

S\xrightarrow{\text{DF-IAPF segmentation}}\{t_k:s_k\}_{k=1}^T

这个创新点真的合理吗??话说遇到同义词怎么办?十个医生十个标题都不一样

2.5.2. Supervised tree-based contrastive learning on sections

        ①从一个临床文本里面随机选个s_k^i然后再随机选个不同标题的s_{k'}^i作为正对;同不同临床文本选同一个标题的s_k^is_{k'}^i也作为正对。因此(s_k^i,s_{k^{\prime}}^i,s_k^j,s_{k^{\prime}}^j)中有四个正对

        ②ICD树形结构中单个样本超级树的构建:

\mathcal{L}_{i}{:}\mathcal{T}_{i}=\bigcup_{l\in\mathcal{L}_{i}}\rho(l)\cup\mathcal{L}_{i}\subset\mathcal{H}

这里\rho(l)表示一个标签节点l的所有祖先

        ③在超级树中两个样本的相似度定义为:

\alpha_{ij}=1-\frac{2\times\mathrm{dist}(\mathcal{T}_{i},\mathcal{T}_{j})}{|\mathcal{T}_{i}\cup\mathcal{T}_{j}|-1}\in[-1,1]

其中\text{dist}\left ( \cdot \right )是树可编辑距离

        ④超级树样例:

可编辑树距离为2,相似度为0.2

        ⑤对文本表示使用最大池化:

\mathbf{s}_{\{k,k'\}}^{\{i,j\}} = \text{MaxPooling}\left(\text{Enc}_{\text{note}}\left(\mathbf{s}_{\{k,k'\}}^{\{i,j\}}\right)\right) \in \mathbb{R}^d

        ⑥对比损失:

\mathcal{J} = \mathcal{J}_m\left(1, \beta\left(\mathbf{s}_k^i, \mathbf{s}_{k'}^i\right)\right) + \mathcal{J}_m\left(\alpha_{ij}, \beta\left(\mathbf{s}_k^i, \mathbf{s}_k^j\right)\right) + \mathcal{J}_m\left(1, \beta\left(\mathbf{s}_k^j, \mathbf{s}_{k'}^j\right)\right) + \mathcal{J}_m\left(\alpha_{ij}, \beta\left(\mathbf{s}_{k'}^i, \mathbf{s}_{k'}^j\right)\right)

其中\mathcal{J}_m代表MAE损失,\beta \left ( \cdot ,\cdot \right )表示向量间余弦相似度,概念表示为:

这个损失的意思是让上图Positive的节点相似度接近1,而Neighbor的相似度接近\alpha _{ij}就行

2.5.3. Maskedsection training

        ①随机打乱S = \{ t_k : s_k \}_{k=1}^T的顺序,然后按照0 \leq \gamma < 1的阈值来随机掩码,最后合并剩下的有效部分

        ②段掩码操作:

S' = \bigoplus_{k \in \text{perm}(T)} s'_k, \quad \text{where } s'_k = \begin{cases} s_k & \text{if } |s_k| > 0 \text{ and } \theta \sim U[0,1] \geq \gamma, \\ \text{empty string} & \text{otherwise}. \end{cases}

其中\oplus是串联操作,U[0,1]是均匀分布,\text{perm}指随机排列(好狡猾的写法哈哈哈哈哈哈哈哈哈)

        ③推理阶段不适用打乱和掩码

2.6. Experiments

2.6.1. Dataset, tasks, and evaluation metrics

        ①数据集:MIMIC-50,MIMIC-rare-50,MIMIC-full

        ②数据划分:

2.6.2. Backbone models

        ①模型主干:MultiResCNN、HyperCore、JointLAAT、EffectiveCAN、PLM-ICD、Hierarchical、MSMN(KEPT没有被包含是因为计算量不支持)

2.6.3. Implementation details

        ①最大n-gram:5

        ②标题个数:K=50

        ③对比学习预训练的batch size:16

        ④学习率:5e-4

        ⑤优化器:AdamW

        ⑥Epoch:20

        ⑦掩码概率:对于MIMIC-full来说\gamma =0.2,对于MIMIC-50/MIMIC-rare-50来说\gamma =0.3

        ⑧设备:Intel i9-11900K CPU, 64GB memory, NVIDIA RTX 3090 GPU

2.6.4. Experimental results

        ①MIMIC-50上的对比实验:

        ②MIMIC-rare-50上的对比实验:

2.6.5. Ablation studies

        ①MIMIC-50上的对比学习预训练(C)和掩码(M)消融:

2.6.7. Case studies

        ①示例:

snippet  n.一小段(谈话、音乐等);一则(新闻);一小条(消息)

2.7. Conclusion

        ~局限是没有考虑错别字和同义词(...(说实话我觉得这个局限挺大的...

Logo

更多推荐