Package: adept-augmentations
Adept AugmentationsWelcome to Adept Augmentations, can be used for creating additional data in Few Shot Named Entity Recognition (NER) setting!Adept Augmentation is a Python package that provides data augmentation functionalities for NER training data using thespacyanddatasetspackages. Currently, we support one augmentorEntitySwapAugmenter, however, we plan onadding some more.EntitySwapAugmentertakes either adatasets.Datasetor aspacy.tokens.DocBin. Additionally, it is optional to provide a set oflabelsto be included in the augmentations. It initially created a knowledge base of entities belonging to a certain label. When runningaugmenter.augment()forNruns, it then createsNnew sentences with random swaps of the original entities with an entity of the same corresponding label from the knowledge base.For example, assuming that we have knowledge base for PERSONS and LOCATIONS and PRODUCTS. We can then create additional data for the sentence "Momofuko Ando created instant noodles in Osaka." usingaugmenter.augment(N=2), resulting in "David created instant noodles in Madrid." or "Tom created Adept Augmentations in the Netherlands".Adept Augmentation works for NER labels using the IOB, IOB2, BIOES and BILUO tagging schemes, as well as labels not following any tagging scheme.UsageDatasetsfromdatasetsimportload_datasetfromadept_augmentationsimportEntitySwapAugmenterdataset=load_dataset("conll2003",split="train[:3]")augmenter=EntitySwapAugmenter(dataset)aug_dataset=augmenter.augment(N=4)forentryinaug_dataset["tokens"]:print(entry)# ['EU', 'rejects', 'British', 'call', 'to', 'boycott', 'British', 'lamb', '.']# ['EU', 'rejects', 'German', 'call', 'to', 'boycott', 'German', 'lamb', '.']# ['EU', 'rejects', 'German', 'call', 'to', 'boycott', 'British', 'lamb', '.']# ['Peter', 'Blackburn']# ['BRUSSELS', '1996-08-22']spaCyimportspacyfromspacy.tokensimportDocBinfromadept_augmentationsimportEntitySwapAugmenternlp=spacy.load("en_core_web_sm")# Create some example training dataTRAIN_DATA=["Apple is looking at buying U.K. startup for $1 billion","Microsoft acquires GitHub for $7.5 billion",]docs=nlp.pipe(TRAIN_DATA)# Create a new DocBindoc_bin=DocBin(docs=docs)doc_bin=EntitySwapAugmenter(doc_bin).augment(4)fordocindoc_bin.get_docs(nlp.vocab):print(doc.text)# GitHub is looking at buying U.K. startup for $ 7.5 billion# Microsoft is looking at buying U.K. startup for $ 1 billion# Microsoft is looking at buying U.K. startup for $ 7.5 billion# GitHub is looking at buying U.K. startup for $ 1 billion# Microsoft acquires Apple for $ 7.5 billion# Apple acquires Microsoft for $ 1 billion# Microsoft acquires Microsoft for $ 7.5 billion# GitHub acquires GitHub for $ 1 billionPotential performance gainsData augmentation can significantly improve model performance in low-data scenarios.
To showcase this, we trained aSpanMarkerNER model on
the 50, 100, 200, 400 and 800 firstCoNLL03training samples.The augmented dataset is generated like so:# Select N (50, 100, 200, 400 or 800) samples from the gold training datasettrain_dataset=dataset["train"].select(range(N))# Generate augmented dataset, with 4 * N samplesaugmented_dataset=Augmenter(train_dataset).augment(N=4)# Combine the original with the augmented to produce the full dataset# to produce a dataset 5 times as big as the originaltrain_dataset=concatenate_datasets([augmented_dataset,train_dataset])Note that the baseline uses 5 epochs. This way, the training time and steps are identical between the two experiments. All scenarios are executed 5 times,
and we report means and standard errors.Original - 5 EpochsAugmented - 1 EpochN=500.387 ± 0.042 F10.484 ± 0.054 F1N=1000.585 ± 0.070 F10.663 ± 0.038 F1N=2000.717 ± 0.053 F10.757 ± 0.025 F1N=4000.816 ± 0.017 F10.826 ± 0.011 F1N=8000.859 ± 0.004 F10.862 ± 0.002 F1(Note: These results are not optimized and do not indicate maximum performances with SpanMarker.)From these results, it is clear that performing data augmentation usingadept_augmentationscan heavily improve performance in low-data settings.Implemented AugmentersEntitySwapAugmenterKnowledgeBaseSwapAugmenterCoreferenceSwapAugmenterSyntaticTreeSwapAugmenterPotential integrationsPotentially, we can look into integrations of other augmentations packages that do not preserve gold standard knowledge. Good sources for inspiration are:https://github.com/KennethEnevoldsen/augmentyhttps://kennethenevoldsen.github.io/augmenty/tutorials/introduction.htmlhttps://github.com/QData/TextAttackhttps://github.com/infinitylogesh/mutate