SpliceBERT (manuscrito, preimpreso) es un modelo de lenguaje de secuencia de ARN primario previamente entrenado en más de 2 millones de secuencias de ARN de vertebrados. Puede utilizarse para estudiar el empalme de ARN y otros problemas biológicos relacionados con la secuencia de ARN.
Para obtener puntos de referencia y aplicaciones adicionales de SpliceBERT (por ejemplo, en los conjuntos de datos de SpliceAI y DeepSTARR), consulte Análisis de SpliceBERT.
Disponibilidad de datos
¿Cómo utilizar SpliceBERT?
Reproducir el análisis.
Contacto
Citación
Los pesos del modelo y los datos para el análisis están disponibles en zenodo:7995778.
SpliceBERT se implementa con transformers
Huggingface y FlashAttention en PyTorch. Los usuarios deben instalar pytorch, transformadores y FlashAttention (opcional) para cargar el modelo SpliceBERT.
Instale PyTorch: https://pytorch.org/get-started/locally/
Instale los transformadores Huggingface: https://huggingface.co/docs/transformers/installation
Instale FlashAttention (opcional): https://github.com/Dao-AILab/flash-attention
SpliceBERT se puede utilizar fácilmente para una serie de tareas posteriores a través de la API oficial. Consulte la guía oficial para obtener más detalles.
Descargar EmpalmeBERT
Los pesos de SpliceBERT se pueden descargar desde zenodo: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Requisitos del sistema
Recomendamos ejecutar SpliceBERT en un sistema Linux con una GPU NVIDIA de al menos 4 GB de memoria. (Es posible ejecutar nuestro modelo solo con CPU, pero será muy lento).
Ejemplos
Proporcionamos un script de demostración para mostrar cómo usar SpliceBERT a través de la API oficial de los transformadores Huggingface en la primera parte del siguiente bloque de código.
Los usuarios también pueden usar SpliceBERT con FlashAttention reemplazando la API oficial con la API personalizada, como se muestra en la segunda parte del siguiente bloque de código. Tenga en cuenta que flash-attention requiere que se habilite el modo automático de precisión mixta (amp) y actualmente no es compatible attention_mask
Utilice SpliceBERT a través de la API oficial de los transformadores Huggingface:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # establecer la ruta a la carpeta de SpliceBERTimport torchfrom transformadores previamente entrenados importar AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# cargar tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# preparar secuencia de entradaseq = "ACGUACGuacguaCGu" ## ADVERTENCIA: esto es sólo una demostración. Es posible que SpliceBERT no funcione en secuencias de menos de 64 nt, ya que fue entrenado en secuencias de 64-1024 nt de longitudseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T y agregue whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. NOTA: se agregarán un token [CLS] y [SEP] al inicio y al final de seqinput_ids = torch.as_tensor(input_ids) # convertir la lista de Python a Tensorinput_ids = input_ids.unsqueeze(0) # agregar lote dimensión, forma: (tamaño de lote, longitud de secuencia) # use la API oficial de huggerface para usar SpliceBERT # obtenga incrustaciones de nucleótidos (estados ocultos)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # cargar modellast_hidden_state = model(input_ids).last_hidden_state # obtener estados ocultos de la última capahiddens_states = model(input_ids, output_hidden_states=True).hidden_states # estados ocultos de la capa de incrustación (nn. Embedding) y el codificador de 6 transformadores. capas # obtener logits de tipo nucleótido en lenguaje enmascarado modelingmodel = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # cargar modellogits = model(input_ids).logits # forma: (batch_size, secuencia_longitud, vocab_size)# ajuste fino de SpliceBERT para tareas de clasificación de tokensmodel = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH) , número_etiquetas=3) # supongamos que el número de clase es 3, forma: (batch_size, secuencia_longitud, num_labels)# ajuste fino de SpliceBERT para tareas de clasificación de secuencias modelo = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # supongamos que el número de clase es 3, forma: (batch_size, secuencia_longitud, núm_etiquetas)
O utilice SpliceBERT con FlashAttention reemplazando la API oficial con la API personalizada (actualmente, flash-attention no admite atencion_mask. Como resultado, la longitud de las secuencias en cada lote debe ser la misma)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # establece la ruta a la carpeta de SpliceBERTimport torchimport previamente entrenado syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))from transformadores importan AutoTokenizer desde splicebert_model importan BertModel, BertForMaskedLM, BertForTokenClassification# cargar tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# preparar secuencia de entradaseq = "ACGUACGuacguaCGu" ## ADVERTENCIA: esto es solo una demostración. Es posible que SpliceBERT no funcione en secuencias de menos de 64 nt, ya que fue entrenado en secuencias de 64-1024 nt de longitudseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T y agregue whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. NOTA: se agregarán un token [CLS] y [SEP] al inicio y al final de seqinput_ids = torch.as_tensor(input_ids) # convertir la lista de Python a Tensorinput_ids = input_ids.unsqueeze(0) # agregar lote dimensión, forma: (tamaño_de_lote, longitud_de_secuencia)# O use BertModel personalizado con FlashAttention# obtenga incrustaciones de nucleótidos (estados ocultos) = BertModel.from_pretrained(SPLICEBERT_PATH) # cargar el modelo con autocast(): last_hidden_state = model(input_ids).last_hidden_state # obtener estados ocultos de la última capa hides_states = model(input_ids, output_hidden_states=True).hidden_states # estados ocultos de la capa de incrustación (nn .Incrustación) y las 6 capas del codificador del transformador # obtienen nucleótidos escriba logits en modelado de lenguaje enmascaradomodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # cargar modelo con autocast(): logits = model(input_ids).logits # forma: (batch_size, secuencia_longitud, vocab_size)# ajuste fino de SpliceBERT para tareas de clasificación de tokens con autocast(): modelo = BertForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # asumir que el número de clase es 3, forma: (batch_size, secuencia_longitud, num_labels)# ajustar SpliceBERT para tareas de clasificación de secuencias con autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # asumir que el número de clase es 3, forma: (tamaño_lote, longitud_secuencia, num_labels)
Configurar el entorno.
Ejecutamos los scripts en un entorno conda con python 3.9.7 en un sistema Linux (Ubuntu 20.04.3 LTS). Los paquetes requeridos son:
Nota: el número de versión solo se utiliza para ilustrar la versión del software utilizado en nuestro estudio. En la mayoría de los casos, los usuarios no necesitan asegurarse de que las versiones sean estrictamente iguales a la nuestra para ejecutar los códigos.
bedtools (2.30.0)
MaxEntScan (2004)
gtfToGenePred (v377)
Python (3.9.7)
transformers (4.24.0)
pytorch (1.12.1)
h5py (3.2.1)
numpy (1.23.3)
scipy (1.8.0)
scikit-learn (1.1.1)
scanpy (1.8.2)
matplotlib (3.5.1)
seaborn (0.11.2)
tqdm (4.64.0)
pyBigWig (0.3.18)
cython (0.29.28)
Paquetes de Python:
Herramientas de línea de comando (opcional):
Clona este repositorio, descarga datos y configura scripts.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # descargar pesos y datos del modelo, o descargarlos manualmente desde [zenodo](https://doi.org/10.5281/zenodo.7995778)cd ejemplos bash setup.sh # compila las utilidades de selene, se requiere cython
(Opcional) Descargue los resultados calculados previamente para las secciones 1 a 4 de Google Drive y descomprímalos en la carpeta examples
.
# los usuarios deben descargar manualmente `pre-computed_results.tar.gz` y colocarlo en la carpeta `./examples` y ejecutar el siguiente comando para descomprimirlotar -zxvf pre-computed_results.tar.gz
Si los resultados calculados previamente se descargaron y descomprimieron correctamente, los usuarios pueden omitir la ejecución de pipeline.sh
en los cuadernos de jupyter de la sección 1-4.
Ejecute jupyter notebooks (sección 1-4) o bash scripts pipeline.sh
(sección 5-6):
análisis de conservación evolutiva (relacionado con la Figura 1)
análisis de inclusión de nucleótidos (relacionado con la Figura 2)
Análisis de peso de atención (relacionado con la Figura 3)
análisis de efecto variante (relacionado con la Figura 4)
predicción de punto de ramificación (relacionada con la Figura 5)
Predicción del sitio de empalme (relacionada con la Figura 6)
Para problemas relacionados con los scripts, cree un problema en https://github.com/biomed-AI/SpliceBERT/issues.
Si tiene alguna otra pregunta, no dude en comunicarse con chenkenbio {at} gmail.com.
@artículo{Chen2023.01.31.526427, autor = {Chen, Ken y Zhou, Yue y Ding, Maolin y Wang, Yu y Ren, Zhixiang y Yang, Yuedong}, title = {El aprendizaje autosupervisado sobre millones de secuencias primarias de ARN de 72 vertebrados mejora la predicción del empalme de ARN basado en secuencias}, año = {2024}, doi = {10.1093/babero/bbae163}, editor = {Oxford University Press}, URL = {https://doi.org/10.1093/bib/bbae163}, diario = {Reuniones informativas en bioinformática} }