Awesome
Shallow-Aggressive-Decoding
Codes for the paper "Instantaneous Grammatical Error Correction with Shallow Aggressive Decoding" (ACL-IJCNLP 2021)
Results
<table> <caption> The performance and online inference efficiency evaluation of baseline and our approach in CoNLL-14. </caption> <tr> <th> Model </th> <th> P </th> <th> R </th> <th> F<sub>0.5</sub> </th> <th> Speedup </th> </tr> <tr> <th> Transformer-big (beam=5) </th> <th> 73.0 </th> <th> 38.1 </th> <th> 61.6 </th> <th> 1.0x </th> </tr> <tr> <th> Our approach (9+3) </th> <th> 73.3 </th> <th> 41.3 </th> <th> 63.5 </th> <th> 10.3x </th> </tr> <tr> <th> Our approach (12+2 BART-Init) </th> <th> 71.0 </th> <th> 52.8 </th> <th> 66.4 </th> <th> 9.6x </th> </tr> </table> <table> <caption> For reference, the beam=1 and beam=5 results of the state-of-the-art 12+2 (BART-Init) are: </caption> <thead> <tr> <th>12+2 BART-Init</th> <th colspan="3">CoNLL-14</th> <th colspan="3">BEA-19</th> </tr> </thead> <tbody> <tr> <th>Beam</th> <th>P</th> <th>R</th> <th>F<sub>0.5</sub></th> <th>P</th> <th>R</th> <th>F<sub>0.5</sub></th> </tr> <tr> <th>1</td> <th>71.0</th> <th>52.8</th> <th>66.4</th> <th>74.7</th> <th>66.4</th> <th>72.9</th> </tr> <tr> <th>5</th> <th>71.4</td> <th>52.8</td> <th>66.7</td> <th>75.8</td> <th>66.3</td> <th>73.7</td> </tr> </tbody> </table> The above models are all single models without ensemble.Installation
conda create -n SAD python=3.6
conda activate SAD
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
Simplified greedy decoding:
python inference.py --checkpoint-path $PTPATH --bin-data $BINDIR --input-path $INPPATH --output-path $OUTPATH --baseline
Aggressive decoding:
python inference.py --checkpoint-path $PTPATH --bin-data $BINDIR --input-path $INPPATH --output-path $OUTPATH --aggressive