Predicting Drug Protein Interaction using Quasi-Visual Question Answering System笔记
摘要:
提出了一个端到端的深度学习框架来预测相互作用,通过将蛋白质表示成来自单体结构(图)的二维距离矩阵,且将药物表示成分子线性结果字符串(string),遵循可视化的问题回答模式。
为了高效的训练系统,我们提出了一个动态的注意力卷积网络来从可变长距离图中学习固定长度的表示,然后用一个自注意力序列模型去自动抽取线性符号的语义特征。
介绍
drugprotein interactions (DPIs)
Visual Question Answering (VQA)
最近药分子的结构特性已经被证实可用深度学习技术通过其的线性表示去准确预测,而一般的蛋白质由于原子数量太多,所以很难进行预测。从1D的序列到3D结构的预测也是一种很大的挑战,称之为蛋白质折叠问题。
这篇文章利用2D距离图去表示蛋白质,可以将DPI任务转化为将传统的视觉问题回答(Visual Question Answering VQA)问题。这里图像(images)是蛋白质距离图(map),问题是药物的分子线性记号,答案是它们是否会相互作用,该框架支持蛋白质单体结构的训练,而不需要具有结合配体的共晶结构,这大大扩展了可用的训练数据集。
主要贡献:
1.这是第一次利用蛋白质2D距离图来预测DPI
2.第一次用VAQ框架来解决DPI预测问题
3.不同水平的数据集证明了我们方法的高效性
模型
问题的标准化
药分子用规则化表示
此外,我们使用以下规则替换了多字符符号:“Br”:R,“Cl”:L,“Si”:A,“Se”:Z
若一个药分子有n个符号,可以表示嵌入成
M
=
(
t
1
,
.
.
.
,
t
n
)
M=(t_1,...,t_n)
M=(t1,...,tn),每个
t
i
t_i
ti是第 i 个符号的d维符号嵌入。于是
M
∈
R
n
∗
d
M\in\bm{R}^{n*d}
M∈Rn∗d是联合了所有符号的2维矩阵。
类似地,一个蛋白质也可以由一个线性序列组成,这个线性系列包含了一列氨基酸残基。表示为
P
=
(
r
1
,
.
.
.
,
r
l
)
P=(r_1,...,r_l)
P=(r1,...,rl),
r
i
r_i
ri是有着20种氨基酸类型one-hot表示向量的位置i的元素,
是
系
列
长
度
是系列长度
是系列长度。2D匹配计算出距离为
这里
d
(
r
i
,
r
j
)
d(r_i,r_j)
d(ri,rj)是残基的i与j的
C
α
C\alpha
Cα原子的距离。
d
0
d_0
d0为常数设置为
3.8
A
˚
3.8 \mathring{A}
3.8A˚,蛋白质距离矩阵为
P
=
[
s
^
(
r
i
,
r
j
)
]
l
∗
l
P=[\hat{s}_(r_i,r_j)]_{l*l}
P=[s^(ri,rj)]l∗l
[个 Structure 对象的整体布局遵循称为SMCRA(Structure/Model/Chain/Residue/Atom,结构/模型/链/残基/原子)的体系架构:
结构由模型组成
模型由多条链组成
链由残基组成
多个原子构成残基
体系架构图]
DPI的训练目标是将(M,P)作为一对输入,然后得到标签
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1},y=1表示M与P有相互作用。
框架图:
动态注意力CNN
Figure 2: Dynamic attentive CNN. It includes two key components:
(a) stacked residual blocks and (b) attention block
模型是由堆积的残差块以及一系列的自注意力块组成,输入是
P
∈
R
l
∗
l
P\in{\bm{R}^l*l}
P∈Rl∗l,中间
N
f
N_f
Nf表示是通道数,这里用的激活函数是指数线性单元 图
动态处理
由于氨基酸长度的不确定性,我们将在残差块之间使用0去填充输入矩阵的两边,以确保结果残差块具有与输入相同的大小。则每个残差块的输出结构保持
l
∗
l
∗
N
f
l*l*N_f
l∗l∗Nf维度。最后使用平均池化压缩高频信息。
attention 系列
【这里是对蛋白质的处理】
通过平均池化操作我们可以得到蛋白质图
P
q
∈
l
∗
N
f
P_q\in\bm{l*N_f}
Pq∈l∗Nf,可视作蛋白质系列表示,
l
l
l表示氨基酸(位点)的数量,
N
f
N_f
Nf表示位点的空间特征。识别小部分的结合位点对于准确预测药物的作用至关重要。我们采用多头注意力机制去充分利用特征进行分类,figure2 的输入是
P
q
P_q
Pq,输出是
a
p
a^p
ap.
a
p
=
s
o
f
t
m
a
x
(
w
p
2
t
a
n
h
(
W
p
1
P
q
T
)
a^p = softmax(w_{p2}tanh(W_{p1}P_q^T)
ap=softmax(wp2tanh(Wp1PqT)
∑
i
=
1
I
a
i
p
=
1
,
1
≤
i
≤
l
\sum_{i=1}^{I}a_i^p=1,1\leq{i}\leq{l}
i=1∑Iaip=1,1≤i≤l
W
p
1
∈
R
d
a
×
N
f
W_{p1}\in\mathbb{R}^{d_a\times{N_f}}
Wp1∈Rda×Nf,
w
p
2
w_{p2}
wp2是
d
p
d_p
dp维的参数向量,
d
p
d_p
dp是可调整的超参数。这种载体表达通常集中在一系列连续的蛋白质序列位点上。由于一个蛋白质结合容器由多个空间连续领域点组成,所以价格
w
p
2
w_{p2}
wp2转化成为一个矩阵表示为
W
p
2
W_{p2}
Wp2。
a
p
a^p
ap被转化为一个多头注意力权重
A
p
∈
R
r
p
×
l
A_p\in{\mathbb{R}^{r_p\times{l}}}
Ap∈Rrp×l,即
A
p
=
s
o
f
t
m
a
x
(
W
p
2
t
a
n
h
(
W
p
1
P
q
T
)
A^p = softmax(W_{p2}tanh(W_{p1}P_q^T)
Ap=softmax(Wp2tanh(Wp1PqT)
∑
i
=
1
I
a
i
p
=
1
,
1
≤
i
≤
l
\sum_{i=1}^{I}a_i^p=1,1\leq{i}\leq{l}
i=1∑Iaip=1,1≤i≤l
这个可当成是一个两层感知器,参数是两个W。
最后计算出包含节点关系分布的潜在关系的注意力特征图
P
a
=
A
p
P
q
P_a=A^pP_q
Pa=ApPq
P
a
∈
R
r
p
×
N
f
P_a\in\mathbb{R}^{r_p\times{N_f}}
Pa∈Rrp×Nf
自注意力双向LSTM
【这里是对药分子的处理】
每个药分子的SMILES 字符串都被编码陈2维嵌入矩阵
M
∈
R
n
×
d
M\in{\mathbb{R}^{n\times{d}}}
M∈Rn×d,为了建立起每个标志(token vector)向量的依赖性,我们使用了双向LSTM即
h
i
→
=
L
S
T
M
→
(
t
i
,
h
i
−
1
→
)
\overrightarrow{h_i}=\overrightarrow{LSTM}(t_i,\overrightarrow{h_{i-1}})
hi=LSTM(ti,hi−1)
h
i
←
=
L
S
T
M
←
(
t
i
,
h
i
+
1
←
)
\overleftarrow{h_i}=\overleftarrow{LSTM}(t_i,\overleftarrow{h_{i+1}})
hi=LSTM(ti,hi+1)
再用
h
i
h_i
hi去替左右h ,即
h
i
=
(
h
i
→
,
h
i
←
)
h_i=(\overrightarrow{h_i},\overleftarrow{h_i})
hi=(hi,hi)
H
=
(
h
0
,
.
.
.
,
h
n
)
H=(h_0,...,h_n)
H=(h0,...,hn)
如果BI-LSTM隐单元设置成u,则H大小为n-by-2u。
类似地,使用多头自注意力机制我们可以将整个LSTM隐含层H作为输入,然后得到
A
m
=
s
o
f
t
m
a
x
(
M
L
P
(
H
T
)
)
A_m=softmax(MLP(H_T))
Am=softmax(MLP(HT))
这里的MLP(多层感知机)的隐含层有
d
m
d_m
dm个,参数为{
W
m
1
,
W
m
2
{W_{m1},W{m2}}
Wm1,Wm2},将符号阵与LSTM隐含阵H相乘可以得到
M
a
=
A
m
H
M_a=A^mH
Ma=AmH
则
M
a
M_a
Ma是一个包含了相互作用的符号贡献之间潜在关系的自关注药物分子特征图谱,即
M
a
M_a
Ma将不同药分子符号(tokens)之间的相互作用关系都融合起来的了,通过LSTM和自注意力机制。
M
a
M_a
Ma的大小为
r
m
×
2
u
r_m\times 2u
rm×2u,
r
m
r_m
rm是表示注意力向量的可调整超参数。
分类器
对于
P
a
P_a
Pa和
M
a
M_a
Ma,我们将所有的attention 向量, 然后标准化结果权重向量使其和为一,这个过程可以使得我们获得更多信息的一维向量
P
a
^
\hat{P_a}
Pa^和
M
a
^
\hat{M_a}
Ma^,最后
o
=
W
0
[
P
a
^
,
M
a
^
]
+
b
o
o=W_0[\hat{P_a},\hat{M_a}]+b_o
o=W0[Pa^,Ma^]+bo,这里
W
0
∈
R
2
∗
(
N
f
+
2
u
)
W_0\in\mathbb{R}^{2*(N_f+2u)}
W0∈R2∗(Nf+2u),
b
o
∈
R
2
b_o\in{\mathbb{R}^2}
bo∈R2。最后DPI概率为
p
t
=
σ
(
o
)
=
1
1
+
e
−
o
p_t=\sigma(o)=\frac{1}{1+e^{-o}}
pt=σ(o)=1+e−o1
t
∈
{
0
,
1
}
t\in {\{0,1\}}
t∈{0,1},表示输出有无关系的概率,当t=1时表示成
y
^
\hat y
y^表示有相互作用。
训练
给定数据集
D
=
{
(
m
i
,
p
i
,
y
i
)
}
D=\{(m_i,p_i,y _i)\}
D={(mi,pi,yi)},训练目标最小化交叉熵:
L
(
θ
)
=
−
∑
i
=
1
N
y
i
l
o
g
y
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
^
)
+
λ
2
∣
∣
θ
∣
∣
2
2
\mathcal{L}(\theta)=-\sum_{i=1}^{N}y_ilog\hat{y}+(1-y_i)log(1-\hat{y})+\frac{\lambda }{2}||\theta||^2_2
L(θ)=−i=1∑Nyilogy^+(1−yi)log(1−y^)+2λ∣∣θ∣∣22
加了L2 正则化且使用负传播算法训练参数。N表示数据集中的药物-蛋白质对。
θ
\theta
θ是所有的权重矩阵与偏置向量。
实验
在三个DPI公开数据集: DUD-E dataset, the Human dataset, BindingDB dataset 上评估DrugVQA特性。DUD-E是由囊括8个蛋白质家族的102个个靶蛋白组成,平均每个target(靶向)有224个活性物和超过10000个的诱惑物。计算诱惑物是由物理性质相似但拓扑结构不相似的的活性物组成,最后的数据集包含了22,465个正样本和1,407,145个负样本。我们采用3折交叉验证策略进行训练, 不同折依照不同的靶点进行划分,相同靶点的配体(ligands)属于相同的折,为了必买鞍同性质蛋白质的影响,属于相同蛋白质家族的的靶向物也划分到相同的折,为了加速训练,我们采用了平衡数据集(即:所有正例和负例都从靶向物中等价挑选)。
残差块:30个,
N
f
2
=
16
,
N
f
3
=
32
N_{f2}=16,N_{f3}=32
Nf2=16,Nf3=32
BILSTM 隐含层 u = 64
droupout = 0.2
attention MLPs 隐含层
d
p
=
100
d_p=100
dp=100
嵌入矩阵 蛋白质(
P
a
:
r
p
×
N
f
P_a:r_p\times N_f
Pa:rp×Nf)
r
p
=
10
r_p=10
rp=10即10行;药物(
M
a
:
r
m
×
2
u
)
M_a :r_m\times 2u)
Ma:rm×2u))
r
m
=
18
r_m=18
rm=18
L2正则化系数:0.001
代码分析:
对于一个smiles的药分子字符串,先用torch.nn.embedding(input_size,outputsize of every inputsize element), 即将输入向量的每一维数扩展成一长为output_size维的向量个向量。PyTorch快速入门教程七(RNN做自然语言处理) - pytorch中文网
troch.tranpose(x,dim0,dim1)将diim0与dim1对换
tensor.permute(dim0.dim1,dim2)表示维数重新按(dim0,dim1.dim2)排。
torch.sum(seq_embeddings,dim) #将第dim+1个维度变为1,xsize=[20,10],sum(x,1),则会变成[20,1],相当于把每一行加起来
全文 n n n 表示的是一个药分子所含有的结构(即对应smiles 中的字符数)故其是一个不固定的数,但经过LSTM与attention其可以变为 r m × 2 u r_m \times 2u rm×2u,即多头的头数*2倍LSTM的隐含层数。
precision
=
t
p
t
p
+
f
p
\text{precision} = \frac{tp}{tp + fp}
precision=tp+fptp
recall
=
t
p
t
p
+
f
n
\text{recall} = \frac{tp}{tp + fn}
recall=tp+fntp
a
c
c
u
r
a
c
y
(
y
,
y
^
)
=
1
n
s
a
m
p
l
e
s
∑
i
=
0
n
s
a
m
p
l
e
s
−
1
l
(
y
^
i
=
y
i
)
accuracy(y,\hat{y}) = \frac{1}{n_{samples}} \sum_{i=0}^{n_{samples}-1}l(\hat{y}_i=y_i)
accuracy(y,y^)=nsamples1i=0∑nsamples−1l(y^i=yi)