使用NLPAUG 进行文本数据的扩充增强
来源:51CTO.COM
时间:2023-08-01 10:03:11 366浏览 收藏
珍惜时间,勤奋学习!今天给大家带来《使用NLPAUG 进行文本数据的扩充增强》,正文内容主要涉及到等等,如果你正在学习科技周边,或者是对科技周边有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!
模型的有效性主要取决于机器学习中训练数据集的质量。我们往往没有足够的多样化数据,这影响了模型的准确性。这时数据增强技术就派上了用场。
数据增强是一种增加数据量的方法,可以通过创建与现有数据略有不同的副本或从现有数据中生成合成数据来实现。这种数据扩充的方式在CV中十分常见,因为对于图像来说可以使用很多现成的技术,在保证图像信息的情况下进行图像的扩充。
但是对于文本数据,这种技术现在应用的还很少,所以在本文中我们将介绍如何使用Python的nlpag库进行文本扩充。在自然语言处理(NLP)中最常见的任务之一是文本分类,这个任务需要使用大量数据来训练模型。我们也可以通过文本增强技术提高NLP模型的性能。
NLPAUG
nlpag是一个由Edward Ma开发的开源Python库,该库提供了一系列字符、单词和句子的文本增强器,一般情况下只需3-5行代码即可应用。
安装也非常简单:
pip install nlpaug conda install -c makecedward nlpaug
如果要是用同义词或反义词扩展,则需要安装NLTK库。
pip install nltk
如果要进行词嵌入的增强,则需要下载一个预训练的模型。比如说下载word2vec、glove或fasttext:
from nlpaug.util.file.download import DownloadUtil DownloadUtil.download_word2vec(dest_dir='.') # Download word2vec model DownloadUtil.download_glove(model_name='glove.6B', dest_dir='.') # Download GloVe model DownloadUtil.download_fasttext(model_name='wiki-news-300d-1M', dest_dir='.') # Download fasttext model pip install gensim
如果要对句子执行反向翻译增强,则要安装SacreMoses库:
pip install sacremoses
字符级的增强
character augmenter产生文本数据变体的方式是在字符级别应用特定的修改。它通过引入诸如字符替换、删除、插入或其他调整之类的更改。
nlpag的nlpaug.augmenter.charmodule提供了三种字符增强技术:Keyboard augmenter, Optical character recognition augmenter, Random augmenter.
1、Keyboard augmenter
Keyboard augmenter是一种增强文本数据的技术,通过插入输入错误实现。它使用键盘上接近的字符来代替单词中的字符,以模拟在打字时可能发生的键盘错误。通过该方法生成的增强文本数据可以模拟常见的排版错误,在提升训练数据的泛化性方面具有显著效果。
nlpag的char.KeywordAug()函数对文本输入应用打字错误模拟:
import nlpaug.augmenter.char as nac text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Keyboard aug = nac.KeyboardAug() augmented_text = aug.augment(text) print(augmented_text)
2、Optical Character Recognition Augmenter(OCR)
OCR技术是一种将图像或文档转化为机器可读取的文本的方法。通过分析图像中的视觉模式,该系统能够识别独立的字符或单词,并将其转化为文本。
OCR模型常常犯错,比如将“0”和“O”混淆,或者将“I”和“1”混淆。通过字符级OCR错误,nlpaaug的char. ocaug()增数器在文本中引入字符替换
import nlpaug.augmenter.char as nac text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # OCR aug = nac.OcrAug() augmented_text = aug.augment(text) print(augmented_text)
3、Random Augmenter
随机增强器为文本数据引入随机变量。它模拟了语言中自然发生的不同类型的错误。nlpag的RandomCharAug()函数可以用相似的字符替换字符,随机交换相邻字符,或者在文本中删除或插入随机字符。这些改变可以增加训练数据集的多样性,并提升模型在处理实际数据时的鲁棒性。
可以使用操作参数选择单一类型的操作:插入、替换、交换、删除。
import nlpaug.augmenter.char as nac text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Random - Character level - insert aug = nac.RandomCharAug(actinotallow="insert") augmented_text = aug.augment(text) print(augmented_text)
单词级的增强
单词的扩充技术包括用同义词替换单词,插入或删除单词,甚至改变句子中单词的顺序。
单词级增强可以用于训练NLP任务的模型,例如文本分类和情感分析,其中多样化的训练数据集可以增强模型在真实文本上的性能。
nlpag的nlpag .augment .word模块提供了十种单词增强技术:同义词增强、反义词增强、拆分增强、拼写增强、保留词增强、词嵌入增强、上下文词嵌入增强、反翻译增强、TF-IDF增强、随机词增强。这些方法的调用基本都类似,所以我们只使用1-2个来进行举例。
1、同义词
nlpaaug中的SynonymAug()函数使用WordNet/PPDB来替换相似单词。可以使用aug_src参数来选择使用哪个模型:
import nlpaug.augmenter.word as naw text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Synonym aug = naw.SynonymAug(aug_src='wordnet') augmented_text = aug.augment(text) print(augmented_text)
2、保留词
保留词扩充技术对文本进行目标词替换操作。这种技术允许可以选择在增强过程中必须保持不变的单词。这种技术在保持文本的其他部分不变的同时,对特定部分应用增强非常有用。
nlpag的ReservedAug()函数替换列表中未定义的单词,该列表作为参数传递给reserved_token参数:
import nlpaug.augmenter.word as naw text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Reserved words reserved_tokens = ['lion', 'windows'] # Specify the reserved tokens here aug = naw.ReservedAug(reserved_tokens=reserved_tokens) augmented_text = aug.augment(text) print(augmented_text)
3、上下文词嵌入
上下文词嵌入可以理解句子中单词的含义和上下文,并将其输入周围环境,或者用预训练语言模型(如BERT、DistilBERT、RoBERTa或XLNet)中的前n个相似单词替换它们。
通过使用上下文词嵌入,nlpag的context_word_embs()函数增强了查找前n个相似词的功能。您可以使用action参数来指定要执行的操作类型:插入或替换。
import nlpaug.augmenter.word as naw text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Contextual Word Embeddings - Word level aug = naw.ContextualWordEmbsAug() augmented_text = aug.augment(text) print(augmented_text)
4、反向翻译
反向翻译使用预训练的机器学习模型将文本从一种语言翻译成另一种语言,然后再翻译回原始语言。通过这种往返翻译为文本增加了多样性。当需要增强训练数据的大小时,这种文本增强技术非常有用。
nlpaaug的Back_TranslationAug()函数利用两种翻译模型进行增强:
import nlpaug.augmenter.word as naw text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Back translation aug = naw.BackTranslationAug() augmented_text = aug.augment(text) print(augmented_text)
5、TF-IDF
TF-IDF通过将Term Frequency (TF)乘以Inverse Document Frequency (IDF)来计算文本中单词的TF-IDF分数。这些分数表明了一个词在一篇文章中的重要性。
单词的TF-IDF得分低被视为与文本的含义不相关,并更容易被其他具有较低得分的单词所替代。这种技术创造了不改变原始文本含义的变体。
需要说明的是L:TF-IDF模型必须在数据集上进行训练,之后可以使用nlpag的TfIdfAug()函数根据分数插入或替换单词。
import sklearn.datasets import re import nlpaug.augmenter.word as naw import nlpaug.model.word_stats as nmw # Defining a tokenizer function to extract word tokens def _tokenizer(text, token_pattern=r"(?u)\b\w\w+\b"):token_pattern = re.compile(token_pattern)return token_pattern.findall(text) # Load sample data (Scikit Learn 20 News Groups) train_data = sklearn.datasets.fetch_20newsgroups(subset='train', remove=('headers', 'footers', 'quotes')) train_x = train_data.data # Tokenize input train_x_tokens = [_tokenizer(x) for x in train_x] # Train TF-IDF model tfidf_model = nmw.TfIdf() tfidf_model.train(train_x_tokens) tfidf_model.save('.') text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Augment the text with TFIDF augmenter aug = naw.TfIdfAug(model_path='.', tokenizer=_tokenizer) augmented_text = aug.augment(text) print(augmented_text)
段句级增强
在保持文本的整体上下文和含义不变的情况下,还可以对句子进行变换或调整来进行文本扩充。可以通过在句子中重新排列单词的顺序或根据上下文插入单词来展示增句技巧的例子。
nlpag的nlpag . augmester .sentence模块提供了四个句子增强器:
1、抽象摘要
抽象摘要的任务是对文本进行简洁概括,其中包含了关键概念和含义。可以包括源文本中没有出现的新短语和句子。
采用抽象摘要的文本增强可以带来短语结构和内容的多样性和差异性,这可能对训练NLP模型有用的。
import nlpaug.augmenter.sentence as nas text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Abstractive Summarization aug = nas.AbstSummAug() augmented_text = aug.augment(text) print(augmented_text)
2、上下文词嵌入
在句子级增强的上下文中,上下文词嵌入从预训练模型(如XLNet、GPT2或蒸馏GPT2)中添加具有前n个相似词的新句子。
nlpag的ContextualWordEmbsForSentenceAug()函数利用上下文词嵌入来插入新句子:
import nlpaug.augmenter.sentence as nas text = "It was a dark and stormy night. I was alone at home when I saw a lion's face followed by a scary thunderous roar at the windows." # Contextual Word Embeddings - Sentence level aug = nas.ContextualWordEmbsForSentenceAug() augmented_text = aug.augment(text) print(augmented_text)
3、LAMBADA
利用预训练的语言模型,基于语言模型的数据增强(LAMBADA)能够预测句子中缺失的单词,并产生替代句子的变体。
LAMBADA技术的概念源于LAMBADA数据集,该数据集由书籍段落组成,其中最后一个词被省略。目标是预测缺失的单词,这需要对上下文有深刻的理解。通过利用语言模型,如GPT或BERT,LAMBADA文本增强生成新句子的方法是通过预测给定上下文中缺失的单词。
使用LAMBADA增强器是在句子结构中引入多样性和提高NLP模型训练数据质量的极好方法。
LAMBADA模型必须在数据集上进行训练,之后可以使用nlpag的LambadaAug()函数应用句子级增强。
4、随机
对输入文本应用随机的句子级增强行为。nlpag的RandomSentAug()函数可以随机交换、裁剪或删除句子。这些变化有助于更多样化的训练数据集。
总结
nlpag库的多样的文本增强技术可显著改善NLP任务中的文本数据质量和多样性。NLPAG为nlp学术界和从业者提供了丰富的工具包,包括同义词替换和上下文词嵌入等高级技术。
这里是它的Github地址,更详细的信息可以在这里找到:https://github.com/makcedward/nlpaug
好了,本文到此结束,带大家了解了《使用NLPAUG 进行文本数据的扩充增强》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多科技周边知识!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
314 收藏
-
486 收藏
-
340 收藏
-
148 收藏
-
432 收藏
-
379 收藏
-
353 收藏
-
486 收藏
-
478 收藏
-
290 收藏
-
158 收藏
-
224 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习