LLM生成大模型在生物基因DNA:DNABERT、DNABERT-2

本文介绍了如何使用DNABERT和其改进版DNABERT-2将DNA序列视为连续文本,通过Transformer模型进行训练,特别关注了k-mer和BPEtoken切分方法,以及如何提取和处理特征向量,如平均池化和最大池化技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:
https://www.youtube.com/watch?v=mk-Se29QPBA&t=1388s

写明这些训练模型可以最终训练好可以进行DNA特征向量的提取,应用与后续

在这里插入图片描述

1、DNABERT

https://github.com/jerryji1993/DNABERT

主要思路就是把DNA序列当成连续文本数据,直接用成熟的自然语言训练模型transformer进行生物DNA序列数据的训练
不同点主要就是ATCG序列切分token,DNA序创造了k-mer切分方法

3k-mer切分下图:
在这里插入图片描述

在这里插入图片描述

2、DNABERT-2

https://github.com/MAGICS-LAB/DNABERT_2

DNABERT-2主要是切词token方法的改进,用了transformer主流用的BPE token切分算法(参考学习:https://blog.csdn.net/xiao_ling_yun/article/details/129517312)
在这里插入图片描述
向量特征提前:

import torch
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("zhihan1996/DNABERT-2-117M", trust_remote_code=True)
model = AutoModel.from_pretrained("zhihan1996/DNABERT-2-117M", trust_remote_code=True)

dna = "ACGTAGCATCGGATCTATCTATCGACACTTGGTTATCGATCTACGAGCATCTCGTTAGC"
inputs = tokenizer(dna, return_tensors = 'pt')["input_ids"]
hidden_states = model(inputs)[0] # [1, sequence_length, 768]

# embedding with mean pooling
embedding_mean = torch.mean(hidden_states[0], dim=0)
print(embedding_mean.shape) # expect to be 768

# embedding with max pooling
embedding_max = torch.max(hidden_states[0], dim=0)[0]
print(embedding_max.shape) # expect to be 768
### 如何在 DNABERT 中创建或应用 Hotmap 热点图 为了在 DNABERT 或其变体中实现热点图功能,通常涉及以下几个方面的工作: #### 1. 数据准备与预处理 首先需要准备好 DNA 序列数据并将其转换成适合输入到 Transformer 模型的形式。这一步骤已经在多个资源中有详细介绍[^2]。 #### 2. 获取注意力权重矩阵 Transformer 架构中的自注意机制能够计算不同位置之间的关联程度,这些信息存储于多头注意力层内部的状态变量之中。对于每一对 token (即碱基),都会有一个对应的分数表示它们之间的重要性关系。此部分可以通过访问模型内部特定层次来获取[^3]。 ```python import torch from transformers import BertModel, BertTokenizer tokenizer = BertTokenizer.from_pretrained('zhihan1996/DNABERT') model = BertModel.from_pretrained('zhihan1996/DNABERT') def get_attention_weights(input_sequence): inputs = tokenizer(input_sequence, return_tensors="pt") outputs = model(**inputs, output_attentions=True) attentions = outputs.attentions # Select the attention weights from a specific layer and head. selected_layer_index = 0 selected_head_index = 0 attention_matrix = attentions[selected_layer_index][0, selected_head_index].detach().numpy() return attention_matrix ``` 这段代码展示了如何从指定层数和头部索引处提取注意力权重矩阵[^5]。 #### 3. 可视化热力图 有了上述得到的关注度得分之后,就可以利用 Python 的可视化库如 `matplotlib` 来绘制热度图了。这里提供了一个简单的例子说明怎样基于前面获得的数据制作这样的图表[^4]。 ```python import seaborn as sns import matplotlib.pyplot as plt attention_matrix = get_attention_weights("ATCG") # Replace with actual sequence. plt.figure(figsize=(8, 6)) sns.set(font_scale=1.2) heatmap = sns.heatmap(attention_matrix, annot=True, fmt=".2f", cmap='YlGnBu', cbar_kws={'label': 'Attention Score'}) plt.title('Attention Heatmap', pad=15) plt.xlabel('Position Index') plt.ylabel('Position Index') plt.show() ``` 通过这种方式可以在 DNABERT 上成功地展示出各个位置间相互作用强度的情况,从而帮助理解模型决策过程以及发现潜在的重要区域[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loong_XL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值