当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > 使用NLPAUG 进行文本数据的扩充增强

使用NLPAUG 进行文本数据的扩充增强

来源:51CTO.COM 2023-08-01 10:03:11 0浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《使用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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

单词级的增强

单词的扩充技术包括用同义词替换单词,插入或删除单词,甚至改变句子中单词的顺序。

单词级增强可以用于训练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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

段句级增强

在保持文本的整体上下文和含义不变的情况下,还可以对句子进行变换或调整来进行文本扩充。可以通过在句子中重新排列单词的顺序或根据上下文插入单词来展示增句技巧的例子。

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)

使用NLPAUG 进行文本数据的扩充增强

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)

使用NLPAUG 进行文本数据的扩充增强

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学习网公众号,给大家分享更多科技周边知识!

版本声明
本文转载于:51CTO.COM 如有侵犯,请联系study_golang@163.com删除
从零开始学习go-zero:深入理解垂直领域的微服务架构设计从零开始学习go-zero:深入理解垂直领域的微服务架构设计
上一篇
从零开始学习go-zero:深入理解垂直领域的微服务架构设计
跨平台编程语言Go的独到之处和核心优势
下一篇
跨平台编程语言Go的独到之处和核心优势
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 美图AI抠图:行业领先的智能图像处理技术,3秒出图,精准无误
    美图AI抠图
    美图AI抠图,依托CVPR 2024竞赛亚军技术,提供顶尖的图像处理解决方案。适用于证件照、商品、毛发等多场景,支持批量处理,3秒出图,零PS基础也能轻松操作,满足个人与商业需求。
    6次使用
  • SEO标题PetGPT:智能桌面宠物程序,结合AI对话的个性化陪伴工具
    PetGPT
    SEO摘要PetGPT 是一款基于 Python 和 PyQt 开发的智能桌面宠物程序,集成了 OpenAI 的 GPT 模型,提供上下文感知对话和主动聊天功能。用户可高度自定义宠物的外观和行为,支持插件热更新和二次开发。适用于需要陪伴和效率辅助的办公族、学生及 AI 技术爱好者。
    6次使用
  • 可图AI图片生成:快手可灵AI2.0引领图像创作新时代
    可图AI图片生成
    探索快手旗下可灵AI2.0发布的可图AI2.0图像生成大模型,体验从文本生成图像、图像编辑到风格转绘的全链路创作。了解其技术突破、功能创新及在广告、影视、非遗等领域的应用,领先于Midjourney、DALL-E等竞品。
    41次使用
  • MeowTalk喵说:AI猫咪语言翻译,增进人猫情感交流
    MeowTalk喵说
    MeowTalk喵说是一款由Akvelon公司开发的AI应用,通过分析猫咪的叫声,帮助主人理解猫咪的需求和情感。支持iOS和Android平台,提供个性化翻译、情感互动、趣味对话等功能,增进人猫之间的情感联系。
    36次使用
  • SEO标题Traini:全球首创宠物AI技术,提升宠物健康与行为解读
    Traini
    SEO摘要Traini是一家专注于宠物健康教育的创新科技公司,利用先进的人工智能技术,提供宠物行为解读、个性化训练计划、在线课程、医疗辅助和个性化服务推荐等多功能服务。通过PEBI系统,Traini能够精准识别宠物狗的12种情绪状态,推动宠物与人类的智能互动,提升宠物生活质量。
    35次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码