원문 캡처 · github.com
원문 캡처 · github.com

Protuna는 과거 돌연변이 데이터나 단일 후보 서열을 바탕으로 단백질 공학 실험에서 다음에 시험할 변이 묶음을 제안하는 최적화 프레임워크다. Python 3.12 이상이 필요하며, pip install protuna로 설치할 수 있다.

Protuna는 설계 공간을 정하고 후보 서열을 생성한 뒤, 예측 점수와 제약 조건을 평가해 실험 예산 안에서 후보를 고른다. 선택 대상은 샘플러가 제안한 후보로 제한된다. 단백질 언어 모델의 서열 가능도는 실험 목표와 일치하지 않을 수 있어, Protuna는 보상 기반 생성으로 원하는 특성에 맞춰 탐색을 유도하는 기능도 제공한다. 유망 후보를 다음 세대의 부모로 사용하는 반복 탐색도 선택할 수 있다.

주요 기능은 Feynman–Kac 조정, 분류기 가이드, 빔 서치를 이용한 생성 유도, Ray 기반 분산 스크리닝, 교체 가능한 샘플러·예측기·제약 조건·획득 전략의 조합이다. 여러 특성을 최적화할 때는 하나를 주목표로 두고 다른 특성에 부등식 제약을 설정할 수 있다.

간단한 예제는 gb1 데이터셋과 다중서열정렬(MSA)을 사용해 후보를 평가하고, 최대 20개 서열을 선택한다. 예제에서 허용 위치와 고정 위치, 제외할 아미노산, 보존된 위치를 지정하며, 최대 3개 변이를 가진 하위 탐색 공간을 최대 4개 만든다. 기본 파이프라인은 다음과 같다.

python
from protuna import data
from protuna import optim
from protuna.optim import acquisitions
from protuna.optim import predictors
from protuna.optim import rules
from protuna.optim import samplers
from protuna.optim import spaces

dataset = data.get_dataset("gb1", source=data.DatasetSource.FLIP)
tokens = data.tokenizer.encode(dataset.target_sequence)
msa = data.TokenizedMSA.from_file(
 dataset.get_msa_path(data.MSAProtocol.ColabFold), format="a3m"
)
design_space = spaces.DesignSpace.from_rules(
 rules=[
 # Positions are illustrative and use zero-based indexing.
 rules.AllowOnly(positions=list(range(100, 125))),
 rules.DenyResidues(amino_acids=["C"]),
 rules.FixSites(positions=[105, 120]),
 # Protect sites where the query residue is >= 95% conserved.
 rules.MSAConserved(tokenized_msa=msa, threshold=0.95),
 ],
 init_sequences=[tokens],
 # Explore up to 4 subspaces, each with at most 3 mutable sites.
 space_sampler=spaces.RandomMaskSampler(max_mutations=3, n_subspaces=4),
)
pipeline = optim.Pipeline(
 design_space=design_space,
 sampler=samplers.RandomSampler(max_samples=100), # Propose up to 4x100 variants
 objective=predictors.PSSMZeroshotPredictor(tokens, msa, laplace_smoothing=True),
 acquisition=acquisitions.Greedy(budget=20),
)
output = pipeline.run()
# Up to 20 sequences
candidates = data.tokenizer.decode(list(output.selection.token_ids))

파이프라인 설정은 문서에서 확인할 수 있다. 저장소는 기본 다운로드와 파이프라인 결과물을 $PROTUNA_HOME/protuna에 저장한다. 변수가 설정되지 않으면 $XDG_CACHE_HOME/protuna를 사용하고, 그것도 없으면 $HOME/.cache/protuna를 사용한다. 실행 결과는 다른 폴더나 AWS, Azure, GCP 클라우드 스토리지에 저장하도록 설정할 수 있다.

Protuna는 Python 패키지 protuna.optim, 분산 추론 인터페이스와 모델 어댑터를 담은 protuna.inference, 데이터셋·MSA·토큰화 기능을 제공하는 protuna.data, 단백질 점수 계산 라이브러리 protuna.score로 구성된다. 학습기와 레시피를 포함하는 protuna.train은 향후 제공할 예정이며, 여기에는 소량 데이터 기반 특성 예측, 미세 조정, 생성 모델의 선호도 정렬이 포함될 계획이다.

단일 데이터 포인트에서 후보를 생성하는 성과는 목표, 점수화에 사용하는 제로샷 대리 지표, 샘플러의 가능도가 서로 얼마나 잘 맞는지에 달려 있다고 프로젝트는 설명한다. 자세한 내용은 개념 개요, 확장 가이드, 샘플러 작성 안내, 획득 전략 작성 안내에서 확인할 수 있다. 향후 일정과 기여 안내도 공개돼 있다.