首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PyHMMSearch:基于 PyHMMER 的高性能 HMM 蛋白质功能注释工具

PyHMMSearch:基于 PyHMMER 的高性能 HMM 蛋白质功能注释工具

作者头像
用户1075469
发布2026-07-27 18:29:20
发布2026-07-27 18:29:20
1010
举报

Hello,Hello小伙伴们大家好。近年来,随着宏基因组学、微生物组学及病毒组学研究的快速发展,蛋白质序列数据规模不断扩大。如何快速、准确地利用 profile Hidden Markov Model(profile HMM)进行蛋白质同源搜索和功能注释,已成为生物信息学分析中的重要环节。今天给大家介绍一款由 Josh L. Espinoza 开发的高性能 HMM 搜索工具——PyHMMSearch

PyHMMSearch 是一个灵活、高效的通用 profile HMM 搜索工具,尤其适合在多线程、高内存计算环境中处理大规模微生物基因组、宏基因组和病毒组蛋白质数据,为批量蛋白质功能注释提供了一种更加便捷的实现方式。

工作流程

原理:

PyHMMSearch 是一款面向大规模蛋白质数据的 HMM 搜索工具,核心功能是基于 PyHMMER 实现类似 HMMER hmmsearch 的 profile HMM 比对。该工具可将一个或多个 HMM 模型与蛋白质序列数据库进行搜索,用于识别蛋白质家族、保守结构域及潜在功能。PyHMMSearch 支持普通或 gzip 压缩的 FASTA 文件输入,并可输出标准表格、tbloutdomtblout 等结果格式,便于后续筛选和统计分析。

优势:

传统 HMMER 已广泛应用于 Pfam、TIGRFAM、VOG、PHROG、dbCAN 等数据库的功能注释。然而,在处理大规模蛋白质数据时,数据库读取、中间文件生成及磁盘 I/O 可能影响分析效率。针对这些问题,PyHMMSearch 将 HMM 搜索过程整合至 Python 环境中,并针对高内存和多线程计算进行了优化,可减少中间文件和磁盘读写开销,提高批量蛋白质功能注释的执行效率

在结果筛选方面,PyHMMSearch 支持 E-value、bitscore 以及 HMM 模型自带的 gathering、trusted 和 noise cutoff,也允许用户提供自定义模型评分阈值。因此,该工具不仅适用于 Pfam 等通用数据库,也可结合病毒功能基因、抗性基因或其他自定义 HMM 数据库开展蛋白质功能注释。

Github:

https://github.com/jolespin/pyhmmsearch

https://github.com/althonos/pyhmmer

数据库:

https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release

https://phrogs.lmge.uca.fr/

https://bcb.unl.edu/dbCAN2/download/

https://www.genome.jp/ftp/db/kofam

注:

PyHMMSearch 具有较高的数据库兼容性,不依赖预设的特定数据库,可读取单个或合并后的 HMMER3 profile HMM 文件,对蛋白序列进行同源搜索与功能注释。

软件安装

代码语言:javascript
复制
# 创建一个名为PyHMMSearch的conda环境,并安装pyhmmsearch
conda create -n PyHMMSearch -c conda-forge -c bioconda pyhmmsearch
# conda install 直接安装
conda install -c bioconda pyhmmsearch
# pip install 安装
pip install pyhmmsearch
# 激活环境
conda activate PyHMMSearch  

安装说明:

小编的安装更推荐第一种方法,因为小编习惯将每个软件单独创建一个虚拟conda环境,避免软件依赖产生冲突。

配置数据库

代码语言:javascript
复制
## Pfam数据库为例
# 离线模式
mkdir -p db/Pfam && cd db/Pfam
# 使用wget下Pfam数据库Hmm文件
wget -c -nv -a download.log -b https://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gz 
# 格式化数据库
# 方式 1:输入单个合并后的 HMM 数据库文件
serialize_hmm_models -d Pfam-A.hmm.gz -b PyHMMSearch.pkl.gz
# 方式 2:输入包含多个 HMM 文件的目录
serialize_hmm_models -d hmm_directory/ -b PyHMMSearch.pkl.gz
# 方式 3:输入记录多个 HMM 文件路径的列表文件
serialize_hmm_models -l hmms.list -b PyHMMSearch.pkl.gz

使用方法

代码语言:javascript
复制
pyhmmsearch -h 
usage: pyhmmsearch -i <proteins.fasta> -o <output.tsv> -d 

    Running: pyhmmsearch v2025.10.23.post1 via Python v3.12.13 | /Path/softwara/miniforge3/envs/PyHMMSearch/bin/python3.12

options:
  -h, --help            show this help message and exit
  -v, --version         show program's version number and exit

I/O arguments:
  -i PROTEINS, --proteins PROTEINS
                        path/to/proteins.fasta. stdin does not stream and loads everything into memory. [Default: stdin]
  -o OUTPUT, --output OUTPUT
                        path/to/output.tsv [Default: stdout]
  --no_header           No header
  --tblout TBLOUT       path/to/output.tblout
  --domtblout DOMTBLOUT
                        path/to/output.domtblout

Utility arguments:
  -p N_JOBS, --n_jobs N_JOBS
                        Number of threads to use [Default: 1]

HMMSearch arguments:
  -s SCORES_CUTOFF, --scores_cutoff SCORES_CUTOFF
                        path/to/scores_cutoff.tsv[.gz] [id_hmm]<tab>[score_threshold], No header.
  -f {accession,name}, --hmm_marker_field {accession,name}
                        HMM reference type (accession, name) [Default: accession]
  -t {domain,full}, --score_type {domain,full}
                        {full, domain} [Default: full]
  -m {trusted,noise,e,gathering}, --threshold_method {trusted,noise,e,gathering}
                        Cutoff threshold method [Default:  e]
  -e EVALUE, --evalue EVALUE
                        E-value threshold [Default: 10.0]

Database arguments:
  -d HMM_DATABASE, --hmm_database HMM_DATABASE
                        path/to/database.hmm cannot be used with -b/-serialized_database.  Expects a (concatenated) HMM file and not a directory. You can build a database from a directory using `serialize_hmm_models.py`
  -b SERIALIZED_DATABASE, --serialized_database SERIALIZED_DATABASE
                        path/to/database.pkl cannot be used with -d/--database_directory.  Database should be pickled dictionary {name:hmm}

https://github.com/jolespin/pyhmmsearch

重要参数解释:

参数

说明

-h, --help

显示帮助信息并退出。

-v, --version

显示 PyHMMSearch 版本信息并退出。

-i PROTEINS, --proteins PROTEINS

指定输入蛋白质序列文件,格式为 FASTA;也支持从标准输入读取,但所有数据会加载至内存中。

-o OUTPUT, --output OUTPUT

指定输出结果文件路径,输出格式为 TSV;默认输出至标准输出。

--no_header

输出结果时不包含表头信息。

--tblout TBLOUT

输出 HMMER 风格的 tblout 格式结果文件。

--domtblout DOMTBLOUT

输出 HMMER 风格的 domtblout 格式结果文件,用于记录结构域水平匹配信息。

-p N_JOBS, --n_jobs N_JOBS

设置并行计算线程数,默认值为 1。

-s SCORES_CUTOFF, --scores_cutoff SCORES_CUTOFF

指定自定义 score 阈值文件,格式为 [id_hmm]<tab>[score_threshold],不包含表头;支持 .tsv 或 .tsv.gz 文件。

-f {accession,name}, --hmm_marker_field {accession,name}

指定 HMM 模型标识字段,可选择 accession 或 name,默认使用 accession。

-t {domain,full}, --score_type {domain,full}

指定评分类型,可选择 full(完整蛋白评分)或 domain(结构域评分),默认使用 full。

-m {trusted,noise,e,gathering}, --threshold_method {trusted,noise,e,gathering}

指定 HMM 搜索结果筛选阈值类型,包括 trusted(可信阈值)、noise(噪声阈值)、e(E-value 阈值)和 gathering(模型推荐阈值),默认使用 e。

-e EVALUE, --evalue EVALUE

设置 E-value 筛选阈值,默认值为 10.0。

-d HMM_DATABASE, --hmm_database HMM_DATABASE

指定 HMM 数据库文件路径,需要提供合并后的 .hmm 文件。

-b SERIALIZED_DATABASE, --serialized_database SERIALIZED_DATABASE

指定序列化后的 HMM 数据库文件路径,例如 .pkl 或 .pkl.gz 文件。

说明:

-d 和 -b 都用于指定 KOfam 数据库,但二者的数据库加载方式不同。-d 用于直接指定官方 KOfam 数据库目录,适合直接使用下载后的原始数据库文件;-b 用于指定预先序列化的数据库文件,可减少重复读取和解析大量 HMM 模型的开销,更适合大规模蛋白质注释任务。-d 和 -b 不能同时使用,只能二选一。

实战演练

代码语言:javascript
复制
# 示例蛋白序列:https://ftp.ncbi.nlm.nih.gov/genomes/all/GCF/000/005/845/GCF_000005845.2_ASM584v2/GCF_000005845.2_ASM584v2_protein.faa.gz
# 去除序列ID后的注释信息
seqkit replace -p '\s.*' -r '' GCF_000005845.2_ASM584v2_protein.faa.gz -w 0 > ASM584v2_protein.faa
# 方式 1:输出 PyHMMSearch 整理后的全部命中结果
pyhmmsearch -i ASM584v2_protein.faa -o PyHMMSearch_Pfam_all.tsv -p 16 -b ./db/Pfam/PyHMMSearch.pkl.gz
# 方式 2:同时输出整理结果、序列级结果和结构域级结果
pyhmmsearch -i ASM584v2_protein.faa -o PyHMMSearch_Pfam_all.tsv --tblout PyHMMSearch_Pfam.tblout.tsv --domtblout PyHMMSearch_Pfam.domtblout.tsv -p 16 -b ./db/Pfam/PyHMMSearch.pkl.gz

说明: PyHMMSearch 还提供了其他丰富参数和高级功能,本文仅介绍其中较为常用的核心参数及基本使用方法,旨在帮助用户快速了解工具的主要功能和应用流程,起到抛砖引玉的作用。更多详细命令和参数设置,读者可结合官方文档、AI 辅助工具以及实际研究需求进行灵活调整,以满足不同数据规模和分析场景的需求。

结果解读

1.结果文件

代码语言:javascript
复制
# 查看结果
tree -h 
.
├── [1.3M]  ASM584v2_protein.faa
├── [881K]  GCF_000005845.2_ASM584v2_protein.faa.gz
├── [1.4M]  PyHMMSearch_Pfam_all.tsv
├── [6.7M]  PyHMMSearch_Pfam.domtblout
└── [3.2M]  PyHMMSearch_Pfam.tblout.tsv

文件说明

文件

分辨水平

主要用途

PyHMMSearch_Pfam_all.tsv

注释结果

最常用,用于功能统计分析

PyHMMSearch_Pfam.tblout.tsv

蛋白水平

查看蛋白-HMM整体匹配信息

PyHMMSearch_Pfam.domtblout

结构域水平

查看具体结构域位置和组成

2.查看结果内容

代码语言:javascript
复制
# 查看结果
csvtk pretty -t PyHMMSearch_Pfam_all.tsv | head 

列名

含义

结果解读

id_protein

输入蛋白质序列 ID

如 NP_416317.1,表示进行 HMM 搜索和功能注释的目标蛋白序列。

id_hmm

命中的 HMM 模型编号,通常对应 Pfam accession

如 PF00389.37,表示该蛋白与 Pfam 数据库中的 PF00389 模型匹配,可进一步查询对应蛋白家族或结构域功能。

threshold

HMM 搜索结果采用的筛选阈值类型

用于表示当前结果采用的筛选标准,如 E-value 阈值、gathering cutoff、trusted cutoff 等。本结果为空时,通常表示使用默认 E-value 筛选。

score

蛋白序列与 HMM 模型比对得到的 bit score

分值越高,表示蛋白序列与该 HMM 模型的匹配程度越高。通常 score 越高代表同源关系越可靠。

bias

HMMER 计算的序列组成偏差校正值

用于评估低复杂度区域或异常氨基酸组成对匹配结果的影响。数值较低通常表示结果受组成偏差影响较小。

best_domain_score

蛋白中最佳匹配结构域的 bit score

表示该蛋白内得分最高的结构域匹配情况,适用于多结构域蛋白分析。

best_domain_bias

最佳匹配结构域的组成偏差校正值

反映最佳结构域匹配过程中序列组成偏差的影响,数值越低表示可信度越高。

e-value

HMM 比对的统计显著性值

数值越小,表示随机情况下获得该匹配的可能性越低,说明该蛋白与 HMM 模型之间的同源关系越显著。

description

HMM 模型对应的功能描述

给出 Pfam 数据库中该结构域或蛋白家族的功能注释信息,可用于推断蛋白潜在功能。

参考文献

  • Eddy SR. Accelerated Profile HMM Searches. PLoS Comput Biol. 2011 Oct;7(10):e1002195. doi: 10.1371/journal.pcbi.1002195. Epub 2011 Oct 20. PMID: 22039361.
  • Larralde M, Zeller G. PyHMMER: a Python library binding to HMMER for efficient sequence analysis. Bioinformatics. 2023 May 4;39(5):btad214. doi: 10.1093/bioinformatics/btad214. PMID: 37074928.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档