基于预训练模型,进行氨基酸序列编码,用于深度学习模型构建

本团队提供生物医学领域专业的AI(机器学习、深度学习)技术支持服务。如果您有需求,请扫描文末二维码关注我们。

在这里插入图片描述


在对氨基酸序列数据进行深度学习模型构建时,首先需要将字符形式的序列数据进行编码操作。最简单的当然是One-hot编码,但会引入稀疏性问题。这里提供一种基于预训练模型的编码方法,代码如下:

import os 
import pandas as pd 
import numpy as np 
from sentence_transformers import SentenceTransformer
import warnings

warnings.filterwarnings('ignore')


# 定义读取FASTA格式的氨基酸序列文件
def read_fasta(file_path):
    with open(file_path, 'r') as file:
        sequences = []
        sequence_names = []
        current_sequence = []
        
        for line in file:
            line = line.strip()
            if line.startswith('>'):
                if current_sequence:
                    sequences.append(''.join(current_sequence))
                    current_sequence = []
                sequence_names.append(line[1:])
            else:
                current_sequence.append(line)
                
        if current_sequence:
            sequences.append(''.join(current_sequence))
    # 返回两个list
    # 第一个为序列名,第二个为序列
    return sequence_names, sequences


# 将自动下载预训练模型,如果失败,需要手动从网站下载。
# 网站地址:https://huggingface.co/monsoon-nlp/protein-matryoshka-embeddings
model = SentenceTransformer('monsoon-nlp/protein-matryoshka-embeddings')


# 创建结果文件
outdir = 'embedding_results'
os.makedirs(outdir, exist_ok=True)
os.makedirs(f"{outdir}/SingleSeqEmbedding", exist_ok=True)


# 读取氨基酸序列
sequence_names, sequences = read_fasta('proteinSquence-zheng.txt')
print(f"共读入了 {len(sequence_names)} 条氨基酸序列")


# 将读入的序列转为CSV格式,并进行保存
df = pd.DataFrame({'seq_name': sequence_names,
                   'sequence': sequences
                    })
df.to_csv(f"{outdir}/sequences.csv", index=False)


# 每条序列单独编码
for idx, sequence in enumerate(sequences):
    embedding = model.encode(sequence)
    np.save(f'{outdir}/SingleSeqEmbedding/embedding_{idx}.npy', embedding)

# 所有序列编码为一个矩阵
embeddings = model.encode(sequences)
np.save(f'{outdir}/embeddings.npy', embeddings)

print('编码后的序列维度为: ', embeddings.shape)


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值