Tensorflow 在BERT模型中,输入ID、输入掩码和段ID变量来自何处?

Tensorflow 在BERT模型中,输入ID、输入掩码和段ID变量来自何处?,tensorflow,nlp,bert-language-model,Tensorflow,Nlp,Bert Language Model,我正在努力完成中的GoogleBert教程,并且很难遵循其中的一些步骤 具体来说,有一个名为create\u model的函数,其内容如下: def create_model(is_predicting, input_ids, input_mask, segment_ids, labels, num_labels): """Creates a classification model.""" bert_module = hub.Module( BERT_MODEL

我正在努力完成中的GoogleBert教程,并且很难遵循其中的一些步骤

具体来说,有一个名为
create\u model
的函数,其内容如下:

def create_model(is_predicting, input_ids, input_mask, segment_ids, labels,
             num_labels):
"""Creates a classification model."""

bert_module = hub.Module(
  BERT_MODEL_HUB,
  trainable=True)
bert_inputs = dict(
  input_ids=input_ids,
  input_mask=input_mask,
  segment_ids=segment_ids)
bert_outputs = bert_module(
  inputs=bert_inputs,
  signature="tokens",
  as_dict=True)

# Use "pooled_output" for classification tasks on an entire sentence.
# Use "sequence_outputs" for token-level output.
output_layer = bert_outputs["pooled_output"]

hidden_size = output_layer.shape[-1].value

# Create our own layer to tune for politeness data.
output_weights = tf.get_variable(
  "output_weights", [num_labels, hidden_size],
  initializer=tf.truncated_normal_initializer(stddev=0.02))

output_bias = tf.get_variable(
  "output_bias", [num_labels], initializer=tf.zeros_initializer())

with tf.variable_scope("loss"):

# Dropout helps prevent overfitting
output_layer = tf.nn.dropout(output_layer, keep_prob=0.9)

logits = tf.matmul(output_layer, output_weights, transpose_b=True)
logits = tf.nn.bias_add(logits, output_bias)
log_probs = tf.nn.log_softmax(logits, axis=-1)

# Convert labels into one-hot encoding
one_hot_labels = tf.one_hot(labels, depth=num_labels, dtype=tf.float32)

predicted_labels = tf.squeeze(tf.argmax(log_probs, axis=-1, output_type=tf.int32))
# If we're predicting, we want predicted labels and the probabiltiies.
if is_predicting:
  return (predicted_labels, log_probs)

# If we're train/eval, compute loss between predicted and actual label
per_example_loss = -tf.reduce_sum(one_hot_labels * log_probs, axis=-1)
loss = tf.reduce_mean(per_example_loss)
return (loss, predicted_labels, log_probs)
这很好,但当我查找笔记本中调用
create\u model
函数的位置时,我不清楚
input\u id
input\u mask
segment\u id
参数的来源

这是稍后在笔记本中引用函数的地方:

def model_fn_builder(num_labels, learning_rate, num_train_steps,
                 num_warmup_steps):
"""Returns `model_fn` closure for TPUEstimator."""
def model_fn(features, labels, mode, params):  # pylint: disable=unused-argument
"""The `model_fn` for TPUEstimator."""

input_ids = features["input_ids"]
input_mask = features["input_mask"]
segment_ids = features["segment_ids"]
label_ids = features["label_ids"]

is_predicting = (mode == tf.estimator.ModeKeys.PREDICT)

# TRAIN and EVAL
if not is_predicting:

  (loss, predicted_labels, log_probs) = create_model(
    is_predicting, input_ids, input_mask, segment_ids, label_ids, num_labels)
这里的问题是,
features
参数没有在父函数中作为参数列出,并且它也没有在笔记本的其他地方定义。所以我不确定它为什么会工作,更重要的是,我不确定像
特性['input\u id']
这样的东西应该代表什么。如果我不清楚这一点,就很难理解伯特到底在做什么

谢谢你的帮助