#bert-language-model #attention-model
#bert-language-model #внимание-модель
Вопрос:
Я создаю класс, который может генерировать вложение предложений как для одного предложения, так и для списка предложений, используя предварительно подготовленную BertModel. Из примера кода я вижу утверждение
outputs = self.model(tokens_tensor, segments_tensors)
то есть без аргумента attention_mask . Тем не менее, он дает тот же результат, если я ввожу аргумент тензора маски внимания
outputs = self.model(tokens_tensor, attention_tensors, segments_tensors)
При выполнении кода для всего набора данных, то attention_tensors абсолютно необходим.
Я понимаю причину, по которой маска внимания не требуется для одного предложения, но откуда код python знает, что второй аргумент на самом деле является segments_tensor , поскольку в документе он ожидает, что attention_tensors будет вторым аргументом.
Ответ №1:
Если значение attention_mask
не задано (и, следовательно None
, задано ), везде явно задается значение единицы.
См . l. 803 в modeling_bert.py
.
Комментарии:
1. Я рад видеть ссылки на строки, но мой первоначальный вопрос остается любопытным. и attention_mask, и segment_id являются необязательными параметризованными аргументами. Если вы не вводите attention_mask и сразу переходите к segment_id , как функция model.forward() узнает, что второй аргумент интерпретируется как segment_id, а не attention_mask ?