论文阅读及知识补充《基于局部子结构特征及其补语的药物-药物相互作用预测》

深度学习论文补充


前言

今天主要学习的论文是《Drug-drug interaction prediction based on local substructure features and their complements》基于局部子结构特征及其补语的药物-药物相互作用预测
仅作个人的知识补充。

一、基础名词补充

1、什么是冷启动,热启动环境下的药物关系预测,有什么区别:
冷启动(Cold-start):在冷启动场景中,模型需要预测新药物与已知药物之间的相互作用。这种场景具有挑战性,因为新药物的信息可能有限,导致模型难以学习有效的特征表示。
热启动(Warm-start):在热启动场景中,模型需要预测已知药物之间的相互作用。这种场景相对容易处理,因为模型可以利用已知药物的丰富信息进行训练和预测。
什么是外部知识
通过外部生物医学知识提高模型的预测性能。然而,这些方法在早期开发阶段不能扩展到药物,其中药物可用的唯一信息是化学结构[32]。在NLP任务中引入外部知识是一个很好的任务增强方式,带着先验知识进行推理,也正符合人类思考的习惯,从上面总结可以看出,目前利用外部知识库的主要方式都是引入知识图谱中的实体信息,更具体一点,引入实体各种embedding 信息作为模型的额外输入

论文主要解决了什么问题

  1. 现有方法在冷启动场景中效果不佳。以前关于 DDI 预测的研究主要集中在热启动场景 [12-14],其中训练集和测试集共享通用药物。当这些方法推广到冷启动场景时,这些方法的性能会显着下降,在这种情况下,需要推断已知药物和新药物之间的相互作用,甚至推断新药物之间的相互作用 [15]
  2. 大多数现有方法可以在热启动中以高概率预测 DDI,但是无法解释为什么这种相互作用发生[16-18],更不用说药物的哪些部分会导致相互作用。

论文主要提出的解决办法是什么

(1) 提出了一种名为 LFC 的多通道特征融合方法,该方法集成了局部子结构特征及其补充以进行 DDI 预测。我们使用两个通道来提取药物的不同特征,一个用于基于分子结构相似性的全局特征,另一个用于基于其化学子结构的局部特征,
具体:
我们的方法利用知识启发的表示和交互建模来实现更有效和可解释的预测。受 DDI 是子结构的知识的启发,我们引入了 Local-Channel,它明确地将子结构视为独立实体,其成对交互决定了子结构所属的药物是否可能导致潜在的 DDI。本句中提到的知识启发和交互建模是一种用于药物-药物相互作用预测的方法,该方法通过结合局部子结构特征和全局结构相似性特征来实现更有效且可解释的预测。

(2)然后,将两种药物的局部特征与其全局特征之间的相互作用整合,以进行最终的药物-药物相互作用预测。我们的方法在热启动和冷启动场景中都表现良好。此外,如果存在一个,它可以通过呈现导致交互的关键子结构来提供对其预测的解释。

对于前人提出的考虑整个分子结构所存在的问题

(1)如果只考虑整个分子结构,预测可能会偏向于不相关的数据。例如,MR-GNN [33] 利用图神经网络从分子图的多尺度子结构中提取特征来预测 DDI。SSI-DDI[34]、MHCADDI[35]和CMPNNCS[36]使用共同注意机制为药物对的多尺度子结构分配权重,使每种药物可以与亚结构相关的药物进行通信。
(2)CMPNN-CS 将键作为门来调节 GNN 中消息传递的流动,以可学习的方式有效地划分子结构。然而,门是在消息传递之前计算的,限制了分子结构信息的利用到它的全部潜力。这些工作假设分子子结构的大小是固定的,因此使用具有预定层的gnn来捕获具有固定半径[21]的子结构
尽管这些方法很有效,但它们只关注分子子结构特征,而忽略了对DDI预测有贡献的药物的全局特征[20]。DeepFusion [37] 通过融合多通道特征(即药物和蛋白质的局部特征和全局特征)在预测药物-靶标相互作用方面取得了巨大成功。从 DeepFusion 中汲取灵感,我们试图通过整合药物的多通道特征来解决预测药物-药物相互作用的挑战。

二、模型整体模块

尽管这些方法很有效,但它们只关注分子子结构特征,而忽略了对DDI预测有贡献的药物的全局特征[20]。DeepFusion [37] 通过融合多通道特征(即药物和蛋白质的局部特征和全局特征)在预测药物-靶标相互作用方面取得了巨大成功。从 DeepFusion 中汲取灵感,我们试图通过整合药物的多通道特征来解决预测药物-药物相互作用的挑战。
在这里插入图片描述
LSFC方法包括两个模块:特征提取模块和相互作用预测模块。
特征提取模块
包含局部通道(Local-Channel)和全局通道(Global-Channel)。在局部通道中,通过FCS(Frequent Consecutive Subsequence)算法从药物中提取子结构序列,然后将其输入到转换器编码器中以获得增强的上下文表示。在全局通道中,药物通过其Morgan指纹编码,并计算Tanimoto系数来量化其与其他药物的相似性,从而得到结构相似性特征向量。该向量通过多层感知机映射到低维表示。
相互作用预测模块
主要组成部分是SSIM(子结构-子结构相互作用模块)。SSIM接受两个局部通道的输出,并根据它们子结构之间的相互作用重新构建两个药物的局部特征。最后,将SSIM的输出与全局通道的输出结合起来进行最终的药物相互作用预测。
这个模型是一个用于药物相互作用(DDI)预测的神经网络模型。这个模型包含了多个部分,每个部分负责不同的功能。下面是这个模型的主要架构和模块:

三、模型整体介绍

LSFC模型:

LSFC模型是整个神经网络模型的主体,负责组合不同的子模块并执行前向传播。
它由Attention、Intermediate和Output组成。
Attention模块:
Attention模块是自注意力机制的实现,负责计算输入的自注意力。
它包含一个SelfAttention和一个SelfOutput子模块。
SelfAttention子模块:
SelfAttention子模块用于计算输入的自注意力分数。
它通过计算查询、键和值的线性映射,然后计算注意力分数,并应用稀疏化注意力机制来降低计算复杂度。
最后,它对注意力分数进行softmax归一化,将其应用于值并输出上下文向量。
SelfOutput子模块:
SelfOutput子模块用于处理自注意力模块的输出,包括应用残差连接、LayerNorm和Dropout。
Intermediate模块:
Intermediate模块负责处理自注意力模块的输出,并将其输入到下一层。
它包含一个线性映射和ReLU激活函数。
Output模块:
Output模块用于处理Intermediate模块的输出,包括应用残差连接、LayerNorm和Dropout。
Encoder模块:
Encoder模块是整个模型的一个层级,负责组合Attention、Intermediate和Output模块,形成一个完整的编码器。
它可以包含多个层,每个层由一个Attention、Intermediate和Output模块组成。
Encoder_MultipleLayers模块:
Encoder_MultipleLayers模块是多层编码器的集合,可以堆叠多个编码器层。
这个模型的训练过程由train.py文件实现,其中包括了训练、验证和测试函数,以及主要的训练逻辑。模型的输入数据通过dataset.py文件加载和处理,其中包括了数据集的划分和预处理过程。最后,utils.py文件包含了一些实用函数和类,例如对稀疏矩阵的处理、模型的保存和加载等。

论文SelfAttention模块详解

SelfAttention模块实现了自注意力机制,是Transformer模型中的核心组成部分之一。自注意力机制允许模型在处理序列数据时,动态地给每个位置赋予不同的重要性权重,以便捕捉输入序列中不同位置之间的关系。让我逐行解释这个模块的代码:

class SelfAttention(nn.Module):
    def __init__(self, hidden_size, num_attention_heads, attention_probs_dropout_prob):
        super(SelfAttention, self).__init__()
        if hidden_size % num_attention_heads != 0:
            raise ValueError("The hidden size (%d) is not a multiple of the number of attention heads (%d)" % (
            hidden_size, num_attention_heads))
        self.num_attention_heads = num_attention_heads
        self.attention_head_size = int(hidden_size / num_attention_heads)
        self.all_head_size = self.num_attention_heads * self.attention_head_size

        self.query = nn.Linear(hidden_size, self.all_head_size)
        self.key = nn.Linear(hidden_size, self.all_head_size)
        self.value = nn.Linear(hidden_size, self.all_head_size)

        self.dropout = nn.Dropout(attention_probs_dropout_prob)
  • SelfAttention类继承自nn.Module,用于定义自注意力机制。
  • hidden_size表示输入特征的维度,num_attention_heads表示注意力头的数量,attention_probs_dropout_prob表示注意力权重的dropout概率。
  • 在初始化方法中,首先检查hidden_size是否能够被num_attention_heads整除,以确保每个头的维度相同。
  • self.queryself.keyself.value分别是用于计算注意力分数的线性变换层,将输入特征映射到注意力空间。
  • self.dropout是一个dropout层,用于在计算注意力分数时进行随机失活,防止模型过拟合。

接下来是该模块的前向传播方法:

    def forward(self, hidden_states, attention_mask):
        mixed_query_layer = self.query(hidden_states)
        mixed_key_layer = self.key(hidden_states)
        mixed_value_layer = self.value(hidden_states)

        query_layer = self.transpose_for_scores(mixed_query_layer)
        key_layer = self.transpose_for_scores(mixed_key_layer)
        value_layer = self.transpose_for_scores(mixed_value_layer)

        attention_scores = torch.matmul(query_layer, key_layer.transpose(-1, -2))
        attention_scores = attention_scores / math.sqrt(self.attention_head_size)

        attention_scores = attention_scores + attention_mask
        sparse_attention_scores = self.sparsify_attention(attention_scores)

        attention_probs = nn.Softmax(dim=-1)(sparse_attention_scores)

        attention_probs = self.dropout(attention_probs)

        context_layer = torch.matmul(attention_probs, value_layer)
        context_layer = context_layer.permute(0, 2, 1, 3).contiguous()
        new_context_layer_shape = context_layer.size()[:-2] + (self.all_head_size,)
        context_layer = context_layer.view(*new_context_layer_shape)
        return context_layer
  • 前向传播方法接收hidden_statesattention_mask作为输入,其中hidden_states是输入的特征表示,attention_mask用于掩盖无效的位置。
  • 通过线性变换层计算出查询、键和值的表示。
  • transpose_for_scores方法将线性变换后的结果重塑为多头注意力所需的形状。
  • 计算注意力分数,这里使用了缩放的点积注意力机制,将查询和键的点积除以缩放系数,然后加上注意力掩码。
  • sparsify_attention方法可以将注意力矩阵稀疏化,提高计算效率,但不影响模型性能。
  • 对注意力分数进行softmax操作,得到注意力权重。
  • 使用dropout层进行注意力权重的随机失活,防止过拟合。
  • 最后,计算加权后的值表示,得到最终的上下文表示并返回。

总的来说,SelfAttention模块通过学习输入序列中各个位置之间的关系,为每个位置生成权重,然后根据这些权重对输入进行加权,从而更好地捕获序列中的信息。

总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值