如何将生物序列tokenization为token?

server/2024/9/22 21:56:02/

文章目录

  • 原理讲解:
  • 代码实现:利用k-mer技术把核苷酸或氨基酸序列tokenization成token
    • 输入文件和结果文件:

原理讲解:

tokenization是自然语言处理领域非常成熟的一项技术,tokenization就是把我们研究的语言转换成计算机能够识别的数字——token。


在生物领域,如何把核苷酸或氨基酸序列tokenization成token呢?

我们可以使用k-mer技术:
k-mer指的是将k个序列单元作为一个滑动窗口,从第一个序列单元开始扫描,提取出序列中的k-mer。然后我们再对k-mer建立索引。


如下图所示,我们采用了3-mer窗口将“AGCACT”每次滑动1个碱基。

3-mer


k-mer技术有两个可选值:窗口大小k值和k-mer的滑动步长

tokenization示意图


为什么不使用one-hot编码和直接将AGCT编码为1 2 3 4进行序列的tokenization呢?而且这样占用的内存要小很多。

原因在于:功能序列一般都是多核苷酸或多氨基酸,k-mer技术可以将一段序列表示为1个数字,模型记住1个数字要比记住k个数字容易的多。


代码实现:利用k-mer技术把核苷酸或氨基酸序列tokenization成token

def seq2kmer(file_dir, k):"""将file文件中的序列转换为 kmers,滑动步长固定为1:param file_dir: 原始序列文件路径:param k: 自定义窗口大小:return:""""""读取示例数据,由于示例数据是多行的,为了避免换行符对结果产生影响,需要将多行字符串转换为单行字符串。"""with open(file_dir) as object:contents = object.read()seq = contents.replace('\n', '')  # contents.replace('\n', '') 将换行符全都去掉,将行与行紧密相连。kmer = [seq[x:x + k] for x in range(len(seq) - k + 1)]kmers = " ".join(kmer)  # .join(kmer) 将列表kmer连接成一个字符串,kmer之间用空格分隔。"""输出1:将转换为的的kmers保存到txt文本中。"""with open(f"{k}mers_{file_dir}", "w") as object:object.write(kmers)from itertools import productnucleotides = 'ACGT'"""生成所有kmers"""kmers_all = [''.join(combination) for combination in product(nucleotides, repeat=k)]  # 使用itertools.product生成所有可能的组合"""输出2:穷举生成所有kmers,并保存到txt文本中。"""with open(f"{k}mers_all.txt", "w") as object:contents = str(kmers_all)object.write(contents)"""输出3:将file_dir文件的kmers索引写入txt文本"""index = [kmers_all.index(seq[x:x + k]) for x in range(len(seq) - k + 1)]with open(f"index_{k}mers_{file_dir}", "w") as object:object.write(str(index))# 使用示例数据运行seq2kmer
k = 6
seq2kmer("acrA.txt", k)

输入文件和结果文件:


输入文件acrA.txt和生成的三个文件


输入文件acrA.txt


6mers_acrA.txt


6mers_all.txt


index_6mers_acrA.txt


注意:以上代码暂未将[CLS]分类token、[PAD]填充token、[UNK]未知token、[SEP]分句token和[MASK]掩码token(“[]” 也是token的一部分)加入到词汇表中


谢谢阅读

本文由mdnice多平台发布


http://www.ppmy.cn/server/120479.html

相关文章

macOS平台(intel)编译MAVSDK安卓平台SO库

1.下载MAVSDK: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译liblzma 修改CMakeLists.txt文件增加C与CXX指令-fPIC set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}") 修改如下:…

算法题目复习(0909-0917)

1. 连续子序列和 pdd的算法题&#xff0c;根本不记得怎么做 给一个数组&#xff0c;有正数和负数&#xff0c;算出连续子序列的和最大为多少 int maxSubArraySum(vector<int>& nums) {int maxSoFar nums[0];int maxEndingHere nums[0];for (size_t i 1; i <…

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布&#xff0c;配备 Linux 内核 6.8 请访问原文链接&#xff1a;https://sysin.org/blog/ubuntu-2204/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xf…

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线…

nginx_单机平滑升级

#!/bin/bash# 定义要下载的 Nginx 源码包的 URL 和保存路径 nginx_tar"http://nginx.org/download/nginx-1.19.0.tar.gz" nginx_tar_file"/tmp/nginx-1.19.0.tar.gz" nginx_version"nginx-1.19.0" nginx_path$(which nginx) # 获取 Nginx 的路径…

【Kubernetes】常见面试题汇总(二十四)

目录 71.假设一家公司想要修改它的部署方法&#xff0c;并希望建立一个更具可扩展性和响应性的平台。您如何看待这家公司能够实现这一目标以满足客户需求&#xff1f; 72.考虑一家拥有非常分散的系统的跨国公司&#xff0c;期待解决整体代码库问题。您认为公司如何解决他们的问…

前端环境搭建

配置国内镜像 nvm node_mirror https://npmmirror.com/mirrors/node/ nvm npm_mirror https://npmmirror.com/mirrors/npm/ 安装指定版本node并切换&#xff08;以16.17.0为例&#xff09;&#xff0c;过程中会弹出两次授权&#xff0c;确认即可 nvm install 16.17.0 nvm us…

JavaScript在数据可视化领域的探索与实践

目录 引言 JavaScript可视化库概览 D3.js基础入门 1. 引入D3.js 2. 绘制简单的条形图 3. 添加轴 交互性与动画 实际应用场景 结论 引言 在数据驱动决策日益重要的今天&#xff0c;数据可视化成为连接数据与洞察的桥梁。JavaScript&#xff0c;作为前端开发的主力军&am…