本项目旨在使用深度学习模型对蛋白质的分子功能 (Molecular Function, MF) 进行预测。项目整合了多种数据处理技术和模型架构,包括:
- 数据加载与预处理: 支持 UniProt DAT 文件和 Excel 文件作为输入。
- GO 本体利用: 使用 Gene Ontology (GO) 和 GO Slim 进行标准化的功能标签映射。同时支持用户自定义的功能大类映射。
- 特征工程: 利用预训练的蛋白质语言模型 ProtBERT (from Rostlab) 提取蛋白质序列特征,并采用缓存机制加速重复运行。
- 模型架构:
- 双向长短期记忆网络 (BiLSTM) + Attention机制
- 一维卷积神经网络 (CNN) + BiLSTM
- 上述两种模型的加权集成 (Ensemble Model)
- 训练与评估: 包含完整的模型训练、验证和多标签评估流程。
protein_function_prediction/
├── config.py # 配置文件 (路径, 超参数等)
├── data_utils.py # 数据加载, GO映射, 标签编码, 分布统计, 诊断
├── feature_extractor.py # ProtBERT 特征提取与缓存
├── datasets.py # PyTorch Dataset 类
├── models.py # 模型定义 (BiLSTM, CNN_LSTM, Ensemble)
├── training_utils.py # 训练和评估函数
├── main.py # 主执行脚本, 参数解析, 流程编排
├── requirements.txt # Python 依赖库列表
├── go-basic.obo # (需要用户提供) GO 本体文件
├── goslim_generic.obo # (需要用户提供) 通用 GO Slim 文件
├── your_data.xlsx / your_data.dat # (需要用户提供) 输入的蛋白质数据
├── protbert_features_cache/ # (自动创建) ProtBERT 特征缓存目录
├── *_label_distribution.txt # (自动生成) 标签分布统计文件
└── protein_ensemble_model.pth # (自动生成) 训练好的模型权重
└── README.md # 本文件
-
Python 版本: 建议使用 Python 3.7 或更高版本。
-
依赖库安装: 首先,克隆或下载本项目。然后,在项目根目录下,通过 pip 安装所需的 Python 包:
pip install -r requirements.txt
主要依赖包括:
torch,transformers,numpy,pandas,scikit-learn,biopython,goatools,tqdm,openpyxl。 注意:torch的安装可能需要根据你的 CUDA 版本进行调整。如果你的机器支持 GPU 且已安装 CUDA 和 cuDNN,请确保安装与 CUDA 版本兼容的 PyTorch 版本。 -
数据文件准备:
- GO 本体文件:
- 下载
go-basic.obo(基础 GO 本体文件) 和goslim_generic.obo(通用 GO Slim 文件) 到项目根目录。这些文件可以从 Gene Ontology Consortium 官网 下载。 - 如果文件路径不同,请在
config.py中更新OBO_FILE和SLIM_OBO_FILE的路径。
- 下载
- 输入蛋白质数据:
- 将你的蛋白质数据文件(
.xlsx或.dat格式)放置在项目根目录中,或在运行时通过--input_data_file参数指定路径。 - Excel (.xlsx) 格式要求:
- 至少包含三列:蛋白质 ID (默认为 'Entry')、蛋白质序列 (默认为 'Sequence')、GO 注释 (默认为 'Gene Ontology (GO)',应包含
GO:XXXXXXX格式的 ID)。 - 可以在
data_utils.py中的load_data_from_excel函数调整列名。
- 至少包含三列:蛋白质 ID (默认为 'Entry')、蛋白质序列 (默认为 'Sequence')、GO 注释 (默认为 'Gene Ontology (GO)',应包含
- .dat 格式要求:
- 标准的 UniProtKB/Swiss-Prot 文本格式。
- 将你的蛋白质数据文件(
- GO 本体文件:
项目的主要配置参数位于 config.py 文件中。你可以根据需要修改:
- 文件路径:
OBO_FILE,SLIM_OBO_FILE等。 - 模型超参数:
BATCH_SIZE,NUM_EPOCHS,LEARNING_RATE,HIDDEN_DIM等。 - 自定义类别: 如果使用
--mapping_strategy custom,请确保TARGET_MF_CLASSES中的 GO ID 和类别名称符合你的定义。 - 设备:
DEVICE会自动检测 CUDA 是否可用,并选择 GPU 或 CPU。
通过命令行运行 main.py 脚本来启动整个流程。
基本命令格式:
python main.py --input_data_file <你的数据文件路径> [其他可选参数]主要命令行参数:
--input_data_file(必需): 输入的蛋白质数据文件路径 (例如,your_data.xlsx或uniprot_sprot.dat)。--target_go_category(可选): 要预测的 GO 类别。可选值: 'MF' (分子功能), 'BP' (生物过程), 'CC' (细胞组分)。默认为 'MF'。--mapping_strategy(可选): 标签映射策略。可选值:goslim(默认): 使用goslim_generic.obo进行映射。custom: 使用config.py中定义的TARGET_MF_CLASSES进行映射。
--batch_size(可选): 训练和评估的批次大小。默认为config.py中的设置。--num_epochs(可选): 训练轮数。默认为config.py中的设置。--learning_rate(可选): 优化器的学习率。默认为config.py中的设置。--ensemble_weight_a(可选): 集成模型中模型 A (BiLSTM+Attention) 的权重。默认为config.py中的设置。--diagnose(可选): 执行映射诊断步骤,随机抽样展示原始 GO 注释和映射后类别的对比。
示例命令:
-
使用 GO Slim 映射策略,预测分子功能 (MF),使用
my_proteins.xlsx作为输入:python main.py --input_data_file my_proteins.xlsx --target_go_category MF --mapping_strategy goslim
-
使用自定义的 7 大类映射策略,预测分子功能 (MF),使用
uniprot_data.dat作为输入,并进行诊断输出:python main.py --input_data_file uniprot_data.dat --target_go_category MF --mapping_strategy custom --diagnose
-
调整批次大小为 8,训练轮数为 20:
python main.py --input_data_file my_proteins.xlsx --batch_size 8 --num_epochs 20
更灵活的迭代次数与中止兼容 集成模型的进一步研究与选择