Skip to content

tRNA Inference

This tutorial demonstrates two specialized models for tRNA analysis: tRNADetector for binary classification (tRNA vs. non-tRNA) and tRNAPointer for token-level tRNA region detection.

Full Notebook

View Full Notebook

Prerequisites

uv pip install -e '.[base,inference,cuda124]'

tRNADetector: Binary Classification

tRNADetector classifies input sequences as tRNA or non-tRNA.

Load Model

from dnallm import load_config, load_model_and_tokenizer, DNAInference

configs = load_config("./inference_model_config_tRNADetector.yaml")

model_name = "zhangtaolab/tRNADetector"
model, tokenizer = load_model_and_tokenizer(
    model_name,
    task_config=configs['task'],
    source="modelscope"
)

predictor = DNAInference(
    model=model,
    tokenizer=tokenizer,
    config=configs
)

Predict

seq = [
    'AAGAAAGCTCAAATAGTATACGAAGAACTCGAAGCTAAGCAACTGTGAAGAGAAATTAAGTAGCTACAATTAGGTTATAAATAATTTGATTTCTACTCTAACTGTGACGTGGGGATGTAGCTCAGATGGTAGAGCGCTCGCTTAGCATGCGAGAGGTACGGGGATCGATACCCCGCATCTCCATTTTTTTATTTTTTTTTAGAATTCTACTTTTTCTAAAATTGACCCTTTAATTTTGTATTTATATTTCTTTTATAATGTATATGCATTCTGCATTTTATTTTTCCTTTACATTTTTTCTTATATAATGTAAGTTATGCATTCTGCATTTTCTTTTGTCTTTTTTTTTTCTTATAAGTGGTTGG',
    'AAAACCCCAACTAGCTAGCATCGATCGAGCTAGCATGCATCGATCGATCGATCGATCGATCGATCGATCGAACACCCCGCGCGTAGCTACGGCTCAGAGCATCGATGCGCAGTCGAGCCGGGGGGGACATCGATCGATCGATCGATCGAGTCGACGATCGATCGAGCATATAATCGAGTCGACTGATCGATCGAGCGTACGATCGATCGATCGATGCATCCCCGATCGATCGATCGATCTTATAACACACACACACACACACGGAAAA'
]

results = predictor.infer_file(seq, evaluate=False)

Display Results

for i in results:
    sequence = results[i]['sequence']
    label = results[i]['label']
    score = results[i]['scores'][label]
    print(f'input sequence:{sequence}\n',
        f'predict label:{label}\n',
        f'predict score:{score}\n',
        f'*'*20)

tRNAPointer: Token-Level Detection

tRNAPointer performs token classification to identify the exact start and end positions of tRNA regions within longer sequences.

Load Model

configs = load_config("./inference_model_config_tRNAPointer.yaml")

model_name = "zhangtaolab/tRNAPointer"
model, tokenizer = load_model_and_tokenizer(
    model_name,
    task_config=configs['task'],
    source="modelscope"
)

predictor = DNAInference(
    model=model,
    tokenizer=tokenizer,
    config=configs
)

Predict with Character-Level Input

tRNAPointer expects per-character tokenization:

seq = ['AAGAAAGCTCAAATAGTATACGAAGAACTCGAAGCTAAGCAACTGTGAAGAGAAATTAAGTAGCTACAATTAGGTTATAAATAATTTGATTTCTACTCTAACTGTGACGTGGGGATGTAGCTCAGATGGTAGAGCGCTCGCTTAGCATGCGAGAGGTACGGGGATCGATACCCCGCATCTCCATTTTTTTATTTTTTTTTAGAATTCTACTTTTTCTAAAATTGACCCTTTAATTTTGTATTTATATTTCTTTTATAATGTATATGCATTCTGCATTTTATTTTTCCTTTACATTTTTTCTTATATAATGTAAGTTATGCATTCTGCATTTTCTTTTGTCTTTTTTTTTTCTTATAAGTGGTTGG', 'AAAACCCCAACTAGCTAGCATCGATCGAGCTAGCATGCATCGATCGATCGATCGATCGATCGATCGATCGAACACCCCGCGCGTAGCTACGGCTCAGAGCATCGATGCGCAGTCGAGCCGGGGGGGACATCGATCGATCGATCGATCGAGTCGACGATCGATCGAGCATATAATCGAGTCGACTGATCGATCGAGCGTACGATCGATCGATCGATGCATCCCCGATCGATCGATCGATCTTATAACACACACACACACACACGGAAAA']

seq_token = []
for _ in seq:
    seq_token.append([base for base in _])

results = predictor.infer_file(seq_token,  evaluate=False)

Extract tRNA Regions

for i in results:
    sequence = ''.join(results[i]['sequence'])
    label = results[i]['label']
    try:
        start = label.index("B-tRNA")
        end = len(label) - 1 - label[::-1].index("I-tRNA")
        tRNA_sequence = sequence[start:end+1]
        print(f'input sequence:{sequence}\n',
              f'tRNA start index in sequence:{start}\n',
              f'tRNA end index in sequence:{end}\n',
              f'tRNA sequence:{tRNA_sequence}\n',
              f'*'*20)
    except:
        print(f'input sequence:{sequence}\n',
              'No tRNA found\n',
              f'*'*20)