Извлечение функции через tenorflowhub или extract_features.py в Bert?Эти два пути разные? - PullRequest
0 голосов
/ 24 сентября 2019

Моя задача - классифицировать китайские предложения.Я использовал bert для извлечения функций, а затем провел обучение на основе функций и меток предложений.Мне кажется, что я могу получить функции, используя концентратор тензорного потока

import tensorflow as tf
import tensorflow_hub as hub
bert_module = hub.Module("https://tfhub.dev/google/bert_uncased_L-12_H-768_A-12/1")
bert_inputs = ... # a list of sentences
bert_outputs = bert_module(bert_inputs, signature="tokens", as_dict=True)
pooled_output = bert_outputs["pooled_output"]
sequence_output = bert_outputs["sequence_output"]

sess = tf.Session()
sess.run(tf.global_variables_initializer())
with sess.as_default():
  bert_features_sentence = pooled_output.eval() #sentence features
  bert_features_tokens = sequence_output.eval() #token features

Я также могу получить функции, используя "extract_features.py"

python extract_features.py \
  --input_file=/tmp/input.txt \
  --output_file=/tmp/output.jsonl \
  --vocab_file=$BERT_BASE_DIR/vocab.txt \
  --bert_config_file=$BERT_BASE_DIR/bert_config.json \
  --init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
  --layers=-1 \
  --max_seq_length=128 \
  --batch_size=8

Так что вопрос: Дают ли эти два метода одинаковые результаты? Я испробовал оба метода и обнаружил, что точность обучения, основанная на функциях, полученных этими двумя методами, значительно отличается (36% и 63%).Интересно, почему?Я также обнаружил, что «bert_features_tokens» в первой части имеет фиксированное количество токенов, например, n_sentence * 128 * 768, в то время как «output.jsonl» во второй части имеет гибкое количество токенов, например, n_sentence * Flexible_sen_length * 768. Это причина?

...