Retour au classement

jasonwei20/eda_nlp

Pythonarxiv.org/abs/1901.11196

Data augmentation for NLP, presented at EMNLP 2019

nlpdata-augmentationtext-classificationsynonymsembeddingssentenceclassificationrnncnnswapposition
Croissance des étoiles
Étoiles
1.7k
Forks
311
Croissance hebdomadaire
Issues
10
5001k1.5k
janv. 2023mars 2024mai 2025juil. 2026
ArtefactsPyPIpip install eda_nlp
README

EDA: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks

Conference

For a survey of data augmentation in NLP, see this repository/this paper.

This is the code for the EMNLP-IJCNLP paper EDA: Easy Data Augmentation techniques for boosting performance on text classification tasks.

A blog post that explains EDA is [here].

Update: find an external implementation of EDA in Chinese [here].

By Jason Wei and Kai Zou.

Note: Do not email me with questions, as I will not reply. Instead, open an issue.

We present EDA: easy data augmentation techniques for boosting performance on text classification tasks. These are a generalized set of data augmentation techniques that are easy to implement and have shown improvements on five NLP classification tasks, with substantial improvements on datasets of size N < 500. While other techniques require you to train a language model on an external dataset just to get a small boost, we found that simple text editing operations using EDA result in good performance gains. Given a sentence in the training set, we perform the following operations:

  • Synonym Replacement (SR): Randomly choose n words from the sentence that are not stop words. Replace each of these words with one of its synonyms chosen at random.
  • Random Insertion (RI): Find 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 times.
  • Random Swap (RS): Randomly choose two words in the sentence and swap their positions. Do this n times.
  • Random Deletion (RD): For each word in the sentence, randomly remove it with probability p.

drawing

Average performance on 5 datasets with and without EDA, with respect to percent of training data used.

Usage

You can run EDA any text classification dataset in less than 5 minutes. Just two steps:

Install NLTK (if you don't have it already):

Pip install it.

pip install -U nltk

Download WordNet.

python
>>> import nltk; nltk.download('wordnet')

Run EDA

You can easily write your own implementation, but this one takes input files in the format label\tsentence (note the \t). So for instance, your input file should look like this (example from stanford sentiment treebank):

1   neil burger here succeeded in making the mystery of four decades back the springboard for a more immediate mystery in the present 
0   it is a visual rorschach test and i must have failed 
0   the only way to tolerate this insipid brutally clueless film might be with a large dose of painkillers
...

Now place this input file into the data folder. Run

python code/augment.py --input=<insert input filename>

The default output filename will append eda_ to the front of the input filename, but you can specify your own with --output. You can also specify the number of generated augmented sentences per original sentence using --num_aug (default is 9). Furthermore, you can specify different alpha parameters, which approximately means the percent of words in the sentence that will be changed according to that rule (default is 0.1 or 10%). So for example, if your input file is sst2_train.txt and you want to output to sst2_augmented.txt with 16 augmented sentences per original sentence and replace 5% of words by synonyms (alpha_sr=0.05), delete 10% of words (alpha_rd=0.1, or leave as the default) and do not apply random insertion (alpha_ri=0.0) and random swap (alpha_rs=0.0), you would do:

python code/augment.py --input=sst2_train.txt --output=sst2_augmented.txt --num_aug=16 --alpha_sr=0.05 --alpha_rd=0.1 --alpha_ri=0.0 --alpha_rs=0.0

Note that at least one augmentation operation is applied per augmented sentence regardless of alpha (if greater than zero). So if you do alpha_sr=0.001 and your sentence only has four words, one augmentation operation will still be performed. Of course, if one particular alpha is zero, nothing will be done. Best of luck!

Citation

If you use EDA in your paper, please cite us:

@inproceedings{wei-zou-2019-eda,
    title = "{EDA}: Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks",
    author = "Wei, Jason  and
      Zou, Kai",
    booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing and the 9th International Joint Conference on Natural Language Processing (EMNLP-IJCNLP)",
    month = nov,
    year = "2019",
    address = "Hong Kong, China",
    publisher = "Association for Computational Linguistics",
    url = "https://www.aclweb.org/anthology/D19-1670",
    pages = "6383--6389",
}

Experiments

The code is not documented, but is here for all experiments used in the paper. See this issue for limited guidance.

Dépôts similaires
huggingface/transformers

🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.

PythonPyPIApache License 2.0nlpnatural-language-processing
huggingface.co/transformers
162.8k34k
hiyouga/LlamaFactory

Unified Efficient Fine-Tuning of 100+ LLMs & VLMs (ACL 2024)

PythonPyPIApache License 2.0fine-tuningllama
llamafactory.readthedocs.io
73.4k9k
microsoft/AI-For-Beginners

12 Weeks, 24 Lessons, AI for All!

Jupyter NotebookMIT Licensedeep-learningartificial-intelligence
52.5k10.6k
apachecn/ailearning

AiLearning:数据分析+机器学习实战+线性代数+PyTorch+NLTK+TF2

PythonPyPIOtherfp-growthapriori
ailearning.apachecn.org
42.4k11.5k
666ghj/BettaFish

微舆:人人可用的多Agent舆情分析助手,打破信息茧房,还原舆情原貌,预测未来走向,辅助决策!从0实现,不依赖任何框架。

PythonPyPIGNU General Public License v2.0agent-frameworkdata-analysis
deepwiki.com/666ghj/BettaFish
41.8k7.6k
rohitg00/ai-engineering-from-scratch

Learn it. Build it. Ship it for others.

PythonPyPIMIT Licenseagentsai
aiengineeringfromscratch.com
41.6k6.9k
google-research/bert

TensorFlow code and pre-trained models for BERT

PythonPyPIApache License 2.0nlpgoogle
arxiv.org/abs/1810.04805
40.1k9.7k
google/langextract

A Python library for extracting structured information from unstructured text using LLMs with precise source grounding and interactive visualization.

PythonPyPIApache License 2.0llmnlp
pypi.org/project/langextract/
37.6k2.6k
hankcs/HanLP

中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理

PythonPyPIApache License 2.0nlpnatural-language-processing
hanlp.com
36.5k10.9k
ashishpatel26/500-AI-Machine-learning-Deep-learning-Computer-vision-NLP-Projects-with-code

500 AI Machine learning Deep learning Computer vision NLP Projects with code

awesomemachine-learning
35.6k7.4k
explosion/spaCy

💫 Industrial-strength Natural Language Processing (NLP) in Python

PythonPyPIMIT Licensenatural-language-processingdata-science
spacy.io
33.8k4.7k
stanford-oval/storm

An LLM-powered knowledge curation system that researches a topic and generates a full-length report with citations.

PythonPyPIMIT Licenselarge-language-modelsnlp
storm.genie.stanford.edu
30.2k2.8k