🚀 ProtGPT2
ProtGPT2(査読付き論文)は、タンパク質の言語を扱う言語モデルで、新規タンパク質の設計やエンジニアリングに使用できます。ProtGPT2が生成する配列は、天然タンパク質の重要な特徴(アミノ酸の傾向、二次構造の内容、球状性)を維持しながら、タンパク質空間の未探索領域を探索します。
🚀 クイックスタート
ProtGPT2は、タンパク質の言語を扱うことができ、新規タンパク質の設計やエンジニアリングに役立ちます。以下では、このモデルの詳細と使用方法を説明します。
✨ 主な機能
- 新規タンパク質の設計とエンジニアリングに使用可能
- 天然タンパク質の重要な特徴を維持しながら、タンパク質空間の未探索領域を探索
📦 インストール
ProtGPT2はHuggingFaceのtransformer Pythonパッケージで使用できます。詳細なインストール手順はこちらを参照してください:https://huggingface.co/docs/transformers/installation
💻 使用例
基本的な使用法
>>> from transformers import pipeline
>>> protgpt2 = pipeline('text-generation', model="nferruz/ProtGPT2")
>>> sequences = protgpt2("<|endoftext|>", max_length=100, do_sample=True, top_k=950, repetition_penalty=1.2, num_return_sequences=10, eos_token_id=0)
>>> for seq in sequences:
print(seq)
{'generated_text': 'MINDLLDISRIISGKMTLDRAEVNLTAIARQVVEEQRQAAEAKSIQLLCSTPDTNHYVFG\nDFDRLKQTLWNLLSNAVKFTPSGGTVELELGYNAEGMEVYVKDSGIGIDPAFLPYVFDRF\nRQSDAADSRNYGGLGLGLAIVKHLLDLHEGNVSAQSEGFGKGATFTVLLPLKPLKRELAA\nVNRHTAVQQSAPLNDNLAGMKILIVEDRPDTNEMVSYILEEAGAIVETAESGAAALTSLK\nSYSPDLVLSDIGMPMMDGYEMIEYIREWKTTKGG'}
{'generated_text': 'MQGDSSISSSNRMFT\nLCKPLTVANETSTLSTTRNSKSNKRVSKQRVNLAESPERNAPSPASIKTNETEEFSTIKT\nTNNEVLGYEPNYVSYDFVPMEKCNLCNENCSIELASLNEETFVKKTICCHECRKKAIENA\nENNNTKGSAVSNNSVTSSSGRKKIIVSGSQILRNLDSLTSSKSNISTLLNPNHLAKLAKN\nGNLSSLSSLQSSASSISKSSSTSSTPTTSPKVSSPTNSPSSSPINSPTP'}
{'generated_text': 'M\nSTHVSLENTLASLQATFFSLEARHTALETQLLSTRTELAATKQELVRVQAEISRADAQAQ\nDLKAQILTLKEKADQAEVEAAAATQRAEESQAALEAQTAELAQLRLEKQAPQHVAEEGDP\nQPAAPTTQAQSPVTSAAAAASSAASAEPSKPELTFPAYTKRKPPTITHAPKAPTKVALNP\nSTLSTSGSGGGAKADPTPTTPVPSSSAGLIPKALRLPPPVTPAASGAKPAPSARSKLRGP\nDAPLSPSTQS'}
{'generated_text': 'MVLLSTGPLPILFLGPSLAELNQKYQVVSDTLLRFTNTV\nTFNTLKFLGSDS\n'}
{'generated_text': 'M\nNNDEQPFIMSTSGYAGNTTSSMNSTSDFNTNNKSNTWSNRFSNFIAYFSGVGWFIGAISV\nIFFIIYVIVFLSRKTKPSGQKQYSRTERNNRDVDSIKRANYYG\n'}
{'generated_text': 'M\nEAVYSFTITETGTGTVEVTPLDRTISGADIVYPPDTACVPLTVQPVINANGTWTLGSGCT\nGHFSVDTTGHVNCLTGGFGAAGVHTVIYTVETPYSGNSFAVIDVNVTEPSGPGDGGNGNG\nDRGDGPDNGGGNNPGPDPDPSTPPPPGDCSSPLPVVCSDRDCADFDTQAQVQIYLDRYGG\nTCDLDGNHDGTPCENLPNNSGGQSSDSGNGGGNPGTGSTHQVVTGDCLWNIASRNNGQGG\nQAWPALLAANNESITNP'}
{'generated_text': 'M\nGLTTSGGARGFCSLAVLQELVPRPELLFVIDRAFHSGKHAVDMQVVDQEGLGDGVATLLY\nAHQGLYTCLLQAEARLLGREWAAVPALEPNFMESPLIALPRQLLEGLEQNILSAYGSEWS\nQDVAEPQGDTPAALLATALGLHEPQQVAQRRRQLFEAAEAALQAIRASA\n'}
{'generated_text': 'M\nGAAGYTGSLILAALKQNPDIAVYALNRNDEKLKDVCGQYSNLKGQVCDLSNESQVEALLS\nGPRKTVVNLVGPYSFYGSRVLNACIEANCHYIDLTGEVYWIPQMIKQYHHKAVQSGARIV\nPAVGFDSTPAELGSFFAYQQCREKLKKAHLKIKAYTGQSGGASGGTILTMIQHGIENGKI\nLREIRSMANPREPQSDFKHYKEKTFQDGSASFWGVPFVMKGINTPVVQRSASLLKKLYQP\nFDYKQCFSFSTLLNSLFSYIFNAI'}
{'generated_text': 'M\nKFPSLLLDSYLLVFFIFCSLGLYFSPKEFLSKSYTLLTFFGSLLFIVLVAFPYQSAISAS\nKYYYFPFPIQFFDIGLAENKSNFVTSTTILIFCFILFKRQKYISLLLLTVVLIPIISKGN\nYLFIILILNLAVYFFLFKKLYKKGFCISLFLVFSCIFIFIVSKIMYSSGIEGIYKELIFT\nGDNDGRFLIIKSFLEYWKDNLFFGLGPSSVNLFSGAVSGSFHNTYFFIFFQSGILGAFIF\nLLPFVYFFISFFKDNSSFMKLF'}
{'generated_text': 'M\nRRAVGNADLGMEAARYEPSGAYQASEGDGAHGKPHSLPFVALERWQQLGPEERTLAEAVR\nAVLASGQYLLGEAVRRFETAVAAWLGVPFALGVASGTAALTLALRAYGVGPGDEVIVPAI\nTFIATSNAITAAGARPVLVDIDPSTWNMSVASLAARLTPKTKAILAVHLWGQPVDMHPLL\nDIAAQANLAVIEDCAQALGASIAGTKVGTFGDAAAFSFYPTKNMTTGEGGMLVTNARDLA\nQAARMLRSHGQDPPTAYMHSQVGFN'}
高度な使用法
python run_clm.py --model_name_or_path nferruz/ProtGPT2 --train_file training.txt --validation_file validation.txt --tokenizer_name nferruz/ProtGPT2
--do_train --do_eval --output_dir output --learning_rate 1e-06
📚 ドキュメント
モデルの説明
ProtGPT2は、GPT2 Transformerアーキテクチャに基づいており、36層を持ち、モデルの次元数は1280で、合計7億3800万のパラメータを持っています。
ProtGPT2は、タンパク質空間のデータベースであるUniRef50(バージョン2021_04)を使用して事前学習されたデコーダー専用のトランスフォーマーモデルです。事前学習は、FASTAヘッダーを含まない生の配列データで行われました。学習とデータセットの詳細はこちらで確認できます:https://huggingface.co/datasets/nferruz/UR50_2021_04
ProtGPT2は自己教師付き学習で訓練されており、つまり、学習中に配列の注釈は含まれず、生の配列データが使用されました。特に、ProtGPT2は因果モデリングの目的で訓練されており、シーケンス内の次のトークン(この場合はオリゴマー)を予測するように訓練されています。これにより、モデルはタンパク質の内部表現を学習し、タンパク質の言語を「話す」ことができます。
最適な配列の選択方法
我々は、困惑度の値がAlphaFold2のplddtと相関することを観察しています。各配列の困惑度を以下のように計算することをおすすめします。
sequence='MGEAMGLTQPAVSRAVARLEERVGIRIFNRTARAITLTDEGRRFYEAVAPLLAGIEMHGYR\nVNVEGVAQLLELYARDILAEGRLVQLLPEWAD'
sequence = "<|endoftext|>\nMGEAMGLTQPAVSRAVARLEERVGIRIFNRTARAITLTDEGRRFYEAVAPLLAGIEMHGY\nRVNVEGVAQLLELYARDILAEGRLVQLLPEWAD\n<|endoftext|>"
def calculatePerplexity(sequence, model, tokenizer):
input_ids = torch.tensor(tokenizer.encode(sequence)).unsqueeze(0)
input_ids = input_ids.to(device)
with torch.no_grad():
outputs = model(input_ids, labels=input_ids)
loss, logits = outputs[:2]
return math.exp(loss)
ppl = calculatePerplexity(sequence, model, tokenizer)
ここで、ppl
はその配列の困惑度の値です。どのような困惑度の値が「良い」または「悪い」配列を与えるかについての閾値はまだありませんが、推論時間が短いため、多くの配列をサンプリングし、困惑度で並べ替え、値の低いものを選択するのが最善です(値が低いほど良い)。
学習仕様
このモデルは、128台のNVIDIA A100 GPUで50エポック学習され、ブロックサイズは512、総バッチサイズは1024(バッチあたり65,536トークン)でした。使用されたオプティマイザはAdam(beta1 = 0.9、beta2 = 0.999)で、学習率は1e-3でした。
🔧 技術詳細
ProtGPT2は、GPT2 Transformerアーキテクチャに基づいており、36層を持ち、モデルの次元数は1280で、合計7億3800万のパラメータを持っています。事前学習は、タンパク質空間のデータベースであるUniRef50(バージョン2021_04)を使用して行われました。学習は自己教師付き学習で行われ、因果モデリングの目的で、シーケンス内の次のトークンを予測するように訓練されています。
📄 ライセンス
このモデルはApache-2.0ライセンスの下で提供されています。