Хакерский способ сохранить согласованность структуры кода
В этой статье я расскажу о методе настройки архитектуры модели серии моделей Hugging Face’s AutoModel.
Справочная задача: AutoModelForTokenClassification (ner)*
Версия библиотеки: transformers: 4.27.4
Возможное решение
Путем обширного поиска в гугле я нашел правдоподобное решение.
Однако, поскольку это решение основано на классе nn.Module
, я подозреваю, что оно имитирует полную функциональность класса AutoModelForTokenClassification
, поэтому оно требует много дублирования кода из AutoModelForTokenClassification
. Например, если строка 17 не включена в приведенный выше фрагмент, будет получена следующая ошибка.
AttributeError: объект «CustomModel» не имеет атрибута «config»
Точно так же строки 26–33 необходимы для обеспечения совместимости пользовательского кода с классом Trainer
. Поэтому я считаю, что решение не самое лучшее.
Оптимальное решение
Таким образом, стремясь минимизировать дублирование кода, я изучил внутреннюю работу класса AutoModelForTokenClassification
и обнаружил следующий код в transformers/models/auto/auto_factory.py.
Я понял, что мне нужно расширить метод from_pretrained()
. Ниже представлено решение, которое настраивает архитектуру модели и сохраняет структуру кода в соответствии со структурой кода библиотеки transformers.
Строка 11–12 здесь самая важная. Без нее будет получено следующее предупреждение:
Некоторые веса контрольной точки модели в ./tmp/test-custom не использовались при инициализации BertForTokenClassification: ['classifier.0.weight', 'classifier.1.bias', 'classifier.0.bias', 'classifier.1 .масса']
Предупреждение подразумевает, что метод from_pretrained()
из базового класса AutoModelForTokenClassification
использует архитектуру модели по умолчанию и, следовательно, не может вместить измененную архитектуру из предварительно обученной конечной точки.
Помимо приведенного выше небольшого хака, все остается таким же, как и с классом по умолчанию AutoModel
.
*Фактический тип задачи значения не имеет
Если вы найдете это ценным и хотели бы поддержать меня как автора, рассмотрите возможность подписаться на меня или зарегистрироваться для членства в Medium.