论文题目:Clinical-Coder: Assigning Interpretable ICD-10 Codes to Chinese Clinical Notes
论文来源:ACL 2020
论文链接:https://www.aclweb.org/anthology/2020.acl-demos.33.pdf
网站链接:http://159.226.21.226/disease-prediction
Abstract
在本文中,我们介绍了Clinical-Coder,一个给中文临床病历分配ICD code 的在线系统。 ICD编码一直是临床医学研究的热点,但预测的可解释性阻碍了其实际应用。 我们开发了Dilated Convolutional Attention network with N-gram Matching Mechanism (DCANM)来捕获非连续词和连续n-gram词的语义特征,着重于解释预测每个ICD code的原因。 实验表明,我们的方法是有效的,并且我们的系统能够在临床决策中提供信息支持。
Introduction
国际疾病分类(ICD)是临床医学领域的诊断分类标准,它为每种疾病分配唯一的编码(code)。 ICD编码的普及极大地促进了全世界疾病的信息共享和临床研究,并对健康状况研究、保险索赔、发病率和死亡率统计产生了积极影响。 因此,ICD编码任务(将适当的ICD code分配给临床病历)引起了广泛关注。
ICD编码始终依赖于专业人员的人工工作。 手动编码非常容易出错,而且很耗时,因为ICD编码的版本在不断地更新,导致编码数量的大幅增加。 ICD-10编码的数量最多为72,184,是先前版本(即ICD-9)的五倍以上。新版本的编码可以对患者的状况、伤害和疾病进行更详细的分类。但是,毫无疑问,增加的粒度会增加手动编码的难度。
从传统的机器学习方法到神经网络方法,现有的研究提出了许多自动编码预测的方法来代替重复的人工工作。尽管这些方法取得了巨大的成功,但这项任务仍然面临着严峻的挑战,那就是预测编码的可解释性。可解释的模型和结果对于临床医学决策至关重要。因此,应该采用实际的方法来预测正确的编码,并同时给出预测每个编码的原因。
在本文中,我们尝试从语义的角度提供预测的可解释性。有一种现象是确切的疾病名称或类似的疾病名称表达经常出现在病历的出院摘要中。 例如,如图1所示,文本中内容与疾病名称(如“脂肪肝”)完全匹配,这是推断的直接证据。 我们将这种连续的一致词称为显式语义特征。 此外,不精确的匹配(例如“类风湿性多部位关节炎”)对于预测编码也非常有用,应予以考虑。 我们将非连续词称为隐含语义特征。 这两种语义特征都是解释分配编码原因的线索,这也是专家在手工编码过程中的基础。 为了捕获这两种语义现象,我们利用空洞卷积和n-gram匹配机制分别提取隐式语义特征和显式语义特征。 此外,我们开发了一个系统来协助专业编码人员分配正确的代码。 总而言之,主要贡献如下:
- 我们收集了大量的中文临床的病历文本,以弥补中文ICD编码语料库的不足。
- 我们提出了一种同时捕获隐式和显式语义特征的新颖方法,该方法能够为每个预测的代码提供可解释性。
- 我们开发了一个开放式的在线系统,称为Clinical-Coder,该系统可将代码自动分配给医学病历,并标明可以支持每个预测编码的信息。 它使用生动的可视化为每个ICD代码提供了可解释的预测。 可以通过http://159.226.21.226/disease-prediction 访问该站点。https://youtu.be/U4TImTwEysE.提供了说明视频。
图2给出了系统自动编码的一个示例。图2(a)的左侧是用户输入的医疗文本,图2(a)的右侧是预测编码和相应的疾病名称。 图2(b1)和图2(b2)是用于预测的支持信息的可视化。详细说明请参见第3.2节。
Clinical Coder System
我们针对ICD编码任务提出了Dilated Convolutional Attention network with N-gram Matching Mechanism (DCANM)模型。图3描述了该模型的体系结构。模型的输入是病历文本中的所有句子,它们被拼接在一起。输入语句与ICD编码的名称互动以捕获显式语义特征,并生成n-gram矩阵。同时,将输入的句子转换为向量,并通过空洞卷积进行处理,以捕获隐含的语义特征。注意力机制用于提高性能。然后将所有特征拼接起来,以形成最终特征。最后,我们使用sigmoid分类器来预测每个编码的概率。
Word Embedding. 词嵌入是词的低维向量表示。我们使用预训练的嵌入式矩阵 W w r d ∈ R d w × ∣ V ∣ W^{wrd} \in \mathbb{R}^{d^w \times |V|} Wwrd∈Rdw×∣V∣ ,其中 d w d^w dw 是词嵌入的维数, ∣ V ∣ |V| ∣V∣是 是词汇量的大小。 给定一个句子, S = [ w 1 , w 2 , . . . , w N ] S = [w_1, w_2, ..., w_N] S=[w1,w2,...,wN],其中 N N N是句子中的单词数,我们可以通过以下方式获得单词嵌入:
w e = W w r d v i w_e=W^{wrd}v_i we=Wwrdvi
其中, v i v_i vi 是 W w r d W^{wrd} Wwrd对应的one-hot表示。
Explicit Semantic Features. 显式语义特征。 N-gram匹配机制用于捕获显式语义特征。我们使用疾病名称(D)对文本(T)进行采样。首先,在疾病名称 d l ∈ D d_l \in D dl∈D上移动滑动窗口以获取n-gram子字符串。然后,计算文本中每个n-gram子字符串的频率。具有相同长度n的gram频率总和(denoted as g r a m n gram_n gramn)反映了文本中疾病名称的出现情况。尽管如此,有些gram有其独特的特殊性。例如,给定一个2-gram字符串,虽然它们的长度相同,但是“糖尿”比“慢性”在语义上更具有代表性。为了表示不同n-gram的重要程度,每个n-gram被赋予“频率-文档频率倒数(tf-idf)”权重。最后,对于每段文本,我们计算一个显式的语义n-gram矩阵( M M M),其大小为 L × W L \times W L×W,其中 L L L是标签数, W W W是滑动窗口数。例如,我们有四个滑动窗口,它们的长度分别为2、3、4、5,因此 W W W为4。对于第 l l l行,特征图中第 w w w列的项目,我们有:
m l , w = ∑ i = 1 L g r a m l n c o u n t g r a m l n i ∗ t f _ i d f g r a m l n i m_{l,w}=\sum_{i=1}^{L_{gram_{ln}}} count_{gram_{lni}} * tf\_idf_{gram_{lni}} ml,w=i=1∑Lgramlncountgramlni∗tf_idfgramlni
t f _ i d f g r a m i = n L n l ∗ L f r e q g r a m l n i tf\_idf_{gram_i}= \frac{n}{L_{n_l}} * \frac{L}{freq_{gram_{lni}}} tf_idfgrami=Lnln∗freqgramlniL
其中 w w w是长度为 n n n的滑动窗口的索引, g r a m l n gram_ {ln} gramln是第 l l l个疾病名称的所有长度为 n n n的子字符串, g r a m l n i gram_ {lni} gramlni是第 i i i个 g r a m l n gram_ {ln} gramln, L g r a m l n L_ {gram_ {ln}} Lgramln是 g r a m l n gram_ {ln} gramln的数量, c o u n t g r a m l n i count_ {gram_ {lni}} countgramlni是 g r a m l n i gram_ {lni} gramlni在文本中的频率, L n l L_ {n_l} Lnl是第 l l l个疾病名称的长度, f r e q g r a m l n i freq_ {gram_ {lni}} freqgramlni是所有疾病名称中 g r a m l n i gram_ {lni} gramlni的频率。
通过上述计算,我们可以区分不同n-gram子串的重要性。它也适用于英语临床注释,例如,在MIMIC-III中,“ history of”的tf-idf值为1.79,而“房颤”的tf-idf值为9.32,因为在所有ICD疾病名称中,“病史”出现249次,而“心房颤动”仅出现两次。 值越高,单词越具有代表性和区分度。因此,“房颤”比“病史”更有可能指向一个具体的疾病。
Implicit Semantic Features. 隐式语义特征。空洞卷积用于捕获隐式语义特征。对于较长的临床记录,空洞卷积会在不使用池化操作的情况下扩大感受野,因此每个kernel都能涉及更广泛的信息范围。更重要的是,它在feature map中具有“洞”,这意味着它可以进行调整以匹配非连续语义信息。 例如,文本中的“Rheumatoid multisite arthritis”是指ICD中的“类风湿性多关节炎”,其带“洞”的feature map可以容忍多余部分,如图4所示。这是空洞卷积处理文本的的一个明显优势。
Formally, the actual filter width of dilated convolutional neural network (CNN) is computed as,
形式上,空洞卷积神经网络的实际filter的宽度计算为:
k
d
=
r
(
k
−
1
)
+
1
,
k_d=r(k-1)+1,
kd=r(k−1)+1,
其中,
r
∈
[
1
,
2
,
3
,
.
.
.
]
r \in [1,2,3,...]
r∈[1,2,3,...] 是膨胀率,
k
k
k 是原始filter的宽度。
对于每一步
n
n
n, 经典卷积和空洞卷积的计算公式如下:当膨胀率等于1时,
k
d
=
k
k_d=k
kd=k,空洞卷积退化为经典卷积。
h
n
=
t
a
n
h
(
W
c
∗
x
n
:
n
+
k
−
1
+
b
c
)
h_n=tanh(W_c* x_{n:n+k-1} +b_c)
hn=tanh(Wc∗xn:n+k−1+bc)
h
n
′
=
t
a
n
h
(
W
c
∗
x
n
:
n
+
k
d
−
1
+
b
c
)
,
h_n^\prime=tanh(W_c* x_{n:n+k_d-1} +b_c),
hn′=tanh(Wc∗xn:n+kd−1+bc),
其中 W c ∈ R k d × d e × d c W_c \in R^{k_d \times d_e \times d_c} Wc∈Rkd×de×dc 是卷积的filter map, k d k_d kd 是实际的filter 大小, d e d_e de 是词向量的size, d c d_c dc是filter输出的大小, b c ∈ R d c b_c \in R^{d_c} bc∈Rdc 是偏置。
Attention. 注意力机制。 在卷积之后,句子被表示成为
H
∈
R
d
c
×
N
H \in R^{d_c \times N}
H∈Rdc×N. 我们用了per-label attention 来找对每个标签贡献最大的字符。
对于每个标签
l
l
l,分布式的attention权重可以计算为:
α
l
=
S
o
f
t
M
a
x
(
H
T
u
l
)
,
\alpha_l = SoftMax(H^{T} u_l),
αl=SoftMax(HTul),
其中,
u
l
∈
R
d
c
u_l \in R^{d_c}
ul∈Rdc是label
l
l
l的向量表示。最终句子可以表示为:
m
l
=
H
α
l
m_l=H\alpha_l
ml=Hαl
我们对经典CNN和空洞卷积都使用了attention,为了方便区分,我们把他们分别记作 m l m_l ml 和 m l ′ m_l^\prime ml′。
Classification. 分类。
m
l
m_l
ml 、
m
l
′
m_l^\prime
ml′ 和ngram矩阵水平拼接。目地是把所有特征组合在一起。然后我们利用sigmoid分类器计算预测的标签。
y
i
^
=
σ
(
W
(
m
l
+
m
l
′
+
m
l
′
′
)
+
b
)
,
\hat{y_i} = \sigma(W(m_l+m_l^\prime + m_l^{\prime\prime}) + b),
yi^=σ(W(ml+ml′+ml′′)+b),
其中
i
∈
[
1
,
2
,
.
.
.
,
L
]
i \in \left[1, 2, ..., L\right]
i∈[1,2,...,L],
W
∈
R
c
d
W \in R^d_c
W∈Rcd,
b
∈
R
L
b \in R^L
b∈RL,
m
l
′
′
m_l^{\prime\prime}
ml′′是n-gram矩阵
M
M
M的线性投影。
Loss function是多标签二元 binary cross-entropy.
L
=
∑
i
=
1
L
[
−
y
i
l
o
g
(
y
i
^
)
−
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
]
,
\mathcal{L} = \sum_{i=1}^{L} [ -y_ilog (\hat{y_i}) - (1-y_i) log(1-\hat{y_i}) ],
L=i=1∑L[−yilog(yi^)−(1−yi)log(1−yi^)],
其中
y
i
∈
{
0
,
1
}
y_i \in \{0, 1\}
yi∈{0,1}是第
i
i
i个标签 ground truth,
y
i
^
\hat{y_i}
yi^ 是第
i
i
i个标签的sigmoid score。
Experiment
Dataset
我们分别在中文和英文数据集上评估我们的模型。我们收集的中文数据集包含50,678个中文临床文本和6,200个唯一的ICD-10代码。对于每个临床记录,它包含五个部分入院情况,入院诊断,出院情况,出院诊断和人工标注的ICD-10代码。 入院情况涉及主诉,既往病史等。出院情况涉及一般检查的结果。入院诊断和出院诊断涉及疾病名称,可能与ICD-10中的标准名称不完全一致。人工标注的代码是基于ICD-10的。在阅读了整个临床记录后,这些代码由专业编码人员标记。
数据集(CN-Full)由上面提到的完整标签组成,并通过9:1的比例分为训练集和测试集。 此外,由于大量code不常见,且少量code频繁出现的现象,我们从原始数据集中重建了频率最高的50个代码的子数据集(CN-50)。 具体过程是过滤原始序列集和测试集,并维护具有前50个最高频code中的至少一个的数据。
为了更好地与之前的工作进行比较,我们还在MIMIC-III数据集上评估了我们的方法,该数据集是评估自动ICD编码方法性能的最权威的英语数据集。 表1中列出了这些数据集的详细描述。
CN-Full | CN-50 | MIMIC-III-50 | |
---|---|---|---|
# Samples | 50,678 | 36,758 | 9,795 |
#Labels | 6200 | 50 | 50 |
Vocabulary size | 3,957 | 3,957 | 51,917 |
#Average tokens per sample | 621 | 655 | 1,530 |
#Average labels per sample | 4.3 | 2.6 | 5.7 |
实验结果
中文数据集:
英文数据集:
此外,我们注意到,macro-F1始终低于micro-F1,尤其是在full数据集中。这意味着较小的类比较大的类具有较差的性能,这与事实是一致的。无论是MIMIC-III还是中文数据集,样本分布都极度不平衡。少数code非常高频,而大多数代码频率很低。 n-gram匹配机制有助于明显改善中文数据集上的macro-F1,达到基线的两倍。可以推断出,在疾病名称中使用n-grams对于较小的类别很有用。
Conclusion
在本文中,我们提出了一种Dilated Convolutional Attention network with N-gram Matching Mechanism(DCANM)用于ICD自动编码。 空洞卷积被首次应用于ICD编码任务,旨在捕获非连续词的语义信息,而n-gram匹配机制旨在捕获连续语义。它们都为预测提供了很好的解释性。此外,我们开发了一种开放的系统,可帮助用户分配ICD代码。将来,我们将尝试利用外部资源来解决few-shot 和 zero-shot 的问题。