SpliceBERT (рукопись, препринт) — это модель языка первичных последовательностей РНК, предварительно обученная на более чем 2 миллионах последовательностях РНК позвоночных. Его можно использовать для изучения сплайсинга РНК и других биологических проблем, связанных с последовательностью РНК.
Дополнительные тесты и приложения SpliceBERT (например, для наборов данных SpliceAI и DeepSTARR) см. в разделе SpliceBERT-анализ.
Доступность данных
Как использовать SpliceBERT?
Воспроизвести анализ
Контакт
Цитирование
Веса моделей и данные для анализа доступны по адресу zenodo:7995778.
SpliceBERT реализуется с помощью transformers
Huggingface и FlashAttention в PyTorch. Пользователям необходимо установить pytorch, преобразователи и FlashAttention (необязательно) для загрузки модели SpliceBERT.
Установите PyTorch: https://pytorch.org/get-started/locally/
Установите трансформеры Huggingface: https://huggingface.co/docs/transformers/installation
Установите FlashAttention (необязательно): https://github.com/Dao-AILab/flash-attention.
SpliceBERT можно легко использовать для ряда последующих задач через официальный API. Более подробную информацию смотрите в официальном руководстве.
Скачать SpliceBERT
Веса SpliceBERT можно скачать с zenodo: https://zenodo.org/record/7995778/files/models.tar.gz?download=1
Системные требования
Мы рекомендуем запускать SpliceBERT в системе Linux с графическим процессором NVIDIA с объемом памяти не менее 4 ГБ. (Запуск нашей модели только с процессором возможен, но это будет очень медленно.)
Примеры
В первой части следующего блока кода мы предоставляем демонстрационный скрипт, показывающий, как использовать SpliceBERT через официальный API преобразователей Huggingface.
Пользователи также могут использовать SpliceBERT с FlashAttention, заменив официальный API на собственный API, как показано во второй части следующего блока кода. Обратите внимание, что flash-attention требует включения автоматического режима смешанной точности (amp), и в настоящее время он не поддерживает attention_mask
Используйте SpliceBERT через официальный API преобразователей Huggingface:
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # задаем путь к папке предварительно обученного SpliceBERTimport torchfrom Transformers import AutoTokenizer, AutoModel, AutoModelForMaskedLM, AutoModelForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# готовим входную последовательность = "ACGUACGuacguaCGu" ## ВНИМАНИЕ: это всего лишь демо-версия. SpliceBERT может не работать с последовательностями короче 64 нт, поскольку он был обучен на последовательностях 64-1024 нт в lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T и добавьте whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. ПРИМЕЧАНИЕ. токен [CLS] и [SEP] будут добавлены в начало и конец seqinput_ids = torch.as_tensor(input_ids) # конвертируем список Python в Tensorinput_ids = input_ids.unsqueeze(0) # добавляем размер пакета, форму: (batch_size , последовательность_длина)# используйте официальный API Huggerface для использования SpliceBERT# получите встраивания нуклеотидов (скрытые состояния)model = AutoModel.from_pretrained(SPLICEBERT_PATH) # загрузка моделиlast_hidden_state = model(input_ids).last_hidden_state # получение скрытых состояний из последнего слояhiddens_states = model(input_ids, output_hidden_states=True).hidden_states # скрытые состояния из слоя внедрения (nn.Embedding) и преобразователя 6 Слои кодировщика # получают логиты типа нуклеотидов в модели моделирования на языке масок = AutoModelForMaskedLM.from_pretrained(SPLICEBERT_PATH) # загрузка моделиlogits = model(input_ids).logits # shape: (batch_size,sequence_length, vocab_size)# точная настройка SpliceBERT для задач классификации токеновmodel = AutoModelForTokenClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # предполагаем номер класса 3, форма: (batch_size, Sequence_length, num_labels)# точная настройка SpliceBERT для задач классификации последовательностейmodel = AutoModelForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # предположим, что номер класса равен 3, shape: (batch_size, Sequence_length, num_labels)
Или используйте SpliceBERT с FlashAttention, заменив официальный API на собственный API (В настоящее время flash-attention не поддерживает alert_mask. В результате длина последовательностей в каждом пакете должна быть одинаковой)
SPLICEBERT_PATH = "/path/to/SpliceBERT/models/model_folder" # устанавливаем путь к папке предварительно обученного SpliceBERTimport torchimport syssys.path.append(os.path.dirname(os.path.abspath(SPICEBERT_PATH)))from трансформаторы импортируют AutoTokenizerfrom splicebert_model импорт BertModel, BertForMaskedLM, BertForTokenClassification# load tokenizertokenizer = AutoTokenizer.from_pretrained(SPLICEBERT_PATH)# подготовка входной последовательностиseq = "ACGUACGuacguaCGu" ## ВНИМАНИЕ: это всего лишь демонстрация. SpliceBERT может не работать с последовательностями короче 64 нт, поскольку он был обучен на последовательностях 64-1024 нт в lengthseq = ' '.join(list(seq.upper().replace("U", "T"))) # U - > T и добавьте whitespaceinput_ids = tokenizer.encode(seq) # N -> 5, A -> 6, C -> 7, G -> 8, T(U) -> 9. ПРИМЕЧАНИЕ. токен [CLS] и [SEP] будут добавлены в начало и конец seqinput_ids = torch.as_tensor(input_ids) # конвертируем список Python в Tensorinput_ids = input_ids.unsqueeze(0) # добавляем размер пакета, форму: (batch_size , последовательность_длина)# Или используйте специальную BertModel с FlashAttention#, чтобы получить встраивания нуклеотидов (скрытые состояния)model = BertModel.from_pretrained(SPLICEBERT_PATH) # загрузка модели с помощью autocast(): Last_hidden_state = model(input_ids).last_hidden_state # получение скрытых состояний из последнего слоя Hidden_states = model(input_ids, output_hidden_states=True).hidden_states # скрытые состояния из слоя внедрения (nn. Встраивание) и 6 слоев кодера преобразователя# получают логиты типа нуклеотида в modeling modelingmodel = BertForMaskedLM.from_pretrained(SPLICEBERT_PATH) # загрузка модели с autocast(): logits = model(input_ids).logits # shape: (batch_size, Sequence_length, vocab_size)# точная настройка SpliceBERT для задач классификации токенов с autocast(): model = BertForTokenClassification. from_pretrained(SPLICEBERT_PATH, num_labels=3) # предположим, что номер класса равен 3, shape: (batch_size,sequence_length, num_labels)# точная настройка SpliceBERT для задач классификации последовательностей с помощью autocast(): model = BertForSequenceClassification.from_pretrained(SPLICEBERT_PATH, num_labels=3) # предположим, что номер класса равен 3, форма: (размер_пакета, длина_последовательности, число_меток)
Настройте среду.
Мы запускаем сценарии в среде conda с Python 3.9.7 в системе Linux (Ubuntu 20.04.3 LTS). Необходимые пакеты:
Примечание. Номер версии используется только для иллюстрации версии программного обеспечения, использованного в нашем исследовании. В большинстве случаев пользователям не нужно следить за тем, чтобы версии строго совпадали с нашими, чтобы запускать коды.
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)
Пакеты Python:
Инструменты командной строки (необязательно):
Клонируйте этот репозиторий, загрузите данные и настройте скрипты.
git clone [email protected]:biomed-AI/SpliceBERT.gitcd SpliceBERT bash download.sh # загрузить веса модели и данные или загрузить их вручную с [zenodo](https://doi.org/10.5281/zenodo.7995778)cd примеров bash setup.sh # скомпилировать selene utils, требуется cython
(Необязательно) Загрузите предварительно рассчитанные результаты для разделов 1–4 с Google Диска и распакуйте их в папку examples
.
# пользователи должны вручную загрузить `pre-computed_results.tar.gz`, поместить его в папку `./examples` и запустить следующую команду, чтобы распаковать ittar -zxvf pre-computed_results.tar.gz
Если предварительно вычисленные результаты были правильно загружены и распакованы, пользователи могут пропустить запуск pipeline.sh
в блокнотах Jupyter, описанных в разделах 1–4.
Запустите блокноты Jupyter (разделы 1–4) или сценарии bash pipeline.sh
(разделы 5–6):
анализ эволюционного сохранения (относящийся к рисунку 1)
анализ встраивания нуклеотидов (относительно рисунка 2)
анализ веса внимания (см. рисунок 3)
анализ эффекта варианта (относительно рисунка 4)
прогнозирование точки ветвления (см. рисунок 5)
прогнозирование места сращивания (см. рисунок 6)
По вопросам, связанным со сценариями, создайте проблему на странице https://github.com/biomed-AI/SpliceBERT/issues.
По любым другим вопросам обращайтесь к chenkenbio {at} gmail.com.
@article{Chen2023.01.31.526427, автор = {Чэнь, Кен и Чжоу, Юэ и Дин, Маолинь и Ван, Ю и Жэнь, Чжисян и Ян, Юэдун}, title = {Самоконтролируемое обучение миллионов первичных последовательностей РНК от 72 позвоночных улучшает прогнозирование сплайсинга РНК на основе последовательностей}, год = {2024}, дои = {10.1093/нагрудник/bbae163}, издатель = {Издательство Оксфордского университета}, URL = {https://doi.org/10.1093/bib/bbae163}, журнал = {Брифинги по биоинформатике} }