Настройка предобученной модели

В данном разделе описана настройка предобученной модели на примере классификации текстов.

Формат датасета

Датасет должен состоять из файлов train.csv, dev.csv и директории data, содержащей тексты. Первая колонка в этих файлах является идентификатором документа. Этот идентификатор будет конкатенирован с полным путем директории data. Полученный путь должен указывать на файл с текстом. Вторая колонка является меткой, которая обозначает класс, которому принадлежит текст. Тексты должны быть предварительно сегментированы.

Запуск настройки

Для запуска нужно подготовить данные и конфигурацию. В текущей директории необходимо создать директорию finetune-data, в которой должен лежать датасет, согласующийся с форматом, описанным в предыдущей секции. Для тестирования можно воспользоваться примером датасета. Ниже приведена команда для настройки окружения

mkdir -p finetune-data/models && \
(cd finetune-data && wget -q -O -  'http://dn11.isa.ru:8080/doc-enc-data/datasets.classif.pat-en-mini.v1.tar.xz'  | tar Jxf -) && \
(cd finetune-data/models && wget 'http://dn11.isa.ru:8080/doc-enc-data/models.def.pt' -O model.pt)

Конфигурационные файлы можно скачать из репозитория проекта, при необходимости отредактировать и положить в finetune-data/conf. Команда запуска обучения:

docker run --gpus=1  --rm  -v $(pwd)/finetune-data/:/train/ \
semvectors/doc_enc_train:0.1.2 \
fine_tune_classif \
--config-path=/train/conf +personal/common=quick

Результаты будут сохранены в папку finetune-data/outputs. Для каждого запуска там будут создаваться отдельная директория, в которой будет сохранена настроенная модель model.pt. Эту модель можно использовать для преобразования документов в векторное пространство, кроме того она содержит веса обученного слоя классификации (ключ classif_layer).

Основные параметры настройки модели

  • model_path - путь к предобученной модели (по умолчанию /train/models/model.pt).

  • use_gpu - номер GPU, на которой будет проходить обучение (по умолчанию 0).

  • async_batch_gen - количество асинхронных процессов, которые будут задействованы в подготовки мини-батчей для обучения (по умолчанию 2).

  • max_sents - максимальное количество предложений в мини-батче (по умолчанию 2048).

  • max_tokens - максимальное количество токенов в мини-батче (по умолчанию 96_000).

  • train_meta_path, dev_meta_path, test_meta_path - пути к файлам, в которых содержатся идентификаторы текстов и соответствующие им метки.

    По умолчанию /train/classif/train.csv и /train/classif/dev.csv соответственно. test_meta_path по умолчанию не задан.

  • data_dir - директория, содержащая тексты документов (По умолчанию /train/classif/data/).

  • save_path - директория, в которую будут сохранены настроенная модель, логи обучения и пр. По умолчанию используется текущая рабочая директория.

  • max_updates - максимальное количество шагов обучения (по умолчанию 5000).

  • lr - скорость обучения (по умолчанию 0.0002). Рекомендуется подбирать значение данного параметра индивидуально для каждого датасета.

  • dropout - вероятность дропаута эмбеддингов документов перед подачей в линейный слой классификации.

  • only_eval_test - Произвести оценку модели на датасете test_meta_path, не выполняя обучения.

  • validation_metric - метрика, на основе которой будет определятся качество обучения модели на валидационном датасете (по умолчанию аккуратность).

  • nlabels - количество меток в обучающей выборке. Если не задано, то количество меток будет вычислено автоматически на основе обучающих данных.

Пример использования настроенной модели

Файл src/classif.py:

#!/usr/bin/env python3

from doc_enc.doc_encoder import DocEncoderConf
from doc_enc.classif_doc import ClassifDoc


conf = DocEncoderConf(model_path='/work/classif_model.pt', use_gpu=0)
doc_encoder = ClassifDoc(conf)

docs = [
    ['simple sentence', 'second sentence'],
    ['Sentences are already segmented'],
    ['Spam spam spam', 'Span Spam Spam'],
]

result = doc_encoder.predict_docs(docs)
print(result)

В текущей директории должна лежать настроенная модель classif_model.pt. Запуск вывода:

docker run --gpus=1  --rm  -v $(pwd):/work/  -w /work semvectors/doc_enc_train:0.1.2 python src/classif.py

Настройка произвольной задачи

При необходимости настроить модель под иную задачу можно взять за основу код настройки из репозитория. Изменить модель DocClassifier и при необходимости ClassifBatchIterator. Предполагается, что файл с новой задачей настройки называется new-finetune.py и лежит в папке src.

$ docker run -v /path/to/finetune-data/:/train/ \
  --gpus=1  --rm \
  semvectors/doc_enc_train:0.1.2 \
  python src/new-finetune.py --config-path=/train/conf