1 | class DataFrameDataset(Dataset): |
训练数据预处理
DataFrameDataset
类:目的:将数据框(通常包含蛋白质ID和相应的蛋白质序列)转换为易于访问和使用的数据集格式。
方法
:
__init__
: 初始化数据集并将数据存储在缓存中。__len__
: 返回数据集中的项数。__getitem__
: 根据索引返回数据集中的一个项。
_pad_sequences
函数:目的:给定一系列不等长的序列,使用常数值填充它们,使得所有序列具有相同的长度。
参数
:
sequences
: 要填充的序列列表。constant_value
: 用于填充的常数值。
返回:一个填充后的 NumPy 数组,其中每个序列都有相同的长度。
EmbedDataset
类:目的:对蛋白质序列进行嵌入编码,并为训练和评估模型准备适当的输入格式。
方法
:
__init__
: 初始化数据集并设置分词器(用于将蛋白质序列转换为嵌入向量)。__len__
: 返回数据集中的项数。__getitem__
: 根据索引返回数据集中的一个项。它将蛋白质序列转换为嵌入向量。collate_fn
: 一个用于数据加载器的收集函数,它将一批数据组合成一个单一的输入张量。这是为了处理不同长度的蛋白质序列。
TAPE编码
1 | class TAPEEncoder(object): |
1. 初始化方法 (__init__
):
参数
:
batch_size
: 批次大小。model_config_file
: 模型配置文件(如果有)。full_sequence_embed
: 是否返回整个序列的嵌入。no_cuda
: 是否禁用 CUDA。seed
: 随机种子。tokenizer
: 分词器类型。num_workers
: 用于数据加载的工作进程数。log_level
: 日志级别。progress_bar
: 是否显示进度条。
功能
:
- 设置分布式计算环境和随机种子。
- 从预训练的权重中加载 ProteinBertModel。
- 初始化
ForwardRunner
,用于模型推理。 - 存储相关参数和对象。
2. 编码方法 (encode
):
- 参数:
sequences
,要编码的等长序列列表。 - 返回:嵌入编码的 NumPy 数组,形状为 (#sequences, length of sequences, embedding dim)。
- 功能:将给定的蛋白质序列转换为嵌入向量。
3. TAPE 嵌入方法 (tape_embed
):
参数:
seq_df
,一个包含至少两列(ID
和sequence
)的 pandas 数据框。返回:一个字典,其中键是 ID,值是嵌入向量。嵌入向量是具有形状 (#sequences, length of sequences, embedding dim) 的 PyTorch 张量。
功能
:
- 创建一个嵌入数据集并设置数据加载器。
- 通过 TAPE 的 ProteinBertModel 运行前向传播来生成嵌入。
- 根据需要,可以选择返回整个序列的嵌入或返回序列的平均嵌入。
CCMPred编码局部变量
1 |
|
1. 函数 all_sequence_pairwise_profile
:
- 参数:一个包含 CCMPred 的 �ε 值和索引编码序列的元组。
- 返回:一个编码数组,形状为 (�,�,�)(N,L,L)。
- 功能:计算所有序列的两两配对特征。
2. 函数 all_sequence_singleton_profile
:
- 参数:一个包含 CCMPred 的 �ε 值和索引编码序列的元组。
- 返回:一个编码数组,形状为 (�,�,1)(N,L,1)。
- 功能:计算所有序列的单体特征。
3. 类 CCMPredEncoder
:
- 方法
__init__
:- 初始化类,加载 CCMPred 输出文件并设置词汇表索引。
- 方法
load_data
:- 从给定的文件中加载 CCMPred 数据并返回两个数组,分别表示两两配对和单体特征。
- 方法
index_encoding
:- 将给定的序列列表转换为整数索引编码。
- 方法
ccmpred_encoding
:- 根据 CCMPred 的两两配对或单体特征计算序列的编码。
- 方法
encode
:- 返回序列的 CCMPred 编码,将单体和两两配对特征组合在一起。
该代码部分的核心目标是使用 CCMPred 的共进化信息为蛋白质序列生成特征编码。共进化信息可以捕获蛋白质残基之间的相互作用和依赖性,对于许多下游分析和预测任务(例如,三维结构预测)可能是有用的。通过使用 Numba(一个用于编译 Python 的高性能库)进行即时编译,相关的数值计算得到了优化。
模型构建
1 | class PositionalEmbedding(nn.Module): |
1. PositionalEmbedding
类
功能:创建了一个位置嵌入矩阵,用于向序列的每个位置添加独特的嵌入。
属性
:
pe
:存储位置嵌入的张量。
原理:使用 sine 和 cosine 函数生成位置嵌入,使得每个位置的嵌入都是唯一的。
2. InputPositionEmbedding
类
功能:将输入的词汇表索引转换为连续的嵌入表示,并添加位置嵌入。
属性和组件
:
embed
:一个嵌入层,用于将输入的词汇表索引转换为连续的向量表示。position_embed
:一个PositionalEmbedding
层,用于添加位置信息。reproject
:一个线性层,用于重新投影嵌入空间(如果需要)。dropout
:Dropout 层,用于正则化。
3. AggregateLayer
类
功能:聚合编码后的序列表示。
组件
:
attn
:一个包括层归一化、全连接层、Dropout 层和 Softmax 层的序列,用于计算每个位置的权重,然后通过加权平均进行聚合。
4. GlobalPredictor
类
功能:从聚合后的表示生成最终的预测输出。
组件
:
predict_layer
:一个包括批归一化、全连接层、激活函数和 Dropout 层的序列,用于最终的预测。
5. SequenceLSTM
类
功能:使用 LSTM 处理序列输入并生成连续的序列表示。
属性和组件
:
embed
:一个InputPositionEmbedding
层,用于输入和位置嵌入。lstm
:LSTM 层,用于编码序列。drop
:Dropout 层,用于正则化。proj_loc_layer
:可选的全连接层,用于投影局部特征。
6. LSTMPredictor
类
功能:整个 LSTM 预测模型的容器。
属性和组件
:
seq_lstm
:一个SequenceLSTM
层,用于序列编码。proj_glob_layer
:全连接层,用于投影全局特征。aggregator
:一个AggregateLayer
层,用于聚合编码后的序列表示。predictor
:一个GlobalPredictor
层,用于最终的预测。