如何将生物序列tokenization为token?

原理讲解

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


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

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


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

3-mer
3-mer

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

tokenization示意图
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 product
    nucleotides = '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和生成的三个文件

输入文件acrA.txt
输入文件acrA.txt

6mers_acrA.txt
6mers_acrA.txt

6mers_all.txt
6mers_all.txt

index_6mers_acrA.txt
index_6mers_acrA.txt

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


谢谢阅读

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络设备登录——《路由与交换技术》实验报告

目录 一、实验目的 二、实验设备和环境 三、实验记录 1.通过 Console 登录 步骤1:连接配置电缆。 步骤2:启动PC,运行超级终端。 步骤3:进入Console 配置界面 2.通过 Telnet 登录 步骤1:通过 Console 接口配置 Telnet 用户。 步骤2:配置 super 口令 步骤3:配置登录欢迎…

C++——求3*3矩阵对角元素之和。

没注释的源代码 #include <iostream> using namespace std; int main() { int a[3][3],i,j,sum0; cout<<"请输入a组中的元素:"<<endl; for(i0;i<2;i) { for(j0;j<2;j) { cin>>a[i][j]…

神经网络构建原理(以MINIST为例)

神经网络构建原理(以MINIST为例) 在 MNIST 手写数字识别任务中&#xff0c;构建神经网络并训练模型来进行分类是经典的深度学习应用。MNIST 数据集包含 28x28 像素的手写数字图像&#xff08;0-9&#xff09;&#xff0c;任务是构建一个神经网络&#xff0c;能够根据输入的图像…

吉首大学--23级题目讲解

7-1 单链表基本操作 在 C/C 中&#xff0c;.&#xff08;点&#xff09;和 ->&#xff08;箭头&#xff09;运算符用于访问结构体或类的成员&#xff0c;但它们的使用场景不同。 1. . 运算符 . 运算符用于访问结构体或类的成员&#xff0c;通过对象或结构体变量直接访问。…

JS函数部分

函数调用 无参数 var fun function() {console.log(被调用) //不区分单引号双引号}fun () //有无分号都可有参数 var fun function(a, b) {var sum abconsole.log(sum) }fun (10,20) 立即执行函数 被定义完立即调用&#xff0c;且执行一次 (function (){alert(ni);})()创建…

es的封装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、类和接口介绍0.封装思想1.es的操作分类 二、创建索引1.成员变量2.构造函数2.添加字段3.发送请求4.创建索引总体代码 三.插入数据四.删除数据五.查询数据 前…

Element Plus 中Input输入框

通过鼠标或键盘输入字符 input为受控组件&#xff0c;他总会显示Vue绑定值&#xff0c;正常情况下&#xff0c;input的输入事件会正常被响应&#xff0c;他的处理程序应该更新组件的绑定值&#xff08;或使用v-model&#xff09;。否则&#xff0c;输入框的值将不会改变 不支…

windows环境下配置MySQL主从启动失败 查看data文件夹中.err发现报错unknown variable ‘log‐bin=mysql‐bin‘

文章目录 问题解决方法 问题 今天在windows环境下配置MySQL主从同步&#xff0c;在修改my.ini文件后发现MySQL启动失败了 打开my.ini检查参数发现没有问题 [mysqld] #开启二进制日志&#xff0c;记录了所有更改数据库数据的SQL语句 log‐bin mysql‐bin #设置服务id&#x…

梧桐数据库(WuTongDB):Volcano/Cascades 优化器框架简介

Volcano/Cascades 是现代关系数据库系统中使用的两种重要的查询优化器框架&#xff0c;它们用于将高层 SQL 查询转换为高效的执行计划。它们采用了一种基于规则的方式来探索各种可能的查询执行计划&#xff0c;目的是选择一个代价最小的计划。以下是对这两种框架的详细讲解&…

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别

重要说明&#xff1a;数据集里面有2/3是增强数据集&#xff0c;请仔细查看图片预览&#xff0c;确认符合要求在下载&#xff0c;分辨率均为640x640 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件…

Python 二级考试

易错点 电脑基础知识 定义学生关系模式如下&#xff1a;Student &#xff08;S#&#xff0c; Sn&#xff0c; Ssex&#xff0c;class&#xff0c;monitorS#&#xff09;&#xff08;其属性分别为学号、学生名、性别、班级和班长学号&#xff09; 在关系模式中&#xff0c;如果…

全志A523 系统篇(一) 获取vmlinux

通过固件获取 longan/build/getvmlinux.sh ./getvmlinux.sh <aw-format-firmware> 其中<aw-format-firmware>为全志格式的包含vmlinux的固件 运行成功后&#xff0c;会在脚本目录下生成output目录&#xff0c;目录里面包含vmlinux.fex&#xff08;vmlinux的.ta…

python-SZ斐波那契数列/更相减损数

一&#xff1a;SZ斐波那契数列题目描述 你应该很熟悉斐波那契数列&#xff0c;不是吗&#xff1f;现在小理不知在哪里搞了个山寨版斐波拉契数列&#xff0c;如下公式&#xff1a; F(n) { $\ \ \ \ \ \ \ \ \ \ \ \ $ a,( n1) $\ \ \ \ \ \ \ \ \ \ \ \ $ b,( n2) $\ \ \ \ \ \ …

【优选算法之双指针】No.2--- 经典双指针算法(下)

文章目录 前言一、双指针示例&#xff1a;1.1 ⽔果成篮1.2 和为s的两个数字1.3 三数之和1.4 四数之和 二、双指针总结&#xff1a; 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专…

git-fork操作指南

git-fork操作指南 1.fork github仓库2. clone fork仓库3. 分支修改4.与原始仓库保持修改同步4.1添加上游仓库4.2 拉取上游分支4.3 合并更改4.4 推送更改 参考&#xff1a; 有时候我们需要将github的项目fork到自己名下&#xff0c;然后修改并提交pull request&#xff0c;这里将…

安装黑群晖系统,并使用NAS公网助手访问教程(好文)

由于正版群晖系统的价格不菲&#xff0c;对于预算有限的用户来说&#xff0c;安装黑群晖系统成为了一个不错的选择&#xff08;如果您预算充足&#xff0c;建议选择白群晖&#xff09;。如您对宅系科技比较感兴趣&#xff0c;欢迎查看本文&#xff0c;将详细介绍如何安装黑群晖…

reg和wire的区别 HDL语言

文章目录 数据类型根本区别什么时候要定义wire小结 数据类型 HDL语言有三种数据类型&#xff1a;寄存器数据类型&#xff08;reg&#xff09;、线网数据类型&#xff08;wire&#xff09;、参数数据类型&#xff08;parameter&#xff09;。 根本区别 reg&#xff1a; 寄存器…

【算法题】53. 最大子数组和-力扣(LeetCode)

【算法题】53. 最大子数组和-力扣(LeetCode) 1.题目 下方是力扣官方题目的地址 53. 最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一…

allWebPlugin中间件自定义alert、confirm及prompt使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

跨游戏引擎的H5渲染解决方案(腾讯)

本文是腾讯的一篇H5 跨引擎解决方案的精炼。 介绍 本文通过实现基于精简版的HTML5&#xff08;HyperText Mark Language 5&#xff09;来屏蔽不同引擎&#xff0c;平台底层的差异。 好处&#xff1a; 采用H5的开发方式&#xff0c;可以将开发和运营分离&#xff0c;运营部门自…