Настройка предобученной модели¶
В данном разделе описана настройка предобученной модели на примере классификации текстов.
Формат датасета¶
Датасет должен состоять из файлов 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