网易首页 > 网易号 > 正文 申请入驻

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

0
分享至

在机器学习中,训练数据集的质量在很大程度上决定了模型的有效性。我们往往没有足够的多样化数据,这影响了模型的准确性。这时数据增强技术就派上了用场。

数据增强可以通过添加对现有数据进行略微修改的副本或从现有数据中新创建的合成数据来增加数据量。这种数据扩充的方式在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

以上就是使用NLPAUG 的一些基本的环境设置了,下面我们看看这个库的功能:

字符级的增强

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”与“0”或“I”与“1”混淆。nlpaaug的char. ocaug()增数器通过替换字符在文本中引入字符级OCR错误:

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(action="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数据集,该数据集由书籍中的段落组成,其中最后一个单词被删除。目标是预测缺失的单词,这需要对上下文有深刻的理解。LAMBADA文本增强利用语言模型,如GPT或BERT,通过预测给定上下文的缺失单词来生成新句子。

使用LAMBADA增强器是在句子结构中引入多样性和提高NLP模型训练数据质量的极好方法。

LAMBADA模型必须在数据集上进行训练,之后可以使用nlpag的LambadaAug()函数应用句子级增强。

4、随机

对输入文本应用随机的句子级增强行为。nlpag的RandomSentAug()函数可以随机交换、裁剪或删除句子。这些变化有助于更多样化的训练数据集。

总结

nlpag库提供了一组不同的文本增强技术,可以显著提高NLP任务的文本数据的质量和多样性。从同义词替换等简单操作到上下文词嵌入等高级技术,nlpag为该学科的学者和从业者提供了广泛的工具包。

这里是它的Github地址,更详细的信息可以在这里找到:

https://avoid.overfit.cn/post/038630f67e144beca6cd1c8776e1e088

作者:Marc Bolle

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
人美心善!谷爱凌4点起床跑步 轰31公里花2.5小时 助力慈善太有心

人美心善!谷爱凌4点起床跑步 轰31公里花2.5小时 助力慈善太有心

林小湜体育频道
2024-05-06 18:31:37
事发在广州一出租屋内,整栋楼住户紧急撤离!

事发在广州一出租屋内,整栋楼住户紧急撤离!

小南看城市
2024-06-15 16:31:29
“母亲借钱买的”电瓶车不合标准被没收,女孩哭得撕心裂肺!

“母亲借钱买的”电瓶车不合标准被没收,女孩哭得撕心裂肺!

走读新生
2024-06-15 07:25:14
土耳其女排又输了!0-3惨败,12连胜出炉,巴西女排坐稳世界第1

土耳其女排又输了!0-3惨败,12连胜出炉,巴西女排坐稳世界第1

体育插班生
2024-06-16 18:11:21
0713开始走向分化 陈楚生陆虎以唱歌为主 张远和苏醒开启唱跳模式

0713开始走向分化 陈楚生陆虎以唱歌为主 张远和苏醒开启唱跳模式

综艺拼盘汇
2024-06-17 00:18:33
女人长期被“滋润”,多数会有3种特质,一眼就能看出来

女人长期被“滋润”,多数会有3种特质,一眼就能看出来

莲子说情感
2024-06-15 10:34:01
一个时代的终结:好莱坞传奇女演员桑德拉·布洛克宣布息影

一个时代的终结:好莱坞传奇女演员桑德拉·布洛克宣布息影

自由的饼干Pn
2024-05-27 08:03:39
霍启刚高调秀恩爱,搂妻子庆祝女排获胜,郭晶晶42岁反而更漂亮了

霍启刚高调秀恩爱,搂妻子庆祝女排获胜,郭晶晶42岁反而更漂亮了

娱絮
2024-06-16 04:07:51
世界女排联赛,总决赛八强球队全部出炉 中国女排锁定亚洲第一

世界女排联赛,总决赛八强球队全部出炉 中国女排锁定亚洲第一

体育哲人
2024-06-16 20:44:52
吴艳妮人气堪比奥运冠军!长发披肩没化大浓妆 网友称赞:格局大

吴艳妮人气堪比奥运冠军!长发披肩没化大浓妆 网友称赞:格局大

念洲
2024-05-29 11:59:28
河北新娘抛下丈夫喝药自尽,12年后丈夫不顾一切给妻子开棺

河北新娘抛下丈夫喝药自尽,12年后丈夫不顾一切给妻子开棺

青丝人生
2024-05-20 17:32:41
无锡市纪委监委通报:8人被查

无锡市纪委监委通报:8人被查

无锡eTV全媒体
2024-06-16 20:07:48
反转,C罗强势发言引热议!葡萄牙多人唱衰,球迷:不给球王面子

反转,C罗强势发言引热议!葡萄牙多人唱衰,球迷:不给球王面子

阿泰希特
2024-06-16 12:02:53
走马上任!孙颖莎、王楚钦获重要任命!新职务曝光!同款T恤引人注目!

走马上任!孙颖莎、王楚钦获重要任命!新职务曝光!同款T恤引人注目!

好乒乓
2024-06-16 10:30:42
重回欧陆,打入回归首球,再现高光的J罗,仍旧无法再度登顶豪门之位

重回欧陆,打入回归首球,再现高光的J罗,仍旧无法再度登顶豪门之位

林子说事
2024-06-16 07:05:02
美国选手夸张幅度破女子100蝶世界纪录 超现实水准全世界独她拥有

美国选手夸张幅度破女子100蝶世界纪录 超现实水准全世界独她拥有

威猛孟巍
2024-06-16 08:39:11
下半年,财神眷顾,事业大展宏图的三个星座,富贵盈门

下半年,财神眷顾,事业大展宏图的三个星座,富贵盈门

小晴星座说
2024-06-16 18:22:43
湖北设4站,这条高铁要来了

湖北设4站,这条高铁要来了

鲁中晨报
2024-06-16 10:35:05
事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

事态升级!央视工作人员硬刚周也,周也翻白眼视频也曝光了!

古希腊掌管月桂的神
2024-06-15 11:34:15
冯提莫健身直播走光!直播间当场被封禁,网友嘲讽:“垫大欺客”

冯提莫健身直播走光!直播间当场被封禁,网友嘲讽:“垫大欺客”

木子爱娱乐大号
2024-06-12 16:33:27
2024-06-17 01:58:44
deephub
deephub
CV NLP和数据挖掘知识
1369文章数 1416关注度
往期回顾 全部

科技要闻

iPhone 16会杀死大模型APP吗?

头条要闻

南方医院回应教师因救人迟到:教学差错是最轻档处理

头条要闻

南方医院回应教师因救人迟到:教学差错是最轻档处理

体育要闻

没人永远年轻 但青春如此无敌还是离谱了些

娱乐要闻

上影节红毯:倪妮好松弛,娜扎吸睛

财经要闻

打断妻子多根肋骨 上市公司创始人被公诉

汽车要闻

售17.68万-21.68万元 极狐阿尔法S5正式上市

态度原创

本地
房产
教育
手机
公开课

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

教育要闻

大家都知道,这题目不会特别容易,看来还得是稳打稳的刷题才行啊

手机要闻

荣耀X60i入网:配置全面升级,能否满足你的所有期待?

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版