# Input-guided Aggressive Decoding
Codes (originally from https://github.com/AutoTemp/Shallow-Aggressive-Decoding) for Input-guided Aggressive Decoding (IAD) that is originally proposed in the paper "Instantaneous Grammatical Error Correction with Shallow Aggressive Decoding" (ACL-IJCNLP 2021)

## Results
The performance and online inference efficiency evaluation of baseline and our approach in CoNLL-14.
| Model |
P |
R |
F0.5 |
Speedup |
| Transformer-big (beam=5) |
73.0 |
38.1 |
61.6 |
1.0x |
| Our approach (9+3) |
73.3 |
41.3 |
63.5 |
10.3x |
| Our approach (12+2 BART-Init) |
71.0 |
52.8 |
66.4 |
9.6x |
For reference, the beam=1 and beam=5 results of the state-of-the-art 12+2 (BART-Init) are:
| 12+2 BART-Init |
CoNLL-14 |
BEA-19 |
| Beam |
P |
R |
F0.5 |
P |
R |
F0.5 |
| 1
| 71.0 |
52.8 |
66.4 |
74.7 |
66.4 |
72.9 |
| 5 |
71.4
| 52.8
| 66.7
| 75.8
| 66.3
| 73.7
|
The above models are all single models without ensemble.
## Installation
```
conda create -n IAD python=3.6
conda activate IAD
conda install pytorch==1.5.1 torchvision==0.6.1 cudatoolkit=10.2 -c pytorch
cd fairseq
pip install --editable .
```
## Usage
This section explains how to decode in different ways.
```
PTPATH=/to/path/checkpoint*.pt # path to model file
BINDIR=/to/path/bin_data # directory containing src and tgt dictionaries
INPPATH=/to/path/conll*.bpe.txt # path to eval file
OUTPATH=/to/path/conll*.out.txt # path to output file
BATCH=xxx
BEAM=xxx
```
## Directly use fairseq's interactive.py to decode:
```
bash interactive.sh $PTPATH $BATCH $BEAM $INPPATH $BINDIR $OUTPATH
```
## use Input-guided Aggressive Decoding:
```
python inference.py --checkpoint-path $PTPATH --bin-data $BINDIR --input-path $INPPATH --output-path $OUTPATH --aggressive
```