[NeurIPS 2023]Towards Semi-Structured Automatic ICD Coding via Tree-based Contrastive Learning

论文网址: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

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

由于没有提供具体的参考引用内容,以下是一些基于一般性知识对《Towards Cost - Effective Learning: A Synergy of Semi - Supervised and Active Learning》可能涉及内容的推测。 该研究可能聚焦于如何将半监督学习和主动学习相结合以实现更具成本效益的学习方式。半监督学习利用大量未标记数据和少量标记数据进行学习,而主动学习则通过主动选择最有价值的数据进行标记来提高学习效率。二者结合可能在减少标记数据成本的同时,提升模型的性能和泛化能力。 在实际应用中,这种结合可能会用于图像识别、自然语言处理等领域,以在有限的资源下取得更好的学习效果。例如,在图像识别任务中,主动选择一些具有代表性的图像进行标记,然后结合大量未标记图像进行半监督学习,从而在不标记大量图像的情况下获得高精度的识别模型。 ```python # 这里简单模拟一个可能的主动学习和半监督学习结合的伪代码框架 # 假设我们有一些未标记数据和少量标记数据 unlabeled_data = [...] labeled_data = [...] # 主动学习选择最有价值的数据进行标记 def active_selection(unlabeled_data, model): # 选择最有价值的数据的逻辑 selected_data = ... return selected_data # 半监督学习更新模型 def semi_supervised_learning(model, labeled_data, unlabeled_data): # 半监督学习的训练逻辑 updated_model = ... return updated_model # 循环进行主动学习和半监督学习 model = ... for i in range(num_iterations): selected_data = active_selection(unlabeled_data, model) # 标记选择的数据 labeled_data.extend(selected_data) model = semi_supervised_learning(model, labeled_data, unlabeled_data) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值