Извлечение фиксированных векторов из BioBERT без использования команды терминала? - PullRequest
0 голосов
/ 23 октября 2019

Если мы хотим использовать веса из предварительно обученной модели BioBERT , мы можем выполнить следующую команду терминала после загрузки всех необходимых файлов BioBERT.

os.system('python3 extract_features.py \
      --input_file=trial.txt \
      --vocab_file=vocab.txt \
      --bert_config_file=bert_config.json \
      --init_checkpoint=biobert_model.ckpt \
      --output_file=output.json')

Приведенная выше команда фактически читает отдельный файлсодержащий текст, считывает из него текстовое содержимое, а затем записывает извлеченные векторы в другой файл. Таким образом, проблема в том, что его нельзя было легко масштабировать для очень больших наборов данных, содержащих тысячи предложений / абзацев.

Есть ли способ извлечь эти функции на ходу (используя слой встраивания), как это можно сделать для векторов word2vec в PyTorch или TF1.3?

Примечание: контрольные точки BioBERTне существует для TF2.0, поэтому я думаю, что это невозможно сделать с TF2.0, если кто-то не создаст файлы контрольных точек, совместимых с TF2.0.

Буду благодарен за любую подсказку или помощь.

1 Ответ

2 голосов
/ 23 октября 2019

Вы можете получать контекстные вложения на лету, но общее время, затрачиваемое на получение встраиваний, всегда будет одинаковым. Есть два варианта, как это сделать: 1. импортировать BioBERT в пакет Transformers и использовать его в PyTorch (что я бы сделал) или 2. использовать исходную кодовую базу.

1. Импорт BioBERT в пакет Transformers

Наиболее удобный способ использования предварительно обученных моделей BERT - это пакет Transformers . Первоначально он был написан для PyTorch, но работает и с TensorFlow. Он не имеет BioBERT из коробки, поэтому вам нужно конвертировать его из формата TensorFlow самостоятельно. Существует скрипт convert_tf_checkpoint_to_pytorch.py, который это делает. У людей были некоторые проблемы с этим сценарием, и BioBERT (, кажется, решен ).

После преобразования модели вы можете загрузить ее следующим образом.

import torch
from transformers import *

# Load dataset, tokenizer, model from pretrained model/vocabulary
tokenizer = BertTokenizer.from_pretrained('directory_with_converted_model')
model = BertModel.from_pretrained('directory_with_converted_model')

# Call the model in a standard PyTorch way
embeddings = model([tokenizer.encode("Cool biomedical tetra-hydro-sentence.", add_special_tokens=True)])

2. Используйте непосредственно кодовую базу BioBERT

Вы можете получить вложения на ходу, используя в основном код exctract_feautres.py. В строках 346-382 они инициализируют модель. Вы получаете вложения, вызывая estimator.predict(...).

. Для этого вам нужно отформатировать формат ввода. Сначала вам нужно отформатировать строку (используя код в строке 326-337), а затем применить и вызвать convert_examples_to_features.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...