【问题标题】:Keyword arguments in BERT call functionBERT 调用函数中的关键字参数
【发布时间】:2020-07-05 11:24:00
【问题描述】:

在 HuggingFace TensorFlow 2.0 BERT 库中,documentation 声明:

TF 2.0 模型接受两种格式作为输入:

  • 将所有输入作为关键字参数(如 PyTorch 模型),或

  • 将所有输入作为列表、元组或字典放在第一个位置 论据。

我正在尝试使用这两个中的第一个来调用我创建的 BERT 模型:

from transformers import BertTokenizer, TFBertModel
import tensorflow as tf

bert_tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
bert_model = TFBertModel.from_pretrained('bert-base-uncased')

text = ['This is a sentence', 
        'The sky is blue and the grass is green', 
        'More words are here']
labels = [0, 1, 0]
tokenized_text = bert_tokenizer.batch_encode_plus(batch_text_or_text_pairs=text,
                                                  pad_to_max_length=True,
                                                  return_tensors='tf')
dataset = tf.data.Dataset.from_tensor_slices((tokenized_text['input_ids'],
                                              tokenized_text['attention_mask'],
                                              tokenized_text['token_type_ids'],
                                              tf.constant(labels))).batch(3)
sample = next(iter(dataset))

result1 = bert_model(inputs=(sample[0], sample[1], sample[2]))  # works fine
result2 = bert_model(inputs={'input_ids': sample[0], 
                             'attention_mask': sample[1], 
                             'token_type_ids': sample[2]})  # also fine
result3 = bert_model(input_ids=sample[0], 
                     attention_mask=sample[1], 
                     token_type_ids=sample[2])  # raises an error

但是当我执行最后一行时,我得到一个错误:

TypeError: __call__() missing 1 required positional argument: 'inputs'

有人可以解释一下如何正确使用输入的关键字参数样式吗?

【问题讨论】:

    标签: tensorflow nlp arguments huggingface-transformers


    【解决方案1】:

    似乎在内部,他们将inputs 解释为input_ids,如果您不将多个张量作为第一个参数。你可以在TFBertModel 中看到这个,然后寻找TFBertMainLayercall 函数。

    对我来说,如果我执行以下操作,我会得到与 result1result2 完全相同的结果:

    result3 = bert_model(inputs=sample[0], 
                         attention_mask=sample[1], 
                         token_type_ids=sample[2])
    

    或者,您也可以直接删除inputs=,也可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-25
      • 2019-04-23
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多