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¶
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)