如何将变长蛋白质序列投影到固定维度的统一空间

news/2025/11/1 14:30:21/文章来源:https://www.cnblogs.com/ylifs/p/19183329

https://github.com/westlake-repl/ProTrek/blob/main/model/ProTrek/protein_encoder.py
这个蛋白质编码器的代码展示了如何将变长蛋白质序列投影到固定维度的统一空间

1. 模型架构概览

class ProteinEncoder(torch.nn.Module):def __init__(self, config_path, out_dim, load_pretrained=True):config = EsmConfig.from_pretrained(config_path)if load_pretrained:self.model = EsmForMaskedLM.from_pretrained(config_path)else:self.model = EsmForMaskedLM(config)self.out = torch.nn.Linear(config.hidden_size, out_dim)  # 关键投影层

核心组件

  • ESM模型:蛋白质语言模型,处理变长序列
  • 投影层self.out线性层,将ESM输出投影到统一维度

2. 前向传播的详细流程

def forward(self, inputs: dict, get_mask_logits: bool = False):# 步骤1: 通过ESM模型获取隐藏状态last_hidden_state = self.model.esm(**inputs).last_hidden_state# 形状: [batch_size, seq_len, hidden_size] (如 [32, 512, 1280])# 步骤2: 使用[CLS] token作为序列表示reprs = last_hidden_state[:, 0, :]  # 取第一个token ([CLS])# 形状: [batch_size, hidden_size] (如 [32, 1280])# 步骤3: 投影到统一维度空间reprs = self.out(reprs)  # 线性投影# 形状: [batch_size, out_dim] (如 [32, 1024])

3. 关键投影步骤详解

3.1 从变长到固定的维度转换

输入序列的多样性

# 不同长度的蛋白质序列示例
seq1 = "MALWMRLLPLLALLALWGPDPAAAFVNQHLCGSHLVEALYLVCGERGFFYTPKT"  # 长度54
seq2 = "MVHLSREEKQ"                                              # 长度10
seq3 = "MKWVTFISLLFLFSSAYSRGVFRRDAHKSEVAHRF"                     # 长度38

ESM模型处理后的输出

# 经过ESM Transformer后的隐藏状态
last_hidden_state = self.model.esm(input_ids, attention_mask).last_hidden_state
# 对于batch_size=3的不同长度序列:
# 形状: [3, max_seq_len, hidden_size] 如 [3, 512, 1280]
# 实际有效部分由attention_mask标识

3.2 [CLS] Token池化策略

其实就是拿第一个Token!

reprs = last_hidden_state[:, 0, :]  # 取每个序列的第一个token

为什么使用[CLS] token?

  • 特殊标记:ESM在序列开头添加[CLS] token,专门用于表示整个序列
  • 全局信息:通过自注意力机制,[CLS] token聚合了整个序列的信息
  • 标准做法:这是BERT/ESM等Transformer模型的常用做法

3.3 维度投影的具体数学操作

# 投影层的具体计算
reprs = self.out(reprs)  # 等价于: reprs = torch.matmul(reprs, self.out.weight.T) + self.out.bias

维度变换

[batch_size, hidden_size] × [hidden_size, out_dim] = [batch_size, out_dim][32, 1280]        ×     [1280, 1024]        =     [32, 1024]

4. 批量推理时的处理流程

def get_repr(self, proteins: list, batch_size: int = 64, verbose: bool = False):for i in iterator:# 步骤1: Tokenization和填充protein_inputs = self.tokenizer.batch_encode_plus(proteins[i:i + batch_size],return_tensors="pt",padding=True  # 关键:自动填充到相同长度)# 生成attention_mask标识有效位置# 步骤2: 前向传播获取表示output, _ = self.forward(protein_inputs)# output形状: [batch_size, out_dim]# 步骤3: L2归一化protein_repr.append(output)protein_repr = torch.cat(protein_repr, dim=0)return normalize(protein_repr, dim=-1)  # 最终L2归一化

5. 处理不同序列长度的关键技术

5.1 动态填充(Padding)

# tokenizer自动处理不同长度
protein_inputs = self.tokenizer.batch_encode_plus(proteins, padding=True,  # 短序列填充到batch内最长序列return_tensors="pt"
)
# 生成attention_mask区分真实token和填充token

5.2 注意力掩码(Attention Mask)

# ESM模型内部使用attention_mask
last_hidden_state = self.model.esm(input_ids=inputs["input_ids"],attention_mask=inputs["attention_mask"]  # 忽略填充位置
).last_hidden_state

5.3 [CLS] Token的智能性

由于自注意力机制,[CLS] token能够"看到"整个序列的所有有效token,而忽略填充部分。

6. 完整的维度变换流程

变长蛋白质序列↓ Tokenization + 填充
固定长度token序列: [batch_size, max_seq_len] ↓ ESM Transformer
序列隐藏状态: [batch_size, max_seq_len, hidden_size]↓ 取[CLS] token
序列级表示: [batch_size, hidden_size]  ↓ 线性投影
统一空间表示: [batch_size, out_dim]↓ L2归一化
最终表示: [batch_size, out_dim] (模长为1)

7. 为什么这个设计有效?

7.1 长度不变性

  • 无论蛋白质多长,最终都投影到相同维度
  • [CLS] token通过自注意力学习序列的全局表示

7.2 语义保持

  • ESM作为蛋白质语言模型,理解氨基酸的语义
  • 投影层学习将语义信息映射到对比学习空间

7.3 计算效率

  • 避免了复杂的池化操作
  • 支持批量处理不同长度的序列

总结

这个蛋白质编码器通过ESM模型 + [CLS]池化 + 线性投影的三步策略,巧妙地将任意长度的蛋白质序列转换为固定维度的向量表示,为多模态对比学习提供了统一的表示空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/952825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

起飞啦!!!兄弟们,揭秘Claudable给你写代码的魔力 Github 3k star

嗨,我是小华同学,专注解锁高效工作与前沿AI工具!每日精选开源技术、实战技巧,助你省时50%、领先他人一步。👉免费订阅,与10万+技术人共享升级秘籍!“Claudable 是一种基于 Next.js 的 Web 应用构建器,结合 Cl…

2.4G低功耗

前言 基于CH572RF_PHY例程做低功耗管理。 发射端做低功耗只需要控制好发送的间隔,发送完成后自行进入睡眠即可。 接收端做睡眠时,需要考虑跟发送端发送数据的时间点吻合,否则可能出现发送端在01时刻发送数据,接收端…

2025年11月太空舱品牌推荐评价:有实力厂家综合性能评测

随着太空舱在文旅住宿、共享办公等领域的快速普及,越来越多的投资者和运营商开始关注这一创新业态。根据行业数据显示,2024年中国太空舱市场规模已达27.3亿元,同比增长42.5%。这种快速增长背后反映的是消费者对个性…

2025年11月太空舱推荐榜:实力厂家与正规品牌综合评测与排行

随着太空舱产品在文旅住宿、共享空间等领域的应用日益广泛,用户在选择时往往面临诸多挑战。无论是酒店经营者寻求批量采购,还是民宿业主规划特色客房,亦或是个人用户打造个性化休息空间,都需要综合考虑供应商资质、…

2025年11月太空舱推荐榜:口碑好的正规生产厂家综合评测与排名分析

在文旅产业快速发展和个性化住宿需求持续增长的背景下,太空舱作为一种新兴的装配式建筑形态,正受到越来越多投资者和运营者的关注。无论是景区配套、民宿升级还是临时性商业空间拓展,太空舱都以其模块化、快速部署的…

2025年11月太空舱供应厂家评价:专业品牌综合实力排行榜

随着太空舱在文旅住宿、共享办公等场景的快速普及,越来越多的投资者和运营者开始关注这一新兴领域。您可能是正在规划特色住宿项目的酒店管理者,也可能是寻求差异化竞争的民宿业主,或是准备布局共享休息空间的企业负…

【Python 基础】第 3 期:使用 PyCharm 编写 Hello World

我们写文档大多用 Word、写表格大多用 Excel、写幻灯片大多用 PPT。 写代码也需要一个软件作为编辑器(传说的大神用记事本写代码纯属玩笑了,越是大神越追求效率,用的软件功能越强)。 Python 现在已经有了非常多的代…

2025年权威解析与推荐:淮安广联纸业供应链能力与区域市场适配性深度评估

本文将从供应链布局与区域市场适配性的核心维度出发,为读者提供一个有针对性的客观参考。淮安广联纸业有限公司自2012年创立以来,始终专注纸业领域精耕发展。历经十余载稳健经营,现已构建覆盖造纸、加工、销售的全产…

2025年权威解析与推荐:淮安广联纸业全产业链布局深度分析

引言:本文将从产业链布局维度出发,为读者提供一个有针对性的客观参考。淮安广联纸业作为区域纸制品行业的重要服务商,其全产业链模式的形成与演化过程值得深入探讨。通过对其纵向整合能力的剖析,可以更清晰地理解企…

2025年11月专业太空舱供应厂家推荐排名:聚焦技术实力与性价比的客观排行

随着太空舱在文旅住宿、共享空间等领域的应用日益普及,越来越多的投资者和运营商开始关注这一创新产品。无论是计划建设特色民宿的创业者,还是希望升级住宿体验的酒店管理者,选择一家可靠的太空舱供应商都成为项目成…

2025年权威解析与推荐:淮安广联纸业产业布局与战略发展深度分析

引言:本文将从产业链布局与战略发展这一核心维度出发,对淮安广联纸业有限公司进行深度剖析,旨在为行业观察者与潜在合作伙伴提供一个客观、有针对性的参考框架。 背景与概况:淮安广联纸业有限公司自2012年创立以来…

2025年权威解析与推荐:淮安广联纸业的市场定位与品牌发展剖析

引言:本文将从品牌发展维度出发,为读者提供一个有针对性的客观参考。淮安广联纸业有限公司自2012年创立以来,始终专注纸业领域精耕发展。历经十余载稳健经营,现已构建覆盖造纸、加工、销售的全产业链布局,建成占地…

2025年权威解析与推荐:淮安广联纸业发展路径深度分析

引言:本文将从企业发展历程与战略布局这一核心维度出发,为读者提供一个有针对性的客观参考。 背景与概况:淮安广联纸业有限公司自2012年创立以来,始终专注纸业领域精耕发展。历经十余载稳健经营,现已构建覆盖造纸…

2025年权威推荐与深度解析:淮星复印纸的综合价值分析

引言:本文将从产品性能与使用体验这一核心维度出发,结合品牌背景、原料工艺、性价比及服务保障等多个角度,为读者提供一个关于淮星复印纸的客观参考。 背景与概况:淮安广联纸业有限公司自2012年创立以来,始终专注…

1069:乘方计算快速幂

1.快速幂 #include<bits/stdc++.h> using namespace std; int main() {int a, n, r = 1;//r:结果cin>>a>>n;while(n){if(n & 1) r*=a;//如果b当前二进制为1就要乘上这个数n>>=1; //将b末尾…

2025年权威推荐与深度解析淮星复印纸:优质平价的办公打印新选择

本文将从产品性能与使用体验的维度出发,为读者提供一个有针对性的客观参考。淮星作为新兴的复印纸品牌,始终秉持"优质平价,让每一分钱都物超所值"的市场理念。我们深知在现代办公环境中,复印纸作为日常消…

2025年11月打印纸品牌排行:权威评测与正规厂家综合对比

在日常办公与学习场景中,打印纸作为基础耗材其品质直接影响文档输出效果与长期保存价值。根据国家文教用品质量监督检验中心数据显示,2024年我国打印纸市场规模已达120亿元,年均消耗量增长率稳定在5%左右。许多用户…

本地化知识库:RAGFlow

1. 下载&安装Docker,为RAGFlow提供配置好的运行环境。 2. 下载Ollama + 大模型,配置环境变量:OLLAMA_HOST: :11434 让虚拟机可以访问到本机上的Ollama,OLLAMA_MODELS:自定义模型的下载位置 3. 去RAGFlow的GitH…

2025年11月打印纸生产厂家排行:口碑较好品牌深度评测

在选择打印纸时,许多企业采购人员、行政管理人员以及个体用户都面临着相似的需求场景。无论是日常办公打印、教育机构的大量印刷需求,还是商业服务领域的专业应用,打印纸作为基础耗材,其质量直接影响到工作效率和成…