Выполнение вывода с использованием сохраненной модели BERT (TF 1.x) - PullRequest
0 голосов
/ 19 апреля 2020

Я застрял на одной строке кода , и в результате я застрял в проекте все выходные.

Я работаю над проектом, который использует BERT для классификации предложений. Я успешно обучил модель, и я могу проверить результаты, используя пример кода из run_classifier.py.

Я могу экспортировать модель, используя этот пример кода (который был повторно размещен повторно, поэтому я считаю, что это правильно для этой модели):

def export(self):
  def serving_input_fn():
    label_ids = tf.placeholder(tf.int32, [None], name='label_ids')
    input_ids = tf.placeholder(tf.int32, [None, self.max_seq_length], name='input_ids')
    input_mask = tf.placeholder(tf.int32, [None, self.max_seq_length], name='input_mask')
    segment_ids = tf.placeholder(tf.int32, [None, self.max_seq_length], name='segment_ids')
    input_fn = tf.estimator.export.build_raw_serving_input_receiver_fn({
        'label_ids': label_ids, 'input_ids': input_ids,
        'input_mask': input_mask, 'segment_ids': segment_ids})()
    return input_fn
  self.estimator._export_to_tpu = False
  self.estimator.export_savedmodel(self.output_dir, serving_input_fn)

Я также могу загрузить экспортированный оценщик (где функция экспорта сохраняет экспортированную модель в подкаталог, помеченный меткой времени):

predict_fn = predictor.from_saved_model(self.output_dir + timestamp_number)

Однако, на всю жизнь я не могу понять, что предоставить в качестве входных данных для параметраgnett_fn. Вот мой лучший код на данный момент:

def predict(self):
  input = 'Test input'
  guid = 'predict-0'
  text_a = tokenization.convert_to_unicode(input)
  label = self.label_list[0]
  examples = [InputExample(guid=guid, text_a=text_a, text_b=None, label=label)]
  features = convert_examples_to_features(examples, self.label_list,
    self.max_seq_length, self.tokenizer)
  predict_input_fn = input_fn_builder(features, self.max_seq_length, False)
  predict_fn = predictor.from_saved_model(self.output_dir + timestamp_number)
  result = predict_fn(predict_input_fn)       # this generates an error
  print(result)

Кажется, что не имеет значения, что я предоставляю в предикат: предикатный массив, массив функций, функция предиката_инфот_фн. Ясно, что Предикат_фн хочет словарь некоторого типа, но каждая попытка генерирует исключение из-за несоответствия тензора или других ошибок, которые обычно означают: неверный ввод.

Я предположил, что функция from_saved_model хочет тот же тип ввода, что и у функции тестирования модели - по-видимому, это не так.

Кажется, что лотов людей задали этот самый вопрос - "как мне использовать экспортированный BERT Модель TensorFlow для вывода? " - и не получили ответов:

Тема № 1

Тема № 2

Тема № 3

Тема № 4

Любая помощь? Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...