De F16~F20 a F21~F25 — De la secuencia a la célula
Desde F16 hasta F20, tratamos la propia secuencia de ADN como un lenguaje. Sin embargo, como ya confirmamos en S26~S38 (la serie de células individuales), los datos que con mayor frecuencia encontramos en la práctica no son secuencias, sino vectores de expresión de miles a decenas de miles de genes por célula. ¿Podemos reconstruir este vector como entrada para un modelo de lenguaje? scGPT (2024, Wang lab) es un modelo fundacional de células individuales representativo que responde "sí" a esta pregunta.
Principio — Reconstrucción del vector de expresión como secuencia
La expresión génica no es originalmente una secuencia
Después de la normalización y la selección de HVG (genes con alta variabilidad) tratadas en S27~S31, cada célula se representa mediante un vector de expresión con dimensiones iguales al número (seleccionado) de genes. Este vector se asemeja más a un conjunto sin orden — el hecho de que un gen ocupe una determinada dimensión es solo una elección arbitraria definida por la tubería de procesamiento de datos, no un "orden" con significado biológico.
scGPT representa conjuntamente el ID del gen y su valor de expresión como entrada. En la implementación, el orden de la lista de genes es solo una convención para construir tensores, y no denota un "orden de palabras" biológico como en el lenguaje natural. Por lo tanto, durante la inferencia y el ajuste fino reales, se debe utilizar el vocabulario oficial y el preprocesador para mantener una alineación consistente entre los IDs de los genes y sus valores.
Discretización de valores (value binning) y doble incrustación
A diferencia de los tokens discretos del lenguaje natural, los niveles de expresión son valores continuos. scGPT discretiza estos valores en varios intervalos (bins) y luego representa cada token mediante una combinación de incrustación de identidad génica e incrustación de intervalo de expresión.
De este modo, se pueden codificar conjuntamente en una sola entrada del transformador dos informaciones distintas: "qué gen es" y "cuánto se expresa".
Preentrenamiento — Predicción de genes enmascarados
El objetivo del preentrenamiento comparte la misma inspiración que la predicción de k-meros enmascarados de F16. Se ocultan algunos tokens génicos dentro de una célula y se entrena al modelo para predecir el intervalo de expresión del gen oculto basándose únicamente en los patrones de expresión del resto de los genes.
Si se preentrena este objetivo a lo largo de millones de células, el modelo aprenderá naturalmente la estructura estadística de la cocoespresión génica: "cuando estos genes se expresan juntos, este otro también suele expresarse en este nivel".
Ejemplo de cálculo manual: discretización del rango de expresión
Supongamos que se discretizan los valores continuos de expresión en 5 intervalos. Si el rango de los valores de expresión normalizados por logaritmo es aproximadamente , el ancho del intervalo es
El gen con un valor de expresión se asigna a
Aumentar el número de intervalos mejora la resolución de la información de expresión, pero también incrementa el tamaño del vocabulario y la dificultad del aprendizaje; por lo tanto, este valor debe ajustarse tras validación en la práctica.
Práctica: reproducir el flujo de extracción de incrustaciones tipo scGPT después del preprocesamiento con Scanpy
# Colab T4, capa gratuita. Se continúa directamente con la tubería de preprocesamiento de Scanpy de S26 a S31.
import scanpy as sc
# 1. Primero se aplica el preprocesamiento estándar tratado en S27 a S31 (QC, normalización, selección de HVG).adata = sc.read_h5ad("pbmc3k_processed.h5ad") # Supuesto reutilización de resultados de S26 a S31
# Esto no reproduce la entrada oficial de scGPT. El modelo real tiene un vocabulario oficial y# Este no es el formato de entrada oficial de scGPT. El modelo real cuenta con un vocabulario oficial y# Este no es el formato de entrada oficial de scGPT. El modelo real cuenta con un vocabulario oficial y# Utilice el preprocesador para construir tensores (ID del gen, valor de expresión).# Utilice el preprocesador para construir tensores (ID del gen, valor de expresión).def cell_to_gene_sequence(expr_row, gene_names, n_bins: int = 5, top_k: int = 200):def cell_to_gene_sequence(expr_row, gene_names, n_bins: int = 5, top_k: int = 200): """ Selecciona los top_k genes con mayor expresión en el vector de expresión de una célula """ """ import numpy as np nonzero_idx = expr_row.nonzero()[0] sorted_idx = nonzero_idx[expr_row[nonzero_idx].argsort()[::-1][:top_k]] max_val = expr_row.max() if expr_row.max() > 0 else 1.0 bins = np.floor(expr_row[sorted_idx] / max_val * (n_bins - 1)).astype(int) return list(zip(gene_names[sorted_idx], bins))
# Para cargar los pesos preentrenados reales y extraer incrustaciones, es seguro seguir exactamente el script de preprocesamiento (GitHub oficial de scGPT).# Es seguro seguir exactamente el script de preprocesamiento (GitHub oficial de scGPT).Los embeddings celulares obtenidos de esta manera pueden reutilizarse para anotaciones del tipo celular (cell type annotation), corrección de lotes (conectados al problema de integración que se tratará en F22~F23) o tareas downstream que requieran ajuste fino con pocas etiquetas, al igual que los embeddings del Nucleotide Transformer de F17.
Mapeo CS
- Secuenciación de datos no ordenados: Ordenar conjuntos de datos originalmente sin un orden intrínseco (por ejemplo, por cantidad de expresión) para crear una secuencia artificial y alimentarlos a modelos de secuencia es una idea similar a las estrategias de serialización comúnmente utilizadas en el aprendizaje profundo para manejar datos de grafos o conjuntos.
- Combinación de discretización e incrustación: Dividir valores continuos en intervalos y tratarlos como incrustaciones categóricas es estructuralmente idéntico a sumar la incrustación posicional (positional embedding) y la incrustación de tokens en el procesamiento del lenguaje natural.
- Estructura paralela con F16: La predicción de k-mers enmascarados (F16) y la predicción de genes enmascarados (scGPT) comparten el mismo patrón de diseño de aprendizaje autosupervisado, diferenciándose únicamente en el dominio.
Defectos frecuentes
- Confundir la lista top_k para exploración con la entrada oficial de scGPT: La lista superior de genes en el ejemplo anterior es una abreviatura explicativa. Si no se siguen los filtros oficiales de vocabulario y genes del modelo ni el preprocesamiento de valores, podría no ser compatible con los pesos preentrenados.
- Usar embeddings preentrenados directamente en la integración sin corrección de lotes: Los embeddings de scGPT tampoco están completamente libres de efectos técnicos de lote. Es necesario realizar una validación paralela junto con procedimientos de corrección de lotes como Harmony y scVI, tratados en S32~S33.
Para profundizar más
El texto aquí presentado ha sido reestructurado directamente por el equipo de investigación del BPD. Profundicemos consultando el artículo original y los materiales oficiales.
- Artículo original de scGPT: Cui et al. (2024), scGPT: toward building a foundation model for single-cell multi-omics using generative AI, Nature Methods 21.
- Antecedentes del preprocesamiento de células individuales: S26~S31 (serie posterior a
scrna-seq-intro-and-data-structure).
En el siguiente capítulo (F22), examinaremos otra elección de diseño mediante la cual Geneformer aprende el contexto génico utilizando únicamente información de rango, sin emplear los valores de expresión.