当前位置: 首页 > article >正文

PO2GO、PO2Vec论文阅读与模型复现报告

论文与代码

论文:

Partial order relation–based gene ontology embedding improves protein function prediction | Briefings in Bioinformatics | Oxford Academic (oup.com)

代码:

xbiome/protein-annotation (github.com)

论文介绍

今年的一篇经典蛋白质功能预测论文,思路自然,效果也不错

模型主要分为两个部分,PO2Vec和PO2GO,PO2Vec是PO2GO的一个模块。

数据集使用了CAFA3和Swissprot,使用的是蛋白质序列特征和GO标签依赖关系特征。

PO2Vec模型

目的就是提取GO标签的特征向量

结构很简单,就是一个Embedding层和一个MLP层

但采样方式比较有趣:利用GO标签的偏序关系抽取正负样本

'''

根据论文的说法,标签视为点,is_a和part_of关系视为有向边

一个点有对应的直接可达集合Qdr、间接可达集合Qir、不可达集合Qur(通过有向边可达、把有向边视为无向边之后可达、完全不联通(指跨越CC、MF、BP的大类))。

在Qdr、Qir中各随机抽一个最近的点作为正样本。

然后根据超参数k、u来获取负样本,(k表示有k个负样本,u表示负样本中位于Qdr集的占比,u很小)

然后在Qdr中随机采集负样本k*u个,剩下的负样本指标,Qir和Qur集合各占一半,随机抽取。

'''

采集完正负样本之后,使用对比学习,训练出每个GO标签的embedding向量。

说是这么说啊,但我根本没看出来代码里面怎么实现的上述过程,没找到超参数k、u:(可能是我读的还不够仔细)

PO2GO模型

用ESM1b提取蛋白质序列特征,PO2Vec提取各个GO标签的特征

最后MLP+点积预测蛋白质功能

复现流程

(仓库确实写了,但没有完全写清楚,害我倒腾了好久)

1、克隆仓库,配置环境

我用的python3.9.19,需要把requirement.txt里面的sklearn换成scikit-learn

2、下载数据:Index of /pub/databases/uniprot/knowledgebase/complete

下载uniprot_sprot.dat.gz

获取go.obo:Requesting a dataset · Issue #1 · xbiome/protein-annotation (github.com)

两个文件都放在data文件夹下。

3、运行preprocess_raw_data.py

4、训练PO2Vec,获取GO embeddings

(1)运行extract_all_terms_from_obo.py

(2)运行GO_data.py,获取正负样本

(3)运行train.py,训练PO2Vec

(4)运行extract_GO_embeddings_all.py和extract_GO_embeddings_ontologies.py,提取GO embeddings

5、下载ESM-1b模型:https://dl.fbaipublicfiles.com/fair-esm/models/esm1b_t33_650M_UR50S.pt

还有这个:ESM-Scan/esm1b_t33_650M_UR50S-contact-regression.pt at main · xuebingwu/ESM-Scan (github.com)

6、运行get_protein_embedding.py(。。。似乎上面两个可以不用手动下载,它会自动帮你下,但是由于一些代码原因,即便你手动下好了,它无法直接导入,我魔改了代码才导入成功),提取蛋白质使用ESM-1b提取的embeddings

7、运行prepare_data_seperate_swissprot.py划分数据集

记得把pkl的文件名改为带embedding的

 8、运行prepare_data_seperate_ontologies.py把数据集按照GO标签大类进一步划分(BP、CC、MF)

9、运行train_po2go.py(请使用README.md中的命令),开始训练,这里会强制你使用wandb,如果没有账号或者其他,可以直接注释掉所有wandb log相关的语句。

10、查看训练结果

在swissprot数据集上的MFO标签分类,我没调参数直接开训,最后AUC 0.98,Fmax 0.41, AUPR 0.39

实际上复现结果并不好,论文中的AUPR可以达到0.753,FMAX 0.697,相当不错的水平了

(个人感觉应该是GO Embedding训练的时候正负样本比例不均衡,迭代次数过多之后过拟合了,然后又对后面的功能预测造成了影响,导致AUC虚高但AUPR很低的现象,可能作者的训练方法以及参数调整会更加优秀一些)


http://www.kler.cn/a/329140.html

相关文章:

  • 【蓝桥杯C/C++】深入解析I/O高效性能优化:std::ios::sync_with_stdio(false)
  • 力扣-Mysql-3322- 英超积分榜排名 III(中等)
  • 【AI+教育】一些记录@2024.11.11
  • Go语言基本类型转换
  • AWTK VSCode 实时预览插件端口冲突的解决办法
  • Spring Boot 接口防重复提交解决方案
  • 【STM32开发笔记】移植AI框架TensorFlow到STM32单片机【下篇】
  • 【环保背景高管1009】2022顶刊论文数据,环保背景高管对投资的影响探究
  • 初识算法 · 双指针(1)
  • LeetCode 面试经典150题 69.x的平方根
  • html嵌入百度地图
  • 酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构
  • 如何解决 Photoshop 中的“暂存盘已满”错误
  • 用于高频交易预测的最优输出LSTM
  • 【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型
  • Python 并发新境界:探索 `multiprocessing` 模块的无限可能
  • 828华为云征文|部署敏捷项目管理系统工具 ZenTao
  • Spring Boot 基础入门指南
  • c++11~c++20 内联命名空间
  • Golang学习路线
  • 如何设计具体项目的数据库管理
  • Matlab 软件入门
  • Python 课程22-Pillow
  • Linux下的基本指令/命令(一)
  • PHP 语言基础教程学习笔记
  • 基于单片机汽车尾灯控制系统