Package: textaugment
TextAugment: Improving Short Text Classification through Global Augmentation MethodsYou have just found TextAugment.TextAugment is a Python 3 library for augmenting text for natural language processing applications. TextAugment stands on the giant shoulders ofNLTK,Gensim v3.x, andTextBloband plays nicely with them.Table of ContentsFeaturesCitation PaperRequirementsInstallationHow to useWord2vec-based augmentationWordNet-based augmentationRTT-based augmentationEasy data augmentation (EDA)An easier data augmentation (AEDA)Mixup augmentationImplementationAcknowledgementsFeaturesGenerate synthetic data for improving model performance without manual effortSimple, lightweight, easy-to-use library.Plug and play to any machine learning frameworks (e.g. PyTorch, TensorFlow, Scikit-learn)Support textual dataCitation PaperImproving short text classification through global augmentation methods.RequirementsPython 3The following software packages are dependencies and will be installed automatically.$pipinstallnumpynltkgensim==3.8.3textblobgoogletransThe following code downloads NLTK corpus forwordnet.nltk.download('wordnet')The following code downloadsNLTK tokenizer. This tokenizer divides a text into a list of sentences by using an unsupervised algorithm to build a model for abbreviation words, collocations, and words that start sentences.nltk.download('punkt')The following code downloads defaultNLTK part-of-speech taggermodel. A part-of-speech tagger processes a sequence of words, and attaches a part of speech tag to each word.nltk.download('averaged_perceptron_tagger')Use gensim to load a pre-trained word2vec model. LikeGoogle News from Google drive.importgensimmodel=gensim.models.KeyedVectors.load_word2vec_format('./GoogleNews-vectors-negative300.bin',binary=True)You can also use gensim to load Facebook's FasttextEnglishandMultilingual modelsimport gensim
model = gensim.models.fasttext.load_facebook_model('./cc.en.300.bin.gz')Or training one from scratch using your data or the following public dataset:Text8 WikiDataset from "One Billion Word Language Modeling Benchmark"InstallationInstall from pip [Recommended]$pipinstalltextaugment
orinstalllatestrelease
$pipinstallgit+git@github.com:dsfsi/textaugment.gitInstall from source$gitclonegit@github.com:dsfsi/textaugment.git
$cdtextaugment
$pythonsetup.pyinstallHow to useThere are three types of augmentations which can be used:word2vecfromtextaugmentimportWord2vecfasttextfromtextaugmentimportFasttextwordnetfromtextaugmentimportWordnettranslate (This will require internet access)fromtextaugmentimportTranslateFasttext/Word2vec-based augmentationSee this notebook for an exampleBasic example>>>fromtextaugmentimportWord2vec,Fasttext>>>t=Word2vec(model='path/to/gensim/model'or'gensim model itself')>>>t.augment('The stories are good')Thefilmsaregood>>>t=Fasttext(model='path/to/gensim/model'or'gensim model itself')>>>t.augment('The stories are good')ThefilmsaregoodAdvanced example>>>runs=1# By default.>>>v=False# verbose mode to replace all the words. If enabled runs is not effective. Used in this paper (https://www.cs.cmu.edu/~diyiy/docs/emnlp_wang_2015.pdf)>>>p=0.5# The probability of success of an individual trial. (0.1<p<1.0), default is 0.5. Used by Geometric distribution to selects words from a sentence.>>>word=Word2vec(model='path/to/gensim/model'or'gensim model itself',runs=5,v=False,p=0.5)>>>word.augment('The stories are good',top_n=10)Themoviesareexcellent>>>fast=Fasttext(model='path/to/gensim/model'or'gensim model itself',runs=5,v=False,p=0.5)>>>fast.augment('The stories are good',top_n=10)ThemoviesareexcellentWordNet-based augmentationBasic example>>>importnltk>>>nltk.download('punkt')>>>nltk.download('wordnet')>>>fromtextaugmentimportWordnet>>>t=Wordnet()>>>t.augment('In the afternoon, John is going to town')Intheafternoon,JohniswalkingtotownAdvanced example>>>v=True# enable verbs augmentation. By default is True.>>>n=False# enable nouns augmentation. By default is False.>>>runs=1# number of times to augment a sentence. By default is 1.>>>p=0.5# The probability of success of an individual trial. (0.1<p<1.0), default is 0.5. Used by Geometric distribution to selects words from a sentence.>>>t=Wordnet(v=False,n=True,p=0.5)>>>t.augment('In the afternoon, John is going to town',top_n=10)Intheafternoon,Josephisgoingtotown.RTT-based augmentationExample>>>src="en"# source language of the sentence>>>to="fr"# target language>>>fromtextaugmentimportTranslate>>>t=Translate(src="en",to="fr")>>>t.augment('In the afternoon, John is going to town')IntheafternoonJohngoestotownEDA: Easy data augmentation techniques for boosting performance on text classification tasksThis is the implementation of EDA by Jason Wei and Kai Zou.https://www.aclweb.org/anthology/D19-1670.pdfSee this notebook for an exampleSynonym ReplacementRandomly choosenwords from the sentence that are not stop words. Replace each of these words with
one of its synonyms chosen at random.Basic example>>>fromtextaugmentimportEDA>>>t=EDA()>>>t.synonym_replacement("John is going to town",top_n=10)JohnisgiveouttotownRandom DeletionRandomly remove each word in the sentence with probabilityp.Basic example>>>fromtextaugmentimportEDA>>>t=EDA()>>>t.random_deletion("John is going to town",p=0.2)isgoingtotownRandom SwapRandomly choose two words in the sentence and swap their positions. Do this n times.Basic example>>>fromtextaugmentimportEDA>>>t=EDA()>>>t.random_swap("John is going to town")JohntowngoingtoisRandom InsertionFind a random synonym of a random word in the sentence that is not a stop word. Insert that synonym into a random position in the sentence. Do this n timesBasic example>>>fromtextaugmentimportEDA>>>t=EDA()>>>t.random_insertion("John is going to town")JohnisgoingtomakeuptownAEDA: An easier data augmentation technique for text classificationThis is the implementation of AEDA by Karimi et al, a variant of EDA. It is based on the random insertion of punctuation marks.https://aclanthology.org/2021.findings-emnlp.234.pdfImplementationSee this notebook for an exampleRandom Insertion of Punctuation MarksBasic example>>>fromtextaugmentimportAEDA>>>t=AEDA()>>>t.punct_insertion("John is going to town")!JohnisgoingtotownMixup augmentationThis is the implementation of mixup augmentation byHongyi Zhang, Moustapha Cisse, Yann Dauphin, David Lopez-Pazadapted to NLP.Used inAugmenting Data with Mixup for Sentence Classification: An Empirical Study.Mixup is a generic and straightforward data augmentation principle. In essence, mixup trains a neural network on convex combinations of pairs of examples and their labels. By doing so, mixup regularises the neural network to favour simple linear behaviour in-between training examples.ImplementationSee this notebook for an exampleBuilt with ❤ onPythonAuthorsJoseph Sefara(http://www.speechtech.co.za)Vukosi Marivate(http://www.vima.co.za)AcknowledgementsCite thispaperwhen using this library.Arxiv Version@inproceedings{marivate2020improving,
  title={Improving short text classification through global augmentation methods},
  author={Marivate, Vukosi and Sefara, Tshephisho},
  booktitle={International Cross-Domain Conference for Machine Learning and Knowledge Extraction},
  pages={385--399},
  year={2020},
  organization={Springer}
}LicenceMIT licensed. See the bundledLICENCEfile for more details.