Хакерский способ сохранить согласованность структуры кода

В этой статье я расскажу о методе настройки архитектуры модели серии моделей 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.