[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jerryji1993--DNABERT":3,"tool-jerryji1993--DNABERT":64},[4,17,27,35,43,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":16},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,3,"2026-04-05T11:01:52",[13,14,15],"开发框架","图像","Agent","ready",{"id":18,"name":19,"github_repo":20,"description_zh":21,"stars":22,"difficulty_score":23,"last_commit_at":24,"category_tags":25,"status":16},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",138956,2,"2026-04-05T11:33:21",[13,15,26],"语言模型",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":23,"last_commit_at":33,"category_tags":34,"status":16},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",107662,"2026-04-03T11:11:01",[13,14,15],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":23,"last_commit_at":41,"category_tags":42,"status":16},3704,"NextChat","ChatGPTNextWeb\u002FNextChat","NextChat 是一款轻量且极速的 AI 助手，旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性，以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发，NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。\n\n这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言，它也提供了便捷的自托管方案，支持一键部署到 Vercel 或 Zeabur 等平台。\n\nNextChat 的核心亮点在于其广泛的模型兼容性，原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型，让用户在一个界面即可自由切换不同 AI 能力。此外，它还率先支持 MCP（Model Context Protocol）协议，增强了上下文处理能力。针对企业用户，NextChat 提供专业版解决方案，具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能，满足公司对数据隐私和个性化管理的高标准要求。",87618,"2026-04-05T07:20:52",[13,26],{"id":44,"name":45,"github_repo":46,"description_zh":47,"stars":48,"difficulty_score":23,"last_commit_at":49,"category_tags":50,"status":16},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",84991,"2026-04-05T10:45:23",[14,51,52,53,15,54,26,13,55],"数据工具","视频","插件","其他","音频",{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":16},3128,"ragflow","infiniflow\u002Fragflow","RAGFlow 是一款领先的开源检索增强生成（RAG）引擎，旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体（Agent）能力相结合，不仅支持从各类文档中高效提取知识，还能让模型基于这些知识进行逻辑推理和任务执行。\n\n在大模型应用中，幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构（如表格、图表及混合排版），显著提升了信息检索的准确度，从而有效减少模型“胡编乱造”的现象，确保回答既有据可依又具备时效性。其内置的智能体机制更进一步，使系统不仅能回答问题，还能自主规划步骤解决复杂问题。\n\n这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统，还是致力于探索大模型在垂直领域落地的创新者，都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口，既降低了非算法背景用户的上手门槛，也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目，它正成为连接通用大模型与行业专有知识之间的重要桥梁。",77062,"2026-04-04T04:44:48",[15,14,13,26,54],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":70,"readme_en":71,"readme_zh":72,"quickstart_zh":73,"use_case_zh":74,"hero_image_url":75,"owner_login":76,"owner_name":77,"owner_avatar_url":78,"owner_bio":79,"owner_company":80,"owner_location":81,"owner_email":82,"owner_twitter":76,"owner_website":83,"owner_url":84,"languages":85,"stars":90,"forks":91,"last_commit_at":92,"license":93,"difficulty_score":94,"env_os":95,"env_gpu":96,"env_ram":97,"env_deps":98,"category_tags":107,"github_topics":108,"view_count":23,"oss_zip_url":119,"oss_zip_packed_at":119,"status":16,"created_at":120,"updated_at":121,"faqs":122,"releases":150},2663,"jerryji1993\u002FDNABERT","DNABERT","DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome","DNABERT 是一款专为基因组 DNA 序列设计的预训练人工智能模型，它将自然语言处理领域的 BERT 架构创新性地应用于生物信息学。传统方法难以高效捕捉长序列 DNA 中复杂的上下文依赖关系，而 DNABERT 通过将 DNA 碱基序列视为一种“语言”，利用自监督学习在大规模基因组数据上进行预训练，从而深刻理解基因编码规律。\n\n该工具主要解决了基因功能预测、启动子识别及变异效应分析等任务中特征提取困难的问题。用户只需在预训练模型基础上进行少量微调，即可在特定生物任务上获得卓越性能，大幅降低了深度学习在基因组学中的应用门槛。DNABERT 不仅提供了从预训练到微调的完整代码实现和可视化工具，还持续迭代推出了支持多物种基因组的 DNABERT-2 版本，并建立了包含 28 个数据集的综合基准测试（GUE），显著提升了模型的效率与泛化能力。\n\nDNABERT 非常适合生物信息学研究人员、计算生物学家以及从事 AI+Bio 交叉领域开发的工程师使用。它基于成熟的 Hugging Face Transformers 框架扩展而来，支持分布式训练与混合精度加速，为探索基因组奥秘提供了强大且易用","DNABERT 是一款专为基因组 DNA 序列设计的预训练人工智能模型，它将自然语言处理领域的 BERT 架构创新性地应用于生物信息学。传统方法难以高效捕捉长序列 DNA 中复杂的上下文依赖关系，而 DNABERT 通过将 DNA 碱基序列视为一种“语言”，利用自监督学习在大规模基因组数据上进行预训练，从而深刻理解基因编码规律。\n\n该工具主要解决了基因功能预测、启动子识别及变异效应分析等任务中特征提取困难的问题。用户只需在预训练模型基础上进行少量微调，即可在特定生物任务上获得卓越性能，大幅降低了深度学习在基因组学中的应用门槛。DNABERT 不仅提供了从预训练到微调的完整代码实现和可视化工具，还持续迭代推出了支持多物种基因组的 DNABERT-2 版本，并建立了包含 28 个数据集的综合基准测试（GUE），显著提升了模型的效率与泛化能力。\n\nDNABERT 非常适合生物信息学研究人员、计算生物学家以及从事 AI+Bio 交叉领域开发的工程师使用。它基于成熟的 Hugging Face Transformers 框架扩展而来，支持分布式训练与混合精度加速，为探索基因组奥秘提供了强大且易用的技术底座。无论是希望深入理解基因调控机制的科学家，还是致力于开发新型药物靶点发现算法的开发者，都能从中获益。","# DNABERT\nThis repository includes the implementation of 'DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome'. Please cite our paper if you use the models or codes. The repo is still actively under development, so please kindly report if there is any issue encountered.\n\n In this package, we provides resources including: source codes of the DNABERT model, usage examples, pre-trained models, fine-tuned models and visulization tool. This package is still under development, as more features will be included gradually. Training of DNABERT consists of general-purposed pre-training and task-specific fine-tuning. As a contribution of our project, we released the pre-trained models in this repository. We extended codes from [huggingface](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers) and adapted them to the DNA scenario.\n\n## Update 2025\u002F07\u002F08\n\nThe original links to the pretrained DNABERT models (DNABERT-3, 4, 5, 6) have expired. Please go to HuggingFace to access and download the models:\n\nDNABERT-3: https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_3\nDNABERT-4: https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_4\nDNABERT-5: https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_5\nDNABERT-6: https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_6\n\n## Update 2023\u002F06\u002F26\n\nThe second generation of DNABERT, named [DNABERT-2](https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.15006), is publically available at https:\u002F\u002Fgithub.com\u002FZhihan1996\u002FDNABERT_2. DNABERT-2 is trained on multi-species genomes and is more efficient, powerful, and easy to use than its first generation. We also provide simpler usage of DNABERT in the new package. A comprehensive benchmark Genome Understanding Evaluation (GUE), which contains $28$ datasets on $7$ tasks, is also published. Please check out DNABERT-2 if you are interested in our work. Thanks!\n\n\n## Citation\nIf you have used DNABERT in your research, please kindly cite the following publications:\n\n```\n@article{ji2021dnabert,\n    author = {Ji, Yanrong and Zhou, Zhihan and Liu, Han and Davuluri, Ramana V},\n    title = \"{DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome}\",\n    journal = {Bioinformatics},\n    volume = {37},\n    number = {15},\n    pages = {2112-2120},\n    year = {2021},\n    month = {02},\n    issn = {1367-4803},\n    doi = {10.1093\u002Fbioinformatics\u002Fbtab083},\n    url = {https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbtab083},\n    eprint = {https:\u002F\u002Facademic.oup.com\u002Fbioinformatics\u002Farticle-pdf\u002F37\u002F15\u002F2112\u002F50578892\u002Fbtab083.pdf},\n}\n\n\n@misc{zhou2023dnabert2,\n      title={DNABERT-2: Efficient Foundation Model and Benchmark For Multi-Species Genome}, \n      author={Zhihan Zhou and Yanrong Ji and Weijian Li and Pratik Dutta and Ramana Davuluri and Han Liu},\n      year={2023},\n      eprint={2306.15006},\n      archivePrefix={arXiv},\n      primaryClass={q-bio.GN}\n}\n```\n\n\n## 1. Environment setup\n\nWe recommend you to build a python virtual environment with [Anaconda](https:\u002F\u002Fdocs.anaconda.com\u002Fanaconda\u002Finstall\u002Flinux\u002F). Also, please make sure you have at least one NVIDIA GPU with Linux x86_64 Driver Version >= 410.48 (compatible with CUDA 10.0). We applied distributed training on 8 NVIDIA GeForce RTX 2080 Ti with 11 GB graphic memory, and the batch size corresponds to it. If you use GPU with other specifications and memory sizes, consider adjusting your batch size accordingly.\n\n#### 1.1 Create and activate a new virtual environment\n\n```\nconda create -n dnabert python=3.6\nconda activate dnabert\n```\n\n\n\n#### 1.2 Install the package and other requirements\n\n(Required)\n\n```\nconda install pytorch torchvision cudatoolkit=10.0 -c pytorch\n\ngit clone https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\ncd DNABERT\npython3 -m pip install --editable .\ncd examples\npython3 -m pip install -r requirements.txt\n```\n\n\n\n(Optional, install apex for fp16 training)\n\nchange to a desired directory by `cd PATH_NAME`\n\n```\ngit clone https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fapex\ncd apex\npip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" .\u002F\n```\n\n\n\n\n\n## 2. Pre-train (Skip this section if you fine-tune on pre-trained models)\n\n#### 2.1 Data processing\n\nPlease see the template data at `\u002Fexample\u002Fsample_data\u002Fpre`. If you are trying to pre-train DNABERT with your own data, please process you data into the same format as it. Note that the sequences are in kmer format, so you will need to convert your sequences into that. We also provide a custom function `seq2kmer`in `motif\u002Fmotif_utils.py` for this conversion.\n\n\n\nIn the following example, we use DNABERT with kmer=6 as example.\n\n\n\n#### 2.2 Model Training\n\n```\ncd examples\n\nexport KMER=6\nexport TRAIN_FILE=sample_data\u002Fpre\u002F6_3k.txt\nexport TEST_FILE=sample_data\u002Fpre\u002F6_3k.txt\nexport SOURCE=PATH_TO_DNABERT_REPO\nexport OUTPUT_PATH=output$KMER\n\npython run_pretrain.py \\\n    --output_dir $OUTPUT_PATH \\\n    --model_type=dna \\\n    --tokenizer_name=dna$KMER \\\n    --config_name=$SOURCE\u002Fsrc\u002Ftransformers\u002Fdnabert-config\u002Fbert-config-$KMER\u002Fconfig.json \\\n    --do_train \\\n    --train_data_file=$TRAIN_FILE \\\n    --do_eval \\\n    --eval_data_file=$TEST_FILE \\\n    --mlm \\\n    --gradient_accumulation_steps 25 \\\n    --per_gpu_train_batch_size 10 \\\n    --per_gpu_eval_batch_size 6 \\\n    --save_steps 500 \\\n    --save_total_limit 20 \\\n    --max_steps 200000 \\\n    --evaluate_during_training \\\n    --logging_steps 500 \\\n    --line_by_line \\\n    --learning_rate 4e-4 \\\n    --block_size 512 \\\n    --adam_epsilon 1e-6 \\\n    --weight_decay 0.01 \\\n    --beta1 0.9 \\\n    --beta2 0.98 \\\n    --mlm_probability 0.025 \\\n    --warmup_steps 10000 \\\n    --overwrite_output_dir \\\n    --n_process 24\n```\n\nAdd --fp16 tag if you want to perfrom mixed precision. (You have to install the 'apex' from source first).\n\n\n\n\n\n## 3. Fine-tune (Skip this section if you use fine-tuned model)\n\n#### 3.1 Data processing\n\nPlease see the template data at `\u002Fexample\u002Fsample_data\u002Fft\u002F`. If you are trying to fine-tune DNABERT with your own data, please process you data into the same format as it. Note that the sequences are in kmer format, so you will need to convert your sequences into that. We also provide a custom function `seq2kmer`in `motif\u002Fmotif_utils.py` for this conversion.\n\n\n\n#### 3.2 Download pre-trained DNABERT\n\n[DNABERT3](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1nVBaIoiJpnwQxiz4dSq6Sv9kBKfXhZuM\u002Fview?usp=sharing)\n\n[DNABERT4](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1V7CChcC6KgdJ7Gwdyn73OS6dZR_J-Lrs\u002Fview?usp=sharing)\n\n[DNABERT5](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1KMqgXYCzrrYD1qxdyNWnmUYPtrhQqRBM\u002Fview?usp=sharing)\n\n[DNABERT6](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1BJjqb5Dl2lNMg2warsFQ0-Xvn1xxfFXC\u002Fview?usp=sharing)\n\nDownload the pre-trained model in to a directory. (If you would like to replicate the following examples, please download DNABERT 6). Then unzip the package by running:\n\n```\nunzip 6-new-12w-0.zip\n```\n\nWe also provide a model with `KMER=6` that is fine-tuned on the sample dataset for prediction\u002Fvisulization\u002Fmotif_analysis. If you use the fine-tuned model instead of fine-tuning a model by your self, please download the fine-tuned and put it under `examples\u002Fft\u002F6`. \n\n[Fine-tuned Model](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F15wFcukTv3ecPw9_25dcOv-bZmj-8d_-6?usp=sharing)\n\n\n#### 3.3 Fine-tune with pre-trained model\n\nIn the following example,  we use DNABERT with kmer=6 as example. We use `prom-core`, a 2-class classification task as example.\n\n```\ncd examples\n\nexport KMER=6\nexport MODEL_PATH=PATH_TO_THE_PRETRAINED_MODEL\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport OUTPUT_PATH=.\u002Fft\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_train \\\n    --do_eval \\\n    --data_dir $DATA_PATH \\\n    --max_seq_length 100 \\\n    --per_gpu_eval_batch_size=32   \\\n    --per_gpu_train_batch_size=32   \\\n    --learning_rate 2e-4 \\\n    --num_train_epochs 5.0 \\\n    --output_dir $OUTPUT_PATH \\\n    --evaluate_during_training \\\n    --logging_steps 100 \\\n    --save_steps 4000 \\\n    --warmup_percent 0.1 \\\n    --hidden_dropout_prob 0.1 \\\n    --overwrite_output \\\n    --weight_decay 0.01 \\\n    --n_process 8\n```\n\nAdd --fp16 tag if you want to perfrom mixed precision. (You have to install the 'apex' from source first).\n\nWe also provide a model with `KMER=6` that is fine-tuned on the sample dataset for prediction\u002Fvisulization\u002Fmotif_analysis. If you use the fine-tuned model instead of fine-tuning a model by your self, please download the fine-tuned and put it under `examples\u002Fft\u002F6`. \n\n[Fine-tuned Model](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F15wFcukTv3ecPw9_25dcOv-bZmj-8d_-6?usp=sharing)\n\n\n\n## 4. Prediction\n\nAfter the model is fine-tuned, we can get predictions by running\n\n```$\nexport KMER=6\nexport MODEL_PATH=.\u002Fft\u002F$KMER\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=.\u002Fresult\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_predict \\\n    --data_dir $DATA_PATH  \\\n    --max_seq_length 75 \\\n    --per_gpu_pred_batch_size=128   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 48\n```\n\nWith the above command, the fine-tuned DNABERT model will be loaded from `MODEL_PATH` , and makes prediction on the `dev.tsv` file that saved in `DATA_PATH` and save the prediction result at `PREDICTION_PATH`.\n\n\nAdd --fp16 tag if you want to perfrom mixed precision. (You have to install the 'apex' from source first).\n\n\n## 5. Visualization\n\nVisualiazation of DNABERT consists of 2 steps. Calcualate attention scores and Plot.\n\n#### 5.1 Calculate attention scores\n\ncalculate with only one model (For example, DNABERT6)\n\n```\nexport KMER=6\nexport MODEL_PATH=.\u002Fft\u002F$KMER\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=.\u002Fresult\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_visualize \\\n    --visualize_data_dir $DATA_PATH \\\n    --visualize_models $KMER \\\n    --data_dir $DATA_PATH \\\n    --max_seq_length 81 \\\n    --per_gpu_pred_batch_size=16   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 96\n```\n\nWith the above command, the fine-tuned DNABERT model will be loaded from `MODEL_PATH` , and calculates attention scores on the `dev.tsv` file that saved in `DATA_PATH` and save the result at `PREDICTION_PATH`.\n\nAdd --fp16 tag if you want to perfrom mixed precision. (You have to install the 'apex' from source first).\n\n####5.2 Plotting tool\n\n## 6. Motif analysis\n\nOnce the attention scores are generated, we can proceed further to perform motif analysis using `motif\u002Ffind_motifs.py`:\n\n```\ncd ..\u002Fmotif\n\nexport KMER=6\nexport DATA_PATH=..\u002Fexamples\u002Fsample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=..\u002Fexamples\u002Fresult\u002F$KMER\nexport MOTIF_PATH=.\u002Fresult\u002F$KMER\n\npython find_motifs.py \\\n    --data_dir $DATA_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --window_size 24 \\\n    --min_len 5 \\\n    --pval_cutoff 0.005 \\\n    --min_n_motif 3 \\\n    --align_all_ties \\\n    --save_file_dir $MOTIF_PATH \\\n    --verbose\n```\n\nThe script will generate a .txt file and a weblogo .png file for each motif under `MOTIF_PATH`.\n\n## 7. Genomic variants analysis\n\nTo perform genomic variants analysis (e.g. SNPs), we need to first ensure the predictions for the sequences were generated. Then, create a file (template in `SNP\u002Fexample_mut_file.txt`) specifying for which sequences in `dev.tsv` and start and end indices where we need to perform the mutation. The first column indicates the index of sequence in `dev.tsv` to be mutated. Second and third columns are the start and end indices while the fourth column is the target of mutation (can be substitution, insertion, deletion, etc.)\n\nOnce such a file is created, we can perform mutation on the sequences:\n\n```\ncd ..\u002FSNP\npython mutate_seqs.py .\u002F..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv .\u002Fexamples\u002F --mut_file .\u002Fexample_mut_file.txt --k 6\n```\nAlternatively, we can choose to leave the `--mut_file` argument blank, where the program would try to perform substitution of all bases to the four possible nucleotides ('A', 'T', 'C', or 'G') for all sequences. This would be useful for plotting a mutation heatmap as included in the paper. **Note that this would be slow if the `dev.tsv` contains a lot of sequences or the input sequences are very long, as the command would try to perform mutation on all possible locations of them**.\n\n```\ncd ..\u002FSNP\npython mutate_seqs.py .\u002F..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv .\u002Fexamples\u002F --k 6\n```\n\nAfter that, we can again predict on the generated sequences. **Note: if you have insertion\u002Fdeletions in your `mut_file.txt`, consider changing the `max_seq_length` we use when making predictions.**\n\n```\nexport KMER=6\nexport MODEL_PATH=..\u002Fexamples\u002Fft\u002F$KMER\nexport DATA_PATH=examples\nexport PREDICTION_PATH=examples\n\npython ..\u002Fexamples\u002Frun_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_predict \\\n    --data_dir $DATA_PATH  \\\n    --max_seq_length 75 \\\n    --per_gpu_pred_batch_size=128   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 48\n```\n\nThis will again create `pred_results.npy` file under the `$PREDICTION_PATH`. Once we have all the above, we can compute the effect of these mutations by:\n\n```\npython SNP.py \\\n    --orig_seq_file ..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv \\\n    --orig_pred_file ..\u002Fexamples\u002Fresult\u002F6\u002Fpred_results.npy \\\n    --mut_seq_file examples\u002Fdev.tsv \\\n    --mut_pred_file examples\u002Fpred_results.npy \\\n    --save_file_dir examples\n```\n\nThis would save a `mutations.tsv` file under `save_file_dir`, that contains index of original sequence (in original `dev.tsv`), original sequence and predictions, mutated sequence and predictions, as well as the difference score and log odds ratio of the change in every case.\n\n\n## Q&A\n\n#### 1. I cannot start training the model\u002FI have installation issues for the dependencies.\n\nPlease kindly make sure that you satisfied all system requirements for DNABERT, and that you have a conda environment properly set up. We have recently successfully tested our pipeline on Amazon EC2 Deep Learning AMI (Ubuntu 18.04). As an option, you could compare your system\u002Fenvironment setup with this AMI.\n\n#### 2. Can DNABERT run on sequences longer than 512?\n\n#### 3. Can DNABERT be extended to multi-class classification?\n","# DNABERT\n本仓库包含“DNABERT：用于基因组中DNA语言的预训练双向Transformer编码器表示模型”的实现。如果您使用了这些模型或代码，请引用我们的论文。该仓库仍在积极开发中，如遇到任何问题，请及时报告。\n\n在本软件包中，我们提供了以下资源：DNABERT模型的源代码、使用示例、预训练模型、微调后的模型以及可视化工具。本软件包仍在开发中，未来将逐步增加更多功能。DNABERT的训练包括通用目的的预训练和特定任务的微调。作为我们项目的一部分，我们在本仓库中发布了预训练模型。我们基于[HuggingFace](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Ftransformers)的代码进行了扩展，并将其适配到DNA场景。\n\n## 更新 2025年7月8日\n\n原预训练DNABERT模型（DNABERT-3、4、5、6）的链接已失效。请前往HuggingFace获取并下载这些模型：\n\nDNABERT-3：https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_3  \nDNABERT-4：https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_4  \nDNABERT-5：https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_5  \nDNABERT-6：https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_6  \n\n## 更新 2023年6月26日\n\n第二代DNABERT，名为[DNABERT-2](https:\u002F\u002Farxiv.org\u002Fabs\u002F2306.15006)，已在https:\u002F\u002Fgithub.com\u002FZhihan1996\u002FDNABERT_2上公开发布。DNABERT-2是在多物种基因组上训练的，相比第一代更加高效、强大且易于使用。我们在新软件包中也提供了更简单的DNABERT使用方法。同时，我们还发布了一个全面的基准测试——基因组理解评估（GUE），其中包含了7项任务下的28个数据集。如果您对我们的工作感兴趣，请查看DNABERT-2。谢谢！\n\n## 引用\n如果您在研究中使用了DNABERT，请引用以下文献：\n\n```\n@article{ji2021dnabert,\n    author = {Ji, Yanrong and Zhou, Zhihan and Liu, Han and Davuluri, Ramana V},\n    title = \"{DNABERT: pre-trained Bidirectional Encoder Representations from Transformers model for DNA-language in genome}\",\n    journal = {Bioinformatics},\n    volume = {37},\n    number = {15},\n    pages = {2112-2120},\n    year = {2021},\n    month = {02},\n    issn = {1367-4803},\n    doi = {10.1093\u002Fbioinformatics\u002Fbtab083},\n    url = {https:\u002F\u002Fdoi.org\u002F10.1093\u002Fbioinformatics\u002Fbtab083},\n    eprint = {https:\u002F\u002Facademic.oup.com\u002Fbioinformatics\u002Farticle-pdf\u002F37\u002F15\u002F2112\u002F50578892\u002Fbtab083.pdf},\n}\n\n\n@misc{zhou2023dnabert2,\n      title={DNABERT-2: Efficient Foundation Model and Benchmark For Multi-Species Genome}, \n      author={Zhihan Zhou and Yanrong Ji and Weijian Li and Pratik Dutta and Ramana Davuluri and Han Liu},\n      year={2023},\n      eprint={2306.15006},\n      archivePrefix={arXiv},\n      primaryClass={q-bio.GN}\n}\n```\n\n\n## 1. 环境设置\n\n我们建议您使用[Anaconda](https:\u002F\u002Fdocs.anaconda.com\u002Fanaconda\u002Finstall\u002Flinux\u002F)创建一个Python虚拟环境。此外，请确保您至少拥有一块配备Linux x86_64驱动程序版本≥410.48（兼容CUDA 10.0）的NVIDIA GPU。我们曾在8块具有11 GB显存的NVIDIA GeForce RTX 2080 Ti上进行分布式训练，相应的批处理大小也据此设定。如果您使用的GPU规格和显存容量不同，请相应调整您的批处理大小。\n\n#### 1.1 创建并激活新的虚拟环境\n\n```\nconda create -n dnabert python=3.6\nconda activate dnabert\n```\n\n\n\n#### 1.2 安装软件包及其他依赖项\n\n（必选）\n\n```\nconda install pytorch torchvision cudatoolkit=10.0 -c pytorch\n\ngit clone https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\ncd DNABERT\npython3 -m pip install --editable .\ncd examples\npython3 -m pip install -r requirements.txt\n```\n\n\n\n（可选，安装apex以支持fp16训练）\n\n切换到所需目录：`cd PATH_NAME`\n\n```\ngit clone https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fapex\ncd apex\npip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" .\u002F\n```\n\n\n\n\n\n## 2. 预训练（如果您直接在预训练模型上进行微调，请跳过此部分）\n\n#### 2.1 数据处理\n\n请参阅位于`\u002Fexample\u002Fsample_data\u002Fpre`的模板数据。如果您希望使用自己的数据进行DNABERT的预训练，需将数据处理成与模板相同格式。请注意，序列采用kmer格式，因此您需要先将序列转换为kmer形式。我们还在`motif\u002Fmotif_utils.py`中提供了一个自定义函数`seq2kmer`用于这一转换。\n\n\n\n以下示例以kmer=6的DNABERT为例。\n\n\n\n#### 2.2 模型训练\n\n```\ncd examples\n\nexport KMER=6\nexport TRAIN_FILE=sample_data\u002Fpre\u002F6_3k.txt\nexport TEST_FILE=sample_data\u002Fpre\u002F6_3k.txt\nexport SOURCE=DNABERT仓库路径\nexport OUTPUT_PATH=output$KMER\n\npython run_pretrain.py \\\n    --output_dir $OUTPUT_PATH \\\n    --model_type=dna \\\n    --tokenizer_name=dna$KMER \\\n    --config_name=$SOURCE\u002Fsrc\u002Ftransformers\u002Fdnabert-config\u002Fbert-config-$KMER\u002Fconfig.json \\\n    --do_train \\\n    --train_data_file=$TRAIN_FILE \\\n    --do_eval \\\n    --eval_data_file=$TEST_FILE \\\n    --mlm \\\n    --gradient_accumulation_steps 25 \\\n    --per_gpu_train_batch_size 10 \\\n    --per_gpu_eval_batch_size 6 \\\n    --save_steps 500 \\\n    --save_total_limit 20 \\\n    --max_steps 200000 \\\n    --evaluate_during_training \\\n    --logging_steps 500 \\\n    --line_by_line \\\n    --learning_rate 4e-4 \\\n    --block_size 512 \\\n    --adam_epsilon 1e-6 \\\n    --weight_decay 0.01 \\\n    --beta1 0.9 \\\n    --beta2 0.98 \\\n    --mlm_probability 0.025 \\\n    --warmup_steps 10000 \\\n    --overwrite_output_dir \\\n    --n_process 24\n```\n\n若需进行混合精度训练，可添加`--fp16`标签。（您需要先从源码安装‘apex’）。\n\n## 3. 微调（如果您使用微调后的模型，请跳过此部分）\n\n#### 3.1 数据处理\n\n请参阅 `\u002Fexample\u002Fsample_data\u002Fft\u002F` 中的模板数据。如果您希望使用自己的数据对 DNABERT 进行微调，请将您的数据处理成与模板数据相同的格式。请注意，序列采用 kmer 格式，因此您需要先将序列转换为该格式。我们还在 `motif\u002Fmotif_utils.py` 中提供了一个自定义函数 `seq2kmer` 用于进行这种转换。\n\n\n\n#### 3.2 下载预训练的 DNABERT 模型\n\n[DNABERT3](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1nVBaIoiJpnwQxiz4dSq6Sv9kBKfXhZuM\u002Fview?usp=sharing)\n\n[DNABERT4](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1V7CChcC6KgdJ7Gwdyn73OS6dZR_J-Lrs\u002Fview?usp=sharing)\n\n[DNABERT5](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1KMqgXYCzrrYD1qxdyNWnmUYPtrhQqRBM\u002Fview?usp=sharing)\n\n[DNABERT6](https:\u002F\u002Fdrive.google.com\u002Ffile\u002Fd\u002F1BJjqb5Dl2lNMg2warsFQ0-Xvn1xxfFXC\u002Fview?usp=sharing)\n\n请将预训练模型下载到一个目录中。（如果您想复现以下示例，请下载 DNABERT 6）。然后通过运行以下命令解压文件：\n\n```\nunzip 6-new-12w-0.zip\n```\n\n我们还提供了一个 `KMER=6` 的微调模型，该模型在样本数据集上进行了微调，可用于预测、可视化和基序分析。如果您使用的是微调后的模型而不是自己进行微调，请下载该微调模型并将其放置在 `examples\u002Fft\u002F6` 目录下。\n\n[微调模型](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F15wFcukTv3ecPw9_25dcOv-bZmj-8d_-6?usp=sharing)\n\n\n#### 3.3 使用预训练模型进行微调\n\n在下面的示例中，我们以 kmer=6 的 DNABERT 为例，并以 `prom-core` 这一二分类任务作为示例。\n\n```\ncd examples\n\nexport KMER=6\nexport MODEL_PATH=预训练模型路径\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport OUTPUT_PATH=.\u002Fft\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_train \\\n    --do_eval \\\n    --data_dir $DATA_PATH \\\n    --max_seq_length 100 \\\n    --per_gpu_eval_batch_size=32   \\\n    --per_gpu_train_batch_size=32   \\\n    --learning_rate 2e-4 \\\n    --num_train_epochs 5.0 \\\n    --output_dir $OUTPUT_PATH \\\n    --evaluate_during_training \\\n    --logging_steps 100 \\\n    --save_steps 4000 \\\n    --warmup_percent 0.1 \\\n    --hidden_dropout_prob 0.1 \\\n    --overwrite_output \\\n    --weight_decay 0.01 \\\n    --n_process 8\n```\n\n如果您希望进行混合精度训练，可以添加 `--fp16` 标签。（您需要先从源代码安装 `apex` 库）。\n\n我们还提供了一个 `KMER=6` 的微调模型，该模型在样本数据集上进行了微调，可用于预测、可视化和基序分析。如果您使用的是微调后的模型而不是自己进行微调，请下载该微调模型并将其放置在 `examples\u002Fft\u002F6` 目录下。\n\n[微调模型](https:\u002F\u002Fdrive.google.com\u002Fdrive\u002Ffolders\u002F15wFcukTv3ecPw9_25dcOv-bZmj-8d_-6?usp=sharing)\n\n\n\n## 4. 预测\n\n模型微调完成后，我们可以通过运行以下命令进行预测：\n\n```$\nexport KMER=6\nexport MODEL_PATH=.\u002Fft\u002F$KMER\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=.\u002Fresult\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_predict \\\n    --data_dir $DATA_PATH  \\\n    --max_seq_length 75 \\\n    --per_gpu_pred_batch_size=128   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 48\n```\n\n通过上述命令，微调后的 DNABERT 模型将从 `MODEL_PATH` 加载，并对保存在 `DATA_PATH` 中的 `dev.tsv` 文件进行预测，预测结果将保存在 `PREDICTION_PATH` 中。\n\n如果您希望进行混合精度预测，可以添加 `--fp16` 标签。（您需要先从源代码安装 `apex` 库）。\n\n## 5. 可视化\n\nDNABERT 的可视化分为两个步骤：计算注意力分数和绘图。\n\n#### 5.1 计算注意力分数\n\n仅使用一个模型（例如，DNABERT6）进行计算：\n\n```\nexport KMER=6\nexport MODEL_PATH=.\u002Fft\u002F$KMER\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=.\u002Fresult\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_visualize \\\n    --visualize_data_dir $DATA_PATH \\\n    --visualize_models $KMER \\\n    --data_dir $DATA_PATH \\\n    --max_seq_length 81 \\\n    --per_gpu_pred_batch_size=16   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 96\n```\n\n通过上述命令，微调后的 DNABERT 模型将从 `MODEL_PATH` 加载，并对保存在 `DATA_PATH` 中的 `dev.tsv` 文件计算注意力分数，结果将保存在 `PREDICTION_PATH` 中。\n\n如果您希望进行混合精度计算，可以添加 `--fp16` 标签。（您需要先从源代码安装 `apex` 库）。\n\n#### 5.2 绘图工具\n\n## 6. 基序分析\n\n一旦生成了注意力分数，我们可以继续使用 `motif\u002Ffind_motifs.py` 进行基序分析：\n\n```\ncd ..\u002Fmotif\n\nexport KMER=6\nexport DATA_PATH=..\u002Fexamples\u002Fsample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=..\u002Fexamples\u002Fresult\u002F$KMER\nexport MOTIF_PATH=.\u002Fresult\u002F$KMER\n\npython find_motifs.py \\\n    --data_dir $DATA_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --window_size 24 \\\n    --min_len 5 \\\n    --pval_cutoff 0.005 \\\n    --min_n_motif 3 \\\n    --align_all_ties \\\n    --save_file_dir $MOTIF_PATH \\\n    --verbose\n```\n\n该脚本将在 `MOTIF_PATH` 中为每个基序生成一个 `.txt` 文件和一个 WebLogo `.png` 文件。\n\n## 7. 基因组变异分析\n\n要进行基因组变异分析（例如SNP），我们首先需要确保已生成序列的预测结果。然后，创建一个文件（模板位于`SNP\u002Fexample_mut_file.txt`），指定在`dev.tsv`中哪些序列以及需要进行突变的起始和结束位置。第一列指示`dev.tsv`中待突变序列的索引，第二、三列分别为起始和结束位置，第四列则指明突变的目标类型（可以是替换、插入、删除等）。\n\n一旦创建了该文件，即可对序列进行突变：\n\n```\ncd ..\u002FSNP\npython mutate_seqs.py .\u002F..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv .\u002Fexamples\u002F --mut_file .\u002Fexample_mut_file.txt --k 6\n```\n\n或者，也可以将`--mut_file`参数留空，此时程序会尝试对所有序列中的每个碱基执行四种可能的核苷酸替换（‘A’、‘T’、‘C’或‘G’）。这在绘制论文中包含的突变热图时非常有用。**请注意，如果`dev.tsv`包含大量序列或输入序列非常长，此操作将会非常耗时，因为命令会尝试对其所有可能的位置进行突变**。\n\n```\ncd ..\u002FSNP\npython mutate_seqs.py .\u002F..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv .\u002Fexamples\u002F --k 6\n```\n\n之后，我们可以再次对生成的序列进行预测。**注意：如果你的`mut_file.txt`中包含插入或删除操作，请考虑调整我们在进行预测时使用的`max_seq_length`参数。**\n\n```\nexport KMER=6\nexport MODEL_PATH=..\u002Fexamples\u002Fft\u002F$KMER\nexport DATA_PATH=examples\nexport PREDICTION_PATH=examples\n\npython ..\u002Fexamples\u002Frun_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_predict \\\n    --data_dir $DATA_PATH  \\\n    --max_seq_length 75 \\\n    --per_gpu_pred_batch_size=128   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 48\n```\n\n这将再次在`$PREDICTION_PATH`下生成`pred_results.npy`文件。完成上述步骤后，我们可以通过以下命令计算这些突变的影响：\n\n```\npython SNP.py \\\n    --orig_seq_file ..\u002Fexamples\u002Fsample_data\u002Fft\u002F6\u002Fdev.tsv \\\n    --orig_pred_file ..\u002Fexamples\u002Fresult\u002F6\u002Fpred_results.npy \\\n    --mut_seq_file examples\u002Fdev.tsv \\\n    --mut_pred_file examples\u002Fpred_results.npy \\\n    --save_file_dir examples\n```\n\n这将在`save_file_dir`下保存一个`mutations.tsv`文件，其中包含原始序列的索引（来自原始`dev.tsv`）、原始序列及其预测结果、突变后的序列及其预测结果，以及每种情况下的差异得分和对数似然比。\n\n## 问答\n\n#### 1. 我无法开始训练模型\u002F依赖项安装出现问题。\n\n请确保您已满足DNABERT的所有系统要求，并且正确设置了conda环境。我们最近已在Amazon EC2 Deep Learning AMI（Ubuntu 18.04）上成功测试了我们的流程。作为参考，您可以将自己的系统\u002F环境配置与该AMI进行比较。\n\n#### 2. DNABERT能否处理长度超过512的序列？\n\n#### 3. DNABERT是否可以扩展到多分类任务？","# DNABERT 快速上手指南\n\nDNABERT 是一个基于 Transformer 架构的预训练模型，专为基因组 DNA 序列语言设计。本指南将帮助您快速搭建环境并运行基础任务。\n\n## 1. 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**: Linux x86_64\n*   **GPU**: 至少一张 NVIDIA GPU，驱动版本 >= 410.48 (兼容 CUDA 10.0)\n    *   *注：官方示例基于 8 张 RTX 2080 Ti (11GB 显存) 测试，若显存较小请调整 batch size。*\n*   **软件依赖**:\n    *   Anaconda (推荐用于管理虚拟环境)\n    *   Python 3.6\n    *   PyTorch (兼容 CUDA 10.0)\n\n## 2. 安装步骤\n\n### 2.1 创建虚拟环境\n使用 Conda 创建并激活名为 `dnabert` 的环境：\n\n```bash\nconda create -n dnabert python=3.6\nconda activate dnabert\n```\n\n### 2.2 安装依赖包\n依次安装 PyTorch、克隆代码库并安装项目依赖：\n\n```bash\n# 安装 PyTorch 及相关组件 (CUDA 10.0)\nconda install pytorch torchvision cudatoolkit=10.0 -c pytorch\n\n# 克隆 DNABERT 仓库\ngit clone https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\ncd DNABERT\n\n# 安装当前包为可编辑模式\npython3 -m pip install --editable .\n\n# 进入 examples 目录并安装额外依赖\ncd examples\npython3 -m pip install -r requirements.txt\n```\n\n*(可选) 如需开启混合精度训练 (fp16)，需从源码安装 NVIDIA Apex：*\n```bash\ncd PATH_NAME  # 替换为您想要的目录\ngit clone https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fapex\ncd apex\npip install -v --no-cache-dir --global-option=\"--cpp_ext\" --global-option=\"--cuda_ext\" .\u002F\n```\n\n## 3. 基本使用\n\nDNABERT 的核心工作流程通常包括：**数据预处理 (K-mer 转换)** -> **微调 (Fine-tuning)** -> **预测\u002F分析**。\n*如果您直接使用官方提供的预训练模型进行微调，可跳过“预训练”步骤。*\n\n### 3.1 数据预处理\nDNABERT 输入需要是 K-mer 格式。您可以使用工具包自带的 `seq2kmer` 函数将原始 DNA 序列转换为 K-mer 格式。\n参考模板数据位于：`\u002Fexample\u002Fsample_data\u002Fft\u002F`。\n\n### 3.2 下载预训练模型\n从 HuggingFace 下载所需的预训练模型（以 kmer=6 为例）：\n*   **DNABERT-6**: https:\u002F\u002Fhuggingface.co\u002Fzhihan1996\u002FDNA_bert_6\n\n下载后解压到指定目录，例如 `PATH_TO_THE_PRETRAINED_MODEL`。\n\n### 3.3 微调模型 (Fine-tuning)\n以下示例展示如何使用 kmer=6 的预训练模型，在启动子识别任务 (`dnaprom`) 上进行微调。\n\n```bash\ncd examples\n\nexport KMER=6\nexport MODEL_PATH=PATH_TO_THE_PRETRAINED_MODEL  # 替换为您的模型路径\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport OUTPUT_PATH=.\u002Fft\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_train \\\n    --do_eval \\\n    --data_dir $DATA_PATH \\\n    --max_seq_length 100 \\\n    --per_gpu_eval_batch_size=32   \\\n    --per_gpu_train_batch_size=32   \\\n    --learning_rate 2e-4 \\\n    --num_train_epochs 5.0 \\\n    --output_dir $OUTPUT_PATH \\\n    --evaluate_during_training \\\n    --logging_steps 100 \\\n    --save_steps 4000 \\\n    --warmup_percent 0.1 \\\n    --hidden_dropout_prob 0.1 \\\n    --overwrite_output \\\n    --weight_decay 0.01 \\\n    --n_process 8\n```\n*提示：若已安装 Apex 且希望使用混合精度训练，请在命令末尾添加 `--fp16` 参数。*\n\n### 3.4 执行预测\n微调完成后，使用以下命令对数据进行预测：\n\n```bash\nexport KMER=6\nexport MODEL_PATH=.\u002Fft\u002F$KMER\nexport DATA_PATH=sample_data\u002Fft\u002F$KMER\nexport PREDICTION_PATH=.\u002Fresult\u002F$KMER\n\npython run_finetune.py \\\n    --model_type dna \\\n    --tokenizer_name=dna$KMER \\\n    --model_name_or_path $MODEL_PATH \\\n    --task_name dnaprom \\\n    --do_predict \\\n    --data_dir $DATA_PATH  \\\n    --max_seq_length 75 \\\n    --per_gpu_pred_batch_size=128   \\\n    --output_dir $MODEL_PATH \\\n    --predict_dir $PREDICTION_PATH \\\n    --n_process 48\n```\n预测结果将保存在 `PREDICTION_PATH` 目录下。\n\n### 3.5 可视化与 Motif 分析 (可选)\n生成注意力分数并进行 Motif 分析：\n\n1.  **计算注意力分数**:\n    ```bash\n    python run_finetune.py \\\n        --model_type dna \\\n        --tokenizer_name=dna$KMER \\\n        --model_name_or_path $MODEL_PATH \\\n        --task_name dnaprom \\\n        --do_visualize \\\n        --visualize_data_dir $DATA_PATH \\\n        --visualize_models $KMER \\\n        --data_dir $DATA_PATH \\\n        --max_seq_length 81 \\\n        --per_gpu_pred_batch_size=16   \\\n        --output_dir $MODEL_PATH \\\n        --predict_dir $PREDICTION_PATH \\\n        --n_process 96\n    ```\n\n2.  **提取 Motif**:\n    ```bash\n    cd ..\u002Fmotif\n    export MOTIF_PATH=.\u002Fresult\u002F$KMER\n    python find_motifs.py \\\n        --data_dir $DATA_PATH \\\n        --predict_dir $PREDICTION_PATH \\\n        --window_size 24 \\\n        --min_len 5 \\\n        --pval_cutoff 0.005 \\\n        --min_n_motif 3 \\\n        --align_all_ties \\\n        --save_file_dir $MOTIF_PATH \\\n        --verbose\n    ```\n    脚本将在 `MOTIF_PATH` 下生成 `.txt` 结果文件和 WebLogo `.png` 图像。","某生物医药公司的算法团队正在开发一种新型基因编辑疗法，急需从海量人类基因组数据中精准识别潜在的致病突变位点。\n\n### 没有 DNABERT 时\n- **特征工程耗时极长**：研究人员需依赖传统的 k-mer 统计或手工设计序列特征，难以捕捉 DNA 序列中复杂的长距离依赖关系。\n- **模型泛化能力弱**：针对特定任务（如启动子预测）训练的模型，一旦换到新的物种或不同长度的序列上，准确率大幅下降，需重新收集数据训练。\n- **计算资源浪费严重**：每次新任务都要从头训练深度神经网络，消耗大量 GPU 算力和数天时间，导致研发迭代周期缓慢。\n- **语义理解缺失**：传统方法将 DNA 视为简单的字符排列，无法像理解自然语言那样捕捉碱基排列背后的生物学“语法”和上下文含义。\n\n### 使用 DNABERT 后\n- **直接复用预训练知识**：团队直接调用在大规模基因组上预训练好的 DNABERT 模型，无需手工提取特征，模型已内嵌了丰富的 DNA 序列语义信息。\n- **小样本高效微调**：仅需少量标注数据对预训练模型进行微调（Fine-tuning），即可在致病位点识别任务上达到 SOTA 水平，且轻松适配不同物种。\n- **研发效率显著提升**：省去了漫长的预训练过程，模型部署时间从数天缩短至数小时，让团队能快速验证多种编辑策略。\n- **深层模式精准捕捉**：利用双向 Transformer 架构，DNABERT 能精准理解上下文中碱基的相互作用，有效识别出传统方法遗漏的隐蔽性致病突变。\n\nDNABERT 将基因组分析从“手工锻造”带入了“预训练大模型”时代，让科研人员能以前所未有的速度和精度解读生命密码。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjerryji1993_DNABERT_568ce4c8.png","jerryji1993","Yanrong Ji","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjerryji1993_37ad3a27.jpg","PhD @ NU in Bioinformatics. Data Science\u002FML\u002FDL\u002FData Mining\u002FPrecision Medicine","Northwestern University Feinberg School of Medicine","Chicago, IL","yanrongji2021@u.northwestern.edu","mygeno.me","https:\u002F\u002Fgithub.com\u002Fjerryji1993",[86],{"name":87,"color":88,"percentage":89},"Python","#3572A5",100,747,177,"2026-04-02T20:41:30","Apache-2.0",4,"Linux","必需。至少一张 NVIDIA GPU，驱动版本 >= 410.48 (兼容 CUDA 10.0)。官方测试环境为 8 张 NVIDIA GeForce RTX 2080 Ti (每张 11GB 显存)，其他规格需调整 batch size。","未说明",{"notes":99,"python":100,"dependencies":101},"1. 强烈建议使用 Anaconda 创建虚拟环境。2. 序列数据需预先转换为 kmer 格式（代码中提供了 seq2kmer 函数）。3. 若需使用混合精度训练 (--fp16)，必须从源码安装 NVIDIA apex。4. 预训练模型现已托管于 HuggingFace，README 中的旧链接已失效。5. 根据显卡显存大小，需手动调整训练和评估的 batch size 参数。","3.6",[102,103,104,105,106],"pytorch","torchvision","cudatoolkit=10.0","transformers (基于 HuggingFace 修改版)","apex (可选，用于 fp16 训练)",[13,26],[109,110,111,112,113,114,115,116,117,118],"kmer","dnabert-model","kmer-format","gpu","sequence","genome","machine-learning","deep-learning","natural-language-processing","nlp",null,"2026-03-27T02:49:30.150509","2026-04-06T05:36:30.825856",[123,128,132,136,141,146],{"id":124,"question_zh":125,"answer_zh":126,"source_url":127},12344,"如何从 DNABERT 模型中提取 DNA 序列的嵌入向量（Embedding）？","要获取序列的嵌入向量（768 维），而不是分类结果（logits），可以使用以下代码示例。首先加载预训练模型和 tokenizer，然后对序列进行编码并输入模型：\n\n```python\nimport torch\nfrom transformers import BertModel, BertConfig, DNATokenizer\n\n# 指定预训练模型路径\ndir_to_pretrained_model = \"xxx\u002Fxxx\"\n\n# 加载配置和 tokenizer\nconfig = BertConfig.from_pretrained('https:\u002F\u002Fraw.githubusercontent.com\u002Fjerryji1993\u002FDNABERT\u002Fmaster\u002Fsrc\u002Ftransformers\u002Fdnabert-config\u002Fbert-config-6\u002Fconfig.json')\ntokenizer = DNATokenizer.from_pretrained('dna6')\nmodel = BertModel.from_pretrained(dir_to_pretrained_model, config=config)\n\n# 准备输入序列\nsequence = \"AATCTA ATCTAG TCTAGC CTAGCA\"\nmodel_input = tokenizer.encode_plus(sequence, add_special_tokens=True, max_length=512)[\"input_ids\"]\nmodel_input = torch.tensor(model_input, dtype=torch.long).unsqueeze(0) # 添加 batch 维度\n\n# 获取输出\nwith torch.no_grad():\n    outputs = model(model_input)\n    # last_hidden_state 的形状为 [batch_size, seq_length, hidden_size]\n    # 通常取 [CLS] token (索引 0) 作为整个序列的表示\n    embedding = outputs.last_hidden_state[:, 0, :]\nprint(embedding.shape) # 应为 torch.Size([1, 768])\n```","https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\u002Fissues\u002F11",{"id":129,"question_zh":130,"answer_zh":131,"source_url":127},12345,"如何处理长度超过 512 的 DNA 序列？","当前版本模型最大支持长度为 512。如果序列更长，有两种处理策略：\n1. 截断：直接截取前 512 个碱基。\n2. 分段拼接（推荐）：将长序列切割成多个长度为 512 的子序列，分别获取它们的嵌入向量，然后将这些向量拼接起来作为最终表示。\n\n参考代码逻辑如下：\n```python\n# 将序列分割为多个子序列\nsubsequences = [sequence[i:i + 512] for i in range(0, len(sequence), 512)]\n\n# 对每个子序列进行 tokenize 并获取 embedding\nembeddings_list = []\nfor subseq in subsequences:\n    inputs = tokenizer(subseq, padding='max_length', truncation=True, max_length=512, return_tensors=\"pt\")\n    with torch.no_grad():\n        outputs = model(inputs['input_ids'])\n        # 提取 [CLS] embedding 或其他聚合方式\n        emb = outputs.last_hidden_state[:, 0, :]\n        embeddings_list.append(emb)\n\n# 拼接所有子序列的 embedding\nfinal_embedding = torch.cat(embeddings_list, dim=1) # 根据任务需求选择拼接维度\n```",{"id":133,"question_zh":134,"answer_zh":135,"source_url":127},12346,"导入 DNATokenizer 时出现 'ImportError: cannot import name DNATokenizer' 错误怎么办？","该错误通常是因为 `DNATokenizer` 位于 DNABERT 项目的特定文件夹内，未正确安装或路径不对。请按照以下步骤解决：\n\n1. 克隆仓库到正确目录：\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\n   cd DNABERT\n   ```\n2. 以可编辑模式安装包：\n   ```bash\n   python3 -m pip install --editable .\n   ```\n3. 进入 examples 目录并安装依赖（如果需要）：\n   ```bash\n   cd examples\n   python3 -m pip install -r requirements.txt\n   ```\n4. 确保在 `DNABERT\u002Fexamples` 目录下运行你的脚本，或者确保 Python 环境变量能识别到安装后的包，然后再尝试 `from transformers import DNATokenizer`。",{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},12347,"运行 run_finetune.py 时遇到 Segmentation fault（段错误）如何解决？","这是一个已知问题，特别是在多 GPU 环境下运行时容易发生。虽然根本原因可能涉及底层库兼容性，但一个有效的临时解决方案是限制程序只使用单个 GPU。\n\n提交任务时，不要使用所有可用 GPU，而是通过设置环境变量指定单卡运行：\n```bash\nexport CUDA_VISIBLE_DEVICES=0\npython run_finetune.py ...\n```\n许多用户反馈指定单 GPU 后问题即可解决，能够正常完成微调任务。","https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\u002Fissues\u002F4",{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},12348,"微调时出现 'valueerror: number of classes in y_true not equal to the number of columns in y_score' 错误是什么原因？","这个错误通常发生在多分类任务中，原因是评估指标计算部分的代码不匹配。默认代码可能只适用于二分类。\n\n解决方法：\n1. 检查并修改 `src\u002Ftransformers\u002Fdata\u002Fmetrics\u002F__init__.py` 文件中的评估逻辑。\n2. 确保使用了正确的准确率计算函数，例如：\n   ```python\n   \"acc\": simple_accuracy(preds, labels)\n   ```\n3. 如果你自定义了 Processor（如在 `glue.py` 中添加了新的 DrugResistanceProcessor），请确保该 Processor 正确返回了标签数量，并且与模型输出的维度一致。\n4. 对于多分类任务，可能需要手动调整预测结果 (`preds`) 和真实标签 (`labels`) 的处理逻辑，确保它们形状匹配后再传入评价指标函数。","https:\u002F\u002Fgithub.com\u002Fjerryji1993\u002FDNABERT\u002Fissues\u002F43",{"id":147,"question_zh":148,"answer_zh":149,"source_url":145},12349,"如何在 DNABERT 中添加自定义的多分类任务并计算 F1、MCC 等指标？","要支持多分类及更多评价指标，需要进行以下修改：\n\n1. **自定义 Processor**：在 `DNABERT\u002Fsrc\u002Ftransformers\u002Fdata\u002Fprocessors\u002Fglue.py` 中添加新的类继承自 `DataProcessor`，定义 `get_labels` 返回所有类别标签。\n2. **修改评估指标**：编辑 `src\u002Ftransformers\u002Fdata\u002Fmetrics\u002F__init__.py`，添加计算 F1-score、MCC 等指标的函数。例如使用 `sklearn.metrics`：\n   ```python\n   from sklearn.metrics import f1_score, matthews_corrcoef\n   \n   def compute_metrics(preds, labels):\n       # 确保 preds 是 argmax 后的类别索引\n       preds = np.argmax(preds, axis=1)\n       return {\n           \"acc\": simple_accuracy(preds, labels),\n           \"f1\": f1_score(labels, preds, average=\"weighted\"),\n           \"mcc\": matthews_corrcoef(labels, preds)\n       }\n   ```\n3. **运行参数**：在运行 `run_finetune.py` 时，确保 `--task_name` 与你定义的 Processor 名称对应，并且数据文件格式（tsv）符合多分类要求（包含正确的标签列）。",[]]