BertModel Forward Computation Overview
The forward() method in Hugging Face's BertModel executes the forward pass through the Transformer architecture too generate contextualized token representations. This base model outputs raw hidden states without task-specific heads, making it ideal for text embedding extraction and feature analysis.
Method Signature
def forward(
self,
input_ids: Optional[torch.Tensor] = None,
attention_mask: Optional[torch.Tensor] = None,
token_type_ids: Optional[torch.Tensor] = None,
position_ids: Optional[torch.Tensor] = None,
head_mask: Optional[torch.Tensor] = None,
inputs_embeds: Optional[torch.Tensor] = None,
output_attentions: bool = False,
output_hidden_states: bool = False,
return_dict: bool = True
)
Input Parameters
Core Parameters
| Parameter | Description | Shape | Default |
|---|---|---|---|
| input_ids | Tokenized input sequence IDs | [batch_size, seq_length] | None |
| attention_mask | Binary mask for valid tokens | [batch_size, seq_length] | None |
| token_type_ids | Segment IDs for sentence pairs | [batch_size, seq_length] | None |
| position_ids | Positional embdedings indices | [batch_size, seq_length] | None |
| inputs_embeds | Direct embedding input matrix | [batch_size, seq_length, hidden_size] | None |
Advanced Parameters
| Parameter | Description | Shape | Default |
|---|---|---|---|
| head_mask | Attention head activation control | [num_layers, num_heads] | None |
| output_attentions | Flag for attention weights output | bool | False |
| output_hidden_states | Flag for all hidden layers output | bool | False |
| return_dict | Output format selector | bool | True |
Output Structure
By default returns a tuple containing:
last_hidden_state: Final layer token embeddingspooler_output: [CLS] token representation
Example Usage
from transformers import BertModel, BertTokenizer
import torch
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertModel.from_pretrained("bert-base-uncased")
encoded_input = tokenizer("Deep learning is powerful", return_tensors="pt")
outputs = model(**encoded_input)
print(f"Hidden states shape: {outputs.last_hidden_state.shape}") # [1, 6, 768]
print(f"Pooler output shape: {outputs.pooler_output.shape}") # [1, 768]
Advanced Usage Scnearios
1. Extracting All Hidden States
outputs = model(**encoded_input, output_hidden_states=True)
all_states = outputs.hidden_states # 13 layers including embeddings
2. Attention Weights Analysis
outputs = model(**encoded_input, output_attentions=True)
attention_maps = outputs.attentions # 12 attention heads
3. Sentence Pair Processing
sentence_a = "Natural language processing enables"
sentence_b = "machines to understand human language"
encoded_pair = tokenizer(sentence_a, sentence_b, return_tensors="pt")
outputs = model(**encoded_pair)
# token_type_ids automatically generated as [0,0,0,1,1,1]
Model Variants Comparison
BertModel: Base encoder with raw hidden statesBertForSequenceClassification: Adds classification headBertForQuestionAnswering: Implements QA-specific layers