Dedal:基于深度嵌入与可微 Smith-Waterman 的蛋白质序列比对与同源检测实战指南
人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载DedalDeep embedding and alignment of protein sequences是 Google Research 在 google-research 仓库中开源的一套蛋白质序列比对与同源检测工具包其核心思想是让 Transformer 编码器在监督信号掩码语言建模、成对序列比对、同源检测下学习序列嵌入并借助可微的扰动 Smith-WatermanPerturbed Smith-Waterman把传统动态规划比对变成端到端可训练的网络层。本文以 dedal/README.md 为骨架结合仓库源码与 Gin 配置完整讲解环境安装、TensorFlow Hub 预训练模型调用、推理管线原理以及从零开始多阶段训练的全部操作细节。安装与环境准备Dedal 并不是一个独立的 pip 包而是 google-research 仓库中的一个子目录。安装的第一步是克隆整个仓库git clone https://github.com/google-research/google-research.git然后在仓库根目录即google_research文件夹下通过 dedal/requirements.txt 安装全部依赖pip install -r dedal/requirements.txtrequirements.txt 中声明的核心依赖包括依赖版本要求用途absl-py0.7.0命令行 flag 解析与日志main.py依赖gin-config0.4.0声明式超参数/架构配置全部.gin文件依赖numpy1.18.4数值计算与后处理tensorflow2.3.0模型构建与训练tensorflow_datasets3.0.0数据集基础设施tensorflow_probability0.1.0扰动 SW 所需的分布采样Gumbel/Normaltf-models-nightly最新TF Hub 加载与模型工具链需要特别指出的是源码中的导入语句形如from dedal import infer参见 infer.py要求以仓库根目录为工作区并保证dedal包可见因此安装与后续所有命令都应在克隆出的google_research文件夹内执行。使用 TensorFlow Hub 预训练模型DEDAL 预训练模型以 SavedModel 形式发布在 TensorFlow Hub 上模块名google/dedal/3。模型已经包含了从原始蛋白质序列到比对结果、同源判定 logits 以及逐位嵌入的完整计算图。输入输出协议模型输入是一个tf.Tensortf.int32[2B, 512]表示一批 B 对、按最大长度 512 右填充的序列对512 已包含特殊的 EOS 结束符。批次中序列对必须连续排列inputs[2*b]与inputs[2*b 1]构成第 b 个序列对b 从 0 到 B-1。默认情况下模型运行在alignment比对模式返回一个 Python dict包含sw_scorestf.Tensortf.float32[B]比对分数Smith-Waterman 得分homology_logitstf.Tensortf.float32[B]同源检测 logitspathstf.Tensortf.float32[B, 512, 512, 9]预测的比对路径sw_params由三个tf.Tensortf.float32[B, 512, 512]组成的元组分别对应上下文相关的 Smith-Waterman 参数——替换得分substitution scores、gap open 罚分与 gap extend 罚分。此外模型还提供额外的签名以运行embedding嵌入模式此时仅返回单个tf.Tensortf.float32[2B, 512, 768]即每条输入序列每个位置的嵌入向量。最小推理示例README 中的完整示例以论文 Figure 3 的Gorilla与Mallard两条序列为例如下import tensorflow as tf import tensorflow_hub as hub from dedal import infer # Requires google_research/google-research. dedal_model hub.load(https://tfhub.dev/google/dedal/3) # Gorilla and Mallard sequences from [1, Figure 3]. protein_a SVCCRDYVRYRLPLRVVKHFYWTSDSCPRPGVVLLTFRDKEICADPRVPWVKMILNKL protein_b VKCKCSRKGPKIRFSNVRKLEIKPRYPFCVEEMIIVTLWTRVRGEQQHCLNPKRQNTVRLLKWY # Represents sequences as tf.Tensortf.float32[2, 512] batch of tokens. inputs infer.preprocess(protein_a, protein_b) # Aligns protein_a to protein_b. align_out dedal_model(inputs) # Retrieves per-position embeddings of both sequences. embeddings dedal_model.call(inputs, embeddings_onlyTrue) # Postprocesses output and displays alignment. output infer.expand( [align_out[sw_scores], align_out[paths], align_out[sw_params]]) output infer.postprocess(output, len(protein_a), len(protein_b)) alignment infer.Alignment(protein_a, protein_b, *output) print(alignment) # Displays the raw Smith-Waterman score and the homology detection logits. print(Smith-Waterman score (uncorrected):, align_out[sw_scores].numpy()) print(Homology detection logits:, align_out[homology_logits].numpy())代码中infer.preprocess、infer.expand、infer.postprocess与infer.Alignment全部定义在 infer.py 中值得逐层拆解其内部机制。推理管线源码级解析preprocess文本到 token 批次infer.preprocess 将两条蛋白质字符串依次经过三个数据变换transforms.Encode(vocabvocabulary.seqio_vocab, onkeys)用 SentencePiece 词表把氨基酸序列编码为 token idtransforms.EOS(vocabvocabulary.seqio_vocab, onkeys)在序列末尾追加 EOS 特殊 tokentransforms.CropOrPad(sizemax_length, ...)裁剪或填充到固定长度 512默认max_length512。最终通过tf.stack([seqs[left], seqs[right]], axis0)拼成[2, 512]的批次与 TF Hub 模块的输入协议严格对应。expand 与 postprocess从扁平 dict 恢复嵌套结构TF Hub SavedModel 的输出往往被序列化为扁平 key形如output_4_1_1。infer.expand 的作用正是按 key 中的位置编号把扁平 dict 递归还原成嵌套 tuple非 dict 输入则原样返回no-op。infer.postprocess 则完成三项关键后处理用tf.squeeze(axis0)去掉 batch 维对 gap open / gap extend 罚分取负号并广播成与替换得分相同的形状三者沿最后一维堆叠为[L1, L2, 3]的参数张量负号是为了在展示时表达罚分语义裁剪掉length_1 × length_2之外的填充区域通过alignment.paths_to_state_indicators把 9 状态路径表示转换为 match / gap_open / gap_extend 三态指示。Alignment 对象可读的比对展示infer.Alignment 在构造时调用expand()把路径张量解析为三条等长字符串left_match左序列、right_match右序列与matches连接符行。连接符语义在_position_to_char中定义match 状态下若两字符完全相同输出|若替换得分为正则输出:否则输出.gap 状态输出空格。__str__最终把它们排版为经典的三行比对视图并附带首尾位置坐标。该对象还暴露了几个直接可用的派生属性identitymatches中|的个数精确匹配数similarityidentity加上:的个数考虑替换得分后的相似数gaps左右序列中出现-的位置总数。架构原理可微 Smith-Waterman 与多任务模型理解预训练模型的行为需要看其网络结构配置 configs/model/dedal.gin 与模型实现 models/dedal.py。顶层模型dedal.Dedal由三部分组成encoderencoders.TransformerEncoder默认emb_dim768、num_layers6、num_heads12、mlp_dim3072、各类 dropout 均为 0.1使用绝对位置编码max_len1024aligneraligners.SoftAligner负责把一对序列嵌入转成 SW 参数与比对分数。其中替换得分由PairwiseBilinearDense双线性相似度产生gap 罚分由ContextualGapPenalties产生并分别用 bias 初始化为 11.0gap open与 0.0gap extend激活函数为 softplus配合mask_penalty1e9屏蔽填充区域heads多任务输出头包括嵌入头掩码 LM 的逐 token 输出头DensePerTokenOutputHead与比对头dedal.Selector直通 同源头homology.LogCorrectedLogits。比对分数计算的核心是 smith_waterman.py 中的扰动 Smith-Watermansmith_waterman.perturbed_alignment_score默认sigma0.1评测时切换为无扰动的unperturbed_alignment_scoresoft 版本温度temp0.1。该实现通过wavefrontify/unwavefrontify把动态规划矩阵按反对角线重排smith_waterman.py实现可向量化、可求导的波前算法从而让比对分数本身可以参与反向传播——这正是 DEDAL 能把比对任务端到端训练的关键。训练数据与预处理DEDAL 训练与评测使用的公开数据为UniRef502018 年 3 月版本用于掩码语言建模预训练Pfam 34.0用于成对比对与同源检测训练。preprocessing/子目录包含复现论文预处理流程的全部代码。论文中各 Pfam-A seed 划分对应的序列标识符可下载获取见 README 原文。三个数据任务的 Gin 配置分别声明了各自的目录布局与必需绑定configs/data/uniref50.gin要求UNIREF50_DATA_DIR下含train/validation/test三个子目录内部为带表头的 CSV 文件序列长度 1024shuffle buffer 32768configs/data/pfam34_alignment.gin要求PFAM34_ALIGNMENT_DATA_DIR下含train/iid_validation/iid_test/ood_validation/ood_test五个子目录内部为带表头的 TSV 文件序列长度 512比对状态长度 1025configs/data/pfam34_homology.gin目录布局与 alignment 相同特征转换器HomologyFeatureConverter默认fine_grained_labelsFalse。三个数据配置还共同依赖三个必需词表绑定MAIN_VOCAB_PATH、TOKEN_REPLACE_VOCAB_PATH、ALIGNMENT_PATH_VOCAB_PATH指向 SeqIO SentencePiece 词表文件。从零训练命令与 Gin 配置详解完整训练命令在google_research文件夹下同时训练掩码语言建模、成对序列比对与同源检测三个任务python3 -m dedal.main -- \ --base_dir /tmp/dedal \ --gin_config data/uniref50.gin \ --gin_config data/pfam34_alignment.gin \ --gin_config data/pfam34_homology.gin \ --gin_config model/dedal.gin \ --gin_config task/finetune.gin \ --gin_bindings UNIREF50_DATA_DIR/path/to/masked_lm/data \ --gin_bindings PFAM34_ALIGNMENT_DATA_DIR/path/to/alignment/data \ --gin_bindings PFAM34_HOMOLOGY_DATA_DIR/path/to/homology/data \ --gin_bindings MAIN_VOCAB_PATH/path/to/main/vocab \ --gin_bindings TOKEN_REPLACE_VOCAB_PATH/path/to/token_replace/vocab \ --gin_bindings ALIGNMENT_PATH_VOCAB_PATH/path/to/alignment_path/vocab \ --task train \ --alsologtostderrmain.py 定义了该入口的全部 flagFlag默认值说明--base_dirNone保存 checkpoint 与日志的根目录--reference_dirNone参考模型读取目录若存在--eval_in_train_jobTrue训练任务中是否同时运行 eval对其他 task 忽略--tasktrain可选train/eval/downstream--gin_config[]可重复的 Gin 配置文件路径列表--gin_bindings[]换行分隔的 Gin 参数绑定--config_pathdedal/configsGin 配置所在目录main函数会把--gin_config中的相对路径拼接到--config_path下解析main.py随后构建分布策略并进入training_loop.TrainingLoop。值得注意的是主循环对 worker 抢占preemption做了容错捕获tf.errors.UnavailableError后会自动恢复并继续训练main.py。多任务微调配置task/finetune.ginconfigs/task/finetune.gin 是三个任务联合微调的核心配置关键参数包括训练循环batch_size(128, 128, 256)分别对应 masked_lm / alignment / homology 三个数据构建器、num_steps1_000_000、num_eval_steps100、num_steps_per_train_iteration16损失权重掩码 LM 与同源检测各weight20.0比对任务weight1.0三者分别使用SparseCategoricalCrossentropyfrom_logits、SmithWatermanLoss与BinaryCrossentropy优化器Adamepsilon1e-08、clipnorm1.0学习率采用InverseSquareRootDecayWithWarmuplr_max1e-4、warmup_steps8000日志与 checkpointPERIOD2000步记录一次标量并保存一次 checkpointMAX_TO_KEEP10评测指标掩码 LM 的准确率/交叉熵/困惑度比对的AlignmentPrecisionRecall按序列一致性分桶统计、AlignmentMSE、AlignmentStats、AlignmentScore、SWParamsStats同源检测的BinaryAccuracy与 ROC/PR 的 AUC。仓库还提供了其他任务变体配置如 configs/task/masked_lm_pretraining.gin仅预训练num_steps2_000_000、lr_max1e-3、aligner_clsNone、configs/task/finetune_alignment_only.gin、configs/task/finetune_without_homology.gin、configs/task/finetune_without_masked_lm.gin以及 TAPE 基准系列tape_fluorescence、tape_proteinnet、tape_remote_homology、tape_secondary_structure、tape_stability可根据研究目标灵活组合。训练运行与可视化--base_dir指定的目录上例为/tmp/dedal用于写入 checkpoint 与日志指标。可视化指标只需在对应目录启动 TensorBoard%tensorboard --logdir /tmp/dedal训练中断后直接重跑同一命令不会从头开始而是从最近一个 checkpoint 恢复训练。checkpoint 保存频率与日志频率可在task系列 Gin 配置文件中调整例如 configs/task/finetune.gin 中的PERIOD与MAX_TO_KEEP。task 模式的三种语义--taskflag 控制运行模式见 main.py 与 READMEtrain训练模式默认可同时附带 evaleval评测模式。评测时训练 checkpoint 会被动态加载直到最后一个因此可以并行运行一个训练进程与一个评测进程评测不会拖慢训练downstream下游任务训练携带其自身的 eval。如果希望训练与评测交替执行而非并行可在训练循环中将separate_evalFalse。关于训练资源的说明Transformer 架构在 CPU 上训练会非常缓慢使用加速器可显著提升训练速度。README 明确说明论文中的预训练 DEDAL 模型使用32 个 TPU v3 核心训练完成。如果只是复现或调参建议在具备多卡 GPU 或 TPU 的环境中进行并可按需调低num_steps等超参。小结DEDAL 的意义在于把序列比对这一经典算法任务纳入了端到端深度学习的框架Transformer 编码器学习上下文相关的替换得分与 gap 罚分可微 Smith-Waterman 层负责生成比对分数与路径同源检测头在此基础上给出二分类 logits。通过本文介绍的 TF Hub 推理流程可以在数行代码内获得可视化比对与同源打分通过 Gin 配置体系与 main.py 入口也可以完整复现掩码预训练、多任务微调、评测与下游任务训练的全流程。所有源码与配置均可从仓库的 dedal/ 目录含 infer.py、models/dedal.py、smith_waterman.py、configs/进一步深入研读。说明本文内容基于 dedal/README.md 及其对应源码与配置整理DEDAL 遵循 Apache 2.0 许可且这不是 Google 的官方产品见 README 免责声明。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐如何用 Python 实现 Smith-Waterman 算法完成 DNA 与蛋白质的局部序列比对如何用 Python 实现 Smith Waterman 算法完成 DNA 与蛋白质的局部序列比对 如果你需要判断两段生物序列DNA 碱基序列或蛋白质氨基酸序示例工程西工大软院大一线性代数nwpu-cram知识点与习题答案完整指南西工大软院大一线性代数nwpu cram知识点与习题答案完整指南 西北工业大学软件学院的大一线性代数课程是计算机科学专业的重要基础课掌握好线性代数知识点和习教程知识库教育MUMmer基因序列比对工具快速完成DNA与蛋白质序列分析的终极指南MUMmer基因序列比对工具快速完成DNA与蛋白质序列分析的终极指南 MUMmer是一款强大的基因序列比对工具专为快速比对DNA和蛋白质序列而设计。无论是处数据分析上一篇终极指南如何合规使用Apache-2.0许可的html5-qrcode跨平台二维码扫描库下一篇打造你的专属AI虚拟主播Neuro项目7天快速上手指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

深圳GEO优化服务商怎么选?五种硬指标与避坑指南

深圳GEO优化服务商怎么选?五种硬指标与避坑指南

1. 深圳GEO优化服务商怎么选才不踩坑在深圳做本地生意的人,这两年应该都有一个明显感受:以前投广告、发传单、挂户外大牌就能等客上门的时代,基本翻篇了。现在客户找服务、找门店、找供应商,第一反应是打开手机问AI助手&#xff0…

2026/9/20 18:35:42 阅读更多 →
GSConv原理解析:标准卷积与深度可分离卷积的工程化融合

GSConv原理解析:标准卷积与深度可分离卷积的工程化融合

1. 这不是又一个“炫技式”新卷积——GSConv到底在解决什么真实问题?你可能已经刷到过不少标题党:“全新卷积结构横空出世!”“性能吊打ResNet!”“参数量砍半,精度反升!”——结果点进去一看,要…

2026/9/20 18:35:42 阅读更多 →
OpenClaw、Hermes Agent、Claude Code与Codex CLI技术定位对比

OpenClaw、Hermes Agent、Claude Code与Codex CLI技术定位对比

1. 这不是“选哪个更好”,而是搞清你手里的锤子能钉哪颗钉子最近两周,我连续收到17个不同行业的朋友发来的截图:有人在Termux里跑OpenClaw报错“could not safely verify the WSL2 environment”,有人在飞书机器人里接入Codex CLI…

2026/9/20 18:35:42 阅读更多 →

最新新闻

Faker 入门与进阶实战指南:用 Python 生成高质量假数据的完整方案

Faker 入门与进阶实战指南:用 Python 生成高质量假数据的完整方案

Faker 入门与进阶实战指南:用 Python 生成高质量假数据的完整方案 【免费下载链接】faker Faker is a Python package that generates fake data for you. 项目地址: https://gitcode.com/gh_mirrors/fak/faker Faker 是 Python 生态中一款生成假数据的工具包…

2026/9/20 20:27:58 阅读更多 →
OpCore-Simplify 使用指南:从硬件检测到 OpenCore EFI 生成的实操流程

OpCore-Simplify 使用指南:从硬件检测到 OpenCore EFI 生成的实操流程

OpCore-Simplify 使用指南:从硬件检测到 OpenCore EFI 生成的实操流程 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify 是…

2026/9/20 20:27:58 阅读更多 →
DTI图像畸变矫正全流程:eddy_topup原理、参数与实战经验

DTI图像畸变矫正全流程:eddy_topup原理、参数与实战经验

做DTI数据处理的人,恐怕没有谁没被涡流畸变和磁化率畸变折磨过。尤其是用单次激发EPI序列采集的扩散加权像,几何变形、错位、信号丢失,这些问题几乎不可避免。早期大家要么忍痛手动配准,要么用各种“土办法”凑合,直到…

2026/9/20 20:27:58 阅读更多 →
Redisson之RAtomicLong

Redisson之RAtomicLong

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 package bright.redisson;import org.redisson.Redisson; import org.redisson.api.RAtomicLong; im…

2026/9/20 20:27:58 阅读更多 →
Redisson连接Redis服务器

Redisson连接Redis服务器

^^ 《榴芒客服系统》是我们工作室开发的在线客服系统,欢迎下载试用: 《榴芒客服系统》https://blog.csdn.net/look4liming/article/details/164755808 package bright.redisson;import org.redisson.Redisson; import org.redisson.api.RedissonClient;…

2026/9/20 20:27:58 阅读更多 →
Unity资源提取指南:3步用AssetRipper导出完整Unity工程

Unity资源提取指南:3步用AssetRipper导出完整Unity工程

Unity资源提取指南:3步用AssetRipper导出完整Unity工程 【免费下载链接】AssetRipper GUI application to analyze game files 项目地址: https://gitcode.com/GitHub_Trending/as/AssetRipper AssetRipper是一款开源的GUI工具,专门做Unity资源提…

2026/9/20 20:26:57 阅读更多 →

日新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/20 0:00:46 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →