Source code for FairLangProc.algorithms.intraprocessors.redistribution
"""Submodule inside of the FairLangProc.algorithms.intraprocessors module which stores all
processors related with the redistribution of model parameters.
The supported method is EAT.
"""
import torch
import torch.nn as nn
[docs]
def add_EAT_hook(model: nn.Module, beta: float = 1.1):
"""Insert hook to modify attention scores.
Parameters
----------
model : nn.Module
Model whose attention scores we want to modify.
beta : float
Temperature parameter.
Example
-------
>>> from FairLangProc.algorithms.intraprocessors import add_EAT_hook
>>>
>>> EATBert = AutoModelForSequenceClassification.from_pretrained('bert-base-uncased')
>>> beta = 1.5
>>> add_EAT_hook(model=EATBert, beta=beta)
>>>
>>> trainer = Trainer(
... model=EATBert,
... args=training_args,
... train_dataset=train_dataset,
... eval_dataset=val_dataset,
... optimizers=(
... AdamW(EATBert.parameters(), lr=1e-5, weight_decay=0.1),
... None
... )
... )
>>> results = trainer.evaluate()
>>> print(results)
"""
def attention_hook(module, input, output):
# output: tuple (attention_scores, ...)
attention_scores = output[0]
return (attention_scores * beta,) + output[1:] # Scale attention scores
# Register hooks
for layer in model.base_model.encoder.layer:
layer.attention.self.register_forward_hook(attention_hook)