from collections import OrderedDict from transformers import CONFIG_MAPPING, MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING, MODEL_NAMES_MAPPING, TOKENIZER_MAPPING from transformers.convert_slow_tokenizer import SLOW_TO_FAST_CONVERTERS, BertConverter, XLMRobertaConverter from transformers.models.auto.modeling_auto import auto_class_factory from .models.layoutlmv2 import ( LayoutLMv2Config, LayoutLMv2ForRelationExtraction, LayoutLMv2ForTokenClassification, LayoutLMv2Tokenizer, LayoutLMv2TokenizerFast, ) from .models.layoutxlm import ( LayoutXLMConfig, LayoutXLMForRelationExtraction, LayoutXLMForTokenClassification, LayoutXLMTokenizer, LayoutXLMTokenizerFast, ) CONFIG_MAPPING.update([("layoutlmv2", LayoutLMv2Config), ("layoutxlm", LayoutXLMConfig)]) MODEL_NAMES_MAPPING.update([("layoutlmv2", "LayoutLMv2"), ("layoutxlm", "LayoutXLM")]) TOKENIZER_MAPPING.update( [ (LayoutLMv2Config, (LayoutLMv2Tokenizer, LayoutLMv2TokenizerFast)), (LayoutXLMConfig, (LayoutXLMTokenizer, LayoutXLMTokenizerFast)), ] ) SLOW_TO_FAST_CONVERTERS.update({"LayoutLMv2Tokenizer": BertConverter, "LayoutXLMTokenizer": XLMRobertaConverter}) MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING.update( [(LayoutLMv2Config, LayoutLMv2ForTokenClassification), (LayoutXLMConfig, LayoutXLMForTokenClassification)] ) MODEL_FOR_RELATION_EXTRACTION_MAPPING = OrderedDict( [(LayoutLMv2Config, LayoutLMv2ForRelationExtraction), (LayoutXLMConfig, LayoutXLMForRelationExtraction)] ) AutoModelForTokenClassification = auto_class_factory( "AutoModelForTokenClassification", MODEL_FOR_TOKEN_CLASSIFICATION_MAPPING, head_doc="token classification" ) AutoModelForRelationExtraction = auto_class_factory( "AutoModelForRelationExtraction", MODEL_FOR_RELATION_EXTRACTION_MAPPING, head_doc="relation extraction" )