<p>A good explainer (and a potential answer to your question on why it might not have worked on the undersampled classes) on SMOTE can be found in <a href="https://datascience.stackexchange.com/questions/27671/how-do-you-apply-smote-on-text-classification">this answer</a>. </p>

<p>I think this issue can't be solved easily through off-the-shelf data augmentation strategies. One possibility might be to simply duplicate the example, but this would add no new information to your model. </p>

<p>Here are a couple other strategies you could try as well:</p>

<ol>
<li>An embedding-based augmentation technique (similar theory to SMOTE but works better on text data) that's described in this <a href="https://www.aclweb.org/anthology/D15-1306.pdf" rel="nofollow noreferrer">2015 paper by William Wang and Diyi Yang</a>.</li>
<li>A step further on #1 using contextualized word embeddings described here in this <a href="https://arxiv.org/pdf/1705.00440.pdf" rel="nofollow noreferrer">2017 paper by Marzieh Fadaee, Arianna Bisazza, and Christof Monz</a>. </li>
<li>Use a synonym replacement library like WordNetAug. </li>
</ol>
Text classification with imbalanced data
<p>Am trying to classify 10000 samples of text into 20 classes. 4 of the classes have just 1 sample each, I tried SMOTE to address this imbalance, but I am unable to generate new samples for classes that have only one record, though I could generate samples for classes with more than 1 sample. Any suggestions?</p>