Как именно должен быть отформатирован входной файл для точной настройки языковой модели (BERT через Huggingface Transformers)? - PullRequest
4 голосов
/ 31 января 2020

Я хотел использовать examples/run_lm_finetuning.py из хранилища Huggingface Transformers на предварительно обученной модели Берта. Однако из следования документации не очевидно, как должен быть структурирован файл корпуса (кроме ссылки на набор данных Wiki-2). Я пробовал

  • Один документ в строке (несколько предложений)
  • Одно предложение в строке. Документы разделены пустой строкой (это я нашел в более ранней документации по pytorch-преобразователям)

Если посмотреть на код examples/run_lm_finetuning.py, неясно, как пары последовательностей для предсказания следующего предложения цель сформирована. Поможет ли здесь опция --line-by-line? Буду признателен, если кто-нибудь подскажет, как должен выглядеть текстовый файл.

Большое спасибо и ура,

nminds

1 Ответ

4 голосов
/ 31 января 2020

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

Но, чтобы ответить на ваш вопрос, похоже, что этот конкретный c пример сценария в основном возвращает либо LineByLineTextDataset (если вы передаете --line_by_line обучению), либо в противном случае TextDataset, см. , 144-149 в сценарий (слегка отформатирован для лучшей видимости):

def load_and_cache_examples(args, tokenizer, evaluate=False):
    file_path = args.eval_data_file if evaluate else args.train_data_file
    if args.line_by_line:
        return LineByLineTextDataset(tokenizer, args, 
                           file_path=file_path, block_size=args.block_size)
    else:
        return TextDataset(tokenizer, args, 
                           file_path=file_path, block_size=args.block_size)

A TextDataset просто разбивает текст на последовательные «блоки» определенной (токеновой) длины, например , он будет обрезать ваш текст каждые 512 токенов (значение по умолчанию). #

Задача «Предсказание следующего предложения» будет реализована только для модели BERT по умолчанию, если я правильно об этом вспомню (кажется, соответствует тому, что я нашел в документация ), и, к сожалению, не входит в этот специфицирующий c скрипт окончательной настройки. Насколько я вижу, ни одна из используемых моделей BERT в сценарии lm_finetuning не использует эту конкретную задачу.

...