RuBERT и Tensorflow 2

Добрый день!

Пытаюсь использовать предобученную модель RuBERT отсюда (более точнее - вот эту) в своей кастомной модели, решающей задачу классификации.
В первой ссылке указано, что

The TensorFlow models can be run with the original BERT repo code

Однако насколько понимаю, код тут, куда указывает ссылка из документации, для Tensorflow 1. Я же хотел бы использовать вторю версию. Поэтому пробую код отсюда. А именно вот такой:

max_seq_length = 128  # Your choice here.
input_word_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32,
                                       name="input_word_ids")
input_mask = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32,
                                   name="input_mask")
segment_ids = tf.keras.layers.Input(shape=(max_seq_length,), dtype=tf.int32,
                                    name="segment_ids")
bert_layer = hub.KerasLayer("rubert_cased_L-12_H-768_A-12_v2.tar.gz",
                            trainable=True)
pooled_output, sequence_output = bert_layer([input_word_ids, input_mask, segment_ids])

model = Model(inputs=[input_word_ids, input_mask, segment_ids], outputs=[pooled_output, sequence_output])

Однако он выдает ошибку:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-5-90cb212c403d> in <module>
      7                                     name="segment_ids")
      8 bert_layer = hub.KerasLayer("rubert_cased_L-12_H-768_A-12_v2.tar.gz",
----> 9                             trainable=True)
     10 pooled_output, sequence_output = bert_layer([input_word_ids, input_mask, segment_ids])
     11 

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow_hub\keras_layer.py in __init__(self, handle, trainable, arguments, _sentinel, tags, signature, signature_outputs_as_dict, output_key, output_shape, load_options, **kwargs)
    158 
    159     self._load_options = load_options
--> 160     self._func = load_module(handle, tags, self._load_options)
    161     self._has_training_argument = func_has_training_argument(self._func)
    162     self._is_hub_module_v1 = getattr(self._func, "_is_hub_module_v1", False)

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow_hub\keras_layer.py in load_module(handle, tags, load_options)
    427     except ImportError:
    428       set_load_options = load_options
--> 429     return module_v2.load(handle, tags=tags, options=set_load_options)
    430 
    431 

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow_hub\module_v2.py in load(handle, tags, options)
    112         module_path, tags=tags, options=options)
    113   else:
--> 114     obj = tf_v1.saved_model.load_v2(module_path, tags=tags)
    115   obj._is_hub_module_v1 = is_hub_module_v1  # pylint: disable=protected-access
    116   return obj

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow\python\saved_model\load.py in load(export_dir, tags, options)
    601     ValueError: If `tags` don't match a MetaGraph in the SavedModel.
    602   """
--> 603   return load_internal(export_dir, tags, options)
    604 
    605 

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow\python\saved_model\load.py in load_internal(export_dir, tags, options, loader_cls)
    612     tags = nest.flatten(tags)
    613   saved_model_proto, debug_info = (
--> 614       loader_impl.parse_saved_model_with_debug_info(export_dir))
    615 
    616   if (len(saved_model_proto.meta_graphs) == 1 and

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow\python\saved_model\loader_impl.py in parse_saved_model_with_debug_info(export_dir)
     54     parsed. Missing graph debug info file is fine.
     55   """
---> 56   saved_model = _parse_saved_model(export_dir)
     57 
     58   debug_info_path = os.path.join(

C:\WPy64-3760\python-3.7.6.amd64\lib\site-packages\tensorflow\python\saved_model\loader_impl.py in parse_saved_model(export_dir)
    111                   (export_dir,
    112                    constants.SAVED_MODEL_FILENAME_PBTXT,
--> 113                    constants.SAVED_MODEL_FILENAME_PB))
    114 
    115 

OSError: SavedModel file does not exist at: rubert_cased_L-12_H-768_A-12_v2.tar.gz/{saved_model.pbtxt|saved_model.pb}

Могли бы подсказать, как мне правильно использовать RuBERT под Tensorflow 2?

Модель RuBERT можно сохранить с помощью Transformers от HuggingFace в формате TF2.0. Для этого нужно сначала загрузить модель в формате PyTorch (уже есть сконвертированная из tf1.*) и сохранить в tf2.0:

model = TFBertForPreTraining.from_pretrained(rubert_pytorch_path, from_pt=True)
model.save_pretrained(rubert_tf20_path)

В rubert_pytorch_path должен быть файл config.json (с таким же содержимым как у bert_config.json), pytorch_model.bin, vocab.txt.